|
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(): |
|
|
|
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. |
|
""" |
|
|
|
|
|
|
|
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()}" |
|
) |
|
|