From 2f777496de5f47ddf3faf75edc6487a147de517c Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Wed, 6 Jul 2016 01:00:35 +0300 Subject: [PATCH 1/4] Do not call `_recache()` twice in `MarkerStyle` constructor --- lib/matplotlib/markers.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/markers.py b/lib/matplotlib/markers.py index 732fa1c1aaa7..882c4e66676e 100644 --- a/lib/matplotlib/markers.py +++ b/lib/matplotlib/markers.py @@ -175,11 +175,12 @@ def __init__(self, marker=None, fillstyle=None): fillstyle : string, optional, default: 'full' 'full', 'left", 'right', 'bottom', 'top', 'none' """ - # The fillstyle has to be set here as it might be accessed by calls to - # _recache() in set_marker. - self._fillstyle = fillstyle - self.set_marker(marker) + # The _recache() is called in both set_fillstyle() and set_marker() + # methods that's why here we have to have either marker or fillstyle + # preinitialized before setting other. + self._marker = None self.set_fillstyle(fillstyle) + self.set_marker(marker) def __getstate__(self): d = self.__dict__.copy() @@ -229,7 +230,9 @@ def set_fillstyle(self, fillstyle): raise ValueError("Unrecognized fillstyle %s" % ' '.join(self.fillstyles)) self._fillstyle = fillstyle - self._recache() + # do not call _recache() if marker is not yet set up + if self._marker is not None: + self._recache() def get_joinstyle(self): return self._joinstyle From d24f2d5441d521e3e5c6bffb0bd295df7b9b924f Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Wed, 6 Jul 2016 01:16:05 +0300 Subject: [PATCH 2/4] Pass `marker` and `fillstyle` to `MarkerStyle` constructor --- lib/matplotlib/lines.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 0ded319aacf9..5c7b1ed6dbd8 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -370,8 +370,7 @@ def __init__(self, xdata, ydata, self._color = None self.set_color(color) - self._marker = MarkerStyle() - self.set_marker(marker) + self._marker = MarkerStyle(marker, fillstyle) self._markevery = None self._markersize = None @@ -391,8 +390,6 @@ def __init__(self, xdata, ydata, self.set_markeredgecolor(markeredgecolor) self.set_markeredgewidth(markeredgewidth) - self.set_fillstyle(fillstyle) - self.verticalOffset = None # update kwargs before updating data to give the caller a From 246081ff8d3b2b6b5b1964062a856f21f77d1330 Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Wed, 6 Jul 2016 01:38:19 +0300 Subject: [PATCH 3/4] Do not call `_recache` in `MarkerStyle.__setstate__` Because `set_marker` calls it by itself --- lib/matplotlib/markers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/matplotlib/markers.py b/lib/matplotlib/markers.py index 882c4e66676e..0ebbe7b4c72e 100644 --- a/lib/matplotlib/markers.py +++ b/lib/matplotlib/markers.py @@ -190,7 +190,6 @@ def __getstate__(self): def __setstate__(self, statedict): self.__dict__ = statedict self.set_marker(self._marker) - self._recache() def _recache(self): self._path = _empty_path From 486ce4dd13ade8df2d8d994b71b099a5602e6f22 Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Wed, 6 Jul 2016 19:27:56 +0300 Subject: [PATCH 4/4] Reworked solution for double `_recache()` call elimination --- lib/matplotlib/markers.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/matplotlib/markers.py b/lib/matplotlib/markers.py index 0ebbe7b4c72e..b0ee5c51f077 100644 --- a/lib/matplotlib/markers.py +++ b/lib/matplotlib/markers.py @@ -175,10 +175,7 @@ def __init__(self, marker=None, fillstyle=None): fillstyle : string, optional, default: 'full' 'full', 'left", 'right', 'bottom', 'top', 'none' """ - # The _recache() is called in both set_fillstyle() and set_marker() - # methods that's why here we have to have either marker or fillstyle - # preinitialized before setting other. - self._marker = None + self._marker_function = None self.set_fillstyle(fillstyle) self.set_marker(marker) @@ -192,6 +189,8 @@ def __setstate__(self, statedict): self.set_marker(self._marker) def _recache(self): + if self._marker_function is None: + return self._path = _empty_path self._transform = IdentityTransform() self._alt_path = None @@ -229,9 +228,7 @@ def set_fillstyle(self, fillstyle): raise ValueError("Unrecognized fillstyle %s" % ' '.join(self.fillstyles)) self._fillstyle = fillstyle - # do not call _recache() if marker is not yet set up - if self._marker is not None: - self._recache() + self._recache() def get_joinstyle(self): return self._joinstyle