From 6f47e3ec2b213421ddba37307fe583b0adca66ad Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 5 May 2016 23:11:44 -0400 Subject: [PATCH 1/5] FIX: do not allow CN color spec in prop_cycle This could create an infinite loop on mapping to rgb. --- lib/matplotlib/rcsetup.py | 25 +++++++++++++++++++++++-- lib/matplotlib/tests/test_rcparams.py | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 8b4e23547393..500d9d486ff3 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -29,11 +29,12 @@ import collections as abc from matplotlib.fontconfig_pattern import parse_fontconfig_pattern from matplotlib.colors import is_color_like +import re # Don't let the original cycler collide with our validating cycler from cycler import Cycler, cycler as ccycler -#interactive_bk = ['gtk', 'gtkagg', 'gtkcairo', 'qt4agg', +# interactive_bk = ['gtk', 'gtkagg', 'gtkcairo', 'qt4agg', # 'tkagg', 'wx', 'wxagg', 'cocoaagg', 'webagg'] # The capitalized forms are needed for ipython at present; this may # change for later versions. @@ -340,6 +341,22 @@ def validate_color_or_auto(s): return validate_color(s) +def validate_color_for_prop_cycle(s): + # Special-case the N-th color cycle syntax, this obviously can not + # go in the color cycle. + if isinstance(s, bytes): + match = re.match(b'^C[0-9]$', s) + if match is not None: + raise ValueError('Can not put cycle reference ({cn!r}) in ' + 'prop_cycler'.format(cn=s)) + elif isinstance(s, six.text_type): + match = re.match('^C[0-9]$', s) + if match is not None: + raise ValueError('Can not put cycle reference ({cn!r}) in ' + 'prop_cycler'.format(cn=s)) + return validate_color(s) + + def validate_color(s): 'return a valid color arg' try: @@ -661,7 +678,8 @@ def validate_hatch(s): _prop_validators = { - 'color': validate_colorlist, + 'color': _listify_validator(validate_color_for_prop_cycle, + allow_stringlist=True), 'linewidth': validate_floatlist, 'linestyle': validate_stringlist, 'facecolor': validate_colorlist, @@ -818,6 +836,9 @@ def validate_cycler(s): norm_prop = _prop_aliases.get(prop, prop) cycler_inst.change_key(prop, norm_prop) + for key, vals in cycler_inst.by_key().items(): + _prop_validators[key](vals) + return cycler_inst diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index b7a965062a31..1d5994d9f7e2 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -348,6 +348,7 @@ def test_validators(): ('cycler(c=[1, 2, 3])', ValueError), # invalid values ("cycler(lw=['a', 'b', 'c'])", ValueError), # invalid values (cycler('waka', [1, 3, 5]), ValueError), # not a property + (cycler('color', ['C1', 'r', 'g']), ValueError) # no CN ) }, {'validator': validate_hatch, @@ -417,6 +418,5 @@ def test_rcparams_reset_after_fail(): assert mpl.rcParams['text.usetex'] is False - if __name__ == '__main__': nose.runmodule(argv=['-s', '--with-doctest'], exit=False) From 6db04da9abce975b1c452be23acdf56c00bf0dba Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 5 May 2016 23:19:20 -0400 Subject: [PATCH 2/5] FIX: do not directly cache 'CN' color values --- lib/matplotlib/colors.py | 12 +++++++----- lib/matplotlib/tests/test_colors.py | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index 2cc84c0475af..b40ad57575cc 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -54,11 +54,11 @@ """ from __future__ import (absolute_import, division, print_function, unicode_literals) - +import re from matplotlib.externals import six from matplotlib.externals.six.moves import zip import warnings -import re + import numpy as np from numpy import ma import matplotlib.cbook as cbook @@ -194,7 +194,6 @@ def to_rgb(self, arg): raise ValueError( 'to_rgb: arg "%s" is unhashable even inside a tuple' % (str(arg),)) - try: if cbook.is_string_like(arg): argl = arg.lower() @@ -202,6 +201,10 @@ def to_rgb(self, arg): if color is None: try: argl = self._parse_nth_color(arg) + # in this case we do not want to cache in case + # the rcparam changes, recurse with the actual color + # value + return self.to_rgb(argl) except ValueError: pass for cmapping in self.CN_LOOKUPS: @@ -215,7 +218,7 @@ def to_rgb(self, arg): if fl < 0 or fl > 1: raise ValueError( 'gray (string) must be in range 0-1') - color = (fl,)*3 + color = (fl,) * 3 elif cbook.iterable(arg): if len(arg) > 4 or len(arg) < 3: raise ValueError( @@ -228,7 +231,6 @@ def to_rgb(self, arg): else: raise ValueError( 'cannot convert argument to rgb sequence') - self.cache[arg] = color except (KeyError, ValueError, TypeError) as exc: diff --git a/lib/matplotlib/tests/test_colors.py b/lib/matplotlib/tests/test_colors.py index 44a818d76e4b..085d4d476e7d 100644 --- a/lib/matplotlib/tests/test_colors.py +++ b/lib/matplotlib/tests/test_colors.py @@ -17,6 +17,8 @@ from numpy.testing.utils import assert_array_equal, assert_array_almost_equal from nose.plugins.skip import SkipTest +from cycler import cycler +import matplotlib import matplotlib.colors as mcolors import matplotlib.cm as cm import matplotlib.cbook as cbook @@ -596,6 +598,23 @@ def test_pandas_iterable(): assert_sequence_equal(cm1.colors, cm2.colors) +@cleanup +def test_cn(): + matplotlib.rcParams['axes.prop_cycle'] = cycler('color', + ['blue', 'r']) + x11_blue = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C0')) + assert x11_blue == '#0000ff' + red = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C1')) + assert red == '#ff0000' + + matplotlib.rcParams['axes.prop_cycle'] = cycler('color', + ['XKCDblue', 'r']) + XKCD_blue = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C0')) + assert XKCD_blue == '#0343df' + red = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C1')) + assert red == '#ff0000' + + if __name__ == '__main__': import nose nose.runmodule(argv=['-s', '--with-doctest'], exit=False) From c9f38ced429f5adc089a957a9cdb73ad67b7d63f Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 5 May 2016 23:49:08 -0400 Subject: [PATCH 3/5] TST: fix alias collision test --- .../test_cycles/property_collision_plot.png | Bin 30456 -> 37723 bytes lib/matplotlib/tests/test_cycles.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/baseline_images/test_cycles/property_collision_plot.png b/lib/matplotlib/tests/baseline_images/test_cycles/property_collision_plot.png index 2c962c843f64d35ddc8ff2b0e8e475aa062dc1ea..82b4ddac51013d607dba9a96e6106677b897a6b1 100644 GIT binary patch literal 37723 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≷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 LF+V(N_S*jf{|V(M literal 30456 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 rJx2NA$H8u*u)zHPkNVc-D|m5&4d33>mIZo diff --git a/lib/matplotlib/tests/test_cycles.py b/lib/matplotlib/tests/test_cycles.py index 67ce08b881dc..06b60caa81ca 100644 --- a/lib/matplotlib/tests/test_cycles.py +++ b/lib/matplotlib/tests/test_cycles.py @@ -129,7 +129,7 @@ def test_property_collision_plot(): fig, ax = plt.subplots() ax.set_prop_cycle('linewidth', [2, 4]) for c in range(1, 4): - ax.plot(np.arange(10), c * np.arange(10), lw=0.1) + ax.plot(np.arange(10), c * np.arange(10), lw=0.1, color='k') ax.plot(np.arange(10), 4 * np.arange(10)) ax.plot(np.arange(10), 5 * np.arange(10)) From eb86ed14e27b2b10ff8cb3161c4137950ee30591 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Fri, 6 May 2016 16:40:19 -0400 Subject: [PATCH 4/5] PEP8 --- lib/matplotlib/rcsetup.py | 4 +++- lib/matplotlib/tests/test_rcparams.py | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 500d9d486ff3..ea1adb7a4a7f 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -22,6 +22,8 @@ import operator import os import warnings +import re + try: import collections.abc as abc except ImportError: @@ -29,7 +31,7 @@ import collections as abc from matplotlib.fontconfig_pattern import parse_fontconfig_pattern from matplotlib.colors import is_color_like -import re + # Don't let the original cycler collide with our validating cycler from cycler import Cycler, cycler as ccycler diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index 1d5994d9f7e2..d37adfc2b00d 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -418,5 +418,6 @@ def test_rcparams_reset_after_fail(): assert mpl.rcParams['text.usetex'] is False + if __name__ == '__main__': nose.runmodule(argv=['-s', '--with-doctest'], exit=False) From e3165c5050a6f6844a944e38a255b456fdab71b4 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Sat, 7 May 2016 16:56:18 -0400 Subject: [PATCH 5/5] MNT: fix LPy issue --- lib/matplotlib/rcsetup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index ea1adb7a4a7f..d06f054a8409 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -178,6 +178,7 @@ def validate_string_or_None(s): except ValueError: raise ValueError('Could not convert "%s" to string' % s) + def validate_axisbelow(s): try: return validate_bool(s) @@ -668,7 +669,7 @@ def validate_hatch(s): characters: ``\\ / | - + * . x o O``. """ - if not isinstance(s, six.text_type): + if not isinstance(s, six.string_types): raise ValueError("Hatch pattern must be a string") unique_chars = set(s) unknown = (unique_chars - pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy

Alternative Proxy