2.1. Documentation Notation and Formatting¶
In addition to text with references to variables, functions, file names, etc., this documentation contains many descriptions of function inputs and outputs. This is a semi-standard Python way of describing the user interface to a function.
This documentation is built by the Sphinx
documentation software, which has certain features that may not be obvious to
all users of pyCart and the other parts of the CAPE package. The docstrings
like the one shown above are read by Sphinx and turned into formatted text such
as cape.pycart.inputCntl.InputCntl.SetAlpha()
. The basic layout of these
docstrings, with optional portions in parentheses, is as follows.
Short description of the function or class (More detailed description if necessary) :Call: >>> Example Python call showing how to use the function (>>> Alternate examples if function can be used multiple ways) :Inputs: *Name_input1*: :class:`variable_type` Description of first input *Name_input2*: :class:`variable_type` Description of second input :Outputs: *Name_output1*: :class:`variable_type` Description of first output *Name_output2*: :class:`variable_type` Description of second output :Versions: * Date ``@Author``: Short description
Sphinx automatically turns this text into the following format.
Short description of the function or class
(More detailed description if necessary)
- Call:
>>> Example Python call showing how to use the function (>>> Alternate examples if function can be used multiple ways)- Inputs:
- Name_input1:
variable_type
Description of first input
- Name_input2:
variable_type
Description of second input
- Outputs:
- Name_output1:
variable_type
Description of first output
- Name_output2:
variable_type
Description of second output
- Versions:
Date
@Author
: Short description
This documentation uses much of the same syntax and markup throughout the rest of the document, and this quick guide may become useful in cases of confusion or ambiguity.
2.1.1. Documentation Syntax Guide¶
Understanding this syntax can be somewhat helpful for reading the documentation strings, and it provides a useful shorthand when discussing features of the code. A table of how various syntaxes are used is below.
Syntax |
Formatted |
Description/Purpose |
---|---|---|
``f(a)`` |
|
Raw text or source code |
``$PYCART`` |
|
Environment variable |
*a* |
a |
Variable name |
*a>b* |
a>b |
Key b of a, |
:Inputs: |
|
Dictionary-style header |
:file:`pyCart.json` |
|
File name |
:mod:`cape.tri` |
Module name |
|
:class:`int` |
|
Class or type of variable |
:func:`SetAlpha` |
|
Function name |
The class, mod, and func keys generate links to their formatted documentation when Sphinx can find it.
Some inputs and outputs can have multiple allowed types, which is also
represented in the docstrings. In addition, lists, dictionaries, and NumPy
arrays often have a type, which is shown in parentheses. For example, [0.1,
0.2, 0.34]
might be listed as list
[float
], and {"name":
"a", "place": "b"}
might be listed as dict
[str
]. Finally,
default values are sometimes placed in curly braces. An example portion of a
document string is shown below.
:Inputs: *a*: :class:`list`\ [:class:`float`] Description of a list of float values *b*: :class:`int` | ``None`` Description of variable that is either an integer or nothing *c*: :class:`dict` | :class:`list` Description of multiple ways to represent some data *q*: {``True``} | ``False`` Description of Boolean variable that defaults to ``True``
The formatted version of the above looks like this.
- Inputs:
- a:
list
[float
]Description of a list of float values
- b:
int
|None
Description of variable that is either an integer or nothing
- c:
dict
|list
Description of multiple ways to represent some data
- q: {
True
} |False
Description of Boolean variable that defaults to
True
2.1.2. Keyword Arguments¶
One aspect of possible confusion to new or novice Python users is the so-called keyword arguments. For example, in the following example command, there are regular arguments and keyword arguments.
comp = 'CA' ylbl = 'CA (Axial force coefficient)' FM.PlotCoeff(comp, YLabel=ylbl)
In this case comp is a regular input, often called an “argument” in Python jargon. Then YLabel is a keyword input or keyword argument, which is specified with an equal sign in the function call. The advantage of keyword arguments is that they can be given in any order, and many of them can be skipped when default values should be used. For example, the following two commands are identical.
FM.PlotCoeff('CA', XLabel='i', YLabel='CA') FM.PlotCoeff('CA', YLabel='CA', XLabel='i')
Another tool for using keywords is that a dict
can be used as a list of
keywords inputs. The following two commands are identical.
kw = {"d": 0.1, "k": 3.0, "YLabel": "Cx"} FM.PlotCoeff('CA', **kw) FM.PlotCoeff('CA', d=0.1, k=3.0, YLabel="Cx")