summaryrefslogtreecommitdiff
path: root/numpy/tests/test_public_api.py
diff options
context:
space:
mode:
authorMark Harfouche <mark.harfouche@gmail.com>2019-08-22 09:14:09 -0400
committerSebastian Berg <sebastian@sipsolutions.net>2019-08-22 08:14:09 -0500
commit3ca0eb1136102ff01bcc171f53c106326fa4445b (patch)
tree5c9269af8045f7f37e328a13a2e04963bcfae8ed /numpy/tests/test_public_api.py
parentb6a3ab58a9283de32b891072169498487914ee62 (diff)
downloadnumpy-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.py23
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 == {}