summaryrefslogtreecommitdiff
path: root/doc/HOWTO_DOCUMENT.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/HOWTO_DOCUMENT.txt')
-rw-r--r--doc/HOWTO_DOCUMENT.txt430
1 files changed, 430 insertions, 0 deletions
diff --git a/doc/HOWTO_DOCUMENT.txt b/doc/HOWTO_DOCUMENT.txt
new file mode 100644
index 000000000..03c35283d
--- /dev/null
+++ b/doc/HOWTO_DOCUMENT.txt
@@ -0,0 +1,430 @@
+====================================
+A Guide to NumPy/SciPy Documentation
+====================================
+
+.. Contents::
+
+.. Note::
+
+ For an accompanying example, see `example.py
+ <http://svn.scipy.org/svn/numpy/trunk/numpy/doc/example.py>`_.
+
+Overview
+--------
+In general, we follow the standard Python style conventions as described here:
+ * `Style Guide for C Code <http://www.python.org/peps/pep-0007.html>`_
+ * `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
+ * `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
+
+Additional PEPs of interest regarding documentation of code:
+ * `Docstring Processing Framework <http://www.python.org/peps/pep-0256.html>`_
+ * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
+
+Use a code checker:
+ * `pylint <http://www.logilab.org/857>`_
+ * `pyflakes` easy_install pyflakes
+ * `pep8.py <http://svn.browsershots.org/trunk/devtools/pep8/pep8.py>`_
+
+The following import conventions are used throughout the NumPy source
+and documentation::
+
+ import numpy as np
+ import scipy as sp
+ import matplotlib as mpl
+ import matplotlib.pyplot as plt
+
+It is not necessary to do ``import numpy as np`` at the beginning of
+an example. However, some sub-modules, such as ``fft``, are not
+imported by default, and you have to include them explicitly::
+
+ import numpy.fft
+
+after which you may use it::
+
+ np.fft.fft2(...)
+
+Docstring Standard
+------------------
+A documentation string (docstring) is a string that describes a module,
+function, class, or method definition. The docstring is a special attribute
+of the object (``object.__doc__``) and, for consistency, is surrounded by
+triple double quotes, i.e.::
+
+ """This is the form of a docstring.
+
+ It can be spread over several lines.
+
+ """
+
+NumPy, SciPy_, and the scikits follow a common convention for
+docstrings that provides for consistency, while also allowing our
+toolchain to produce well-formatted reference guides. This document
+describes the current community consensus for such a standard. If you
+have suggestions for improvements, post them on the `numpy-discussion
+list`_, together with the epydoc output.
+
+Our docstring standard uses `re-structured text (reST)
+<http://docutils.sourceforge.net/rst.html>`_ syntax and is rendered
+using tools like epydoc_ or sphinx_ (pre-processors that understand
+the particular documentation style we are using). While a rich set of
+markup is available, we limit ourselves to a very basic subset, in
+order to provide docstrings that are easy to read on text-only
+terminals.
+
+A guiding principle is that human readers of the text are given
+precedence over contorting docstrings so our tools produce nice
+output. Rather than sacrificing the readability of the docstrings, we
+have written pre-processors to assist tools like epydoc_ and sphinx_ in
+their task.
+
+Status
+------
+We are busy converting existing docstrings to the new format,
+expanding them where they are lacking, as well as writing new ones for
+undocumented functions. Volunteers are welcome to join the effort on
+our new documentation system (see the `Developer Zone
+<http://www.scipy.org/Developer_Zone/DocMarathon2008>`_).
+
+Sections
+--------
+The sections of the docstring are:
+
+1. **Short summary**
+
+ A one-line summary that does not use variable names or the function
+ name, e.g.
+
+ ::
+
+ def add(a,b):
+ """The sum of two numbers.
+
+ """
+
+ The function signature is normally found by introspection and
+ displayed by the help function. For some functions (notably those
+ written in C) the signature is not available, so we have to specify
+ it as the first line of the docstring::
+
+ """
+ add(a,b)
+
+ The sum of two numbers.
+
+ """
+
+2. **Extended summary**
+
+ A few sentences giving an extended description. This section
+ should be used to clarify *functionality*, not to discuss
+ implementation detail or background theory, which should rather be
+ explored in the **notes** section below. You may refer to the
+ parameters and the function name, but parameter descriptions still
+ belong in the **parameters** section.
+
+3. **Parameters**
+
+ Description of the function arguments, keywords and their
+ respective types.
+
+ ::
+
+ Parameters
+ ----------
+ x : type
+ Description of parameter `x`.
+
+ Enclose variables in single back-tics. If it is not necessary to
+ specify a keyword argument, use ``optional``::
+
+ x : int, optional
+
+ Optional keyword parameters have default values, which are
+ displayed as part of the function signature. They can also be
+ detailed in the description::
+
+ Description of parameter `x` (the default is -1, which implies summation
+ over all axes).
+
+ When a parameter can only assume one of a fixed set of values,
+ those values can be listed in braces ::
+
+ x : {True, False}
+ Description of `x`.
+
+4. **Returns**
+
+ Explanation of the returned values and their types, of the same
+ format as **parameters**.
+
+5. **Other parameters**
+
+ An optional section used to describe infrequently used parameters.
+ It should only be used if a function has a large number of keyword
+ prameters, to prevent cluttering the **parameters** section.
+
+6. **Raises**
+
+ An optional section detailing which errors get raised and under
+ what conditions::
+
+ Raises
+ ------
+ LinAlgException
+ If the matrix is not numerically invertible.
+
+7. **See Also**
+
+ An optional section used to refer to related code. This section
+ can be very useful, but should be used judiciously. The goal is to
+ direct users to other functions they may not be aware of, or have
+ easy means of discovering (by looking at the module docstring, for
+ example). Routines whose docstrings further explain parameters
+ used by this function are good candidates.
+
+ As an example, for ``numpy.mean`` we would have::
+
+ See Also
+ --------
+ average : Weighted average
+
+ When referring to functions in the same sub-module, no prefix is
+ needed, and the tree is searched upwards for a match.
+
+ Prefix functions from other sub-modules appropriately. E.g.,
+ whilst documenting the ``random`` module, refer to a function in
+ ``fft`` by
+
+ ::
+
+ fft.fft2 : 2-D fast discrete Fourier transform
+
+ When referring to an entirely different module::
+
+ scipy.random.norm : Random variates, PDFs, etc.
+
+ Functions may be listed without descriptions::
+
+ See Also
+ --------
+ func_a : Function a with its description.
+ func_b, func_c_, func_d
+ func_e
+
+8. **Notes**
+
+ An optional section that provides additional information about the
+ code, possibly including a discussion of the algorithm. This
+ section may include mathematical equations, written in
+ `LaTeX <http://www.latex-project.org/>`_ format::
+
+ The FFT is a fast implementation of the discrete Fourier transform:
+
+ .. math:: X(e^{j\omega } ) = x(n)e^{ - j\omega n}
+
+ Equations can also be typeset underneath the math directive::
+
+ The discrete-time Fourier time-convolution property states that
+
+ .. math::
+
+ x(n) * y(n) \Leftrightarrow X(e^{j\omega } )Y(e^{j\omega } )\\
+ another equation here
+
+ Math can furthermore be used inline, i.e.
+
+ ::
+
+ The value of :math:`\omega` is larger than 5.
+
+ Variable names are displayed in typewriter font, obtained by using
+ ``\mathtt{var}``::
+
+ We square the input parameter `alpha` to obtain
+ :math:`\mathtt{alpha}^2`.
+
+ Note that LaTeX is not particularly easy to read, so use equations
+ sparingly.
+
+ Images are allowed, but should not be central to the explanation;
+ users viewing the docstring as text must be able to comprehend its
+ meaning without resorting to an image viewer. These additional
+ illustrations are included using::
+
+ .. image:: filename
+
+ where filename is a path relative to the reference guide source
+ directory.
+
+9. **References**
+
+ References cited in the **notes** section may be listed here,
+ e.g. if you cited the article below using the text ``[1]_``,
+ include it as in the list as follows::
+
+ .. [1] O. McNoleg, "The integration of GIS, remote sensing,
+ expert systems and adaptive co-kriging for environmental habitat
+ modelling of the Highland Haggis using object-oriented, fuzzy-logic
+ and neural-network techniques," Computers & Geosciences, vol. 22,
+ pp. 585-588, 1996.
+
+ which renders as
+
+ .. [1] O. McNoleg, "The integration of GIS, remote sensing,
+ expert systems and adaptive co-kriging for environmental habitat
+ modelling of the Highland Haggis using object-oriented, fuzzy-logic
+ and neural-network techniques," Computers & Geosciences, vol. 22,
+ pp. 585-588, 1996.
+
+ Referencing sources of a temporary nature, like web pages, is
+ discouraged. References are meant to augment the docstring, but
+ should not be required to understand it. Follow the `citation
+ format of the IEEE
+ <http://www.ieee.org/pubs/transactions/auinfo03.pdf>`_, which
+ states that references are numbered, starting from one, in the
+ order in which they are cited.
+
+10. **Examples**
+
+ An optional section for examples, using the `doctest
+ <http://www.python.org/doc/lib/module-doctest.html>`_ format.
+ This section is meant to illustrate usage, not to provide a
+ testing framework -- for that, use the ``tests/`` directory.
+ While optional, this section is very strongly encouraged. You can
+ run these examples by doing::
+
+ >>> import doctest
+ >>> doctest.testfile('example.py')
+
+ or, using nose,
+
+ ::
+
+ $ nosetests --with-doctest example.py
+
+ Blank lines are used to seperate doctests. When they occur in the
+ expected output, they should be replaced by ``<BLANKLINE>`` (see
+ `doctest options
+ <http://docs.python.org/lib/doctest-options.html>`_ for other such
+ special strings), e.g.
+
+ ::
+
+ >>> print "a\n\nb"
+ a
+ <BLANKLINE>
+ b
+
+ The examples may assume that ``import numpy as np`` is executed before
+ the example code in *numpy*, and ``import scipy as sp`` in *scipy*.
+ Additional examples may make use of *matplotlib* for plotting, but should
+ import it explicitly, e.g., ``import matplotlib.pyplot as plt``.
+
+11. **Indexing tags***
+
+ Each function needs to be categorised for indexing purposes. Use
+ the ``index`` directive::
+
+ .. index::
+ :refguide: ufunc, trigonometry
+
+ To index a function as a sub-category of a class, separate index
+ entries by a colon, e.g.
+
+ ::
+
+ :refguide: ufunc, numpy:reshape, other
+
+ A `list of available categories
+ <http://www.scipy.org/Developer_Zone/ReferenceGuide>`_ is
+ available.
+
+Documenting classes
+-------------------
+
+Class docstring
+```````````````
+Use the same sections as outlined above (all except ``Returns`` are
+applicable). The constructor (``__init__``) should also be documented
+here.
+
+An ``Attributes`` section may be used to describe class variables::
+
+ Attributes
+ ----------
+ x : float
+ The X coordinate.
+ y : float
+ The Y coordinate.
+
+In general, it is not necessary to list class methods. Those that are
+not part of the public API have names that start with an underscore.
+In some cases, however, a class may have a great many methods, of
+which only a few are relevant (e.g., subclasses of ndarray). Then, it
+becomes useful to have an additional ``Methods`` section::
+
+ class Photo(ndarray):
+ """
+ Array with associated photographic information.
+
+ ...
+
+ Attributes
+ ----------
+ exposure : float
+ Exposure in seconds.
+
+ Methods
+ -------
+ colorspace(c='rgb')
+ Represent the photo in the given colorspace.
+ gamma(n=1.0)
+ Change the photo's gamma exposure.
+
+ """
+
+Note that `self` is *not* listed as the first parameter of methods.
+
+Method docstrings
+`````````````````
+Document these as you would any other function. Do not include
+``self`` in the list of parameters.
+
+Common reST concepts
+--------------------
+For paragraphs, indentation is significant and indicates indentation in the
+output. New paragraphs are marked with a blank line.
+
+Use *italics*, **bold**, and ``courier`` if needed in any explanations
+(but not for variable names and doctest code or multi-line code).
+Variable, module and class names should be written between single
+backticks (```numpy```).
+
+A more extensive example of reST markup can be found in `this example
+document <http://docutils.sourceforge.net/docs/user/rst/demo.txt>`_;
+the `quick reference
+<http://docutils.sourceforge.net/docs/user/rst/quickref.html>`_ is
+useful while editing.
+
+Line spacing and indentation are significant and should be carefully
+followed.
+
+Conclusion
+----------
+
+`An example
+<http://svn.scipy.org/svn/numpy/trunk/numpy/doc/example.py>`_ of the
+format shown here is available. Refer to `How to Build API/Reference
+Documentation
+<http://svn.scipy.org/svn/numpy/trunk/numpy/doc/HOWTO_BUILD_DOCS.txt>`_
+on how to use epydoc_ or sphinx_ to construct a manual and web page.
+
+This document itself was written in ReStructuredText, and may be converted to
+HTML using::
+
+ $ rst2html HOWTO_DOCUMENT.txt HOWTO_DOCUMENT.html
+
+.. _SciPy: http://www.scipy.org
+.. _numpy-discussion list: http://www.scipy.org/Mailing_Lists
+.. _epydoc: http://epydoc.sourceforge.net/
+.. _sphinx: http://sphinx.pocoo.org