diff options
author | Dan Schult <dschult@colgate.edu> | 2022-07-27 09:05:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-27 15:05:58 +0200 |
commit | 6e1557900da3c2cc8455449e7e76b07f7c36b32a (patch) | |
tree | 34e42004c1a8b74dc2f444b13e783ba758164019 | |
parent | 45bc13e6d922690eea43b9d807d476e0f243f836 (diff) | |
download | numpy-6e1557900da3c2cc8455449e7e76b07f7c36b32a.tar.gz |
ENH: allow importlib.LazyLoader to work with numpy and add test of this (#22045)
-rw-r--r-- | numpy/core/__init__.py | 2 | ||||
-rw-r--r-- | numpy/lib/__init__.py | 18 | ||||
-rw-r--r-- | numpy/matrixlib/__init__.py | 1 | ||||
-rw-r--r-- | numpy/testing/__init__.py | 1 | ||||
-rw-r--r-- | numpy/tests/test_lazyloading.py | 38 |
5 files changed, 60 insertions, 0 deletions
diff --git a/numpy/core/__init__.py b/numpy/core/__init__.py index b89e27f0f..748705e33 100644 --- a/numpy/core/__init__.py +++ b/numpy/core/__init__.py @@ -75,8 +75,10 @@ from .numeric import * from . import fromnumeric from .fromnumeric import * from . import defchararray as char +from . import records from . import records as rec from .records import record, recarray, format_parser +# Note: module name memmap is overwritten by a class with same name from .memmap import * from .defchararray import chararray from . import function_base diff --git a/numpy/lib/__init__.py b/numpy/lib/__init__.py index ad88ba347..58166d4b1 100644 --- a/numpy/lib/__init__.py +++ b/numpy/lib/__init__.py @@ -21,6 +21,24 @@ from . import mixins from . import scimath as emath # Private submodules +# load module names. See https://github.com/networkx/networkx/issues/5838 +from . import type_check +from . import index_tricks +from . import function_base +from . import nanfunctions +from . import shape_base +from . import stride_tricks +from . import twodim_base +from . import ufunclike +from . import histograms +from . import polynomial +from . import utils +from . import arraysetops +from . import npyio +from . import arrayterator +from . import arraypad +from . import _version + from .type_check import * from .index_tricks import * from .function_base import * diff --git a/numpy/matrixlib/__init__.py b/numpy/matrixlib/__init__.py index 54154d11f..8a7597d30 100644 --- a/numpy/matrixlib/__init__.py +++ b/numpy/matrixlib/__init__.py @@ -1,6 +1,7 @@ """Sub-package containing the matrix class and related functions. """ +from . import defmatrix from .defmatrix import * __all__ = defmatrix.__all__ diff --git a/numpy/testing/__init__.py b/numpy/testing/__init__.py index 6e06c5b49..087527e43 100644 --- a/numpy/testing/__init__.py +++ b/numpy/testing/__init__.py @@ -7,6 +7,7 @@ away. """ from unittest import TestCase +from . import _private from ._private.utils import * from ._private.utils import (_assert_valid_refcount, _gen_alignment_data) from ._private import extbuild, decorators as dec diff --git a/numpy/tests/test_lazyloading.py b/numpy/tests/test_lazyloading.py new file mode 100644 index 000000000..f31a4eab7 --- /dev/null +++ b/numpy/tests/test_lazyloading.py @@ -0,0 +1,38 @@ +import sys +import importlib +from importlib.util import LazyLoader, find_spec, module_from_spec +import pytest + + +# Warning raised by _reload_guard() in numpy/__init__.py +@pytest.mark.filterwarnings("ignore:The NumPy module was reloaded") +def test_lazy_load(): + # gh-22045. lazyload doesn't import submodule names into the namespace + # muck with sys.modules to test the importing system + old_numpy = sys.modules.pop("numpy") + + numpy_modules = {} + for mod_name, mod in list(sys.modules.items()): + if mod_name[:6] == "numpy.": + numpy_modules[mod_name] = mod + sys.modules.pop(mod_name) + + try: + # create lazy load of numpy as np + spec = find_spec("numpy") + module = module_from_spec(spec) + sys.modules["numpy"] = module + loader = LazyLoader(spec.loader) + loader.exec_module(module) + np = module + + # test a subpackage import + from numpy.lib import recfunctions + + # test triggering the import of the package + np.ndarray + + finally: + if old_numpy: + sys.modules["numpy"] = old_numpy + sys.modules.update(numpy_modules) |