[SciPy-dev] Doc-ing classes and data attributes

Pauli Virtanen pav at iki.fi
Mon Jun 22 05:15:20 EDT 2009


Mon, 22 Jun 2009 09:42:21 +0200, Stéfan van der Walt kirjoitti:
>
> Thanks for the patch!  I committed your fixes up to the point where you
> start discussing class documentation.
> 
> We have to decide: is it OK to document the class constructor in
> __init__?  We used to put this in the class docstring itself so that
> "help" and IPython's "?" would find it, but I don't think this is longer
> necessary.  On the other hand, it makes sense: you call "x = MyClass()"
> to construct, not "x = MyClass.__init__()".  Comments welcome.

IMHO, it would be clearer if the __init__ method was documented 
separately. It can be included on the same page in the Sphinx output as 
the class quite easily. This would allow separate referring to the class 
constructor via eg. :ref:`ndarray <ndarray.__init__>` which might result 
to cleaner documentation.

This may require some changes to the doc editor, too. I guess currently 
__init__ is not available there.

In addition to clarifying these guidelines, I think someone (me?) needs 
to spend some time on making Sphinx generate acceptable documentation for 
classes. Right now, I'd suppose that what needs to be done is 
automatically transforming the "Attributes" and "Methods" sections to 
(autosummary?) tables and placing them to the bottom of the class 
documentation pages.

We may have to implement some custom pre-generation for this, or write 
the corresponding RST files by hand. I'm not sure it's possible to do the 
above via docstring mangling. The question is mainly whether Sphinx 
tolerates toctree nodes inside class nodes. In the manual alternative, we 
write RST files for each class manually,

	.. currentmodule:: numpy

	.. autoclass:: ndarray

	   .. automethod:: __init__

	Methods
	-------

	.. autosummary::
	   :toctree:

	   ~ndarray.sum
	   ~ndarray.prod

	Attributes
	----------

	.. autosummary::
	   :toctree:

	   ~ndarray.T
	   ~ndarray.flags

or just have the Makefile pre-generate these files for us. This would be 
simpler than mucking with docutils toctrees.

One technical question here is also where the method and attribute pages 
should go in the Sphinx toctree. This has relevance for the PDF output. 
The optimal approach here seems to be the one shown above, ie., make the 
autosummary directives to be generated from the class docstrings to 
be :toctree:-ful. The method and attribute descriptions would then 
immediately follow the class description. This requires some changes to 
the workings of the stub page generation (ie. it should call the 
docstring mangling hooks also when generating), but I guess there is 
still get these changes included in Sphinx 1.0.

The intent of the Methods and Attributes sections in the above scenario 
would mostly be listing the class members that form the API. Descriptions 
given in the Methods and Attributes sections would be ignored in the 
final documentation -- at least for those members that have their own 
docstrings. I wonder if we should allow "See Also"-styled abbreviated 
description lists in these sections?

> A couple of questions and comments about the patch:
> 
>  	326	   Not all examples will run though, due to them 
>                  including blank lines 
>       327	   in the output. Do not put in doctest-specific 
>                  markup like
>  	328	   ``<BLANKLINE>`` or ``#doctest: +SKIP``, readability 
>                  is more important 
>       329	   here than being able to execute the doctests 
>                  in a testing framework.
> 
> What is the plan here?  We must be able to execute the doctests in some
> way.

We mostly are: WHITESPACE skipping is enabled by default in the doctests, 
so using <BLANKLINE> is never necessary -- just omit the empty line.

I'm not so sure about #doctest: +SKIP lines.

>  	409	Class instances normally take the docstring of the class. 
>               In the Numpy 
>       410	namespace some class instances are made available 
>               to expose certain 
>       411	functionality.
> 
> I know what you mean by the above, but I think these sentences are a bit
> confusing.

This probably is clarified by giving examples.

>  	419	Documenting constants
> 
> To which constants are you referring?  Give an example to clarify.

numpy.nan, numpy.inf, numpy.PZERO, numpy.e. Currently, the docstrings for 
these live in numpy.doc.constants. Not yet included in the Sphinx-
generated docs, though.

-- 
Pauli Virtanen




More information about the SciPy-Dev mailing list