Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5eec34a

Browse files
committed
Update the documentation guidelines
1 parent b078643 commit 5eec34a

File tree

2 files changed

+164
-95
lines changed

2 files changed

+164
-95
lines changed

doc/_static/mpl.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ dl.glossary dt {
147147
font-size: 1.1em;
148148
}
149149

150+
dl.docutils dt {
151+
font-weight: bold;
152+
}
153+
150154
pre a {
151155
color: inherit;
152156
text-decoration: none;

doc/devel/documenting_mpl.rst

Lines changed: 160 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44
Writing documentation
55
=====================
66

7+
.. contents:: Contents
8+
:depth: 2
9+
:local:
10+
:backlinks: top
11+
:class: multicol-toc
12+
13+
714
Getting started
815
===============
916

@@ -213,38 +220,52 @@ is better than:
213220
In addition, since underscores are widely used by Sphinx itself, use
214221
hyphens to separate words.
215222

223+
.. _referring-to-other-code:
216224

217225
Referring to other code
218226
-----------------------
219227

220228
To link to other methods, classes, or modules in Matplotlib you can use
221229
back ticks, for example:
222230

223-
.. code-block:: python
231+
.. code-block:: rst
224232
225-
`~matplotlib.collections.LineCollection`
233+
`matplotlib.collections.LineCollection`
226234
227-
returns a link to the documentation of
228-
`~matplotlib.collections.LineCollection`. For the full path of the
229-
class to be shown, omit the tilde:
235+
generates a link like this: `matplotlib.collections.LineCollection`.
230236

231-
.. code-block:: python
237+
*Note:* We use the sphinx setting `default_role = 'obj'` so that you don't
238+
have to use qualifiers like `:class:`, `:func:`, `:meth:` and the likes.
232239

233-
`matplotlib.collections.LineCollection`
240+
Often, you don't want to show the full package and module name. As long as the
241+
target is unanbigous you can simply leave them out:
242+
243+
.. code-block:: rst
234244
235-
to get `matplotlib.collections.LineCollection`. It is often not
236-
necessary to fully specify the class hierarchy unless there is a namespace
237-
collision between two packages:
245+
`.LineCollection`
238246
239-
.. code-block:: python
247+
and the link still works: `.LineCollection`.
248+
249+
If there are multiple code elements with the same name (e.g. ``plot()`` is a
250+
method in multiple classes), you'll have to extend the definition:
251+
252+
.. code-block:: rst
253+
254+
`.pyplot.plot` or `.Axes.plot`
255+
256+
These will show up as `.pyplot.plot` or `.Axes.plot`. To still show only the
257+
last segment you can add a tilde as prefix:
258+
259+
.. code-block:: rst
240260
241-
`~.LineCollection`
261+
`~.pyplot.plot` or `~.Axes.plot`
242262
243-
links just as well: `~.LineCollection`.
263+
will render as `~.pyplot.plot` or `~.Axes.plot`.
244264

245-
Other packages can also be linked via ``intersphinx``:
265+
Other packages can also be linked via
266+
`intersphinx <http://www.sphinx-doc.org/en/master/ext/intersphinx.html>`_:
246267

247-
.. code-block:: Python
268+
.. code-block:: rst
248269
249270
`numpy.mean`
250271
@@ -296,13 +317,19 @@ when the documentation is built.
296317
Writing docstrings
297318
==================
298319

299-
Much of the documentation lives in "docstrings". These are comment blocks
300-
in source code that explain how the code works. All new or edited docstrings
301-
should conform to the numpydoc guidelines. These split the docstring into a
302-
number of sections - see the `numpy documentation howto`_
303-
for more details and a guide to how docstrings should be formatted. Much of
304-
the ReST_ syntax discussed above (:ref:writing-rest-pages) can be used for
305-
links and references. These docstrings eventually populate the
320+
Most of the API documentation is written in docstrings. These are comment
321+
blocks in source code that explain how the code works.
322+
323+
.. note::
324+
325+
Some parts of the documentation do not yet conform to the current
326+
documentation style. If in doubt, follow the rules given here and not what
327+
you may see in the source code. Pull requests updating docstrings to
328+
the current style are very welcome.
329+
330+
All new or edited docstrings should conform to the `numpydoc docstring guide`_.
331+
Much of the ReST_ syntax discussed above (:ref:`writing-rest-pages`) can be
332+
used for links and references. These docstrings eventually populate the
306333
:file:`doc/api` directory and form the reference documentation for the
307334
library.
308335

@@ -313,21 +340,21 @@ An example docstring looks like:
313340

314341
.. code-block:: python
315342
316-
def hlines(self, y, xmin, xmax, colors='k', linestyles='solid',
317-
label='', **kwargs):
343+
def hlines(self, y, xmin, xmax, colors='k', linestyles='solid',
344+
label='', **kwargs):
318345
"""
319346
Plot horizontal lines at each *y* from *xmin* to *xmax*.
320347
321348
Parameters
322349
----------
323-
y : scalar or sequence of scalar
350+
y : float or array-like
324351
y-indexes where to plot the lines.
325352
326-
xmin, xmax : scalar or 1D array_like
353+
xmin, xmax : float or array-like
327354
Respective beginning and end of each line. If scalars are
328-
provided, all lines will have same length.
355+
provided, all lines will have the same length.
329356
330-
colors : array_like of colors, optional, default: 'k'
357+
colors : array-like of colors, optional, default: 'k'
331358
332359
linestyles : {'solid', 'dashed', 'dashdot', 'dotted'}, optional
333360
@@ -352,104 +379,137 @@ See the `~.Axes.hlines` documentation for how this renders.
352379
The Sphinx_ website also contains plenty of documentation_ concerning ReST
353380
markup and working with Sphinx in general.
354381

355-
.. note::
356-
357-
Some parts of the documentation do not yet conform to the current
358-
documentation style. If in doubt, follow the rules given here and not what
359-
you may see in the source code. Pull requests updating docstrings to
360-
the current style are very welcome.
361-
362382
Formatting conventions
363383
----------------------
364384

365-
The basic docstring conventions are covered in the `numpy documentation howto`_
385+
The basic docstring conventions are covered in the `numpydoc docstring guide`_
366386
and the Sphinx_ documentation. Some Matplotlib-specific formatting conventions
367387
to keep in mind:
368388

369-
* Matplotlib does not have a convention whether to use single-quotes or
370-
double-quotes. There is a mixture of both in the current code.
389+
Function arguments
390+
Function arguments and keywords within docstrings should be referred to
391+
using the ``*emphasis*`` role. This will keep Matplotlib's documentation
392+
consistent with Python's documentation:
371393

372-
* Long parameter lists should be wrapped using a ``\`` for continuation and
373-
starting on the new line without any indent:
394+
.. code-block:: rst
374395
375-
.. code-block:: python
396+
If *linestyles* is *None*, the 'solid' is used.
376397
377-
def add_axes(self, *args, **kwargs):
378-
"""
379-
...
398+
Do not use the ```default role``` or the ````literal```` role:
380399

381-
Parameters
382-
----------
383-
projection :
384-
{'aitoff', 'hammer', 'lambert', 'mollweide', 'polar', \
385-
'rectilinear'}, optional
386-
The projection type of the axes.
400+
.. code-block:: rst
387401
388-
...
389-
"""
402+
Neither `argument` nor ``argument`` should be used.
390403
391-
Alternatively, you can describe the valid parameter values in a dedicated
392-
section of the docstring.
393404
394-
* Generally, do not add markup to types for ``Parameters`` and ``Returns``.
395-
This is usually not needed because Sphinx will link them automatically and
396-
would unnecessarily clutter the docstring. However, it does seem to fail in
397-
some situations. If you encounter such a case, you are allowed to add markup:
405+
Quotes for strings
406+
Matplotlib does not have a convention whether to use single-quotes or
407+
double-quotes. There is a mixture of both in the current code.
398408

399-
.. code-block:: rst
409+
Use simple single or double quotes when giving string values, e.g.:: rst
400410

401-
Returns
402-
-------
403-
lines : `~matplotlib.collections.LineCollection`
411+
.. code-block:: rst
404412
405-
* rcParams can be referenced with the custom ``:rc:`` role:
406-
:literal:`:rc:\`foo\`` yields ``rcParams["foo"]``.
413+
If 'tight', try to figure out the tight bbox of the figure.
407414
408-
Deprecated formatting conventions
409-
---------------------------------
410-
* Formerly, we have used square brackets for explicit parameter lists
411-
``['solid' | 'dashed' | 'dotted']``. With numpydoc we have switched to their
412-
standard using curly braces ``{'solid', 'dashed', 'dotted'}``.
415+
Parameter type descriptions
416+
The main goal for parameter type descriptions is to be readable and
417+
understandable by humans. If the possible types are too complex use a
418+
simplification for the type description and explain the type more
419+
precisely in the text.
413420

414-
Linking to other code
415-
---------------------
416-
To link to other methods, classes, or modules in Matplotlib you can encase
417-
the name to refer to in back ticks, for example:
421+
Generally, the `numpydoc docstring guide`_ conventions apply. The following
422+
rules expand on them where the numpydoc conventions are not specific.
418423

419-
.. code-block:: python
424+
Use ``float`` for a type that can be any number.
420425

421-
`~matplotlib.collections.LineCollection`
426+
Use ``array-like`` for homogeneous numeric sequences, which could
427+
typically be a numpy.array. Dimensionality may be specified using ``2D``,
428+
``3D``, ``n-dimensional``. If you need to have variables denoting the
429+
sizes of the dimensions, use capital letters in brackets
430+
(``array-like (M, N)``). When refering to them in the text they are easier
431+
read and no special formatting is needed.
422432

423-
It is also possible to add links to code in Python, Numpy, Scipy, or Pandas.
424-
Sometimes it is tricky to get external Sphinx linking to work; to check that
425-
a something exists to link to the following shell command outputs a list of all
426-
objects that can be referenced (in this case for Numpy)::
433+
``float`` is the implicit default dtype for array-likes. For other dtypes
434+
use ``array-like of int``.
427435

428-
python -m sphinx.ext.intersphinx 'https://docs.scipy.org/doc/numpy/objects.inv'
436+
Some possible uses::
429437

438+
2D array-like
439+
array-like (N)
440+
array-like (M, N)
441+
array-like (M, N, 3)
442+
array-like of int
430443

431-
Function arguments
432-
------------------
433-
Function arguments and keywords within docstrings should be referred to using
434-
the ``*emphasis*`` role. This will keep Matplotlib's documentation consistent
435-
with Python's documentation:
444+
Non-numeric homogeneous sequences are described as lists, e.g.::
436445

437-
.. code-block:: rst
446+
list of str
447+
list of `.Artist`
438448

439-
Here is a description of *argument*
449+
Referencing types
450+
Generally, the rules from referring-to-other-code_ apply. More specifically:
440451

441-
Do not use the ```default role```:
452+
Use full references ```~matplotlib.colors.Normalize``` with an
453+
abbreviation tilde in parameter types. While the full name helps the
454+
reader of plain text docstrings, the HTML does not need to show the full
455+
name as it links to it. Hence, the ``~``-shortening keeps it more readable.
442456

457+
Use abbreviated links ```.Normalize``` in the text.
443458

444-
.. code-block:: rst
459+
.. code-block:: rst
445460
446-
Do not describe `argument` like this.
461+
norm : `~matplotlib.colors.Normalize`, optional
462+
A `.Normalize` instance is used to scale luminance data to 0, 1.
447463
448-
nor the ````literal```` role:
464+
``See also`` sections
465+
Sphinx automatically links code elements in the definition blocks of ``See
466+
also`` sections. No need to use backticks there::
449467

450-
.. code-block:: rst
468+
See also
469+
--------
470+
vlines : vertical lines
471+
axhline: horizontal line across the axes
451472

452-
Do not describe ``argument`` like this.
473+
Wrapping parameter lists
474+
Long parameter lists should be wrapped using a ``\`` for continuation and
475+
starting on the new line without any indent:
476+
477+
.. code-block:: python
478+
479+
def add_axes(self, *args, **kwargs):
480+
"""
481+
...
482+
483+
Parameters
484+
----------
485+
projection :
486+
{'aitoff', 'hammer', 'lambert', 'mollweide', 'polar', \
487+
'rectilinear'}, optional
488+
The projection type of the axes.
489+
490+
...
491+
"""
492+
493+
Alternatively, you can describe the valid parameter values in a dedicated
494+
section of the docstring.
495+
496+
rcParams
497+
rcParams can be referenced with the custom ``:rc:`` role:
498+
:literal:`:rc:\`foo\`` yields ``rcParams["foo"]``. Use `= [default-val]`
499+
to indicate the default value of the parameter. The default value should be
500+
literal, i.e. enclosed in double backticks. For simplicity these may be
501+
omitted for string default values.
502+
503+
.. code-block:: rst
504+
505+
If not provided, defaults to :rc:`figure.figsize` = ``[6.4, 4.8]``.
506+
If not provided, defaults to :rc:`figure.facecolor` = 'w'.
507+
508+
Deprecated formatting conventions
509+
---------------------------------
510+
Formerly, we have used square brackets for explicit parameter lists
511+
``['solid' | 'dashed' | 'dotted']``. With numpydoc we have switched to their
512+
standard using curly braces ``{'solid', 'dashed', 'dotted'}``.
453513

454514
Setters and getters
455515
-------------------
@@ -460,6 +520,12 @@ By convention, these setters and getters are named ``set_PROPERTYNAME`` and
460520
``get_PROPERTYNAME``; the list of properties thusly defined on an artist and
461521
their values can be listed by the `~.pyplot.setp` and `~.pyplot.getp` functions.
462522

523+
.. note::
524+
525+
``ACCEPTS`` blocks have recently become optional. You may now use a
526+
numpydoc ``Parameters`` block because the accepted values can now be read
527+
from the type description of the first parameter.
528+
463529
Property setter methods should indicate the values they accept using a (legacy)
464530
special block in the docstring, starting with ``ACCEPTS``, as follows:
465531

@@ -493,7 +559,6 @@ Sphinx by making it a ReST comment (i.e. use ``.. ACCEPTS:``):
493559
"""
494560
495561
496-
497562
Keyword arguments
498563
-----------------
499564

@@ -812,4 +877,4 @@ Some helpful functions::
812877
.. _index: http://www.sphinx-doc.org/markup/para.html#index-generating-markup
813878
.. _`Sphinx Gallery`: https://sphinx-gallery.readthedocs.io/en/latest/
814879
.. _references: http://www.sphinx-doc.org/en/stable/markup/inline.html
815-
.. _`numpy documentation howto`: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
880+
.. _`numpydoc docstring guide`: https://numpydoc.readthedocs.io/en/latest/format.html

0 commit comments

Comments
 (0)