Revision: 6526
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6526&view=rev
Author: jdh2358
Date: 2008-12-08 23:28:55 +0000 (Mon, 08 Dec 2008)
Log Message:
-----------
add support for docstring.hardcopy to format the docstrings less verbosesly for
interactive use
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/doc/matplotlibrc
trunk/matplotlib/lib/matplotlib/artist.py
trunk/matplotlib/lib/matplotlib/rcsetup.py
trunk/matplotlib/matplotlibrc.template
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2008-12-08 23:27:08 UTC (rev 6525)
+++ trunk/matplotlib/CHANGELOG 2008-12-08 23:28:55 UTC (rev 6526)
@@ -1,3 +1,13 @@
+2008-12-08 Some of the changes Michael made to improve the output of
+ the property tables in the rest docs broke of made
+ difficult to use some of the interactive doc helpers, eg
+ setp and getp. Having all the rest markup in the ipython
+ shell also confused the docstrings. I added a new rc param
+ docstring.harcopy, to format the docstrings differently for
+ hardcopy and other use. Ther ArtistInspector could use a
+ little refactoring now since there is duplication of effort
+ between the rest out put and the non-rest output - JDH
+
2008-12-08 Updated spectral methods (psd, csd, etc.) to scale one-sided
densities by a factor of 2 and, optionally, scale all densities
by the sampling frequency. This gives better MatLab
Modified: trunk/matplotlib/doc/matplotlibrc
===================================================================
--- trunk/matplotlib/doc/matplotlibrc 2008-12-08 23:27:08 UTC (rev 6525)
+++ trunk/matplotlib/doc/matplotlibrc 2008-12-08 23:28:55 UTC (rev 6526)
@@ -294,6 +294,9 @@
#svg.image_noscale : False # suppress scaling of raster data embedded in
SVG
#svg.embed_chars : True # embed character outlines in the SVG file
+# docstring params
+docstring.hardcopy = True # 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
@@ -311,5 +314,6 @@
#
# 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
Modified: trunk/matplotlib/lib/matplotlib/artist.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/artist.py 2008-12-08 23:27:08 UTC (rev
6525)
+++ trunk/matplotlib/lib/matplotlib/artist.py 2008-12-08 23:28:55 UTC (rev
6526)
@@ -1,5 +1,6 @@
from __future__ import division
import re, warnings
+import matplotlib
import matplotlib.cbook as cbook
from transforms import Bbox, IdentityTransform, TransformedBbox,
TransformedPath
from path import Path
@@ -640,9 +641,12 @@
type) and it is your responsibility to make sure this is so.
"""
if cbook.iterable(o) and len(o): o = o[0]
+
+ self.oorig = o
if not isinstance(o, type):
o = type(o)
self.o = o
+
self.aliasd = self.get_aliases()
def get_aliases(self):
@@ -735,7 +739,7 @@
if ds is None: return False
return ds.startswith('alias for ')
- def aliased_name(self, s, target):
+ def aliased_name(self, s):
"""
return 'PROPNAME or alias' if *s* has an alias, else return
PROPNAME.
@@ -746,11 +750,28 @@
"""
if s in self.aliasd:
+ return s + ''.join([' or %s' % x for x in self.aliasd[s].keys()])
+ else:
+ return s
+
+
+ def aliased_name_rest(self, s, target):
+ """
+ return 'PROPNAME or alias' if *s* has an alias, else return
+ PROPNAME formatted for ReST
+
+ E.g. for the line markerfacecolor property, which has an
+ alias, return 'markerfacecolor or mfc' and for the transform
+ property, which does not, return 'transform'
+ """
+
+ if s in self.aliasd:
aliases = ''.join([' or %s' % x for x in self.aliasd[s].keys()])
else:
aliases = ''
return ':meth:`%s <%s>`%s' % (s, target, aliases)
+
def pprint_setters(self, prop=None, leadingspace=2):
"""
If *prop* is *None*, return a list of strings of all settable properies
@@ -772,8 +793,36 @@
attrs.sort()
lines = []
+ for prop, path in attrs:
+ accepts = self.get_valid_values(prop)
+ name = self.aliased_name(prop)
+
+ lines.append('%s%s: %s' %(pad, name, accepts))
+ return lines
+
+ def pprint_setters_rest(self, prop=None, leadingspace=2):
+ """
+ If *prop* is *None*, return a list of strings of all settable properies
+ and their valid values. Format the output for ReST
+
+ If *prop* is not *None*, it is a valid property name and that
+ property will be returned as a string of property : valid
+ values.
+ """
+ if leadingspace:
+ pad = ' '*leadingspace
+ else:
+ pad = ''
+ if prop is not None:
+ accepts = self.get_valid_values(prop)
+ return '%s%s: %s' %(pad, prop, accepts)
+
+ attrs = self._get_setters_and_targets()
+ attrs.sort()
+ lines = []
+
########
- names = [self.aliased_name(prop, target) for prop, target in attrs]
+ names = [self.aliased_name_rest(prop, target) for prop, target in
attrs]
accepts = [self.get_valid_values(prop) for prop, target in attrs]
col0_len = max([len(n) for n in names])
@@ -796,7 +845,7 @@
for prop, path in attrs:
accepts = self.get_valid_values(prop)
- name = self.aliased_name(prop, path)
+ name = self.aliased_name_rest(prop, path)
lines.append('%s%s: %s' %(pad, name, accepts))
return lines
@@ -805,20 +854,27 @@
"""
Return the getters and actual values as list of strings.
"""
- getters = [name for name in dir(self.o)
+
+ o = self.oorig
+ getters = [name for name in dir(o)
if name.startswith('get_')
- and callable(getattr(self.o, name))]
+ and callable(getattr(o, name))]
+ #print getters
getters.sort()
lines = []
for name in getters:
- func = getattr(self.o, name)
+ func = getattr(o, name)
if self.is_alias(func): continue
+
try: val = func()
except: continue
if getattr(val, 'shape', ()) != () and len(val)>6:
s = str(val[:6]) + '...'
else:
s = str(val)
+ s = s.replace('\n', ' ')
+ if len(s)>50:
+ s = s[:50] + '...'
name = self.aliased_name(name[4:])
lines.append(' %s = %s' %(name, s))
return lines
@@ -898,17 +954,17 @@
insp = ArtistInspector(o)
if property is None:
- print '\n'.join(insp.pprint_getters())
+ ret = insp.pprint_getters()
+ print '\n'.join(ret)
return
func = getattr(o, 'get_' + property)
+
return func()
-def get(o, *args, **kwargs):
- return getp(o, *args, **kwargs)
-get.__doc__ = getp.__doc__
+# alias
+get = getp
-
def setp(h, *args, **kwargs):
"""
matplotlib supports the use of :func:`setp` ("set property") and
@@ -984,7 +1040,11 @@
return [x for x in cbook.flatten(ret)]
def kwdoc(a):
- return '\n'.join(ArtistInspector(a).pprint_setters(leadingspace=2))
+ hardcopy = matplotlib.rcParams['docstring.hardcopy']
+ if hardcopy:
+ return
'\n'.join(ArtistInspector(a).pprint_setters_rest(leadingspace=2))
+ else:
+ return '\n'.join(ArtistInspector(a).pprint_setters(leadingspace=2))
kwdocd = dict()
kwdocd['Artist'] = kwdoc(Artist)
Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-12-08 23:27:08 UTC (rev
6525)
+++ trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-12-08 23:28:55 UTC (rev
6526)
@@ -511,6 +511,8 @@
'svg.image_inline' : [True, validate_bool], # write raster image data
directly into the svg file
'svg.image_noscale' : [False, validate_bool], # suppress scaling of
raster data embedded in SVG
'svg.embed_char_paths' : [True, validate_bool], # True to save all
characters as paths in the SVG
+
+ 'docstring.hardcopy' : [False, validate_bool], # set this when you want
to generate hardcopy docstring
'plugins.directory' : ['.matplotlib_plugins', str], # where plugin
directory is locate
'path.simplify' : [False, validate_bool],
Modified: trunk/matplotlib/matplotlibrc.template
===================================================================
--- trunk/matplotlib/matplotlibrc.template 2008-12-08 23:27:08 UTC (rev
6525)
+++ trunk/matplotlib/matplotlibrc.template 2008-12-08 23:28:55 UTC (rev
6526)
@@ -323,6 +323,9 @@
#svg.image_noscale : False # suppress scaling of raster data embedded in
SVG
#svg.embed_char_paths : True # embed character outlines in the SVG file
+# 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
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you. Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins