Skip to content

Commit 0c62ae5

Browse files
committed
speedup figure rendering removal of .startswith() calls and use generators instead of for loops
1 parent 59e4ada commit 0c62ae5

File tree

3 files changed

+16
-23
lines changed

3 files changed

+16
-23
lines changed

lib/matplotlib/artist.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ def get_aliases(self):
892892
893893
"""
894894
names = [name for name in dir(self.o) if
895-
(name.startswith('set_') or name.startswith('get_'))
895+
(name[:4] in ['set_', 'get_'])
896896
and callable(getattr(self.o, name))]
897897
aliases = {}
898898
for name in names:
@@ -927,7 +927,7 @@ def get_valid_values(self, attr):
927927
if docstring is None:
928928
return 'unknown'
929929

930-
if docstring.startswith('alias for '):
930+
if docstring[:10] == 'alias for ':
931931
return None
932932

933933
match = self._get_valid_values_regex.search(docstring)
@@ -943,7 +943,7 @@ def _get_setters_and_targets(self):
943943

944944
setters = []
945945
for name in dir(self.o):
946-
if not name.startswith('set_'):
946+
if name[:4] != 'set_':
947947
continue
948948
o = getattr(self.o, name)
949949
if not callable(o):
@@ -975,7 +975,7 @@ def is_alias(self, o):
975975
ds = o.__doc__
976976
if ds is None:
977977
return False
978-
return ds.startswith('alias for ')
978+
return ds[:10] == 'alias for '
979979

980980
def aliased_name(self, s):
981981
"""

lib/matplotlib/axes/_axes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ def get_legend_handles_labels(self, legend_handler_map=None):
238238
labels = []
239239
for handle in self._get_legend_handles(legend_handler_map):
240240
label = handle.get_label()
241-
if label and not label.startswith('_'):
241+
if label and label[0] != '_':
242242
handles.append(handle)
243243
labels.append(label)
244244

@@ -5264,7 +5264,7 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None,
52645264

52655265
patches = []
52665266

5267-
if histtype.startswith('bar'):
5267+
if histtype[:3] == 'bar':
52685268
# Save autoscale state for later restoration; turn autoscaling
52695269
# off so we can do it all a single time at the end, instead
52705270
# of having it done by bar or fill and then having to be redone.
@@ -5326,7 +5326,7 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None,
53265326
self.set_autoscaley_on(_saved_autoscaley)
53275327
self.autoscale_view()
53285328

5329-
elif histtype.startswith('step'):
5329+
elif histtype[:4] == 'step':
53305330
# these define the perimeter of the polygon
53315331
x = np.zeros(4 * len(bins) - 3, np.float)
53325332
y = np.zeros(4 * len(bins) - 3, np.float)

lib/matplotlib/figure.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -972,17 +972,12 @@ def draw(self, renderer):
972972
self.patch.draw(renderer)
973973

974974
# a list of (zorder, func_to_call, list_of_args)
975-
dsu = []
975+
dsu = [(x.get_zorder(), x, x.draw, [renderer]) for x in self.patches ]
976976

977-
for a in self.patches:
978-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
979-
980-
for a in self.lines:
981-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
982-
983-
for a in self.artists:
984-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
977+
dsu.extend((x.get_zorder(), x, x.draw, [renderer]) for x in self.lines)
985978

979+
dsu.extend((x.get_zorder(), x, x.draw, [renderer]) for x in self.artists)
980+
986981
# override the renderer default if self.suppressComposite
987982
# is not None
988983
not_composite = renderer.option_image_nocomposite()
@@ -1018,19 +1013,17 @@ def draw_composite():
10181013
draw_composite, []))
10191014

10201015
# render the axes
1021-
for a in self.axes:
1022-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
1016+
dsu.extend((x.get_zorder(), x, x.draw, [renderer]) for x in self.axes)
10231017

10241018
# render the figure text
1025-
for a in self.texts:
1026-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
1019+
dsu.extend((x.get_zorder(), x, x.draw, [renderer]) for x in self.texts)
10271020

1028-
for a in self.legends:
1029-
dsu.append((a.get_zorder(), a, a.draw, [renderer]))
1021+
# render the figure legends
1022+
dsu.extend((x.get_zorder(), x, x.draw, [renderer]) for x in self.legends)
10301023

10311024
dsu = [row for row in dsu if not row[1].get_animated()]
10321025
dsu.sort(key=itemgetter(0))
1033-
for zorder, a, func, args in dsu:
1026+
for zorder, a, func, args in dsu: # this also needs to go away for speed
10341027
func(*args)
10351028

10361029
renderer.close_group('figure')

0 commit comments

Comments
 (0)