From 6557a5e13e940513400fa1b0dbc80938c57d3c38 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Wed, 21 Nov 2018 11:26:59 +0100 Subject: [PATCH] Bump oldest supported numpy to 1.11. --- .circleci/config.yml | 2 +- INSTALL.rst | 2 +- doc/api/next_api_changes/2018-11-22-AL.rst | 3 + lib/matplotlib/__init__.py | 2 +- lib/matplotlib/dates.py | 6 +- .../test_axes/formatter_large_small.pdf | Bin 7305 -> 0 bytes .../test_axes/formatter_large_small.png | Bin 23277 -> 0 bytes .../test_axes/formatter_large_small.svg | 603 ------------------ lib/matplotlib/tests/test_axes.py | 11 - lib/matplotlib/ticker.py | 23 +- requirements/testing/travis35.txt | 2 +- setupext.py | 24 +- 12 files changed, 27 insertions(+), 651 deletions(-) create mode 100644 doc/api/next_api_changes/2018-11-22-AL.rst delete mode 100644 lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.svg diff --git a/.circleci/config.yml b/.circleci/config.yml index d94052f62087..d7c959ae0bde 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -134,7 +134,7 @@ jobs: - run: <<: *deps-install environment: - NUMPY_VERSION: "==1.10.0" + NUMPY_VERSION: "==1.11.0" - run: *mpl-install - run: *doc-build diff --git a/INSTALL.rst b/INSTALL.rst index 5e4ca0645374..358363bdde79 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -136,7 +136,7 @@ Matplotlib requires the following dependencies: * `Python `_ (>= 3.5) * `FreeType `_ (>= 2.3) * `libpng `_ (>= 1.2) -* `NumPy `_ (>= 1.10.0) +* `NumPy `_ (>= 1.11) * `setuptools `_ * `cycler `_ (>= 0.10.0) * `dateutil `_ (>= 2.1) diff --git a/doc/api/next_api_changes/2018-11-22-AL.rst b/doc/api/next_api_changes/2018-11-22-AL.rst new file mode 100644 index 000000000000..3d7977e43389 --- /dev/null +++ b/doc/api/next_api_changes/2018-11-22-AL.rst @@ -0,0 +1,3 @@ +Numpy minimum version bump +`````````````````````````` +Matplotlib 3.1 requires numpy>=1.11. diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 7735b0cdd604..b67e36dd7700 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -191,7 +191,7 @@ def _check_versions(): ("cycler", "0.10"), ("dateutil", "2.1"), ("kiwisolver", "1.0.1"), - ("numpy", "1.10"), + ("numpy", "1.11"), ("pyparsing", "2.0.1"), ]: module = importlib.import_module(modname) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 243e9a42318a..339114fbb281 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -254,10 +254,8 @@ def _dt64_to_ordinalf(d): # the "extra" ensures that we at least allow the dynamic range out to # seconds. That should get out to +/-2e11 years. - # NOTE: First cast truncates; second cast back is for NumPy 1.10. - extra = d - d.astype('datetime64[s]').astype(d.dtype) - extra = extra.astype('timedelta64[ns]') - t0 = np.datetime64('0001-01-01T00:00:00').astype('datetime64[s]') + extra = (d - d.astype('datetime64[s]')).astype('timedelta64[ns]') + t0 = np.datetime64('0001-01-01T00:00:00', 's') dt = (d.astype('datetime64[s]') - t0).astype(np.float64) dt += extra.astype(np.float64) / 1.0e9 dt = dt / SEC_PER_DAY + 1.0 diff --git a/lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.pdf b/lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.pdf deleted file mode 100644 index e3cc69089946808ad2984b49790e4bce59928df8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7305 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 S2u`4@7(8A5T-G@yGywoqB?ox` diff --git a/lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.svg b/lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.svg deleted file mode 100644 index fb33c61e02a4..000000000000 --- a/lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.svg +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index f6e3f733b95b..271c515e20db 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -132,17 +132,6 @@ def test_formatter_ticker(): ax.autoscale_view() -@image_comparison(baseline_images=["formatter_large_small"]) -def test_formatter_large_small(): - # github issue #617, pull #619 - if LooseVersion(np.__version__) >= LooseVersion('1.11.0'): - pytest.skip("Fall out from a fixed numpy bug") - fig, ax = plt.subplots(1) - x = [0.500000001, 0.500000002] - y = [1e64, 1.1e64] - ax.plot(x, y) - - @image_comparison(baseline_images=["twin_axis_locaters_formatters"]) def test_twin_axis_locaters_formatters(): vals = np.linspace(0, 1, num=5, endpoint=True) diff --git a/lib/matplotlib/ticker.py b/lib/matplotlib/ticker.py index fb39bfba9dc7..c4323660915c 100644 --- a/lib/matplotlib/ticker.py +++ b/lib/matplotlib/ticker.py @@ -187,15 +187,6 @@ 'SymmetricalLogLocator', 'LogitLocator') -# Work around numpy/numpy#6127. -def _divmod(x, y): - if isinstance(x, np.generic): - x = x.item() - if isinstance(y, np.generic): - y = y.item() - return divmod(x, y) - - def _mathdefault(s): return '\\mathdefault{%s}' % s @@ -1665,7 +1656,7 @@ def view_limits(self, vmin, vmax): vmax += 1 if rcParams['axes.autolimit_mode'] == 'round_numbers': - exponent, remainder = _divmod( + exponent, remainder = divmod( math.log10(vmax - vmin), math.log10(max(self.numticks - 1, 1))) exponent -= (remainder < .5) scale = max(self.numticks - 1, 1) ** (-exponent) @@ -1690,14 +1681,14 @@ def __init__(self, base): def lt(self, x): 'return the largest multiple of base < x' - d, m = _divmod(x, self._base) + d, m = divmod(x, self._base) if closeto(m, 0) and not closeto(m / self._base, 1): return (d - 1) * self._base return d * self._base def le(self, x): 'return the largest multiple of base <= x' - d, m = _divmod(x, self._base) + d, m = divmod(x, self._base) if closeto(m / self._base, 1): # was closeto(m, self._base) #looks like floating point error return (d + 1) * self._base @@ -1705,7 +1696,7 @@ def le(self, x): def gt(self, x): 'return the smallest multiple of base > x' - d, m = _divmod(x, self._base) + d, m = divmod(x, self._base) if closeto(m / self._base, 1): #looks like floating point error return (d + 2) * self._base @@ -1713,7 +1704,7 @@ def gt(self, x): def ge(self, x): 'return the smallest multiple of base >= x' - d, m = _divmod(x, self._base) + d, m = divmod(x, self._base) if closeto(m, 0) and not closeto(m / self._base, 1): return d * self._base return (d + 1) * self._base @@ -1808,14 +1799,14 @@ def closeto(self, ms, edge): def le(self, x): 'Return the largest n: n*step <= x.' - d, m = _divmod(x, self.step) + d, m = divmod(x, self.step) if self.closeto(m / self.step, 1): return (d + 1) return d def ge(self, x): 'Return the smallest n: n*step >= x.' - d, m = _divmod(x, self.step) + d, m = divmod(x, self.step) if self.closeto(m / self.step, 0): return d return (d + 1) diff --git a/requirements/testing/travis35.txt b/requirements/testing/travis35.txt index 10f3a43447c1..9f32b5d9c754 100644 --- a/requirements/testing/travis35.txt +++ b/requirements/testing/travis35.txt @@ -2,7 +2,7 @@ cycler==0.10 python-dateutil==2.1 -numpy==1.10.0 +numpy==1.11 pandas<0.21.0 pyparsing==2.0.1 pytest==3.6 diff --git a/setupext.py b/setupext.py index 0d558302678b..d5f4b81f5621 100644 --- a/setupext.py +++ b/setupext.py @@ -774,24 +774,22 @@ def include_dirs_hook(): return [numpy.get_include()] def add_flags(self, ext): - # Ensure that PY_ARRAY_UNIQUE_SYMBOL is uniquely defined for - # each extension - array_api_name = 'MPL_' + ext.name.replace('.', '_') + '_ARRAY_API' - - ext.define_macros.append(('PY_ARRAY_UNIQUE_SYMBOL', array_api_name)) ext.add_hook('include_dirs', self.include_dirs_hook) - - ext.define_macros.append(('NPY_NO_DEPRECATED_API', - 'NPY_1_7_API_VERSION')) - - # Allow NumPy's printf format specifiers in C++. - ext.define_macros.append(('__STDC_FORMAT_MACROS', 1)) + ext.define_macros.extend([ + # Ensure that PY_ARRAY_UNIQUE_SYMBOL is uniquely defined for each + # extension. + ('PY_ARRAY_UNIQUE_SYMBOL', + 'MPL_' + ext.name.replace('.', '_') + '_ARRAY_API'), + ('NPY_NO_DEPRECATED_API', 'NPY_1_7_API_VERSION'), + # Allow NumPy's printf format specifiers in C++. + ('__STDC_FORMAT_MACROS', 1), + ]) def get_setup_requires(self): - return ['numpy>=1.10.0'] + return ['numpy>=1.11'] def get_install_requires(self): - return ['numpy>=1.10.0'] + return ['numpy>=1.11'] class LibAgg(SetupPackage):