summaryrefslogtreecommitdiff
path: root/numpy/f2py
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2019-01-20 11:54:44 -0700
committerGitHub <noreply@github.com>2019-01-20 11:54:44 -0700
commit568d0f7483f7b94029d49707ccd6371f9f5c554c (patch)
tree3e546aae0f0e5d337fd758852b0623c7c1902b4c /numpy/f2py
parent2b05f3e38431842ff06df9b2958d22c5a0588767 (diff)
parentd26842f9ce822f32b4c6165aff75d950e400beb8 (diff)
downloadnumpy-568d0f7483f7b94029d49707ccd6371f9f5c554c.tar.gz
Merge pull request #12807 from mattip/f2py-source-bytes
BUG, DOC: test, fix that f2py.compile accepts str and bytes, rework docs
Diffstat (limited to 'numpy/f2py')
-rw-r--r--numpy/f2py/__init__.py22
-rwxr-xr-xnumpy/f2py/f2py2e.py21
-rw-r--r--numpy/f2py/tests/test_regression.py14
3 files changed, 52 insertions, 5 deletions
diff --git a/numpy/f2py/__init__.py b/numpy/f2py/__init__.py
index 23a4b7c41..d146739bb 100644
--- a/numpy/f2py/__init__.py
+++ b/numpy/f2py/__init__.py
@@ -28,12 +28,16 @@ def compile(source,
extension='.f'
):
"""
- Build extension module from processing source with f2py.
+ Build extension module from a Fortran 77 source string with f2py.
Parameters
----------
- source : str
+ source : str or bytes
Fortran source of module / subroutine to compile
+
+ .. versionchanged:: 1.16.0
+ Accept str as well as bytes
+
modulename : str, optional
The name of the compiled python module
extra_args : str or list, optional
@@ -55,6 +59,16 @@ def compile(source,
.. versionadded:: 1.11.0
+ Returns
+ -------
+ result : int
+ 0 on success
+
+ Examples
+ --------
+ .. include:: compile_session.dat
+ :literal:
+
"""
import tempfile
import shlex
@@ -67,9 +81,11 @@ def compile(source,
else:
fname = source_fn
+ if not isinstance(source, str):
+ source = str(source, 'utf-8')
try:
with open(fname, 'w') as f:
- f.write(str(source))
+ f.write(source)
args = ['-c', '-m', modulename, f.name]
diff --git a/numpy/f2py/f2py2e.py b/numpy/f2py/f2py2e.py
index 8750ed0b3..47223151f 100755
--- a/numpy/f2py/f2py2e.py
+++ b/numpy/f2py/f2py2e.py
@@ -396,8 +396,25 @@ def dict_append(d_out, d_in):
def run_main(comline_list):
- """Run f2py as if string.join(comline_list,' ') is used as a command line.
- In case of using -h flag, return None.
+ """
+ Equivalent to running::
+
+ f2py <args>
+
+ where ``<args>=string.join(<list>,' ')``, but in Python. Unless
+ ``-h`` is used, this function returns a dictionary containing
+ information on generated modules and their dependencies on source
+ files. For example, the command ``f2py -m scalar scalar.f`` can be
+ executed from Python as follows
+
+ You cannot build extension modules with this function, that is,
+ using ``-c`` is not allowed. Use ``compile`` command instead
+
+ Examples
+ --------
+ .. include:: run_main_session.dat
+ :literal:
+
"""
crackfortran.reset_global_f2py_vars()
f2pydir = os.path.dirname(os.path.abspath(cfuncs.__file__))
diff --git a/numpy/f2py/tests/test_regression.py b/numpy/f2py/tests/test_regression.py
index 3adae635d..7b622d5b1 100644
--- a/numpy/f2py/tests/test_regression.py
+++ b/numpy/f2py/tests/test_regression.py
@@ -27,3 +27,17 @@ class TestIntentInOut(util.F2PyTest):
x = np.arange(3, dtype=np.float32)
self.module.foo(x)
assert_equal(x, [3, 1, 2])
+
+@pytest.mark.parametrize('code', [
+ 'program test_f2py\nend program test_f2py',
+ b'program test_f2py\nend program test_f2py',
+ ])
+def test_compile(tmpdir, code):
+ # Make sure we can compile str and bytes gh-12796
+ cwd = os.getcwd()
+ try:
+ os.chdir(str(tmpdir))
+ ret = np.f2py.compile(code, modulename='test1_f2py', extension='.f90')
+ assert_equal(ret, 0)
+ finally:
+ os.chdir(cwd)