39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								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  # noqa: F401
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # test triggering the import of the package
							 | 
						||
| 
								 | 
							
								        np.ndarray
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    finally:
							 | 
						||
| 
								 | 
							
								        if old_numpy:
							 | 
						||
| 
								 | 
							
								            sys.modules["numpy"] = old_numpy
							 | 
						||
| 
								 | 
							
								            sys.modules.update(numpy_modules)
							 |