mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-11 13:49:23 -05:00
gnu: python-matplotlib: Fix flaky Legend loc test.
* gnu/packages/patches/python-matplotlib-fix-legend-loc-best-test.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/python-xyz.scm (python-matplotlib): Use it. Change-Id: I0b488844d7b34a718b7294134b8c954492c9b697
This commit is contained in:
parent
ce21952f81
commit
afda4d87af
3 changed files with 87 additions and 1 deletions
|
@ -1877,6 +1877,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/python-docrepr-fix-tests.patch \
|
||||
%D%/packages/patches/python-feedparser-missing-import.patch \
|
||||
%D%/packages/patches/python-louvain-fix-test.patch \
|
||||
%D%/packages/patches/python-matplotlib-fix-legend-loc-best-test.patch \
|
||||
%D%/packages/patches/python-random2-getrandbits-test.patch \
|
||||
%D%/packages/patches/python-pillow-use-zlib-1.3.patch \
|
||||
%D%/packages/patches/python-pyreadstat-link-libiconv.patch \
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
From 3cc6610597ee16a0cce39f7b033ae529972177e7 Mon Sep 17 00:00:00 2001
|
||||
From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
|
||||
Date: Thu, 10 Aug 2023 00:09:53 -0400
|
||||
Subject: [PATCH] TST: Improve test for Legend(loc='best') warning
|
||||
|
||||
By patching the timer instead of using actually large data, we can both
|
||||
a) speed up these tests (~7.5s vs <0.2s for both), and b) consistently
|
||||
trigger the warning even on systems which are fast (such as the M1
|
||||
systems on Cirrus.)
|
||||
|
||||
Also, copy the test data from `test_legend_auto3`, which correctly hits
|
||||
all candidate locations for the 'best' legend locator without having to
|
||||
fill up the entire Axes with data.
|
||||
---
|
||||
lib/matplotlib/tests/test_legend.py | 38 ++++++++++++++++++++---------
|
||||
1 file changed, 27 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/lib/matplotlib/tests/test_legend.py b/lib/matplotlib/tests/test_legend.py
|
||||
index 759ac6aadaff..1549354ba56b 100644
|
||||
--- a/lib/matplotlib/tests/test_legend.py
|
||||
+++ b/lib/matplotlib/tests/test_legend.py
|
||||
@@ -1,5 +1,7 @@
|
||||
import collections
|
||||
+import itertools
|
||||
import platform
|
||||
+import time
|
||||
from unittest import mock
|
||||
import warnings
|
||||
|
||||
@@ -1109,29 +1111,43 @@ def test_usetex_no_warn(caplog):
|
||||
assert "Font family ['serif'] not found." not in caplog.text
|
||||
|
||||
|
||||
-def test_warn_big_data_best_loc():
|
||||
+def test_warn_big_data_best_loc(monkeypatch):
|
||||
+ # Force _find_best_position to think it took a long time.
|
||||
+ counter = itertools.count(0, step=1.5)
|
||||
+ monkeypatch.setattr(time, 'perf_counter', lambda: next(counter))
|
||||
+
|
||||
fig, ax = plt.subplots()
|
||||
fig.canvas.draw() # So that we can call draw_artist later.
|
||||
- for idx in range(1000):
|
||||
- ax.plot(np.arange(5000), label=idx)
|
||||
+
|
||||
+ # Place line across all possible legend locations.
|
||||
+ x = [0.9, 0.1, 0.1, 0.9, 0.9, 0.5]
|
||||
+ y = [0.95, 0.95, 0.05, 0.05, 0.5, 0.5]
|
||||
+ ax.plot(x, y, 'o-', label='line')
|
||||
+
|
||||
with rc_context({'legend.loc': 'best'}):
|
||||
legend = ax.legend()
|
||||
- with pytest.warns(UserWarning) as records:
|
||||
+ with pytest.warns(UserWarning,
|
||||
+ match='Creating legend with loc="best" can be slow with large '
|
||||
+ 'amounts of data.') as records:
|
||||
fig.draw_artist(legend) # Don't bother drawing the lines -- it's slow.
|
||||
# The _find_best_position method of Legend is called twice, duplicating
|
||||
# the warning message.
|
||||
assert len(records) == 2
|
||||
- for record in records:
|
||||
- assert str(record.message) == (
|
||||
- 'Creating legend with loc="best" can be slow with large '
|
||||
- 'amounts of data.')
|
||||
|
||||
|
||||
-def test_no_warn_big_data_when_loc_specified():
|
||||
+def test_no_warn_big_data_when_loc_specified(monkeypatch):
|
||||
+ # Force _find_best_position to think it took a long time.
|
||||
+ counter = itertools.count(0, step=1.5)
|
||||
+ monkeypatch.setattr(time, 'perf_counter', lambda: next(counter))
|
||||
+
|
||||
fig, ax = plt.subplots()
|
||||
fig.canvas.draw()
|
||||
- for idx in range(1000):
|
||||
- ax.plot(np.arange(5000), label=idx)
|
||||
+
|
||||
+ # Place line across all possible legend locations.
|
||||
+ x = [0.9, 0.1, 0.1, 0.9, 0.9, 0.5]
|
||||
+ y = [0.95, 0.95, 0.05, 0.05, 0.5, 0.5]
|
||||
+ ax.plot(x, y, 'o-', label='line')
|
||||
+
|
||||
legend = ax.legend('best')
|
||||
fig.draw_artist(legend) # Check that no warning is emitted.
|
||||
|
|
@ -9303,7 +9303,8 @@ (define-public python-matplotlib
|
|||
(method url-fetch)
|
||||
(uri (pypi-uri "matplotlib" version))
|
||||
(sha256
|
||||
(base32 "18amhxyxa6yzy1nwky4ggdgvvxnbl3qz2lki05vfx0dqf6w7ia81"))))
|
||||
(base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))
|
||||
(patches (search-patches "python-matplotlib-fix-legend-loc-best-test.patch"))))
|
||||
(build-system pyproject-build-system)
|
||||
(arguments
|
||||
(list
|
||||
|
|
Loading…
Reference in a new issue