123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- from numpy.testing import (
- assert_raises,
- assert_warns,
- assert_,
- assert_equal,
- IS_WASM,
- )
- from numpy.compat import pickle
- import pytest
- 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)
- @pytest.mark.skipif(IS_WASM, reason="can't start subprocess")
- 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], capture_output=True)
- if p.returncode:
- raise AssertionError(
- f"Non-zero return code: {p.returncode!r}\n\n{p.stderr.decode()}"
- )
|