[Numpy-discussion] Code samples in docstrings mistaken as doctests

Pauli Virtanen pav@iki...
Mon Jun 23 14:57:08 CDT 2008


Mon, 23 Jun 2008 10:03:28 +0200, Stéfan van der Walt wrote:

> 2008/6/23 Alan McIntyre <alan.mcintyre@gmail.com>:
>> Some docstrings have examples of how to use the function that aren't
>> executable code (see numpy.core.defmatrix.bmat for an example) in their
>> current form.  Should these examples have the ">>>" removed from them
>> to avoid them being picked up as doctests?
> 
> The examples written for the random module warrants the same question.
> First and foremost, the docstrings are there to illustrate to users
> how to use the code; second, to serve as tests.
> 
> Example codes should run, but I'm not sure whether they should always be
> valid doctests.
> 
> In the `bmat` example, I would remove the '>>>' like you suggested.

"Schematic" code (such as that currently in numpy.bmat) that doesn't run 
probably shouldn't be written with >>>, and for it the ReST block quote 
syntax is also looks OK.

But I'm personally not in favor of a distinction between a "doctest" and 
a "code sample", as the difference is not of interest to the main target 
audience who reads the docstrings (or the reference documentation 
generated based on them). As I see it, Numpy has a test architecture that 
is separate from doctests, so that most of the bonus doctests gives us is 
ensuring that all of our examples run without errors and produce expected 
results.

It's a bit unfortunate though that the doctest directives are as 
obtrusive as they are and only apply to a single line. One problem that I 
see now is quite annoying in the sample codes using matplotlib: 
matplotlib functions tend to return some objects whose <repr> contains a 
memory address, which causes the code to fit badly in a doctest. This can 
be worked around (ELLIPSIS, assigning to a variable), but I don't see a 
clean way. (I'm not so worried here about plot windows popping up as they 
can be worked around by monkey-patching matplotlib.show and choosing a 
non-graphical backend.)

Another point related to numpy are blank lines often appearing in array 
printouts (the text <BLANKLINE> is not a pretty sight in documentation). 
Also, NORMALIZE_WHITESPACE is useful for reducing the whitespace in array 
printout.

-- 
Pauli Virtanen



More information about the Numpy-discussion mailing list