12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from numpy.testing import assert_raises, assert_warns, assert_, assert_equal
- from numpy.compat import pickle
- import sys
- import subprocess
- import textwrap
- from importlib import reload
- def test_numpy_reloading():
- # gh-7844. Also check that relevant globals retain their identity.
- import numpy as np
- import numpy._globals
- _NoValue = np._NoValue
- VisibleDeprecationWarning = np.VisibleDeprecationWarning
- ModuleDeprecationWarning = np.ModuleDeprecationWarning
- with assert_warns(UserWarning):
- reload(np)
- assert_(_NoValue is np._NoValue)
- assert_(ModuleDeprecationWarning is np.ModuleDeprecationWarning)
- assert_(VisibleDeprecationWarning is np.VisibleDeprecationWarning)
- assert_raises(RuntimeError, reload, numpy._globals)
- with assert_warns(UserWarning):
- reload(np)
- assert_(_NoValue is np._NoValue)
- assert_(ModuleDeprecationWarning is np.ModuleDeprecationWarning)
- assert_(VisibleDeprecationWarning is np.VisibleDeprecationWarning)
- def test_novalue():
- import numpy as np
- for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):
- assert_equal(repr(np._NoValue), '<no value>')
- assert_(pickle.loads(pickle.dumps(np._NoValue,
- protocol=proto)) is np._NoValue)
- def test_full_reimport():
- """At the time of writing this, it is *not* truly supported, but
- apparently enough users rely on it, for it to be an annoying change
- when it started failing previously.
- """
- # Test within a new process, to ensure that we do not mess with the
- # global state during the test run (could lead to cryptic test failures).
- # This is generally unsafe, especially, since we also reload the C-modules.
- code = textwrap.dedent(r"""
- import sys
- from pytest import warns
- import numpy as np
- for k in list(sys.modules.keys()):
- if "numpy" in k:
- del sys.modules[k]
- with warns(UserWarning):
- import numpy as np
- """)
- p = subprocess.run([sys.executable, '-c', code])
|