On Wed, Jul 22, 2009 at 8:15 AM, Jouni K. Seppänen<j...@iki.fi> wrote:

> I finally committed the "boilerplate" variant. It seems to pass the
> tests in pylab_examples, but now might be a good time for everyone to
> take a look to see if I have broken anything.

There is one problem, but I am not sure what the workaround is yet.
The doc strings in rest are broken, eg compare the pyplot Line2D
properties with the Axes equivalent:

  http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.loglog

vs

  
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.loglog

Both use the artist.kwdocs inspector to autogenerate the tables.
There is a rc param in doc/matplotlibrc which we use to force rest
formatting

  docstring.hardcopy : True  # set this when you want to generate
hardcopy docstring

which is False by default for src installs and True when we build the
docs.  Then in matplotlib.artist, we do

def kwdoc(a):
    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))

to format rest when making hardcopy.


Then we we interpolate into the docstring at runtime::

   # from Axes.loglog

    def loglog(self, *args, **kwargs):
        """
        ...snip

        The remaining valid kwargs are
        :class:`~matplotlib.lines.Line2D` properties:

        %(Line2D)s

        **Example:**

        .. plot:: mpl_examples/pylab_examples/log_demo.py

        """
        ...snip
        return l

    loglog.__doc__ = cbook.dedent(loglog.__doc__) % martist.kwdocd


we get plain text when hardcopy is False and rest when it is True.
Thus we have the best of both worlds from the interactive shell and on
the website and PDF.

It looks like you are interpolating the strings in in boilerplate,
when they should be left to be interpolated *at runtime* as we do in
the other modules.  Ie, it appears you are doing runtime interpolating
when you generate pyplot.py from boilerplate.py.   In the old version,
the interpolation of pyplot doc strings were deferred
until runtime, eg from older pyplot.py::

# This function was autogenerated by boilerplate.py.  Do not edit as
# changes will be lost
def loglog(*args, **kwargs):
    # allow callers to override the hold state by passing hold=True|False
    b = ishold()
    h = kwargs.pop('hold', None)
    if h is not None:
        hold(h)
    try:
        ret =  gca().loglog(*args, **kwargs)
        draw_if_interactive()
    except:
        hold(b)
        raise

    hold(b)
    return ret
if Axes.loglog.__doc__ is not None:
    loglog.__doc__ = dedent(Axes.loglog.__doc__) + """

Additional kwargs: hold = [True|False] overrides default hold state"""


Is there a way to preserve this in the new boilerplate configuration?

JDH

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to