From 2a8576904814012e0d3be89079ae625f2f3c5248 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 09:42:48 -0500 Subject: [PATCH 01/19] adds encoding as a function parameter --- 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 7d54994c1c61..298b7f5e4497 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -36,10 +36,11 @@ class ValidateInStrings: - def __init__(self, key, valid, ignorecase=False): + def __init__(self, key, valid, ignorecase=False, encoding='utf-8'): 'valid is a list of legal strings' self.key = key self.ignorecase = ignorecase + self.encoding = encoding def func(s): if ignorecase: From b300ef34ec0e9d03d7f5711de10f316f67a92e9d Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 10:04:23 -0500 Subject: [PATCH 02/19] when dealing with unicode strings, isinstance(u, basestring) will return True for either bytestrings or unicode strings. So, in order to allow unicode in the matplotlibrc, we need to use this typechecking rather than the former (which was type(s) is string ) --- lib/matplotlib/rcsetup.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 298b7f5e4497..44ab5268d5f0 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -72,7 +72,7 @@ def validate_path_exists(s): def validate_bool(b): """Convert b to a boolean or raise""" - if type(b) is str: + if isinstance(b, basestring): b = b.lower() if b in ('t', 'y', 'yes', 'on', 'true', '1', 1, True): return True @@ -83,8 +83,8 @@ def validate_bool(b): def validate_bool_maybe_none(b): - 'Convert b to a boolean or raise' - if type(b) is str: + """Convert b to a boolean, None, or raise""" + if isinstance(b, basestring): b = b.lower() if b == 'none': return None @@ -179,7 +179,7 @@ def __init__(self, n): def __call__(self, s): """return a seq of n floats or raise""" - if type(s) is str: + if isinstance(s, basestring): ss = s.split(',') if len(ss) != self.n: raise ValueError( @@ -202,7 +202,7 @@ def __init__(self, n): def __call__(self, s): """return a seq of n ints or raise""" - if type(s) is str: + if isinstance(s, basestring): ss = s.split(',') if len(ss) != self.n: raise ValueError( @@ -254,7 +254,7 @@ def validate_color(s): def validate_colorlist(s): 'return a list of colorspecs' - if type(s) is str: + if isinstance(s, basestring): return [validate_color(c.strip()) for c in s.split(',')] else: assert type(s) in [list, tuple] @@ -263,7 +263,7 @@ def validate_colorlist(s): def validate_stringlist(s): 'return a list' - if type(s) in (str, unicode): + if isinstance(s, basestring): return [v.strip() for v in s.split(',')] else: assert type(s) in [list, tuple] @@ -284,7 +284,7 @@ def validate_aspect(s): def validate_fontsize(s): - if type(s) is str: + if isinstance(s, basestring): s = s.lower() if s in ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'smaller', 'larger']: @@ -337,7 +337,7 @@ def update_savefig_format(value): def validate_ps_distiller(s): - if type(s) is str: + if isinstance(s, basestring): s = s.lower() if s in ('none', None): @@ -423,7 +423,7 @@ def validate_hinting(s): def validate_bbox(s): - if type(s) is str: + if isinstance(s, basestring): s = s.lower() if s == 'tight': return s From aede1207fe3f6dd907f917b07dd3a0ce6bb1ba6b Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 12:13:14 -0500 Subject: [PATCH 03/19] undid enccoding parameter. This can be added later if the encoding gets passed along with the file sometime. --- lib/matplotlib/rcsetup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 58e75f5a2fd7..55ef4f03d115 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -36,11 +36,10 @@ class ValidateInStrings: - def __init__(self, key, valid, ignorecase=False, encoding='utf-8'): + def __init__(self, key, valid, ignorecase=False): 'valid is a list of legal strings' self.key = key self.ignorecase = ignorecase - self.encoding = encoding def func(s): if ignorecase: From 55475a0dfa3698bffd938d5099f07e79aaae42ee Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 13:54:45 -0500 Subject: [PATCH 04/19] adds a test file and a template rc file for the rc_setup tests. --- lib/matplotlib/tests/test_rcsetup.py | 26 ++ lib/matplotlib/tests/test_rctemplate.rc | 466 ++++++++++++++++++++++++ 2 files changed, 492 insertions(+) create mode 100644 lib/matplotlib/tests/test_rcsetup.py create mode 100644 lib/matplotlib/tests/test_rctemplate.rc diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py new file mode 100644 index 000000000000..130cc6f46aa5 --- /dev/null +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -0,0 +1,26 @@ +import os + +import matplotlib as mpl +from matplotlib.tests import assert_str_equal + +templaterc = os.path.join(os.path.dirname(__file__), 'test_rctemplate.rc') + +def test_defaults(): + for k, v in mpl.rcsetup.defaultParams.iteritems(): + assert mpl.rcParams[k] == v[0] + +def test_template(): + # the current matplotlibrc.template should validate successfully + try: + mpl.rc_file(templaterc) + for k, v in templateParams.iteritems(): + assert mpl.rcParams[k] == v[0] + +def test_unicode(): + for k, v in mpl.rcsetup.defaultParams.iteritems(): + v[1](unicode(v[0])) + assert mpl.rcParams[k] == v[0] + +if __name__ == '__main__': + import nose + nose.runmodule(argv=['-s', '--with-doctest'], exit=False) diff --git a/lib/matplotlib/tests/test_rctemplate.rc b/lib/matplotlib/tests/test_rctemplate.rc new file mode 100644 index 000000000000..10558321c2f4 --- /dev/null +++ b/lib/matplotlib/tests/test_rctemplate.rc @@ -0,0 +1,466 @@ +### MATPLOTLIBRC FORMAT + +# This is a sample matplotlib configuration file - you can find a copy +# of it on your system in +# site-packages/matplotlib/mpl-data/matplotlibrc. If you edit it +# there, please note that it will be overwritten in your next install. +# If you want to keep a permanent local copy that will not be +# overwritten, place it in HOME/.matplotlib/matplotlibrc (unix/linux +# like systems) and C:\Documents and Settings\yourname\.matplotlib +# (win32 systems). +# +# This file is best viewed in a editor which supports python mode +# syntax highlighting. Blank lines, or lines starting with a comment +# symbol, are ignored, as are trailing comments. Other lines must +# have the format +# key : val # optional comment +# +# Colors: for the color values below, you can either use - a +# matplotlib color string, such as r, k, or b - an rgb tuple, such as +# (1.0, 0.5, 0.0) - a hex string, such as ff00ff or #ff00ff - a scalar +# grayscale intensity such as 0.75 - a legal html color name, eg red, +# blue, darkslategray + +#### CONFIGURATION BEGINS HERE + +# the default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo +# CocoaAgg MacOSX Qt4Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG +# Template +# You can also deploy your own backend outside of matplotlib by +# referring to the module name (which must be in the PYTHONPATH) as +# 'module://my_backend' +backend : %(backend)s + +# If you are using the Qt4Agg backend, you can choose here +# to use the PyQt4 bindings or the newer PySide bindings to +# the underlying Qt4 toolkit. +#backend.qt4 : PyQt4 # PyQt4 | PySide + +# Note that this can be overridden by the environment variable +# QT_API used by Enthought Tool Suite (ETS); valid values are +# "pyqt" and "pyside". The "pyqt" setting has the side effect of +# forcing the use of Version 2 API for QString and QVariant. + +# The port to use for the web server in the WebAgg backend. +# webagg.port : 8888 + +# If webagg.port is unavailable, a number of other random ports will +# be tried until one that is available is found. +# webagg.port_retries : 50 + +# When True, open the webbrowser to the plot that is shown +# webagg.open_in_browser : True + +# if you are running pyplot inside a GUI and your backend choice +# conflicts, we will automatically try to find a compatible one for +# you if backend_fallback is True +#backend_fallback: True + +#interactive : False +#toolbar : toolbar2 # None | toolbar2 ("classic" is deprecated) +#timezone : UTC # a pytz timezone string, eg US/Central or Europe/Paris + +# Where your matplotlib data lives if you installed to a non-default +# location. This is where the matplotlib fonts, bitmaps, etc reside +#datapath : /home/jdhunter/mpldata + + +### LINES +# See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more +# information on line properties. +#lines.linewidth : 1.0 # line width in points +#lines.linestyle : - # solid line +#lines.color : blue # has no affect on plot(); see axes.color_cycle +#lines.marker : None # the default marker +#lines.markeredgewidth : 0.5 # the line width around the marker symbol +#lines.markersize : 6 # markersize, in points +#lines.dash_joinstyle : miter # miter|round|bevel +#lines.dash_capstyle : butt # butt|round|projecting +#lines.solid_joinstyle : miter # miter|round|bevel +#lines.solid_capstyle : projecting # butt|round|projecting +#lines.antialiased : True # render lines in antialised (no jaggies) + +### PATCHES +# Patches are graphical objects that fill 2D space, like polygons or +# circles. See +# http://matplotlib.org/api/artist_api.html#module-matplotlib.patches +# information on patch properties +#patch.linewidth : 1.0 # edge width in points +#patch.facecolor : blue +#patch.edgecolor : black +#patch.antialiased : True # render patches in antialised (no jaggies) + +### FONT +# +# font properties used by text.Text. See +# http://matplotlib.org/api/font_manager_api.html for more +# information on font properties. The 6 font properties used for font +# matching are given below with their default values. +# +# The font.family property has five values: 'serif' (e.g., Times), +# 'sans-serif' (e.g., Helvetica), 'cursive' (e.g., Zapf-Chancery), +# 'fantasy' (e.g., Western), and 'monospace' (e.g., Courier). Each of +# these font families has a default list of font names in decreasing +# order of priority associated with them. When text.usetex is False, +# font.family may also be one or more concrete font names. +# +# The font.style property has three values: normal (or roman), italic +# or oblique. The oblique style will be used for italic, if it is not +# present. +# +# The font.variant property has two values: normal or small-caps. For +# TrueType fonts, which are scalable fonts, small-caps is equivalent +# to using a font size of 'smaller', or about 83%% of the current font +# size. +# +# The font.weight property has effectively 13 values: normal, bold, +# bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as +# 400, and bold is 700. bolder and lighter are relative values with +# respect to the current weight. +# +# The font.stretch property has 11 values: ultra-condensed, +# extra-condensed, condensed, semi-condensed, normal, semi-expanded, +# expanded, extra-expanded, ultra-expanded, wider, and narrower. This +# property is not currently implemented. +# +# The font.size property is the default font size for text, given in pts. +# 12pt is the standard value. +# +#font.family : sans-serif +#font.style : normal +#font.variant : normal +#font.weight : medium +#font.stretch : normal +# note that font.size controls default text sizes. To configure +# special text sizes tick labels, axes, labels, title, etc, see the rc +# settings for axes and ticks. Special text sizes can be defined +# relative to font.size, using the following values: xx-small, x-small, +# small, medium, large, x-large, xx-large, larger, or smaller +#font.size : 12.0 +#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif +#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif +#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive +#font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy +#font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace + +### TEXT +# text properties used by text.Text. See +# http://matplotlib.org/api/artist_api.html#module-matplotlib.text for more +# information on text properties + +#text.color : black + +### LaTeX customizations. See http://www.scipy.org/Wiki/Cookbook/Matplotlib/UsingTex +#text.usetex : False # use latex for all text handling. The following fonts + # are supported through the usual rc parameter settings: + # new century schoolbook, bookman, times, palatino, + # zapf chancery, charter, serif, sans-serif, helvetica, + # avant garde, courier, monospace, computer modern roman, + # computer modern sans serif, computer modern typewriter + # If another font is desired which can loaded using the + # LaTeX \usepackage command, please inquire at the + # matplotlib mailing list +#text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling + # unicode strings. +#text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES + # AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP + # IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. + # preamble is a comma separated list of LaTeX statements + # that are included in the LaTeX document preamble. + # An example: + # text.latex.preamble : \usepackage{bm},\usepackage{euler} + # The following packages are always loaded with usetex, so + # beware of package collisions: color, geometry, graphicx, + # type1cm, textcomp. Adobe Postscript (PSSNFS) font packages + # may also be loaded, depending on your font settings + +#text.dvipnghack : None # some versions of dvipng don't handle alpha + # channel properly. Use True to correct + # and flush ~/.matplotlib/tex.cache + # before testing and False to force + # correction off. None will try and + # guess based on your dvipng version + +#text.hinting : 'auto' # May be one of the following: + # 'none': Perform no hinting + # 'auto': Use freetype's autohinter + # 'native': Use the hinting information in the + # font file, if available, and if your + # freetype library supports it + # 'either': Use the native hinting information, + # or the autohinter if none is available. + # For backward compatibility, this value may also be + # True === 'auto' or False === 'none'. +text.hinting_factor : 8 # Specifies the amount of softness for hinting in the + # horizontal direction. A value of 1 will hint to full + # pixels. A value of 2 will hint to half pixels etc. + +#text.antialiased : True # If True (default), the text will be antialiased. + # This only affects the Agg backend. + +# The following settings allow you to select the fonts in math mode. +# They map from a TeX font name to a fontconfig font pattern. +# These settings are only used if mathtext.fontset is 'custom'. +# Note that this "custom" mode is unsupported and may go away in the +# future. +#mathtext.cal : cursive +#mathtext.rm : serif +#mathtext.tt : monospace +#mathtext.it : serif:italic +#mathtext.bf : serif:bold +#mathtext.sf : sans +#mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix', + # 'stixsans' or 'custom' +#mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern + # fonts when a symbol can not be found in one of + # the custom math fonts. + +#mathtext.default : it # The default font to use for math. + # Can be any of the LaTeX font names, including + # the special name "regular" for the same font + # used in regular text. + +### AXES +# default face and edge color, default tick sizes, +# default fontsizes for ticklabels, and so on. See +# http://matplotlib.org/api/axes_api.html#module-matplotlib.axes +#axes.hold : True # whether to clear the axes by default on +#axes.facecolor : white # axes background color +#axes.edgecolor : black # axes edge color +#axes.linewidth : 1.0 # edge linewidth +#axes.grid : False # display grid or not +#axes.titlesize : large # fontsize of the axes title +#axes.labelsize : medium # fontsize of the x any y labels +#axes.labelweight : normal # weight of the x and y labels +#axes.labelcolor : black +#axes.axisbelow : False # whether axis gridlines and ticks are below + # the axes elements (lines, text, etc) +#axes.formatter.limits : -7, 7 # use scientific notation if log10 + # of the axis range is smaller than the + # first or larger than the second +#axes.formatter.use_locale : False # When True, format tick labels + # according to the user's locale. + # For example, use ',' as a decimal + # separator in the fr_FR locale. +#axes.formatter.use_mathtext : False # When True, use mathtext for scientific + # notation. +#axes.unicode_minus : True # use unicode for the minus symbol + # rather than hyphen. See + # http://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes +#axes.color_cycle : b, g, r, c, m, y, k # color cycle for plot lines + # as list of string colorspecs: + # single letter, long name, or + # web-style hex +#axes.xmargin : 0 # x margin. See `axes.Axes.margins` +#axes.ymargin : 0 # y margin See `axes.Axes.margins` + +#polaraxes.grid : True # display grid on polar axes +#axes3d.grid : True # display grid on 3d axes + +### TICKS +# see http://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick +#xtick.major.size : 4 # major tick size in points +#xtick.minor.size : 2 # minor tick size in points +#xtick.major.width : 0.5 # major tick width in points +#xtick.minor.width : 0.5 # minor tick width in points +#xtick.major.pad : 4 # distance to major tick label in points +#xtick.minor.pad : 4 # distance to the minor tick label in points +#xtick.color : k # color of the tick labels +#xtick.labelsize : medium # fontsize of the tick labels +#xtick.direction : in # direction: in, out, or inout + +#ytick.major.size : 4 # major tick size in points +#ytick.minor.size : 2 # minor tick size in points +#ytick.major.width : 0.5 # major tick width in points +#ytick.minor.width : 0.5 # minor tick width in points +#ytick.major.pad : 4 # distance to major tick label in points +#ytick.minor.pad : 4 # distance to the minor tick label in points +#ytick.color : k # color of the tick labels +#ytick.labelsize : medium # fontsize of the tick labels +#ytick.direction : in # direction: in, out, or inout + + +### GRIDS +#grid.color : black # grid color +#grid.linestyle : : # dotted +#grid.linewidth : 0.5 # in points +#grid.alpha : 1.0 # transparency, between 0.0 and 1.0 + +### Legend +#legend.fancybox : False # if True, use a rounded box for the + # legend, else a rectangle +#legend.isaxes : True +#legend.numpoints : 2 # the number of points in the legend line +#legend.fontsize : large +#legend.borderpad : 0.5 # border whitespace in fontsize units +#legend.markerscale : 1.0 # the relative size of legend markers vs. original +# the following dimensions are in axes coords +#legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize +#legend.handlelength : 2. # the length of the legend lines in fraction of fontsize +#legend.handleheight : 0.7 # the height of the legend handle in fraction of fontsize +#legend.handletextpad : 0.8 # the space between the legend line and legend text in fraction of fontsize +#legend.borderaxespad : 0.5 # the border between the axes and legend edge in fraction of fontsize +#legend.columnspacing : 2. # the border between the axes and legend edge in fraction of fontsize +#legend.shadow : False +#legend.frameon : True # whether or not to draw a frame around legend +#legend.scatterpoints : 3 # number of scatter points + +### FIGURE +# See http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure +#figure.figsize : 8, 6 # figure size in inches +#figure.dpi : 80 # figure dots per inch +#figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray +#figure.edgecolor : white # figure edgecolor +#figure.autolayout : False # When True, automatically adjust subplot + # parameters to make the plot fit the figure +#figure.max_open_warning : 20 # The maximum number of figures to open through + # the pyplot interface before emitting a warning. + # If less than one this feature is disabled. + +# The figure subplot parameters. All dimensions are a fraction of the +# figure width or height +#figure.subplot.left : 0.125 # the left side of the subplots of the figure +#figure.subplot.right : 0.9 # the right side of the subplots of the figure +#figure.subplot.bottom : 0.1 # the bottom of the subplots of the figure +#figure.subplot.top : 0.9 # the top of the subplots of the figure +#figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots +#figure.subplot.hspace : 0.2 # the amount of height reserved for white space between subplots + +### IMAGES +#image.aspect : equal # equal | auto | a number +#image.interpolation : bilinear # see help(imshow) for options +#image.cmap : jet # gray | jet etc... +#image.lut : 256 # the size of the colormap lookup table +#image.origin : upper # lower | upper +#image.resample : False + +### CONTOUR PLOTS +#contour.negative_linestyle : dashed # dashed | solid + +### Agg rendering +### Warning: experimental, 2008/10/10 +#agg.path.chunksize : 0 # 0 to disable; values in the range + # 10000 to 100000 can improve speed slightly + # and prevent an Agg rendering failure + # when plotting very large data sets, + # especially if they are very gappy. + # It may cause minor artifacts, though. + # A value of 20000 is probably a good + # starting point. +### SAVING FIGURES +#path.simplify : True # When True, simplify paths by removing "invisible" + # points to reduce file size and increase rendering + # speed +#path.simplify_threshold : 0.1 # The threshold of similarity below which + # vertices will be removed in the simplification + # process +#path.snap : True # When True, rectilinear axis-aligned paths will be snapped to + # the nearest pixel when certain criteria are met. When False, + # paths will never be snapped. +#path.sketch : None # May be none, or a 3-tuple of the form (scale, length, + # randomness). + # *scale* is the amplitude of the wiggle + # perpendicular to the line (in pixels). *length* + # is the length of the wiggle along the line (in + # pixels). *randomness* is the factor by which + # the length is randomly scaled. + +# the default savefig params can be different from the display params +# e.g., you may want a higher resolution, or to make the figure +# background white +#savefig.dpi : 100 # figure dots per inch +#savefig.facecolor : white # figure facecolor when saving +#savefig.edgecolor : white # figure edgecolor when saving +#savefig.format : png # png, ps, pdf, svg +#savefig.bbox : standard # 'tight' or 'standard'. +#savefig.pad_inches : 0.1 # Padding to be used when bbox is set to 'tight' +#savefig.jpeg_quality: 95 # when a jpeg is saved, the default quality parameter. +#savefig.directory : ~ # default directory in savefig dialog box, + # leave empty to always use current working directory + +# tk backend params +#tk.window_focus : False # Maintain shell focus for TkAgg + +# ps backend params +#ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10 +#ps.useafm : False # use of afm fonts, results in small files +#ps.usedistiller : False # can be: None, ghostscript or xpdf + # Experimental: may produce smaller files. + # xpdf intended for production of publication quality files, + # but requires ghostscript, xpdf and ps2eps +#ps.distiller.res : 6000 # dpi +#ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) + +# pdf backend params +#pdf.compression : 6 # integer from 0 to 9 + # 0 disables compression (good for debugging) +#pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) + +# svg backend params +#svg.image_inline : True # write raster image data directly into the svg file +#svg.image_noscale : False # suppress scaling of raster data embedded in SVG +#svg.fonttype : 'path' # How to handle SVG fonts: +# 'none': Assume fonts are installed on the machine where the SVG will be viewed. +# 'path': Embed characters as paths -- supported by most SVG renderers +# 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, +# Opera and Safari + +# docstring params +#docstring.hardcopy = False # set this when you want to generate hardcopy docstring + +# Set the verbose flags. This controls how much information +# matplotlib gives you at runtime and where it goes. The verbosity +# levels are: silent, helpful, debug, debug-annoying. Any level is +# inclusive of all the levels below it. If your setting is "debug", +# you'll get all the debug and helpful messages. When submitting +# problems to the mailing-list, please set verbose to "helpful" or "debug" +# and paste the output into your report. +# +# The "fileo" gives the destination for any calls to verbose.report. +# These objects can a filename, or a filehandle like sys.stdout. +# +# You can override the rc default verbosity from the command line by +# giving the flags --verbose-LEVEL where LEVEL is one of the legal +# levels, eg --verbose-helpful. +# +# You can access the verbose instance in your code +# from matplotlib import verbose. +#verbose.level : silent # one of silent, helpful, debug, debug-annoying +#verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr + +# Event keys to interact with figures/plots via keyboard. +# Customize these settings according to your needs. +# Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') + +#keymap.fullscreen : f # toggling +#keymap.home : h, r, home # home or reset mnemonic +#keymap.back : left, c, backspace # forward / backward keys to enable +#keymap.forward : right, v # left handed quick navigation +#keymap.pan : p # pan mnemonic +#keymap.zoom : o # zoom mnemonic +#keymap.save : s # saving current figure +#keymap.quit : ctrl+w, cmd+w # close the current figure +#keymap.grid : g # switching on/off a grid in current axes +#keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') +#keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') +#keymap.all_axes : a # enable all axes + +# Control location of examples data files +#examples.directory : '' # directory to look in for custom installation + +###ANIMATION settings +#animation.writer : ffmpeg # MovieWriter 'backend' to use +#animation.codec : mp4 # Codec to use for writing movie +#animation.bitrate: -1 # Controls size/quality tradeoff for movie. + # -1 implies let utility auto-determine +#animation.frame_format: 'png' # Controls frame format used by temp files +#animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path + # $PATH is searched +#animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg +#animation.avconv_path: 'avconv' # Path to avconv binary. Without full path + # $PATH is searched +#animation.avconv_args: '' # Additional arguments to pass to avconv +#animation.mencoder_path: 'mencoder' + # Path to mencoder binary. Without full path + # $PATH is searched +#animation.mencoder_args: '' # Additional arguments to pass to mencoder From 8df2f0b907c5cf61627aa5010a113f1760c6df02 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 15:49:44 -0500 Subject: [PATCH 05/19] default test passes. --- lib/matplotlib/rcsetup.py | 1 + lib/matplotlib/tests/test_rcsetup.py | 20 +++++++++++-------- .../{test_rctemplate.rc => test_rcsetup.rc} | 0 setupext.py | 3 ++- 4 files changed, 15 insertions(+), 9 deletions(-) rename lib/matplotlib/tests/{test_rctemplate.rc => test_rcsetup.rc} (100%) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 90cbf345e4fd..0033ffc52ec4 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -395,6 +395,7 @@ def validate_tkpythoninspect(s): def deprecate_svg_embed_char_paths(value): warnings.warn("svg.embed_char_paths is deprecated. Use " "svg.fonttype instead.") + return value validate_svg_fonttype = ValidateInStrings('fonttype', ['none', 'path', 'svgfont']) diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index 130cc6f46aa5..d6a156eb7d28 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -3,22 +3,26 @@ import matplotlib as mpl from matplotlib.tests import assert_str_equal -templaterc = os.path.join(os.path.dirname(__file__), 'test_rctemplate.rc') +templaterc = os.path.join(os.path.dirname(__file__), 'test_rcsetup.rc') def test_defaults(): - for k, v in mpl.rcsetup.defaultParams.iteritems(): - assert mpl.rcParams[k] == v[0] + # the default values should be successfully set by this class + deprecated = ['svg.embed_char_paths', 'savefig.extension'] + with mpl.rc_context(rc=mpl.rcsetup.defaultParams): + for k, v in mpl.rcsetup.defaultParams.iteritems(): + if k not in deprecated : + assert mpl.rcParams[k][0] == v[0] def test_template(): # the current matplotlibrc.template should validate successfully - try: - mpl.rc_file(templaterc) - for k, v in templateParams.iteritems(): - assert mpl.rcParams[k] == v[0] + mpl.rc_file(templaterc) + for k, v in templateParams.iteritems(): + assert mpl.rcParams[k] == v[0] def test_unicode(): + # unicode formatted valid strings should validate. for k, v in mpl.rcsetup.defaultParams.iteritems(): - v[1](unicode(v[0])) + assert k == v[1](unicode(v[0])) assert mpl.rcParams[k] == v[0] if __name__ == '__main__': diff --git a/lib/matplotlib/tests/test_rctemplate.rc b/lib/matplotlib/tests/test_rcsetup.rc similarity index 100% rename from lib/matplotlib/tests/test_rctemplate.rc rename to lib/matplotlib/tests/test_rcsetup.rc diff --git a/setupext.py b/setupext.py index 5cec57d1dc55..f33dddf33a85 100644 --- a/setupext.py +++ b/setupext.py @@ -611,7 +611,8 @@ def get_package_data(self): baseline_images + [ 'tests/mpltest.ttf', - 'tests/test_rcparams.rc' + 'tests/test_rcparams.rc', + 'tests/test_rcsetup.rc' ]} def get_install_requires(self): From 55d4b4448a8bab6951a27f163079a66f3571dec5 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 15:54:02 -0500 Subject: [PATCH 06/19] autopep8'd the test file. --- lib/matplotlib/tests/test_rcsetup.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index d6a156eb7d28..e201a5a8890b 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -4,24 +4,27 @@ from matplotlib.tests import assert_str_equal templaterc = os.path.join(os.path.dirname(__file__), 'test_rcsetup.rc') - + + def test_defaults(): # the default values should be successfully set by this class deprecated = ['svg.embed_char_paths', 'savefig.extension'] with mpl.rc_context(rc=mpl.rcsetup.defaultParams): for k, v in mpl.rcsetup.defaultParams.iteritems(): - if k not in deprecated : + if k not in deprecated: assert mpl.rcParams[k][0] == v[0] + def test_template(): # the current matplotlibrc.template should validate successfully mpl.rc_file(templaterc) for k, v in templateParams.iteritems(): assert mpl.rcParams[k] == v[0] + def test_unicode(): # unicode formatted valid strings should validate. - for k, v in mpl.rcsetup.defaultParams.iteritems(): + for k, v in mpl.rcsetup.defaultParams.iteritems(): assert k == v[1](unicode(v[0])) assert mpl.rcParams[k] == v[0] From 1cfedb9e52a87810e023594020e9d1f266fa0ada Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 16:24:25 -0500 Subject: [PATCH 07/19] The matplotlibrc template docstring.hardcopy must use a colon rather than the = that it currently uses. --- matplotlibrc.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matplotlibrc.template b/matplotlibrc.template index 00f9e2a56138..09d286a7bd28 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -406,7 +406,7 @@ backend : %(backend)s # Opera and Safari # docstring params -#docstring.hardcopy = False # set this when you want to generate hardcopy docstring +#docstring.hardcopy : False # set this when you want to generate hardcopy docstring # Set the verbose flags. This controls how much information # matplotlib gives you at runtime and where it goes. The verbosity From 09a24504a337ecdf5450e352a6cb849423b5cc80 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 17:11:06 -0500 Subject: [PATCH 08/19] because of commas, Impact and Western were being merged --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 0033ffc52ec4..73603ebf00e6 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -531,7 +531,7 @@ def __call__(self, s): validate_stringlist], 'font.cursive': [['Apple Chancery', 'Textile', 'Zapf Chancery', 'Sand', 'cursive'], validate_stringlist], - 'font.fantasy': [['Comic Sans MS', 'Chicago', 'Charcoal', 'Impact' + 'font.fantasy': [['Comic Sans MS', 'Chicago', 'Charcoal', 'Impact', 'Western', 'fantasy'], validate_stringlist], 'font.monospace': [['Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Andale Mono', 'Nimbus Mono L', 'Courier New', From 6d790279888055e419b2968a347c802699f6438b Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 17:12:41 -0500 Subject: [PATCH 09/19] uncomments the matplotlibrc template --- lib/matplotlib/tests/test_rcsetup.rc | 348 +++++++++++++-------------- 1 file changed, 174 insertions(+), 174 deletions(-) diff --git a/lib/matplotlib/tests/test_rcsetup.rc b/lib/matplotlib/tests/test_rcsetup.rc index 10558321c2f4..60eaacbf274d 100644 --- a/lib/matplotlib/tests/test_rcsetup.rc +++ b/lib/matplotlib/tests/test_rcsetup.rc @@ -29,12 +29,12 @@ # You can also deploy your own backend outside of matplotlib by # referring to the module name (which must be in the PYTHONPATH) as # 'module://my_backend' -backend : %(backend)s +backend : Agg # If you are using the Qt4Agg backend, you can choose here # to use the PyQt4 bindings or the newer PySide bindings to # the underlying Qt4 toolkit. -#backend.qt4 : PyQt4 # PyQt4 | PySide +backend.qt4 : PyQt4 # PyQt4 | PySide # Note that this can be overridden by the environment variable # QT_API used by Enthought Tool Suite (ETS); valid values are @@ -54,11 +54,11 @@ backend : %(backend)s # if you are running pyplot inside a GUI and your backend choice # conflicts, we will automatically try to find a compatible one for # you if backend_fallback is True -#backend_fallback: True +backend_fallback: True -#interactive : False -#toolbar : toolbar2 # None | toolbar2 ("classic" is deprecated) -#timezone : UTC # a pytz timezone string, eg US/Central or Europe/Paris +interactive : False +toolbar : toolbar2 # None | toolbar2 ("classic" is deprecated) +timezone : UTC # a pytz timezone string, eg US/Central or Europe/Paris # Where your matplotlib data lives if you installed to a non-default # location. This is where the matplotlib fonts, bitmaps, etc reside @@ -68,27 +68,27 @@ backend : %(backend)s ### LINES # See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more # information on line properties. -#lines.linewidth : 1.0 # line width in points -#lines.linestyle : - # solid line -#lines.color : blue # has no affect on plot(); see axes.color_cycle -#lines.marker : None # the default marker -#lines.markeredgewidth : 0.5 # the line width around the marker symbol -#lines.markersize : 6 # markersize, in points -#lines.dash_joinstyle : miter # miter|round|bevel -#lines.dash_capstyle : butt # butt|round|projecting -#lines.solid_joinstyle : miter # miter|round|bevel -#lines.solid_capstyle : projecting # butt|round|projecting -#lines.antialiased : True # render lines in antialised (no jaggies) +lines.linewidth : 1.0 # line width in points +lines.linestyle : - # solid line +lines.color : blue # has no affect on plot(); see axes.color_cycle +lines.marker : None # the default marker +lines.markeredgewidth : 0.5 # the line width around the marker symbol +lines.markersize : 6 # markersize, in points +lines.dash_joinstyle : miter # miter|round|bevel +lines.dash_capstyle : butt # butt|round|projecting +lines.solid_joinstyle : miter # miter|round|bevel +lines.solid_capstyle : projecting # butt|round|projecting +lines.antialiased : True # render lines in antialised (no jaggies) ### PATCHES # Patches are graphical objects that fill 2D space, like polygons or # circles. See # http://matplotlib.org/api/artist_api.html#module-matplotlib.patches # information on patch properties -#patch.linewidth : 1.0 # edge width in points -#patch.facecolor : blue -#patch.edgecolor : black -#patch.antialiased : True # render patches in antialised (no jaggies) +patch.linewidth : 1.0 # edge width in points +patch.facecolor : blue +patch.edgecolor : black +patch.antialiased : True # render patches in antialised (no jaggies) ### FONT # @@ -126,32 +126,32 @@ backend : %(backend)s # The font.size property is the default font size for text, given in pts. # 12pt is the standard value. # -#font.family : sans-serif -#font.style : normal -#font.variant : normal -#font.weight : medium -#font.stretch : normal +font.family : sans-serif +font.style : normal +font.variant : normal +font.weight : medium +font.stretch : normal # note that font.size controls default text sizes. To configure # special text sizes tick labels, axes, labels, title, etc, see the rc # settings for axes and ticks. Special text sizes can be defined # relative to font.size, using the following values: xx-small, x-small, # small, medium, large, x-large, xx-large, larger, or smaller -#font.size : 12.0 -#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif -#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif -#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive -#font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy -#font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace +font.size : 12.0 +font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif +font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif +font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive +font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy +font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace ### TEXT # text properties used by text.Text. See # http://matplotlib.org/api/artist_api.html#module-matplotlib.text for more # information on text properties -#text.color : black +text.color : black ### LaTeX customizations. See http://www.scipy.org/Wiki/Cookbook/Matplotlib/UsingTex -#text.usetex : False # use latex for all text handling. The following fonts +text.usetex : False # use latex for all text handling. The following fonts # are supported through the usual rc parameter settings: # new century schoolbook, bookman, times, palatino, # zapf chancery, charter, serif, sans-serif, helvetica, @@ -160,9 +160,9 @@ backend : %(backend)s # If another font is desired which can loaded using the # LaTeX \usepackage command, please inquire at the # matplotlib mailing list -#text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling +text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling # unicode strings. -#text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES +text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES # AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP # IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. # preamble is a comma separated list of LaTeX statements @@ -174,14 +174,14 @@ backend : %(backend)s # type1cm, textcomp. Adobe Postscript (PSSNFS) font packages # may also be loaded, depending on your font settings -#text.dvipnghack : None # some versions of dvipng don't handle alpha +text.dvipnghack : None # some versions of dvipng don't handle alpha # channel properly. Use True to correct # and flush ~/.matplotlib/tex.cache # before testing and False to force # correction off. None will try and # guess based on your dvipng version -#text.hinting : 'auto' # May be one of the following: +text.hinting : 'auto' # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the @@ -195,7 +195,7 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # horizontal direction. A value of 1 will hint to full # pixels. A value of 2 will hint to half pixels etc. -#text.antialiased : True # If True (default), the text will be antialiased. +text.antialiased : True # If True (default), the text will be antialiased. # This only affects the Agg backend. # The following settings allow you to select the fonts in math mode. @@ -203,19 +203,19 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # These settings are only used if mathtext.fontset is 'custom'. # Note that this "custom" mode is unsupported and may go away in the # future. -#mathtext.cal : cursive -#mathtext.rm : serif -#mathtext.tt : monospace -#mathtext.it : serif:italic -#mathtext.bf : serif:bold -#mathtext.sf : sans -#mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix', +mathtext.cal : cursive +mathtext.rm : serif +mathtext.tt : monospace +mathtext.it : serif:italic +mathtext.bf : serif:bold +mathtext.sf : sans +mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix', # 'stixsans' or 'custom' -#mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern +mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern # fonts when a symbol can not be found in one of # the custom math fonts. -#mathtext.default : it # The default font to use for math. +mathtext.default : it # The default font to use for math. # Can be any of the LaTeX font names, including # the special name "regular" for the same font # used in regular text. @@ -224,122 +224,122 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # default face and edge color, default tick sizes, # default fontsizes for ticklabels, and so on. See # http://matplotlib.org/api/axes_api.html#module-matplotlib.axes -#axes.hold : True # whether to clear the axes by default on -#axes.facecolor : white # axes background color -#axes.edgecolor : black # axes edge color -#axes.linewidth : 1.0 # edge linewidth -#axes.grid : False # display grid or not -#axes.titlesize : large # fontsize of the axes title -#axes.labelsize : medium # fontsize of the x any y labels -#axes.labelweight : normal # weight of the x and y labels -#axes.labelcolor : black -#axes.axisbelow : False # whether axis gridlines and ticks are below +axes.hold : True # whether to clear the axes by default on +axes.facecolor : white # axes background color +axes.edgecolor : black # axes edge color +axes.linewidth : 1.0 # edge linewidth +axes.grid : False # display grid or not +axes.titlesize : large # fontsize of the axes title +axes.labelsize : medium # fontsize of the x any y labels +axes.labelweight : normal # weight of the x and y labels +axes.labelcolor : black +axes.axisbelow : False # whether axis gridlines and ticks are below # the axes elements (lines, text, etc) -#axes.formatter.limits : -7, 7 # use scientific notation if log10 +axes.formatter.limits : -7, 7 # use scientific notation if log10 # of the axis range is smaller than the # first or larger than the second -#axes.formatter.use_locale : False # When True, format tick labels +axes.formatter.use_locale : False # When True, format tick labels # according to the user's locale. # For example, use ',' as a decimal # separator in the fr_FR locale. -#axes.formatter.use_mathtext : False # When True, use mathtext for scientific +axes.formatter.use_mathtext : False # When True, use mathtext for scientific # notation. -#axes.unicode_minus : True # use unicode for the minus symbol +axes.unicode_minus : True # use unicode for the minus symbol # rather than hyphen. See # http://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes -#axes.color_cycle : b, g, r, c, m, y, k # color cycle for plot lines +axes.color_cycle : b, g, r, c, m, y, k # color cycle for plot lines # as list of string colorspecs: # single letter, long name, or # web-style hex -#axes.xmargin : 0 # x margin. See `axes.Axes.margins` -#axes.ymargin : 0 # y margin See `axes.Axes.margins` +axes.xmargin : 0 # x margin. See `axes.Axes.margins` +axes.ymargin : 0 # y margin See `axes.Axes.margins` -#polaraxes.grid : True # display grid on polar axes -#axes3d.grid : True # display grid on 3d axes +polaraxes.grid : True # display grid on polar axes +axes3d.grid : True # display grid on 3d axes ### TICKS # see http://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick -#xtick.major.size : 4 # major tick size in points -#xtick.minor.size : 2 # minor tick size in points -#xtick.major.width : 0.5 # major tick width in points -#xtick.minor.width : 0.5 # minor tick width in points -#xtick.major.pad : 4 # distance to major tick label in points -#xtick.minor.pad : 4 # distance to the minor tick label in points -#xtick.color : k # color of the tick labels -#xtick.labelsize : medium # fontsize of the tick labels -#xtick.direction : in # direction: in, out, or inout - -#ytick.major.size : 4 # major tick size in points -#ytick.minor.size : 2 # minor tick size in points -#ytick.major.width : 0.5 # major tick width in points -#ytick.minor.width : 0.5 # minor tick width in points -#ytick.major.pad : 4 # distance to major tick label in points -#ytick.minor.pad : 4 # distance to the minor tick label in points -#ytick.color : k # color of the tick labels -#ytick.labelsize : medium # fontsize of the tick labels -#ytick.direction : in # direction: in, out, or inout +xtick.major.size : 4 # major tick size in points +xtick.minor.size : 2 # minor tick size in points +xtick.major.width : 0.5 # major tick width in points +xtick.minor.width : 0.5 # minor tick width in points +xtick.major.pad : 4 # distance to major tick label in points +xtick.minor.pad : 4 # distance to the minor tick label in points +xtick.color : k # color of the tick labels +xtick.labelsize : medium # fontsize of the tick labels +xtick.direction : in # direction: in, out, or inout + +ytick.major.size : 4 # major tick size in points +ytick.minor.size : 2 # minor tick size in points +ytick.major.width : 0.5 # major tick width in points +ytick.minor.width : 0.5 # minor tick width in points +ytick.major.pad : 4 # distance to major tick label in points +ytick.minor.pad : 4 # distance to the minor tick label in points +ytick.color : k # color of the tick labels +ytick.labelsize : medium # fontsize of the tick labels +ytick.direction : in # direction: in, out, or inout ### GRIDS -#grid.color : black # grid color -#grid.linestyle : : # dotted -#grid.linewidth : 0.5 # in points -#grid.alpha : 1.0 # transparency, between 0.0 and 1.0 +grid.color : black # grid color +grid.linestyle : : # dotted +grid.linewidth : 0.5 # in points +grid.alpha : 1.0 # transparency, between 0.0 and 1.0 ### Legend -#legend.fancybox : False # if True, use a rounded box for the +legend.fancybox : False # if True, use a rounded box for the # legend, else a rectangle -#legend.isaxes : True -#legend.numpoints : 2 # the number of points in the legend line -#legend.fontsize : large -#legend.borderpad : 0.5 # border whitespace in fontsize units -#legend.markerscale : 1.0 # the relative size of legend markers vs. original +legend.isaxes : True +legend.numpoints : 2 # the number of points in the legend line +legend.fontsize : large +legend.borderpad : 0.5 # border whitespace in fontsize units +legend.markerscale : 1.0 # the relative size of legend markers vs. original # the following dimensions are in axes coords -#legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize -#legend.handlelength : 2. # the length of the legend lines in fraction of fontsize -#legend.handleheight : 0.7 # the height of the legend handle in fraction of fontsize -#legend.handletextpad : 0.8 # the space between the legend line and legend text in fraction of fontsize -#legend.borderaxespad : 0.5 # the border between the axes and legend edge in fraction of fontsize -#legend.columnspacing : 2. # the border between the axes and legend edge in fraction of fontsize -#legend.shadow : False -#legend.frameon : True # whether or not to draw a frame around legend -#legend.scatterpoints : 3 # number of scatter points +legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize +legend.handlelength : 2. # the length of the legend lines in fraction of fontsize +legend.handleheight : 0.7 # the height of the legend handle in fraction of fontsize +legend.handletextpad : 0.8 # the space between the legend line and legend text in fraction of fontsize +legend.borderaxespad : 0.5 # the border between the axes and legend edge in fraction of fontsize +legend.columnspacing : 2. # the border between the axes and legend edge in fraction of fontsize +legend.shadow : False +legend.frameon : True # whether or not to draw a frame around legend +legend.scatterpoints : 3 # number of scatter points ### FIGURE # See http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure -#figure.figsize : 8, 6 # figure size in inches -#figure.dpi : 80 # figure dots per inch -#figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray -#figure.edgecolor : white # figure edgecolor -#figure.autolayout : False # When True, automatically adjust subplot +figure.figsize : 8, 6 # figure size in inches +figure.dpi : 80 # figure dots per inch +figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray +figure.edgecolor : white # figure edgecolor +figure.autolayout : False # When True, automatically adjust subplot # parameters to make the plot fit the figure -#figure.max_open_warning : 20 # The maximum number of figures to open through +figure.max_open_warning : 20 # The maximum number of figures to open through # the pyplot interface before emitting a warning. # If less than one this feature is disabled. # The figure subplot parameters. All dimensions are a fraction of the # figure width or height -#figure.subplot.left : 0.125 # the left side of the subplots of the figure -#figure.subplot.right : 0.9 # the right side of the subplots of the figure -#figure.subplot.bottom : 0.1 # the bottom of the subplots of the figure -#figure.subplot.top : 0.9 # the top of the subplots of the figure -#figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots -#figure.subplot.hspace : 0.2 # the amount of height reserved for white space between subplots +figure.subplot.left : 0.125 # the left side of the subplots of the figure +figure.subplot.right : 0.9 # the right side of the subplots of the figure +figure.subplot.bottom : 0.1 # the bottom of the subplots of the figure +figure.subplot.top : 0.9 # the top of the subplots of the figure +figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots +figure.subplot.hspace : 0.2 # the amount of height reserved for white space between subplots ### IMAGES -#image.aspect : equal # equal | auto | a number -#image.interpolation : bilinear # see help(imshow) for options -#image.cmap : jet # gray | jet etc... -#image.lut : 256 # the size of the colormap lookup table -#image.origin : upper # lower | upper -#image.resample : False +image.aspect : equal # equal | auto | a number +image.interpolation : bilinear # see help(imshow) for options +image.cmap : jet # gray | jet etc... +image.lut : 256 # the size of the colormap lookup table +image.origin : upper # lower | upper +image.resample : False ### CONTOUR PLOTS -#contour.negative_linestyle : dashed # dashed | solid +contour.negative_linestyle : dashed # dashed | solid ### Agg rendering ### Warning: experimental, 2008/10/10 -#agg.path.chunksize : 0 # 0 to disable; values in the range +agg.path.chunksize : 0 # 0 to disable; values in the range # 10000 to 100000 can improve speed slightly # and prevent an Agg rendering failure # when plotting very large data sets, @@ -348,16 +348,16 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # A value of 20000 is probably a good # starting point. ### SAVING FIGURES -#path.simplify : True # When True, simplify paths by removing "invisible" +path.simplify : True # When True, simplify paths by removing "invisible" # points to reduce file size and increase rendering # speed -#path.simplify_threshold : 0.1 # The threshold of similarity below which +path.simplify_threshold : 0.1 # The threshold of similarity below which # vertices will be removed in the simplification # process -#path.snap : True # When True, rectilinear axis-aligned paths will be snapped to +path.snap : True # When True, rectilinear axis-aligned paths will be snapped to # the nearest pixel when certain criteria are met. When False, # paths will never be snapped. -#path.sketch : None # May be none, or a 3-tuple of the form (scale, length, +path.sketch : None # May be none, or a 3-tuple of the form (scale, length, # randomness). # *scale* is the amplitude of the wiggle # perpendicular to the line (in pixels). *length* @@ -368,45 +368,45 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # the default savefig params can be different from the display params # e.g., you may want a higher resolution, or to make the figure # background white -#savefig.dpi : 100 # figure dots per inch -#savefig.facecolor : white # figure facecolor when saving -#savefig.edgecolor : white # figure edgecolor when saving -#savefig.format : png # png, ps, pdf, svg -#savefig.bbox : standard # 'tight' or 'standard'. -#savefig.pad_inches : 0.1 # Padding to be used when bbox is set to 'tight' -#savefig.jpeg_quality: 95 # when a jpeg is saved, the default quality parameter. -#savefig.directory : ~ # default directory in savefig dialog box, +savefig.dpi : 100 # figure dots per inch +savefig.facecolor : white # figure facecolor when saving +savefig.edgecolor : white # figure edgecolor when saving +savefig.format : png # png, ps, pdf, svg +savefig.bbox : standard # 'tight' or 'standard'. +savefig.pad_inches : 0.1 # Padding to be used when bbox is set to 'tight' +savefig.jpeg_quality: 95 # when a jpeg is saved, the default quality parameter. +savefig.directory : ~ # default directory in savefig dialog box, # leave empty to always use current working directory # tk backend params -#tk.window_focus : False # Maintain shell focus for TkAgg +tk.window_focus : False # Maintain shell focus for TkAgg # ps backend params -#ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10 -#ps.useafm : False # use of afm fonts, results in small files -#ps.usedistiller : False # can be: None, ghostscript or xpdf +ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10 +ps.useafm : False # use of afm fonts, results in small files +ps.usedistiller : False # can be: None, ghostscript or xpdf # Experimental: may produce smaller files. # xpdf intended for production of publication quality files, # but requires ghostscript, xpdf and ps2eps -#ps.distiller.res : 6000 # dpi -#ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) +ps.distiller.res : 6000 # dpi +ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) # pdf backend params -#pdf.compression : 6 # integer from 0 to 9 +pdf.compression : 6 # integer from 0 to 9 # 0 disables compression (good for debugging) -#pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) +pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) # svg backend params -#svg.image_inline : True # write raster image data directly into the svg file -#svg.image_noscale : False # suppress scaling of raster data embedded in SVG -#svg.fonttype : 'path' # How to handle SVG fonts: +svg.image_inline : True # write raster image data directly into the svg file +svg.image_noscale : False # suppress scaling of raster data embedded in SVG +svg.fonttype : 'path' # How to handle SVG fonts: # 'none': Assume fonts are installed on the machine where the SVG will be viewed. # 'path': Embed characters as paths -- supported by most SVG renderers # 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, # Opera and Safari # docstring params -#docstring.hardcopy = False # set this when you want to generate hardcopy docstring +docstring.hardcopy : False # set this when you want to generate hardcopy docstring # Set the verbose flags. This controls how much information # matplotlib gives you at runtime and where it goes. The verbosity @@ -425,42 +425,42 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # # You can access the verbose instance in your code # from matplotlib import verbose. -#verbose.level : silent # one of silent, helpful, debug, debug-annoying -#verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr +verbose.level : silent # one of silent, helpful, debug, debug-annoying +verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr # Event keys to interact with figures/plots via keyboard. # Customize these settings according to your needs. # Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') -#keymap.fullscreen : f # toggling -#keymap.home : h, r, home # home or reset mnemonic -#keymap.back : left, c, backspace # forward / backward keys to enable -#keymap.forward : right, v # left handed quick navigation -#keymap.pan : p # pan mnemonic -#keymap.zoom : o # zoom mnemonic -#keymap.save : s # saving current figure -#keymap.quit : ctrl+w, cmd+w # close the current figure -#keymap.grid : g # switching on/off a grid in current axes -#keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') -#keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') -#keymap.all_axes : a # enable all axes +keymap.fullscreen : f # toggling +keymap.home : h, r, home # home or reset mnemonic +keymap.back : left, c, backspace # forward / backward keys to enable +keymap.forward : right, v # left handed quick navigation +keymap.pan : p # pan mnemonic +keymap.zoom : o # zoom mnemonic +keymap.save : s # saving current figure +keymap.quit : ctrl+w, cmd+w # close the current figure +keymap.grid : g # switching on/off a grid in current axes +keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') +keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') +keymap.all_axes : a # enable all axes # Control location of examples data files -#examples.directory : '' # directory to look in for custom installation +examples.directory : '' # directory to look in for custom installation ###ANIMATION settings -#animation.writer : ffmpeg # MovieWriter 'backend' to use -#animation.codec : mp4 # Codec to use for writing movie -#animation.bitrate: -1 # Controls size/quality tradeoff for movie. +animation.writer : ffmpeg # MovieWriter 'backend' to use +animation.codec : mp4 # Codec to use for writing movie +animation.bitrate: -1 # Controls size/quality tradeoff for movie. # -1 implies let utility auto-determine -#animation.frame_format: 'png' # Controls frame format used by temp files -#animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path +animation.frame_format: 'png' # Controls frame format used by temp files +animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path # $PATH is searched -#animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg -#animation.avconv_path: 'avconv' # Path to avconv binary. Without full path +animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg +animation.avconv_path: 'avconv' # Path to avconv binary. Without full path # $PATH is searched -#animation.avconv_args: '' # Additional arguments to pass to avconv -#animation.mencoder_path: 'mencoder' +animation.avconv_args: '' # Additional arguments to pass to avconv +animation.mencoder_path: 'mencoder' # Path to mencoder binary. Without full path # $PATH is searched -#animation.mencoder_args: '' # Additional arguments to pass to mencoder +animation.mencoder_args: '' # Additional arguments to pass to mencoder From a41204d78671e561de826011a6e470105b4c459a Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 17:25:50 -0500 Subject: [PATCH 10/19] errors arose for some (but not all) of these parameters inside apostrophes. Removing the apostrophes seemed to work. I'm curious about why this occured for some but not all variables. Anyway, my test complained about these but not the others. --- lib/matplotlib/tests/test_rcsetup.py | 10 ++++++++-- lib/matplotlib/tests/test_rcsetup.rc | 6 +++--- matplotlibrc.template | 6 +++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index e201a5a8890b..fa4bfaaf0fc2 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -18,8 +18,14 @@ def test_defaults(): def test_template(): # the current matplotlibrc.template should validate successfully mpl.rc_file(templaterc) - for k, v in templateParams.iteritems(): - assert mpl.rcParams[k] == v[0] + with mpl.rc_context(fname=templaterc): + for k, v in mpl.rcsetup.defaultParams.iteritems(): + if mpl.rcParams[k] != v[0]: + print k + print v[0] + print mpl.rcParams[k] + print "---------------" + assert mpl.rcParams[k] == v[0] def test_unicode(): diff --git a/lib/matplotlib/tests/test_rcsetup.rc b/lib/matplotlib/tests/test_rcsetup.rc index 60eaacbf274d..02be727c55f7 100644 --- a/lib/matplotlib/tests/test_rcsetup.rc +++ b/lib/matplotlib/tests/test_rcsetup.rc @@ -181,7 +181,7 @@ text.dvipnghack : None # some versions of dvipng don't handle alpha # correction off. None will try and # guess based on your dvipng version -text.hinting : 'auto' # May be one of the following: +text.hinting : auto # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the @@ -399,7 +399,7 @@ pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) # svg backend params svg.image_inline : True # write raster image data directly into the svg file svg.image_noscale : False # suppress scaling of raster data embedded in SVG -svg.fonttype : 'path' # How to handle SVG fonts: +svg.fonttype : path # How to handle SVG fonts: # 'none': Assume fonts are installed on the machine where the SVG will be viewed. # 'path': Embed characters as paths -- supported by most SVG renderers # 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, @@ -453,7 +453,7 @@ animation.writer : ffmpeg # MovieWriter 'backend' to use animation.codec : mp4 # Codec to use for writing movie animation.bitrate: -1 # Controls size/quality tradeoff for movie. # -1 implies let utility auto-determine -animation.frame_format: 'png' # Controls frame format used by temp files +animation.frame_format: png # Controls frame format used by temp files animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path # $PATH is searched animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg diff --git a/matplotlibrc.template b/matplotlibrc.template index 09d286a7bd28..6e2765ea1788 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -181,7 +181,7 @@ backend : %(backend)s # correction off. None will try and # guess based on your dvipng version -#text.hinting : 'auto' # May be one of the following: +#text.hinting : auto # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the @@ -399,7 +399,7 @@ backend : %(backend)s # svg backend params #svg.image_inline : True # write raster image data directly into the svg file #svg.image_noscale : False # suppress scaling of raster data embedded in SVG -#svg.fonttype : 'path' # How to handle SVG fonts: +#svg.fonttype : path # How to handle SVG fonts: # 'none': Assume fonts are installed on the machine where the SVG will be viewed. # 'path': Embed characters as paths -- supported by most SVG renderers # 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, @@ -453,7 +453,7 @@ backend : %(backend)s #animation.codec : mp4 # Codec to use for writing movie #animation.bitrate: -1 # Controls size/quality tradeoff for movie. # -1 implies let utility auto-determine -#animation.frame_format: 'png' # Controls frame format used by temp files +#animation.frame_format: png # Controls frame format used by temp files #animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path # $PATH is searched #animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg From 384062314076a0e48885d62336cb7419fe1ca10c Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 17:43:35 -0500 Subject: [PATCH 11/19] The matplotlibrc should match the default, which is (f, ctrl+f) --- matplotlibrc.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matplotlibrc.template b/matplotlibrc.template index 6e2765ea1788..8180cf713b1d 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -432,7 +432,7 @@ backend : %(backend)s # Customize these settings according to your needs. # Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') -#keymap.fullscreen : f # toggling +#keymap.fullscreen : f, ctrl+f # toggling #keymap.home : h, r, home # home or reset mnemonic #keymap.back : left, c, backspace # forward / backward keys to enable #keymap.forward : right, v # left handed quick navigation From 10425446bf21438d3259285b67173b1502836930 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 21:58:30 -0500 Subject: [PATCH 12/19] template test passes. --- lib/matplotlib/rcsetup.py | 92 +++++++++++++++------------- lib/matplotlib/tests/test_rcsetup.py | 23 ++++--- lib/matplotlib/tests/test_rcsetup.rc | 53 ++++++++-------- 3 files changed, 88 insertions(+), 80 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 73603ebf00e6..30f5a1bcc2f2 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -259,10 +259,15 @@ def validate_colorlist(s): return [validate_color(c) for c in s] +def validate_string(s): + 'return a clean string' + assert isinstance(s, basestring) + return s.strip("'").strip() + def validate_stringlist(s): 'return a list' if type(s) in (str, unicode): - return [v.strip() for v in s.split(',')] + return [validate_string(v) for v in s.split(',')] else: assert type(s) in [list, tuple] return [str(v) for v in s] @@ -402,11 +407,13 @@ def deprecate_svg_embed_char_paths(value): def validate_hinting(s): - if s in (True, False): - return s - if s.lower() in ('auto', 'native', 'either', 'none'): - return s.lower() - raise ValueError("hinting should be 'auto', 'native', 'either' or 'none'") + try : + return validate_bool(s) + except ValueError : + if s.lower() in ('auto', 'native', 'either', 'none'): + return s.lower() + else : + raise ValueError("hinting should be 'auto', 'native', 'either' or 'none'") validate_pgf_texsystem = ValidateInStrings('pgf.texsystem', ['xelatex', 'lualatex', 'pdflatex']) @@ -495,7 +502,7 @@ def __call__(self, s): # line props 'lines.linewidth': [1.0, validate_float], # line width in points 'lines.linestyle': ['-', str], # solid line - 'lines.color': ['b', validate_color], # blue + 'lines.color': ['blue', validate_color], # b=blue 'lines.marker': ['None', str], # black 'lines.markeredgewidth': [0.5, validate_float], 'lines.markersize': [6, validate_float], # markersize, in points @@ -507,17 +514,17 @@ def __call__(self, s): ## patch props 'patch.linewidth': [1.0, validate_float], # line width in points - 'patch.edgecolor': ['k', validate_color], # black - 'patch.facecolor': ['b', validate_color], # blue + 'patch.edgecolor': ['black', validate_color], # k=black + 'patch.facecolor': ['blue', validate_color], # b=blue 'patch.antialiased': [True, validate_bool], # antialised (no jaggies) ## font props - 'font.family': ['sans-serif', validate_stringlist], # used by text object - 'font.style': ['normal', str], - 'font.variant': ['normal', str], - 'font.stretch': ['normal', str], - 'font.weight': ['normal', str], + 'font.family': ['sans-serif', validate_string], # used by text object + 'font.style': ['normal', validate_string], + 'font.variant': ['normal', validate_string], + 'font.stretch': ['normal', validate_string], + 'font.weight': ['normal', validate_string], 'font.size': [12, validate_float], # Base font size in points 'font.serif': [['Bitstream Vera Serif', 'DejaVu Serif', 'New Century Schoolbook', 'Century Schoolbook L', @@ -539,7 +546,7 @@ def __call__(self, s): validate_stringlist], # text props - 'text.color': ['k', validate_color], # black + 'text.color': ['black', validate_color], # k=black 'text.usetex': [False, validate_bool], 'text.latex.unicode': [False, validate_bool], 'text.latex.preamble': [[''], validate_stringlist], @@ -554,7 +561,7 @@ def __call__(self, s): 'mathtext.tt': ['monospace', validate_font_properties], 'mathtext.it': ['serif:italic', validate_font_properties], 'mathtext.bf': ['serif:bold', validate_font_properties], - 'mathtext.sf': ['sans\-serif', validate_font_properties], + 'mathtext.sf': ['sans', validate_font_properties], 'mathtext.fontset': ['cm', validate_fontset], 'mathtext.default': ['it', validate_mathtext_default], 'mathtext.fallback_to_cm': [True, validate_bool], @@ -572,8 +579,8 @@ def __call__(self, s): # axes props 'axes.axisbelow': [False, validate_bool], 'axes.hold': [True, validate_bool], - 'axes.facecolor': ['w', validate_color], # background color; white - 'axes.edgecolor': ['k', validate_color], # edge color; black + 'axes.facecolor': ['white', validate_color], # background color; w=white + 'axes.edgecolor': ['black', validate_color], # edge color; k=black 'axes.linewidth': [1.0, validate_float], # edge linewidth 'axes.titlesize': ['large', validate_fontsize], # fontsize of the # axes title @@ -581,7 +588,7 @@ def __call__(self, s): 'axes.labelsize': ['medium', validate_fontsize], # fontsize of the # x any y labels 'axes.labelweight': ['normal', str], # fontsize of the x any y labels - 'axes.labelcolor': ['k', validate_color], # color of axis label + 'axes.labelcolor': ['black', validate_color], # color of axis label 'axes.formatter.limits': [[-7, 7], validate_nseq_int(2)], # use scientific notation if log10 # of the axis range is smaller than the @@ -666,7 +673,7 @@ def __call__(self, s): 'ytick.labelsize': ['medium', validate_fontsize], 'ytick.direction': ['in', str], # direction of yticks - 'grid.color': ['k', validate_color], # grid color + 'grid.color': ['black', validate_color], # grid color 'grid.linestyle': [':', str], # dotted 'grid.linewidth': [0.5, validate_float], # in points 'grid.alpha': [1.0, validate_float], @@ -677,7 +684,7 @@ def __call__(self, s): 'figure.figsize': [[8.0, 6.0], validate_nseq_float(2)], 'figure.dpi': [80, validate_float], # DPI 'figure.facecolor': ['0.75', validate_color], # facecolor; scalar gray - 'figure.edgecolor': ['w', validate_color], # edgecolor; white + 'figure.edgecolor': ['white', validate_color], # edgecolor; w=white 'figure.frameon': [True, validate_bool], 'figure.autolayout': [False, validate_bool], 'figure.max_open_warning': [20, validate_int], @@ -697,8 +704,8 @@ def __call__(self, s): ## Saving figure's properties 'savefig.dpi': [100, validate_float], # DPI - 'savefig.facecolor': ['w', validate_color], # facecolor; white - 'savefig.edgecolor': ['w', validate_color], # edgecolor; white + 'savefig.facecolor': ['white', validate_color], # facecolor; w=white + 'savefig.edgecolor': ['white', validate_color], # edgecolor; w=white 'savefig.frameon': [True, validate_bool], 'savefig.orientation': ['portrait', validate_orientation], # edgecolor; #white @@ -753,53 +760,52 @@ def __call__(self, s): 'plugins.directory': ['.matplotlib_plugins', str], 'path.simplify': [True, validate_bool], - 'path.simplify_threshold': [1.0 / 9.0, ValidateInterval(0.0, 1.0)], + 'path.simplify_threshold': [0.1, ValidateInterval(0.0, 1.0)], 'path.snap': [True, validate_bool], 'path.sketch': [None, validate_sketch], 'path.effects': [[], validate_any], 'agg.path.chunksize': [0, validate_int], # 0 to disable chunking; # key-mappings (multi-character mappings should be a list/tuple) - 'keymap.fullscreen': [('f', 'ctrl+f'), validate_stringlist], + 'keymap.fullscreen': [['f', 'ctrl+f'], validate_stringlist], 'keymap.home': [['h', 'r', 'home'], validate_stringlist], 'keymap.back': [['left', 'c', 'backspace'], validate_stringlist], 'keymap.forward': [['right', 'v'], validate_stringlist], - 'keymap.pan': ['p', validate_stringlist], - 'keymap.zoom': ['o', validate_stringlist], - 'keymap.save': [('s', 'ctrl+s'), validate_stringlist], - 'keymap.quit': [('ctrl+w', 'cmd+w'), validate_stringlist], - 'keymap.grid': ['g', validate_stringlist], - 'keymap.yscale': ['l', validate_stringlist], + 'keymap.pan': [['p'], validate_stringlist], + 'keymap.zoom': [['o'], validate_stringlist], + 'keymap.save': [['s', 'ctrl+s'], validate_stringlist], + 'keymap.quit': [['ctrl+w', 'cmd+w'], validate_stringlist], + 'keymap.grid': [['g'], validate_stringlist], + 'keymap.yscale': [['l'], validate_stringlist], 'keymap.xscale': [['k', 'L'], validate_stringlist], - 'keymap.all_axes': ['a', validate_stringlist], + 'keymap.all_axes': [['a'], validate_stringlist], # sample data - 'examples.directory': ['', str], + 'examples.directory': ['', validate_string], # Animation settings 'animation.writer': ['ffmpeg', validate_movie_writer], - 'animation.codec': ['mpeg4', str], + 'animation.codec': ['mpeg4', validate_string], 'animation.bitrate': [-1, validate_int], # Controls image format when frames are written to disk 'animation.frame_format': ['png', validate_movie_frame_fmt], # Path to FFMPEG binary. If just binary name, subprocess uses $PATH. - 'animation.ffmpeg_path': ['ffmpeg', str], + 'animation.ffmpeg_path': ['ffmpeg', validate_string], ## Additional arguments for ffmpeg movie writer (using pipes) - 'animation.ffmpeg_args': ['', validate_stringlist], + 'animation.ffmpeg_args': [[''], validate_stringlist], # Path to AVConv binary. If just binary name, subprocess uses $PATH. - 'animation.avconv_path': ['avconv', str], + 'animation.avconv_path': ['avconv', validate_string], # Additional arguments for avconv movie writer (using pipes) - 'animation.avconv_args': ['', validate_stringlist], + 'animation.avconv_args': [[''], validate_stringlist], # Path to MENCODER binary. If just binary name, subprocess uses $PATH. - 'animation.mencoder_path': ['mencoder', str], + 'animation.mencoder_path': ['mencoder', validate_string], # Additional arguments for mencoder movie writer (using pipes) - 'animation.mencoder_args': ['', validate_stringlist], + 'animation.mencoder_args': [[''], validate_stringlist], # Path to convert binary. If just binary name, subprocess uses $PATH - 'animation.convert_path': ['convert', str], + 'animation.convert_path': ['convert', validate_string], # Additional arguments for mencoder movie writer (using pipes) - - 'animation.convert_args': ['', validate_stringlist]} + 'animation.convert_args': [[''], validate_stringlist]} if __name__ == '__main__': diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index fa4bfaaf0fc2..e166df28ef62 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -4,11 +4,10 @@ from matplotlib.tests import assert_str_equal templaterc = os.path.join(os.path.dirname(__file__), 'test_rcsetup.rc') - +deprecated = ['svg.embed_char_paths', 'savefig.extension'] def test_defaults(): # the default values should be successfully set by this class - deprecated = ['svg.embed_char_paths', 'savefig.extension'] with mpl.rc_context(rc=mpl.rcsetup.defaultParams): for k, v in mpl.rcsetup.defaultParams.iteritems(): if k not in deprecated: @@ -17,16 +16,20 @@ def test_defaults(): def test_template(): # the current matplotlibrc.template should validate successfully - mpl.rc_file(templaterc) with mpl.rc_context(fname=templaterc): for k, v in mpl.rcsetup.defaultParams.iteritems(): - if mpl.rcParams[k] != v[0]: - print k - print v[0] - print mpl.rcParams[k] - print "---------------" - assert mpl.rcParams[k] == v[0] - + if k not in deprecated: + if mpl.rcParams[k] != v[0]: + print k + print "Expected : ", v[0] + print "Expected type", type(v[0]) + print "Actual : ", mpl.rcParams[k] + print "Actual type : ", type(mpl.rcParams[k]) + print "---------------" + if isinstance(v[0], basestring): + assert mpl.rcParams[k] in [v[0], v[0].lower()] + else : + assert mpl.rcParams[k] == v[0] def test_unicode(): # unicode formatted valid strings should validate. diff --git a/lib/matplotlib/tests/test_rcsetup.rc b/lib/matplotlib/tests/test_rcsetup.rc index 02be727c55f7..11450673dd9a 100644 --- a/lib/matplotlib/tests/test_rcsetup.rc +++ b/lib/matplotlib/tests/test_rcsetup.rc @@ -74,9 +74,9 @@ lines.color : blue # has no affect on plot(); see axes.color_cycle lines.marker : None # the default marker lines.markeredgewidth : 0.5 # the line width around the marker symbol lines.markersize : 6 # markersize, in points -lines.dash_joinstyle : miter # miter|round|bevel +lines.dash_joinstyle : round # miter|round|bevel lines.dash_capstyle : butt # butt|round|projecting -lines.solid_joinstyle : miter # miter|round|bevel +lines.solid_joinstyle : round # miter|round|bevel lines.solid_capstyle : projecting # butt|round|projecting lines.antialiased : True # render lines in antialised (no jaggies) @@ -129,7 +129,7 @@ patch.antialiased : True # render patches in antialised (no jaggies) font.family : sans-serif font.style : normal font.variant : normal -font.weight : medium +font.weight : normal font.stretch : normal # note that font.size controls default text sizes. To configure # special text sizes tick labels, axes, labels, title, etc, see the rc @@ -137,11 +137,11 @@ font.stretch : normal # relative to font.size, using the following values: xx-small, x-small, # small, medium, large, x-large, xx-large, larger, or smaller font.size : 12.0 -font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif -font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif +font.serif : Bitstream Vera Serif, DejaVu Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif +font.sans-serif : Bitstream Vera Sans, DejaVu Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy -font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace +font.monospace : Bitstream Vera Sans Mono, DejaVu Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace ### TEXT # text properties used by text.Text. See @@ -181,7 +181,7 @@ text.dvipnghack : None # some versions of dvipng don't handle alpha # correction off. None will try and # guess based on your dvipng version -text.hinting : auto # May be one of the following: +text.hinting : True # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the @@ -292,7 +292,7 @@ legend.fancybox : False # if True, use a rounded box for the legend.isaxes : True legend.numpoints : 2 # the number of points in the legend line legend.fontsize : large -legend.borderpad : 0.5 # border whitespace in fontsize units +legend.borderpad : 0.4 # border whitespace in fontsize units legend.markerscale : 1.0 # the relative size of legend markers vs. original # the following dimensions are in axes coords legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize @@ -351,7 +351,7 @@ agg.path.chunksize : 0 # 0 to disable; values in the range path.simplify : True # When True, simplify paths by removing "invisible" # points to reduce file size and increase rendering # speed -path.simplify_threshold : 0.1 # The threshold of similarity below which +path.simplify_threshold : 0.1 # The threshold of similarity below which # vertices will be removed in the simplification # process path.snap : True # When True, rectilinear axis-aligned paths will be snapped to @@ -432,35 +432,34 @@ verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr # Customize these settings according to your needs. # Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') -keymap.fullscreen : f # toggling +keymap.fullscreen : f, ctrl+f # toggling keymap.home : h, r, home # home or reset mnemonic keymap.back : left, c, backspace # forward / backward keys to enable keymap.forward : right, v # left handed quick navigation keymap.pan : p # pan mnemonic keymap.zoom : o # zoom mnemonic -keymap.save : s # saving current figure +keymap.save : s, ctrl+s # saving current figure keymap.quit : ctrl+w, cmd+w # close the current figure keymap.grid : g # switching on/off a grid in current axes keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') -keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') +keymap.xscale : k, L # toggle scaling of x-axes ('log'/'linear') keymap.all_axes : a # enable all axes # Control location of examples data files examples.directory : '' # directory to look in for custom installation ###ANIMATION settings -animation.writer : ffmpeg # MovieWriter 'backend' to use -animation.codec : mp4 # Codec to use for writing movie -animation.bitrate: -1 # Controls size/quality tradeoff for movie. - # -1 implies let utility auto-determine -animation.frame_format: png # Controls frame format used by temp files -animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path - # $PATH is searched -animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg -animation.avconv_path: 'avconv' # Path to avconv binary. Without full path - # $PATH is searched -animation.avconv_args: '' # Additional arguments to pass to avconv -animation.mencoder_path: 'mencoder' - # Path to mencoder binary. Without full path - # $PATH is searched -animation.mencoder_args: '' # Additional arguments to pass to mencoder +animation.writer : ffmpeg # MovieWriter 'backend' to use +animation.codec : mpeg4 # Codec to use for writing movie +animation.bitrate: -1 # Controls size/quality tradeoff for movie. + # -1 implies let utility auto-determine +animation.frame_format: png # Controls frame format used by temp files +animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path + # $PATH is searched +animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg +animation.avconv_path: 'avconv' # Path to avconv binary. Without full path + # $PATH is searched +animation.avconv_args: '' # Additional arguments to pass to avconv +animation.mencoder_path: 'mencoder' # Path to mencoder binary. Without full path + # $PATH is searched +animation.mencoder_args: '' # Additional arguments to pass to mencoder From be48e7d5a0a0a97ec48f57706971d5c6b4c7ec0f Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 21:59:26 -0500 Subject: [PATCH 13/19] got rid of print statements from debugging --- lib/matplotlib/tests/test_rcsetup.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index e166df28ef62..20b91d03c765 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -19,13 +19,6 @@ def test_template(): with mpl.rc_context(fname=templaterc): for k, v in mpl.rcsetup.defaultParams.iteritems(): if k not in deprecated: - if mpl.rcParams[k] != v[0]: - print k - print "Expected : ", v[0] - print "Expected type", type(v[0]) - print "Actual : ", mpl.rcParams[k] - print "Actual type : ", type(mpl.rcParams[k]) - print "---------------" if isinstance(v[0], basestring): assert mpl.rcParams[k] in [v[0], v[0].lower()] else : From 09bf2dd13936134181ff865bdbd1f92a791c0b26 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 22:03:47 -0500 Subject: [PATCH 14/19] unicode test runs --- lib/matplotlib/tests/test_rcsetup.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index 20b91d03c765..3479983ebfa1 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -27,8 +27,11 @@ def test_template(): def test_unicode(): # unicode formatted valid strings should validate. for k, v in mpl.rcsetup.defaultParams.iteritems(): - assert k == v[1](unicode(v[0])) - assert mpl.rcParams[k] == v[0] + if v[0] != v[1](unicode(v[0])): + print "Expected : ", v[0] + print "Actual : ", v[1](unicode(v[0])) + assert v[0] == v[1](unicode(v[0])) + if __name__ == '__main__': import nose From 1976db58cf4d071800c8de7453bf3c0661291f7d Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 22:25:52 -0500 Subject: [PATCH 15/19] unicode test passes --- lib/matplotlib/rcsetup.py | 4 +++- lib/matplotlib/tests/test_rcsetup.py | 13 ++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 23114812654a..45a273b2d79e 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -144,6 +144,7 @@ def validate_backend(s): else: return _validate_standard_backends(s) + validate_qt4 = ValidateInStrings('backend.qt4', ['PyQt4', 'PySide']) @@ -264,13 +265,14 @@ def validate_string(s): assert isinstance(s, basestring) return s.strip("'").strip() + def validate_stringlist(s): 'return a list' if isinstance(s, basestring): return [validate_string(v) for v in s.split(',')] else : assert type(s) in [list, tuple] - return [str(v) for v in s] + return [validate_string(v) for v in s] validate_orientation = ValidateInStrings( diff --git a/lib/matplotlib/tests/test_rcsetup.py b/lib/matplotlib/tests/test_rcsetup.py index 3479983ebfa1..85267ab92b48 100644 --- a/lib/matplotlib/tests/test_rcsetup.py +++ b/lib/matplotlib/tests/test_rcsetup.py @@ -25,12 +25,15 @@ def test_template(): assert mpl.rcParams[k] == v[0] def test_unicode(): - # unicode formatted valid strings should validate. + # unicode formatted valid strings should validate successfully for k, v in mpl.rcsetup.defaultParams.iteritems(): - if v[0] != v[1](unicode(v[0])): - print "Expected : ", v[0] - print "Actual : ", v[1](unicode(v[0])) - assert v[0] == v[1](unicode(v[0])) + if k not in deprecated: + if isinstance(v[0], basestring): + u = v[1](unicode(v[0])) + if u not in [v[0], v[0].lower()] : + print "Expected : ", v[0] + print "Actual : ", u + assert u in [v[0], v[0].lower()] if __name__ == '__main__': From 7302c31d46de0213dfd00f8aad1e39f3c2b38357 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 22:40:11 -0500 Subject: [PATCH 16/19] errant space. --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 45a273b2d79e..09ddea50e8ce 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -270,7 +270,7 @@ def validate_stringlist(s): 'return a list' if isinstance(s, basestring): return [validate_string(v) for v in s.split(',')] - else : + else: assert type(s) in [list, tuple] return [validate_string(v) for v in s] From febaa0d2a343b79291c61480b21966f55ed94966 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Sat, 29 Jun 2013 22:40:32 -0500 Subject: [PATCH 17/19] updates matplotlibrc.template to mat the defaults in the rcsetup module --- matplotlibrc.template | 49 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/matplotlibrc.template b/matplotlibrc.template index 8180cf713b1d..c2d767813731 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -74,9 +74,9 @@ backend : %(backend)s #lines.marker : None # the default marker #lines.markeredgewidth : 0.5 # the line width around the marker symbol #lines.markersize : 6 # markersize, in points -#lines.dash_joinstyle : miter # miter|round|bevel +#lines.dash_joinstyle : round # miter|round|bevel #lines.dash_capstyle : butt # butt|round|projecting -#lines.solid_joinstyle : miter # miter|round|bevel +#lines.solid_joinstyle : round # miter|round|bevel #lines.solid_capstyle : projecting # butt|round|projecting #lines.antialiased : True # render lines in antialised (no jaggies) @@ -129,7 +129,7 @@ backend : %(backend)s #font.family : sans-serif #font.style : normal #font.variant : normal -#font.weight : medium +#font.weight : normal #font.stretch : normal # note that font.size controls default text sizes. To configure # special text sizes tick labels, axes, labels, title, etc, see the rc @@ -137,11 +137,11 @@ backend : %(backend)s # relative to font.size, using the following values: xx-small, x-small, # small, medium, large, x-large, xx-large, larger, or smaller #font.size : 12.0 -#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif -#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif +#font.serif : Bitstream Vera Serif, DejaVu Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif +#font.sans-serif : Bitstream Vera Sans, DejaVu Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif #font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive #font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy -#font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace +#font.monospace : Bitstream Vera Sans Mono, DejaVu Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace ### TEXT # text properties used by text.Text. See @@ -181,7 +181,7 @@ backend : %(backend)s # correction off. None will try and # guess based on your dvipng version -#text.hinting : auto # May be one of the following: +#text.hinting : True # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the @@ -292,7 +292,7 @@ backend : %(backend)s #legend.isaxes : True #legend.numpoints : 2 # the number of points in the legend line #legend.fontsize : large -#legend.borderpad : 0.5 # border whitespace in fontsize units +#legend.borderpad : 0.4 # border whitespace in fontsize units #legend.markerscale : 1.0 # the relative size of legend markers vs. original # the following dimensions are in axes coords #legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize @@ -438,29 +438,28 @@ backend : %(backend)s #keymap.forward : right, v # left handed quick navigation #keymap.pan : p # pan mnemonic #keymap.zoom : o # zoom mnemonic -#keymap.save : s # saving current figure +#keymap.save : s, ctrl+s # saving current figure #keymap.quit : ctrl+w, cmd+w # close the current figure #keymap.grid : g # switching on/off a grid in current axes #keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') -#keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') +#keymap.xscale : k, L # toggle scaling of x-axes ('log'/'linear') #keymap.all_axes : a # enable all axes # Control location of examples data files #examples.directory : '' # directory to look in for custom installation ###ANIMATION settings -#animation.writer : ffmpeg # MovieWriter 'backend' to use -#animation.codec : mp4 # Codec to use for writing movie -#animation.bitrate: -1 # Controls size/quality tradeoff for movie. - # -1 implies let utility auto-determine -#animation.frame_format: png # Controls frame format used by temp files -#animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path - # $PATH is searched -#animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg -#animation.avconv_path: 'avconv' # Path to avconv binary. Without full path - # $PATH is searched -#animation.avconv_args: '' # Additional arguments to pass to avconv -#animation.mencoder_path: 'mencoder' - # Path to mencoder binary. Without full path - # $PATH is searched -#animation.mencoder_args: '' # Additional arguments to pass to mencoder +#animation.writer : ffmpeg # MovieWriter 'backend' to use +#animation.codec : mpeg4 # Codec to use for writing movie +#animation.bitrate: -1 # Controls size/quality tradeoff for movie. + # -1 implies let utility auto-determine +#animation.frame_format: png # Controls frame format used by temp files +#animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path + # $PATH is searched +#animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg +#animation.avconv_path: 'avconv' # Path to avconv binary. Without full path + # $PATH is searched +#animation.avconv_args: '' # Additional arguments to pass to avconv +#animation.mencoder_path: 'mencoder' # Path to mencoder binary. Without full path + # $PATH is searched +#animation.mencoder_args: '' # Additional arguments to pass to mencoder From 15b8b57ed8cd3d3b6f52bf0442dad28cf7741d77 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Tue, 2 Jul 2013 07:49:36 -0500 Subject: [PATCH 18/19] makes a proper docstring and removes the assert --- lib/matplotlib/rcsetup.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 09ddea50e8ce..b59883fb5462 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -261,9 +261,11 @@ def validate_colorlist(s): def validate_string(s): - 'return a clean string' - assert isinstance(s, basestring) - return s.strip("'").strip() + """if s is a string, returns a clean string, else raises a TypeError""" + if isinstance(s, basestring) : + return s.strip("'").strip() + else : + raise TypeError('%s should be a bytestring or unicode' % (s, msg)) def validate_stringlist(s): From 4ce865c5b77b23cb46e868068ce79d6c3c42cb18 Mon Sep 17 00:00:00 2001 From: Katy Huff Date: Tue, 2 Jul 2013 07:57:48 -0500 Subject: [PATCH 19/19] fixed typerror --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index b59883fb5462..90b208881d07 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -265,7 +265,7 @@ def validate_string(s): if isinstance(s, basestring) : return s.strip("'").strip() else : - raise TypeError('%s should be a bytestring or unicode' % (s, msg)) + raise TypeError('%s should be a bytestring or unicode' % (s)) def validate_stringlist(s):