ai-content-maker/.venv/Lib/site-packages/numba/tests/test_import.py

113 lines
3.9 KiB
Python
Raw Normal View History

2024-05-03 04:18:51 +03:00
import unittest
from numba.tests.support import TestCase, run_in_subprocess
class TestNumbaImport(TestCase):
"""
Test behaviour of importing Numba.
"""
def test_laziness(self):
"""
Importing top-level numba features should not import too many modules.
"""
# A heuristic set of modules that shouldn't be imported immediately
banlist = ['cffi',
'distutils',
'numba.cuda',
'numba.cpython.mathimpl',
'numba.cpython.randomimpl',
'numba.tests',
'numba.core.typing.collections',
'numba.core.typing.listdecl',
'numba.core.typing.npdatetime',
]
# Sanity check the modules still exist...
for mod in banlist:
if mod not in ('cffi',):
__import__(mod)
code = """if 1:
from numba import jit, vectorize
from numba.core import types
import sys
print(list(sys.modules))
"""
out, _ = run_in_subprocess(code)
modlist = set(eval(out.strip()))
unexpected = set(banlist) & set(modlist)
self.assertFalse(unexpected, "some modules unexpectedly imported")
def test_no_impl_import(self):
"""
Tests that importing jit does not trigger import of modules containing
lowering implementations that would likely install things in the
builtins registry and have side effects impacting other targets
"""
# None of these modules should be imported through the process of
# doing 'import numba' or 'from numba import njit'
banlist = ['numba.cpython.slicing',
'numba.cpython.tupleobj',
'numba.cpython.enumimpl',
'numba.cpython.hashing',
'numba.cpython.heapq',
'numba.cpython.iterators',
'numba.cpython.numbers',
'numba.cpython.rangeobj',
'numba.cpython.cmathimpl',
'numba.cpython.mathimpl',
'numba.cpython.printimpl',
'numba.cpython.randomimpl',
'numba.core.optional',
'numba.misc.gdb_hook',
'numba.misc.literal',
'numba.misc.cffiimpl',
'numba.np.linalg',
'numba.np.polynomial',
'numba.np.arraymath',
'numba.np.npdatetime',
'numba.np.npyimpl',
'numba.typed.typeddict',
'numba.typed.typedlist',
'numba.experimental.jitclass.base',]
code1 = """if 1:
import sys
import numba
print(list(sys.modules))
"""
code2 = """if 1:
import sys
from numba import njit
@njit
def foo():
pass
print(list(sys.modules))
"""
for code in (code1, code2):
out, _ = run_in_subprocess(code)
modlist = set(eval(out.strip()))
unexpected = set(banlist) & set(modlist)
self.assertFalse(unexpected, "some modules unexpectedly imported")
def test_no_accidental_warnings(self):
# checks that importing Numba isn't accidentally triggering warnings due
# to e.g. deprecated use of import locations from Python's stdlib
code = "import numba"
# See: https://github.com/numba/numba/issues/6831
# bug in setuptools/packaging causing a deprecation warning
flags = ["-Werror", "-Wignore::DeprecationWarning:packaging.version:"]
run_in_subprocess(code, flags)
def test_import_star(self):
# checks that "from numba import *" works.
code = "from numba import *"
run_in_subprocess(code)
if __name__ == '__main__':
unittest.main()