From 557f548a624556a208aef66a58b7b3cd3760558b Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Sun, 15 Jul 2018 23:38:56 +0200 Subject: dev-python/numpy: Backport a fix for py3.7 test failures --- dev-python/numpy/files/numpy-1.14.5-py37.patch | 135 +++++++++++++++++++++++++ dev-python/numpy/numpy-1.14.5.ebuild | 2 + 2 files changed, 137 insertions(+) create mode 100644 dev-python/numpy/files/numpy-1.14.5-py37.patch (limited to 'dev-python/numpy') diff --git a/dev-python/numpy/files/numpy-1.14.5-py37.patch b/dev-python/numpy/files/numpy-1.14.5-py37.patch new file mode 100644 index 000000000000..c53b3acf6966 --- /dev/null +++ b/dev-python/numpy/files/numpy-1.14.5-py37.patch @@ -0,0 +1,135 @@ +From dce7f20e95e6bd3fc07517c0b2daf3942a34ddf7 Mon Sep 17 00:00:00 2001 +From: Charles Harris +Date: Wed, 14 Mar 2018 12:52:26 -0600 +Subject: [PATCH] MAINT: Fix test_utils.py for Python 3.7. + +The contents of the module warnings registries was made more module +specific in Python 3.7 and consequently the tests of the context +managers clear_and_catch_warnings and suppress_warnings need updating. +--- + numpy/testing/tests/test_utils.py | 43 +++++++++++++++++++++---------- + 1 file changed, 29 insertions(+), 14 deletions(-) + +diff --git a/numpy/testing/tests/test_utils.py b/numpy/testing/tests/test_utils.py +index a97b627f9..33b3555b0 100644 +--- a/numpy/testing/tests/test_utils.py ++++ b/numpy/testing/tests/test_utils.py +@@ -1114,18 +1114,28 @@ class TestStringEqual(unittest.TestCase): + lambda: assert_string_equal("foo", "hello")) + + +-def assert_warn_len_equal(mod, n_in_context, py3_n_in_context=None): ++def assert_warn_len_equal(mod, n_in_context, py34=None, py37=None): + mod_warns = mod.__warningregistry__ ++ num_warns = len(mod_warns) + # Python 3.4 appears to clear any pre-existing warnings of the same type, + # when raising warnings inside a catch_warnings block. So, there is a + # warning generated by the tests within the context manager, but no + # previous warnings. + if 'version' in mod_warns: +- if py3_n_in_context is None: +- py3_n_in_context = n_in_context +- assert_equal(len(mod_warns) - 1, py3_n_in_context) +- else: +- assert_equal(len(mod_warns), n_in_context) ++ # Python 3 adds a 'version' entry to the registry, ++ # do not count it. ++ num_warns -= 1 ++ ++ # Behavior of warnings is Python version dependent. Adjust the ++ # expected result to compensate. In particular, Python 3.7 does ++ # not make an entry for ignored warnings. ++ if sys.version_info[:2] >= (3, 7): ++ if py37 is not None: ++ n_in_context = py37 ++ elif sys.version_info[:2] >= (3, 4): ++ if py34 is not None: ++ n_in_context = py34 ++ assert_equal(num_warns, n_in_context) + + + def _get_fresh_mod(): +@@ -1134,6 +1144,8 @@ def _get_fresh_mod(): + try: + my_mod.__warningregistry__.clear() + except AttributeError: ++ # will not have a __warningregistry__ unless warning has been ++ # raised in the module at some point + pass + return my_mod + +@@ -1147,21 +1159,23 @@ def test_clear_and_catch_warnings(): + warnings.warn('Some warning') + assert_equal(my_mod.__warningregistry__, {}) + # Without specified modules, don't clear warnings during context ++ # Python 3.7 catch_warnings doesn't make an entry for 'ignore'. + with clear_and_catch_warnings(): + warnings.simplefilter('ignore') + warnings.warn('Some warning') +- assert_warn_len_equal(my_mod, 1) ++ assert_warn_len_equal(my_mod, 1, py37=0) + # Confirm that specifying module keeps old warning, does not add new + with clear_and_catch_warnings(modules=[my_mod]): + warnings.simplefilter('ignore') + warnings.warn('Another warning') +- assert_warn_len_equal(my_mod, 1) ++ assert_warn_len_equal(my_mod, 1, py37=0) + # Another warning, no module spec does add to warnings dict, except on + # Python 3.4 (see comments in `assert_warn_len_equal`) ++ # Python 3.7 catch_warnings doesn't make an entry for 'ignore'. + with clear_and_catch_warnings(): + warnings.simplefilter('ignore') + warnings.warn('Another warning') +- assert_warn_len_equal(my_mod, 2, 1) ++ assert_warn_len_equal(my_mod, 2, py34=1, py37=0) + + + def test_suppress_warnings_module(): +@@ -1178,6 +1192,7 @@ def test_suppress_warnings_module(): + np.apply_along_axis(warn, 0, [0]) + + # Test module based warning suppression: ++ assert_warn_len_equal(my_mod, 0) + with suppress_warnings() as sup: + sup.record(UserWarning) + # suppress warning from other module (may have .pyc ending), +@@ -1189,8 +1204,7 @@ def test_suppress_warnings_module(): + # got filtered) + assert_(len(sup.log) == 1) + assert_(sup.log[0].message.args[0] == "Some warning") +- +- assert_warn_len_equal(my_mod, 0) ++ assert_warn_len_equal(my_mod, 0, py37=0) + sup = suppress_warnings() + # Will have to be changed if apply_along_axis is moved: + sup.filter(module=my_mod) +@@ -1204,11 +1218,11 @@ def test_suppress_warnings_module(): + assert_warn_len_equal(my_mod, 0) + + # Without specified modules, don't clear warnings during context ++ # Python 3.7 does not add ignored warnings. + with suppress_warnings(): + warnings.simplefilter('ignore') + warnings.warn('Some warning') +- assert_warn_len_equal(my_mod, 1) +- ++ assert_warn_len_equal(my_mod, 1, py37=0) + + def test_suppress_warnings_type(): + # Initial state of module, no warnings +@@ -1232,10 +1246,11 @@ def test_suppress_warnings_type(): + assert_warn_len_equal(my_mod, 0) + + # Without specified modules, don't clear warnings during context ++ # Python 3.7 does not add ignored warnings. + with suppress_warnings(): + warnings.simplefilter('ignore') + warnings.warn('Some warning') +- assert_warn_len_equal(my_mod, 1) ++ assert_warn_len_equal(my_mod, 1, py37=0) + + + def test_suppress_warnings_decorate_no_record(): +-- +2.18.0 + diff --git a/dev-python/numpy/numpy-1.14.5.ebuild b/dev-python/numpy/numpy-1.14.5.ebuild index 507ae3a8210e..33db9fa991fd 100644 --- a/dev-python/numpy/numpy-1.14.5.ebuild +++ b/dev-python/numpy/numpy-1.14.5.ebuild @@ -36,6 +36,8 @@ DEPEND="${RDEPEND} PATCHES=( "${FILESDIR}"/${PN}-1.14.5-no-hardcode-blas.patch + # backport a fix for py3.7 test failures + "${FILESDIR}"/numpy-1.14.5-py37.patch ) src_unpack() { -- cgit v1.2.3-65-gdbad