diff options
author | Mark Harfouche <mark.harfouche@gmail.com> | 2019-08-22 09:14:09 -0400 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2019-08-22 08:14:09 -0500 |
commit | 3ca0eb1136102ff01bcc171f53c106326fa4445b (patch) | |
tree | 5c9269af8045f7f37e328a13a2e04963bcfae8ed /numpy/tests/test_public_api.py | |
parent | b6a3ab58a9283de32b891072169498487914ee62 (diff) | |
download | numpy-3ca0eb1136102ff01bcc171f53c106326fa4445b.tar.gz |
MAINT: Lazy import testing on python >=3.7 (#14097)
On new python versions, the module level `__getattr__` can be used to import testing and
Tester only when needed (at no speed cost, except for the first time import). Since most users
never use testing, this avoids an expensive import.
Diffstat (limited to 'numpy/tests/test_public_api.py')
-rw-r--r-- | numpy/tests/test_public_api.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/numpy/tests/test_public_api.py b/numpy/tests/test_public_api.py index 807c98652..df2fc4802 100644 --- a/numpy/tests/test_public_api.py +++ b/numpy/tests/test_public_api.py @@ -1,6 +1,7 @@ from __future__ import division, absolute_import, print_function import sys +import subprocess import numpy as np import pytest @@ -69,6 +70,28 @@ def test_numpy_namespace(): assert bad_results == whitelist +@pytest.mark.parametrize('name', ['testing', 'Tester']) +def test_import_lazy_import(name): + """Make sure we can actually the the modules we lazy load. + + While not exported as part of the public API, it was accessible. With the + use of __getattr__ and __dir__, this isn't always true It can happen that + an infinite recursion may happen. + + This is the only way I found that would force the failure to appear on the + badly implemented code. + + We also test for the presence of the lazily imported modules in dir + + """ + exe = (sys.executable, '-c', "import numpy; numpy." + name) + result = subprocess.check_output(exe) + assert not result + + # Make sure they are still in the __dir__ + assert name in dir(np) + + def test_numpy_linalg(): bad_results = check_dir(np.linalg) assert bad_results == {} |