1919import os
2020import inspect
2121import random
22- import re
23- import sys
2422import types
2523
2624# import the local copy of matplotlib, not the installed one
2725#sys.path.insert(0, './lib')
2826from matplotlib .axes import Axes
29- from matplotlib .cbook import dedent
3027
3128
3229# this is the magic line that must exist in pyplot, after which the boilerplate content will be
3734 'matplotlib' , 'pyplot.py' )
3835
3936
37+ AUTOGEN_MSG = """
38+ # This function was autogenerated by boilerplate.py. Do not edit as
39+ # changes will be lost"""
4040
41- def boilerplate_gen ():
42- """Generator of lines for the automated part of pyplot."""
4341
44- _fmtplot = """
45- # This function was autogenerated by boilerplate.py. Do not edit as
46- # changes will be lost
42+ PLOT_TEMPLATE = AUTOGEN_MSG + """
4743@autogen_docstring(Axes.%(func)s)
4844def %(func)s(%(argspec)s):
4945 %(ax)s = gca()
@@ -59,17 +55,38 @@ def %(func)s(%(argspec)s):
5955 %(ax)s.hold(%(washold)s)
6056 %(mappable)s
6157 return %(ret)s
62- """
63-
64- _fmtmisc = """
65- # This function was autogenerated by boilerplate.py. Do not edit as
66- # changes will be lost
58+ """
59+
60+
61+ # Used for misc functions such as cla/legend etc.
62+ MISC_FN_TEMPLATE = AUTOGEN_MSG + """
6763@docstring.copy_dedent(Axes.%(func)s)
6864def %(func)s(%(argspec)s):
6965 %(ret)s = gca().%(func)s(%(call)s)
7066 draw_if_interactive()
7167 return %(ret)s
72- """
68+ """
69+
70+
71+ # Used for colormap functions
72+ CMAP_TEMPLATE = AUTOGEN_MSG + """
73+ def {name}():
74+ '''
75+ set the default colormap to {name} and apply to current image if any.
76+ See help(colormaps) for more information
77+ '''
78+ rc('image', cmap='{name}')
79+ im = gci()
80+
81+ if im is not None:
82+ im.set_cmap(cm.{name})
83+ draw_if_interactive()
84+
85+ """
86+
87+
88+ def boilerplate_gen ():
89+ """Generator of lines for the automated part of pyplot."""
7390
7491 # these methods are all simple wrappers of Axes methods by the same
7592 # name.
@@ -168,17 +185,12 @@ def format_value(value):
168185 return '=mlab.' + value .func_name
169186 if value .func_name == 'mean' :
170187 return '=np.' + value .func_name
171- raise ValueError , ( 'default value %s unknown to boilerplate.formatvalue'
172- % value )
188+ raise ValueError (( 'default value %s unknown to boilerplate.' + \
189+ 'formatvalue' ) % value )
173190 return '=' + repr (value )
174191
175- def remove_final_whitespace (string ):
176- """
177- Return a copy of *string* with final whitespace removed from each line.
178- """
179- return '\n ' .join (x .rstrip () for x in string .split ('\n ' ))
180-
181- for fmt ,cmdlist in (_fmtplot ,_plotcommands ),(_fmtmisc ,_misccommands ):
192+ for fmt , cmdlist in [(PLOT_TEMPLATE , _plotcommands ),
193+ (MISC_FN_TEMPLATE , _misccommands )]:
182194 for func in cmdlist :
183195 # For some commands, an additional line is needed to set the
184196 # color map
@@ -201,13 +213,13 @@ def remove_final_whitespace(string):
201213 call .append ('**' + varkw )
202214 call = ', ' .join (call )
203215
204- # Add a hold keyword argument if needed (fmt is _fmtplot ) and
216+ # Add a hold keyword argument if needed (fmt is PLOT_TEMPLATE ) and
205217 # possible (if *args is used, we can't just add a hold
206218 # argument in front of it since it would gobble one of the
207219 # arguments the user means to pass via *args)
208220 if varargs :
209221 sethold = "hold = %(varkw)s.pop('hold', None)" % locals ()
210- elif fmt is _fmtplot :
222+ elif fmt is PLOT_TEMPLATE :
211223 args .append ('hold' )
212224 defaults = defaults + (None ,)
213225 sethold = ''
@@ -219,7 +231,7 @@ def remove_final_whitespace(string):
219231
220232 # A gensym-like facility in case some function takes an
221233 # argument named washold, ax, or ret
222- washold ,ret ,ax = 'washold' , 'ret' , 'ax'
234+ washold , ret , ax = 'washold' , 'ret' , 'ax'
223235 bad = set (args ) | set ((varargs , varkw ))
224236 while washold in bad or ret in bad or ax in bad :
225237 washold = 'washold' + str (random .randrange (10 ** 12 ))
@@ -230,29 +242,11 @@ def remove_final_whitespace(string):
230242 # bail out if they are used as argument names
231243 for reserved in ('gca' , 'gci' , 'draw_if_interactive' ):
232244 if reserved in bad :
233- raise ValueError , \
234- 'Axes method %s has kwarg named %s' % (func , reserved )
235-
236- yield remove_final_whitespace (fmt % locals ())
237-
238- # define the colormap functions
239- _fmtcmap = """
240- # This function was autogenerated by boilerplate.py. Do not edit as
241- # changes will be lost
242- def %(name)s():
243- '''
244- set the default colormap to %(name)s and apply to current image if any.
245- See help(colormaps) for more information
246- '''
247- rc('image', cmap='%(name)s')
248- im = gci()
249-
250- if im is not None:
251- im.set_cmap(cm.%(name)s)
252- draw_if_interactive()
253-
254- """
245+ msg = 'Axes method %s has kwarg named %s' % (func , reserved )
246+ raise ValueError (msg )
255247
248+ yield fmt % locals ()
249+
256250 cmaps = (
257251 'autumn' ,
258252 'bone' ,
@@ -272,22 +266,22 @@ def %(name)s():
272266 )
273267 # add all the colormaps (autumn, hsv, ....)
274268 for name in cmaps :
275- yield _fmtcmap % locals ( )
269+ yield CMAP_TEMPLATE . format ( name = name )
276270
277271
278272def build_pyplot ():
279273 pyplot_path = os .path .join (os .path .dirname (__file__ ), 'lib' ,
280274 'matplotlib' , 'pyplot.py' )
281275
282- pyplot_orig = file (pyplot_path , 'r' ).readlines ()
276+ pyplot_orig = open (pyplot_path , 'r' ).readlines ()
283277
284278
285279 try :
286280 pyplot_orig = pyplot_orig [:pyplot_orig .index (PYPLOT_MAGIC_HEADER )+ 1 ]
287281 except IndexError :
288282 raise ValueError ('The pyplot.py file *must* have the exact line: %s' % PYPLOT_MAGIC_HEADER )
289283
290- pyplot = file (pyplot_path , 'w' )
284+ pyplot = open (pyplot_path , 'w' )
291285 pyplot .writelines (pyplot_orig )
292286 pyplot .write ('\n ' )
293287
0 commit comments