summaryrefslogtreecommitdiff
path: root/numpy/f2py
diff options
context:
space:
mode:
authorRohit Goswami <rog32@hi.is>2021-11-28 15:53:41 +0000
committerRohit Goswami <rog32@hi.is>2021-12-03 03:15:37 +0000
commitcd24ca1ef578924bad8c5c31f8939e64e353c256 (patch)
treeb87c3dc6f00fa515ecf941d85a590c6c65485abd /numpy/f2py
parent3c92ba281502393283caffe995c1a0662f2c9f84 (diff)
downloadnumpy-cd24ca1ef578924bad8c5c31f8939e64e353c256.tar.gz
TST,STY: Use a context manager for F2PY functions
Diffstat (limited to 'numpy/f2py')
-rw-r--r--numpy/f2py/tests/test_compile_function.py33
-rw-r--r--numpy/f2py/tests/util.py14
2 files changed, 25 insertions, 22 deletions
diff --git a/numpy/f2py/tests/test_compile_function.py b/numpy/f2py/tests/test_compile_function.py
index f76fd6448..33e320731 100644
--- a/numpy/f2py/tests/test_compile_function.py
+++ b/numpy/f2py/tests/test_compile_function.py
@@ -54,33 +54,30 @@ def test_f2py_init_compile(extra_args):
# util.py, but don't actually use build_module() because it has
# its own invocation of subprocess that circumvents the
# f2py.compile code block under test
- try:
- os.chdir(moddir)
+ with util.switchdir(moddir):
ret_val = numpy.f2py.compile(
fsource,
modulename=modname,
extra_args=extra_args,
source_fn=source_fn
- )
- finally:
- os.chdir(cwd)
+ )
- # check for compile success return value
- assert_equal(ret_val, 0)
+ # check for compile success return value
+ assert_equal(ret_val, 0)
# we are not currently able to import the Python-Fortran
# interface module on Windows / Appveyor, even though we do get
# successful compilation on that platform with Python 3.x
- if sys.platform != 'win32':
+ if sys.platform != 'win32':
# check for sensible result of Fortran function; that means
# we can import the module name in Python and retrieve the
# result of the sum operation
- return_check = import_module(modname)
- calc_result = return_check.foo()
- assert_equal(calc_result, 15)
+ return_check = import_module(modname)
+ calc_result = return_check.foo()
+ assert_equal(calc_result, 15)
# Removal from sys.modules, is not as such necessary. Even with
# removal, the module (dict) stays alive.
- del sys.modules[modname]
+ del sys.modules[modname]
def test_f2py_init_compile_failure():
@@ -113,13 +110,9 @@ def test_f2py_init_compile_bad_cmd():
b'program test_f2py\nend program test_f2py',])
def test_compile_from_strings(tmpdir, fsource):
# Make sure we can compile str and bytes gh-12796
- cwd = os.getcwd()
- try:
- os.chdir(str(tmpdir))
+ with util.switchdir(tmpdir):
ret_val = numpy.f2py.compile(
- fsource,
- modulename='test_compile_from_strings',
- extension='.f90')
+ fsource,
+ modulename='test_compile_from_strings',
+ extension='.f90')
assert_equal(ret_val, 0)
- finally:
- os.chdir(cwd)
diff --git a/numpy/f2py/tests/util.py b/numpy/f2py/tests/util.py
index c1dc4a536..cfa75c16a 100644
--- a/numpy/f2py/tests/util.py
+++ b/numpy/f2py/tests/util.py
@@ -15,6 +15,7 @@ import atexit
import textwrap
import re
import pytest
+import contextlib
from pathlib import Path
from numpy.compat import asbytes, asstr
@@ -95,8 +96,8 @@ def build_module(source_files, options=[], skip=[], only=[], module_name=None):
"""
- code = ("import sys; sys.path = %s; import numpy.f2py as f2py2e; "
- "f2py2e.main()" % repr(sys.path))
+ code = ("import sys; sys.path = %s; import numpy.f2py; "
+ "numpy.f2py.main()" % repr(sys.path))
d = get_module_dir()
@@ -365,3 +366,12 @@ def getpath(*a):
# Package root
d = Path(__file__).parent.parent.resolve()
return d.joinpath(*a)
+
+@contextlib.contextmanager
+def switchdir(path):
+ curpath = Path.cwd()
+ os.chdir(path)
+ try:
+ yield
+ finally:
+ os.chdir(curpath)