Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
8bd36ee
Update split_tf and combine_tf docstrings + combine_tf kwargs
murrayrm Dec 28, 2024
210ab45
improved docstring checking + first round of fixes
murrayrm Dec 28, 2024
f2285e4
add standalone docstrings_test mode + fix docstrings
murrayrm Dec 21, 2024
8463f68
fix flatsys "legacy" keywords + enhance legacy keyword processing
murrayrm Dec 21, 2024
f00c89d
add unit test for the unit test
murrayrm Dec 21, 2024
edc453f
add numpydoc to test environment
murrayrm Dec 21, 2024
d366472
refine use of numpydoc parser
murrayrm Dec 22, 2024
555ba16
add numpydoc style testing + corrections
murrayrm Dec 23, 2024
b360c2a
isort -m2 on touched files
murrayrm Feb 3, 2025
884e865
use numpydoc to capture function signature for var_positional args
murrayrm Feb 3, 2025
724adc0
Add matlab docstring testing + fix section label capitalization
murrayrm Dec 30, 2024
aad3c75
add check for empty section + fix correlation() docstring
murrayrm Dec 30, 2024
d1ae6d2
improved docstring checking + first round of fixes
murrayrm Dec 21, 2024
e31ce00
add standalone docstrings_test mode + fix docstrings
murrayrm Dec 21, 2024
624439a
add numpydoc style testing + corrections
murrayrm Dec 23, 2024
dd078ae
add unit test for sphinx documentation
murrayrm Dec 24, 2024
d605807
update sphinxdocs and docstrings to fix missing function refs
murrayrm Dec 24, 2024
810e910
remove references to deprecated and legacy functions
murrayrm Dec 24, 2024
6070ca7
add pytest to CI workflow
murrayrm Dec 24, 2024
3153dfa
fix docstring example errors (in newly included functions)
murrayrm Dec 24, 2024
3692ef4
update Makefile and conf.py for current version of sphinx
murrayrm Dec 26, 2024
f089d3a
add sphinx_copybutton to user guide
murrayrm Dec 26, 2024
d874bca
move examples and figures to subdirectories
murrayrm Dec 27, 2024
3128e0b
move plotting -> response and conventions -> {linear, timeplot, config}
murrayrm Dec 27, 2024
5308888
initial refactoring of user guide and reference manual
murrayrm Dec 27, 2024
bb3aeb0
updated intro text
murrayrm Dec 27, 2024
2de0e89
add version info to Jupyter tutorial
murrayrm Dec 27, 2024
b158cef
set default_role to py:obj to allow use of single backticks
murrayrm Dec 27, 2024
ec89ffb
main LTI systems chapter content
murrayrm Dec 28, 2024
76346d8
state space systems section content
murrayrm Dec 28, 2024
2bd2bf4
initial transfer fucntion section content
murrayrm Dec 28, 2024
5c4a26b
add missing classes to reference section
murrayrm Dec 28, 2024
b906617
fix up warnings in make html, make doctest, pytest
murrayrm Dec 28, 2024
6d6cf25
add missing files + tweak noindex for readthedocs
murrayrm Dec 28, 2024
e4fd04f
update linear.rst and associated doc files and function docstrings
murrayrm Dec 28, 2024
aa05537
update response.rst and associated function docstrings
murrayrm Dec 28, 2024
01e8c3c
update nonlinear.rst and associated doc files
murrayrm Dec 28, 2024
eb70e96
update iosys.rst and associated doc files and docstrings
murrayrm Dec 29, 2024
ecc3b5a
update stochastic.rst
murrayrm Dec 29, 2024
02f7a13
spelling corrections
murrayrm Dec 29, 2024
5d7b328
fix doctest errors in {combine,split}_tf (by suppressing output)
murrayrm Dec 29, 2024
322dba6
reorganize functions.rst, classes.rst
murrayrm Dec 29, 2024
b750119
Restructure config.rst to document all defaults + update docstrings, …
murrayrm Dec 29, 2024
199e0dd
update copybutton to skip prompts, outputs
murrayrm Dec 30, 2024
4e06670
add documentation on __call__ functions
murrayrm Dec 30, 2024
87222ef
small formatting fixes in flatsys.rst
murrayrm Dec 30, 2024
3706083
rebase cleanup + remove unneeded spaces + header updates
murrayrm Jan 1, 2025
fecc773
update module headers and docstrings
murrayrm Jan 1, 2025
06b462c
update MATLAB module headers and docstrings
murrayrm Jan 1, 2025
bbfcfa3
fix: config.default[] to config.defaults[]
murrayrm Jan 1, 2025
9664acf
remove unnecessary :role:, ~control. and `` from docstrings
murrayrm Jan 1, 2025
9edd422
fix up sub-package/module references
murrayrm Jan 1, 2025
8864385
fix up class docstrings + See Also
murrayrm Jan 2, 2025
a8d5ff9
add checks for backticks + class docstrings and fix up docstrings
murrayrm Jan 3, 2025
c888ccc
initial set of developer notes
murrayrm Jan 3, 2025
e657edc
fix small typos
murrayrm Jan 8, 2025
6d5496c
update backtick guidelines, docstrings, CSS processing
murrayrm Jan 10, 2025
00d6f02
add custom CSS
murrayrm Jan 11, 2025
1506ab0
center figures + small fixes
murrayrm Jan 11, 2025
a69c014
fix capitalization of chapter and section titles
murrayrm Jan 11, 2025
eb2247c
User Guide copyedits
murrayrm Jan 11, 2025
b91598c
add doctest to user guide + internally generate figures
murrayrm Jan 12, 2025
a46f0b6
updated isort's + remove extraneous spaces
murrayrm Feb 3, 2025
b742bd2
add numpydoc dependency for pip OS/BLAS test matrix
murrayrm Jan 13, 2025
34f39dc
reformat numbered notes sections
murrayrm Jan 14, 2025
1ed8817
regularize `dt` keyword use and related annotations (see develop.rst)
murrayrm Jan 15, 2025
cdc5fe8
updated Makefile to avoid regenerating figures unless needed
murrayrm Jan 15, 2025
056110e
fix module/sub-package references (with developer notes)
murrayrm Jan 16, 2025
eedbf2b
update class documentation (+ unit tests)
murrayrm Jan 18, 2025
a6b30b1
update MATLAB function list
murrayrm Jan 18, 2025
e3ff9c9
update LTI convenience functions to allow proper documentation
murrayrm Feb 3, 2025
3de0ee7
add special processing for `sys`
murrayrm Jan 19, 2025
d498ad5
fix citations and references
murrayrm Jan 19, 2025
acaa417
regularize Returns docstring for bundle objects
murrayrm Jan 19, 2025
6c8da96
update docstrings for LTI.__call__: clearer language + consistency
murrayrm Jan 20, 2025
59e7314
address first round of TODO items + add stochastic system examples
murrayrm Jan 20, 2025
bb4ff1e
address remaining @sawyerbfuller review comments
murrayrm Jan 20, 2025
1f8d2e6
fix up docstrings, unit test for append() methods after rebase
murrayrm Jan 20, 2025
84079e0
update kalman-pvtol.ipynb to fully evaluated notebook (for RTD)
murrayrm Jan 21, 2025
e82670e
add examples for create_{statefbk,estimator}_iosystem + related fixes
murrayrm Jan 21, 2025
6e8195a
address doc-related TODOs; rename optimal_{ocp,oep}
murrayrm Feb 3, 2025
23cbde9
spell check
murrayrm Jan 22, 2025
fe0cd47
make frdata/xferfcn parameters and attributes more consistent
murrayrm Jan 24, 2025
e2a93dd
Get rid of duplicative reshaping within bode_plot
murrayrm Jan 24, 2025
8081ac3
add __repr__ for NamedSignal
murrayrm Jan 25, 2025
f96276d
address remaining @sawyerfuller comments + RMM copyedits
murrayrm Jan 25, 2025
8297a28
update userguide examples (copyedits + additional narrative)
murrayrm Jan 25, 2025
f566656
fix unit test issue (change in error message)
murrayrm Jan 25, 2025
49e3740
fix bug in predprey controller (was generating wrong steady state)
murrayrm Jan 26, 2025
81742f0
improve class documentation in Reference Manual
murrayrm Jan 26, 2025
74edc24
add (user-oriented) release notes to Reference Manual
murrayrm Jan 26, 2025
719fcb2
update !pip to %pip per #1113
murrayrm Feb 2, 2025
7da8c00
addressed @slivingston review comments
murrayrm Feb 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update backtick guidelines, docstrings, CSS processing
  • Loading branch information
murrayrm committed Feb 3, 2025
commit 6d5496c92349f39404ca97757135ede5ce9dfa82
64 changes: 32 additions & 32 deletions control/bdalg.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ def series(*sys, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i]' (where 's' is one of 'u,
or 'y'). See `InputOutputSystem` for more information.
states : str, or list of str, optional
List of names for system states. If not given, state names will be
of of the form `x[i]` for interconnections of linear systems or
of the form 'x[i]' for interconnections of linear systems or
'<subsys_name>.<state_name>' for interconnected nonlinear systems.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
Expand All @@ -58,8 +58,8 @@ def series(*sys, **kwargs):
Raises
------
ValueError
if `sys2.ninputs` does not equal `sys1.noutputs`
if `sys1.dt` is not compatible with `sys2.dt`
if ``sys2.ninputs`` does not equal ``sys1.noutputs``
if ``sys1.dt`` is not compatible with ``sys2.dt``

See Also
--------
Expand Down Expand Up @@ -116,11 +116,11 @@ def parallel(*sys, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i'` (where 's' is one of 'u',
or 'y'). See `InputOutputSystem` for more information.
states : str, or list of str, optional
List of names for system states. If not given, state names will be
of the form `x[i]` for interconnections of linear systems or
of the form 'x[i]' for interconnections of linear systems or
'<subsys_name>.<state_name>' for interconnected nonlinear systems.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
Expand All @@ -129,7 +129,8 @@ def parallel(*sys, **kwargs):
Raises
------
ValueError
if `sys1` and `sys2` do not have the same numbers of inputs and outputs
If `sys1` and `sys2` do not have the same numbers of inputs and
outputs.

See Also
--------
Expand Down Expand Up @@ -184,11 +185,11 @@ def negate(sys, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i]' (where 's' is one of 'u',
or 'y'). See `InputOutputSystem` for more information.
states : str, or list of str, optional
List of names for system states. If not given, state names will be
of of the form `x[i]` for interconnections of linear systems or
of of the form 'x[i]' for interconnections of linear systems or
'<subsys_name>.<state_name>' for interconnected nonlinear systems.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
Expand Down Expand Up @@ -226,10 +227,9 @@ def feedback(sys1, sys2=1, sign=-1, **kwargs):
----------
sys1, sys2 : scalar, array, or `InputOutputSystem`
I/O systems to combine.
sign : scalar
The sign of feedback. `sign` = -1 indicates negative feedback, and
`sign` = 1 indicates positive feedback. `sign` is an optional
argument; it assumes a value of -1 if not specified.
sign : scalar, optional
The sign of feedback. `sign=-1` indicates negative feedback
(default), and `sign=1` indicates positive feedback.

Returns
-------
Expand All @@ -240,11 +240,11 @@ def feedback(sys1, sys2=1, sign=-1, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i]' (where 's' is one of 'u',
or 'y'). See `InputOutputSystem` for more information.
states : str, or list of str, optional
List of names for system states. If not given, state names will be
of of the form `x[i]` for interconnections of linear systems or
of of the form 'x[i]' for interconnections of linear systems or
'<subsys_name>.<state_name>' for interconnected nonlinear systems.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
Expand Down Expand Up @@ -333,11 +333,11 @@ def append(*sys, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i]' (where 's' is one of 'u',
or 'y'). See `InputOutputSystem` for more information.
states : str, or list of str, optional
List of names for system states. If not given, state names will be
of of the form `x[i]` for interconnections of linear systems or
of of the form 'x[i]' for interconnections of linear systems or
'<subsys_name>.<state_name>' for interconnected nonlinear systems.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
Expand Down Expand Up @@ -473,10 +473,10 @@ def combine_tf(tf_array, **kwargs):
Parameters
----------
tf_array : list of list of TransferFunction or array_like
Transfer matrix represented as a two-dimensional array or list-of-lists
containing TransferFunction objects. The TransferFunction objects can
have multiple outputs and inputs, as long as the dimensions are
compatible.
Transfer matrix represented as a two-dimensional array or
list-of-lists containing TransferFunction objects. The
`TransferFunction` objects can have multiple outputs and inputs, as
long as the dimensions are compatible.

Returns
-------
Expand All @@ -487,8 +487,8 @@ def combine_tf(tf_array, **kwargs):
----------------
inputs, outputs : str, or list of str, optional
List of strings that name the individual signals. If not given,
signal names will be of the form `s[i]` (where `s` is one of `u`,
or `y`). See `InputOutputSystem` for more information.
signal names will be of the form 's[i]' (where 's' is one of 'u',
or 'y'). See `InputOutputSystem` for more information.
name : string, optional
System name (used for specifying signals). If unspecified, a generic
name <sys[id]> is generated with a unique integer id.
Expand Down Expand Up @@ -535,7 +535,7 @@ def combine_tf(tf_array, **kwargs):
[array([1.]), array([1.]), array([1.])],
[array([1.]), array([1.]), array([1, 0])]],
name='G', outputs=3, inputs=3)

"""
# Find common timebase or raise error
dt_list = []
Expand Down Expand Up @@ -666,10 +666,10 @@ def _ensure_tf(arraylike_or_tf, dt=None):
Array-like or transfer function.
dt : None, True or float, optional
System timebase. 0 (default) indicates continuous
time, `True` indicates discrete time with unspecified sampling
time, True indicates discrete time with unspecified sampling
time, positive number is discrete time with specified
sampling time, `None` indicates unspecified timebase (either
continuous or discrete time). If `None`, timestep is not validated.
sampling time, None indicates unspecified timebase (either
continuous or discrete time). If None, timestep is not validated.

Returns
-------
Expand Down
36 changes: 21 additions & 15 deletions control/canonical.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
from .statefbk import ctrb, obsv
from .statesp import StateSpace, _convert_to_statespace

__all__ = ['canonical_form', 'reachable_form', 'observable_form', 'modal_form',
'similarity_transform', 'bdschur']
__all__ = ['canonical_form', 'reachable_form', 'observable_form',
'modal_form', 'similarity_transform', 'bdschur']


def canonical_form(xsys, form='reachable'):
Expand Down Expand Up @@ -126,10 +126,12 @@ def reachable_form(xsys):
# Check to make sure inversion was OK. Note that since we are inverting
# Wrx and we already checked its rank, this exception should never occur
if matrix_rank(Tzx) != xsys.nstates: # pragma: no cover
raise ValueError("Transformation matrix singular to working precision.")
raise ValueError(
"Transformation matrix singular to working precision.")

# Finally, compute the output matrix
zsys.C = solve(Tzx.T, xsys.C.T).T # matrix right division, zsys.C = xsys.C * inv(Tzx)
# matrix right division, zsys.C = xsys.C * inv(Tzx)
zsys.C = solve(Tzx.T, xsys.C.T).T

return zsys, Tzx

Expand Down Expand Up @@ -183,7 +185,8 @@ def observable_form(xsys):
Tzx = solve(Wrz, Wrx) # matrix left division, Tzx = inv(Wrz) * Wrx

if matrix_rank(Tzx) != xsys.nstates:
raise ValueError("Transformation matrix singular to working precision.")
raise ValueError(
"Transformation matrix singular to working precision.")

# Finally, compute the output matrix
zsys.B = Tzx @ xsys.B
Expand All @@ -206,7 +209,7 @@ def similarity_transform(xsys, T, timescale=1, inverse=False):
timescale : float, optional
If present, also rescale the time unit to tau = timescale * t.
inverse : bool, optional
If `False` (default), transform so z = T x. If `True`, transform
If False (default), transform so z = T x. If True, transform
so x = T z.

Returns
Expand Down Expand Up @@ -270,7 +273,7 @@ def _bdschur_defective(blksizes, eigvals):

Returns
-------
`True` iff Schur blocks are defective.
True iff Schur blocks are defective.

blksizes, eigvals are the 3rd and 4th results returned by mb03rd.
"""
Expand Down Expand Up @@ -393,7 +396,9 @@ def _bdschur_condmax_search(aschur, tschur, condmax):
# hit search limit
return reslower
else:
raise ValueError('bisection failed to converge; pmaxlower={}, pmaxupper={}'.format(pmaxlower, pmaxupper))
raise ValueError(
"bisection failed to converge; "
"pmaxlower={}, pmaxupper={}".format(pmaxlower, pmaxupper))


def bdschur(a, condmax=None, sort=None):
Expand All @@ -404,7 +409,7 @@ def bdschur(a, condmax=None, sort=None):
a : (M, M) array_like
Real matrix to decompose.
condmax : None or float, optional
If `None` (default), use 1/sqrt(eps), which is approximately 1e8.
If None (default), use 1/sqrt(eps), which is approximately 1e8.
sort : {None, 'continuous', 'discrete'}
Block sorting; see below.

Expand All @@ -419,7 +424,7 @@ def bdschur(a, condmax=None, sort=None):

Notes
-----
If `sort` is `None`, the blocks are not sorted.
If `sort` is None, the blocks are not sorted.

If `sort` is 'continuous', the blocks are sorted according to
associated eigenvalues. The ordering is first by real part of
Expand All @@ -443,7 +448,8 @@ def bdschur(a, condmax=None, sort=None):
condmax = np.finfo(np.float64).eps ** -0.5

if not (np.isscalar(condmax) and condmax >= 1.0):
raise ValueError('condmax="{}" must be a scalar >= 1.0'.format(condmax))
raise ValueError(
'condmax="{}" must be a scalar >= 1.0'.format(condmax))

a = np.atleast_2d(a)
if a.shape[0] == 0 or a.shape[1] == 0:
Expand Down Expand Up @@ -491,18 +497,18 @@ def modal_form(xsys, condmax=None, sort=False):
Parameters
----------
xsys : StateSpace object
System to be transformed, with state `x`.
System to be transformed, with state ``x``.
condmax : None or float, optional
An upper bound on individual transformations. If `None`, use
An upper bound on individual transformations. If None, use
`bdschur` default.
sort : bool, optional
If `False` (default), Schur blocks will not be sorted. See `bdschur`
If False (default), Schur blocks will not be sorted. See `bdschur`
for sort order.

Returns
-------
zsys : StateSpace object
System in modal canonical form, with state `z`.
System in modal canonical form, with state ``z``.
T : (M, M) ndarray
Coordinate transformation: z = T * x.

Expand Down
11 changes: 6 additions & 5 deletions control/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ def set_defaults(module, **keywords):
defaults[module + '.' + key] = val


# TODO: allow individual modules and individaul parameters to be reset
def reset_defaults():
"""Reset configuration values to their default (initial) values.

Expand Down Expand Up @@ -199,7 +200,7 @@ def _get_param(module, param, argval=None, defval=None, pop=False, last=False):
parameter for a module based on the default parameter settings and any
arguments passed to the function. The precedence order for parameters is
the value passed to the function (as a keyword), the value from the
config.defaults dictionary, and the default value `defval`.
`config.defaults` dictionary, and the default value `defval`.

Parameters
----------
Expand All @@ -214,15 +215,15 @@ def _get_param(module, param, argval=None, defval=None, pop=False, last=False):
defval : object
Default value of the parameter to use, if it is not located in the
`config.defaults` dictionary. If a dictionary is provided, then
`module.param` is used to determine the default value. Defaults to
'module.param' is used to determine the default value. Defaults to
None.
pop : bool, optional
If `True` and if argval is a dict, then pop the remove the parameter
If True and if argval is a dict, then pop the remove the parameter
entry from the argval dict after retreiving it. This allows the use
of a keyword argument list to be passed through to other functions
internal to the function being called.
last : bool, optional
If `True`, check to make sure dictionary is empy after processing.
If True, check to make sure dictionary is empy after processing.

"""

Expand Down Expand Up @@ -395,7 +396,7 @@ def _process_legacy_keyword(kwargs, oldkey, newkey, newval, warn_oldkey=True):
newval : object
Value of the current parameter (from the function signature).
warn_oldkey : bool
If set to `False`, suppress generation of a warning about using a
If set to False, suppress generation of a warning about using a
legacy keyword. This is useful if you have two versions of a
keyword and you want to allow either to be used (see the `cost` and
`trajectory_cost` keywords in `flatsys.point_to_point` for an
Expand Down
10 changes: 5 additions & 5 deletions control/ctrlplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ class ControlPlot():
Figure on which the Axes are drawn.
legend : `matplotlib:.legend.Legend` (instance or ndarray)
Legend object(s) for the plot. If more than one legend is
included, this will be an array with each entry being either` None`
included, this will be an array with each entry being either`` None``
(for no legend) or a legend object.

"""
Expand Down Expand Up @@ -194,7 +194,7 @@ def set_plot_title(self, title, frame='axes'):
fig : Figure, optional
Matplotlib figure. Defaults to current figure.
frame : str, optional
Coordinate frame to use for centering: 'axes' (default) or 'figure'.
Coordinate frame for centering: 'axes' (default) or 'figure'.
**kwargs : `matplotlib.pyplot.suptitle` keywords, optional
Additional keywords (passed to matplotlib).

Expand Down Expand Up @@ -282,7 +282,7 @@ def pole_zero_subplots(
Figure to use for creating subplots.
rcParams : dict
Override the default parameters used for generating plots.
Default is set by config.defaults['ctrlplot.rcParams'].
Default is set by `config.defaults['ctrlplot.rcParams']`.

Returns
-------
Expand Down Expand Up @@ -350,7 +350,7 @@ def _process_ax_keyword(
created with axes of the desired shape.

If `create_axes` is False and a new/empty figure is returned, then axs
is an array of the proper shape but `None` for each element. This allows
is an array of the proper shape but None for each element. This allows
the calling function to do the actual axis creation (needed for
curvilinear grids that use the AxisArtist module).

Expand Down Expand Up @@ -735,7 +735,7 @@ def _get_color(
Returns
-------
color : matplotlib color spec
Color to use for this line (or `None` for matplotlib default).
Color to use for this line (or None for matplotlib default).

"""
# See if the color was explicitly specified by the user
Expand Down
2 changes: 1 addition & 1 deletion control/ctrlutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def unwrap(angle, period=2*math.pi):
angle : array_like
Array of angles to be unwrapped.
period : float, optional
Period (defaults to `2*pi`).
Period (defaults to ``2*pi``).

Returns
-------
Expand Down
8 changes: 4 additions & 4 deletions control/delay.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
__all__ = ['pade']

def pade(T, n=1, numdeg=None):
"""
Create a linear system that approximates a delay.
"""Create a linear system that approximates a delay.

Return the numerator and denominator coefficients of the Pade approximation.
Return the numerator and denominator coefficients of the Pade
approximation of the given order.

Parameters
----------
Expand All @@ -20,7 +20,7 @@ def pade(T, n=1, numdeg=None):
n : positive integer
Degree of denominator of approximation.
numdeg : integer, or None (the default)
If numdeg is `None`, numerator degree equals denominator degree.
If numdeg is None, numerator degree equals denominator degree.
If numdeg >= 0, specifies degree of numerator.
If numdeg < 0, numerator degree is n+numdeg.

Expand Down
Loading