|
import os |
|
import pytest |
|
import platform |
|
|
|
import numpy as np |
|
import numpy.testing as npt |
|
|
|
from . import util |
|
|
|
|
|
class TestIntentInOut(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "inout.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_inout(self): |
|
|
|
x = np.arange(6, dtype=np.float32)[::2] |
|
pytest.raises(ValueError, self.module.foo, x) |
|
|
|
|
|
x = np.arange(3, dtype=np.float32) |
|
self.module.foo(x) |
|
assert np.allclose(x, [3, 1, 2]) |
|
|
|
|
|
class TestDataOnlyMultiModule(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "datonly.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_mdat(self): |
|
assert self.module.datonly.max_value == 100 |
|
assert self.module.dat.max_ == 1009 |
|
int_in = 5 |
|
assert self.module.simple_subroutine(5) == 1014 |
|
|
|
|
|
class TestNegativeBounds(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "negative_bounds", "issue_20853.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_negbound(self): |
|
xvec = np.arange(12) |
|
xlow = -6 |
|
xhigh = 4 |
|
|
|
|
|
def ubound(xl, xh): |
|
return xh - xl + 1 |
|
rval = self.module.foo(is_=xlow, ie_=xhigh, |
|
arr=xvec[:ubound(xlow, xhigh)]) |
|
expval = np.arange(11, dtype = np.float32) |
|
assert np.allclose(rval, expval) |
|
|
|
|
|
class TestNumpyVersionAttribute(util.F2PyTest): |
|
|
|
|
|
sources = [util.getpath("tests", "src", "regression", "inout.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_numpy_version_attribute(self): |
|
|
|
|
|
assert hasattr(self.module, "__f2py_numpy_version__") |
|
|
|
|
|
assert isinstance(self.module.__f2py_numpy_version__, str) |
|
|
|
|
|
assert np.__version__ == self.module.__f2py_numpy_version__ |
|
|
|
|
|
def test_include_path(): |
|
incdir = np.f2py.get_include() |
|
fnames_in_dir = os.listdir(incdir) |
|
for fname in ("fortranobject.c", "fortranobject.h"): |
|
assert fname in fnames_in_dir |
|
|
|
|
|
class TestIncludeFiles(util.F2PyTest): |
|
sources = [util.getpath("tests", "src", "regression", "incfile.f90")] |
|
options = [f"-I{util.getpath('tests', 'src', 'regression')}", |
|
f"--include-paths {util.getpath('tests', 'src', 'regression')}"] |
|
|
|
@pytest.mark.slow |
|
def test_gh25344(self): |
|
exp = 7.0 |
|
res = self.module.add(3.0, 4.0) |
|
assert exp == res |
|
|
|
class TestF77Comments(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "f77comments.f")] |
|
|
|
@pytest.mark.slow |
|
def test_gh26148(self): |
|
x1 = np.array(3, dtype=np.int32) |
|
x2 = np.array(5, dtype=np.int32) |
|
res=self.module.testsub(x1, x2) |
|
assert(res[0] == 8) |
|
assert(res[1] == 15) |
|
|
|
@pytest.mark.slow |
|
def test_gh26466(self): |
|
|
|
expected = np.arange(1, 11, dtype=np.float32)*2 |
|
res=self.module.testsub2() |
|
npt.assert_allclose(expected, res) |
|
|
|
class TestF90Contiuation(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "f90continuation.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_gh26148b(self): |
|
x1 = np.array(3, dtype=np.int32) |
|
x2 = np.array(5, dtype=np.int32) |
|
res=self.module.testsub(x1, x2) |
|
assert(res[0] == 8) |
|
assert(res[1] == 15) |
|
|
|
class TestLowerF2PYDirectives(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "lower_f2py_fortran.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_gh28014(self): |
|
self.module.inquire_next(3) |
|
assert True |
|
|
|
@pytest.mark.slow |
|
def test_gh26623(): |
|
|
|
try: |
|
aa = util.build_module( |
|
[util.getpath("tests", "src", "regression", "f90continuation.f90")], |
|
["-lfoo.bar"], |
|
module_name="Blah", |
|
) |
|
except RuntimeError as rerr: |
|
assert "lparen got assign" not in str(rerr) |
|
|
|
|
|
@pytest.mark.slow |
|
@pytest.mark.skipif(platform.system() not in ['Linux', 'Darwin'], reason='Unsupported on this platform for now') |
|
def test_gh25784(): |
|
|
|
try: |
|
aa = util.build_module( |
|
[util.getpath("tests", "src", "regression", "f77fixedform.f95")], |
|
options=[ |
|
|
|
"--f77flags='-ffixed-form -O2'", |
|
"--f90flags=\"-ffixed-form -Og\"", |
|
], |
|
module_name="Blah", |
|
) |
|
except ImportError as rerr: |
|
assert "unknown_subroutine_" in str(rerr) |
|
|
|
|
|
@pytest.mark.slow |
|
class TestAssignmentOnlyModules(util.F2PyTest): |
|
|
|
sources = [util.getpath("tests", "src", "regression", "assignOnlyModule.f90")] |
|
|
|
@pytest.mark.slow |
|
def test_gh27167(self): |
|
assert (self.module.f_globals.n_max == 16) |
|
assert (self.module.f_globals.i_max == 18) |
|
assert (self.module.f_globals.j_max == 72) |
|
|