Skip to content

Commit c13fd28

Browse files
committed
Fix links and references in docs
1 parent c378289 commit c13fd28

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

docs/conf.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class GroupHandler_mock:
2828
needs_sphinx = "1.3"
2929

3030
extensions = [
31+
"sphinx.ext.intersphinx",
3132
"sphinx.ext.autodoc",
3233
"sphinx.ext.autosummary",
3334
"sphinx.ext.mathjax",
@@ -61,6 +62,12 @@ class GroupHandler_mock:
6162

6263
toc_object_entries_show_parents = "hide"
6364

65+
intersphinx_mapping = {
66+
"numpy": ("https://numpy.org/doc/stable", None),
67+
"python": ("https://docs.python.org/3", None),
68+
"scipy": ("https://docs.scipy.org/doc/scipy", None),
69+
}
70+
6471
def on_missing_reference(app, env, node, contnode):
6572
if node["reftype"] == "any":
6673
return contnode

docs/index.rst

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ The JiTCODE module
77
Overview
88
--------
99

10-
JiTCODE (just-in-time compilation for ordinary differential equations) is an extension of SciPy’s `ODE`_ (`scipy.integrate.ode`) or `Solve IVP`_ (`scipy.integrate.solve_ivp`).
10+
JiTCODE (just-in-time compilation for ordinary differential equations) is an extension of SciPy’s `ODE`_ (:class:`scipy.integrate.ode`) or `Solve IVP`_ (:func:`scipy.integrate.solve_ivp`).
1111
Where the latter take a Python function as an argument, JiTCODE takes an iterable (or generator function or dictionary) of symbolic expressions, which it translates to C code, compiles on the fly, and uses as the function to feed into SciPy’s ODE or Solve IVP.
1212
Symbolic expressions are mostly handled by `SymEngine`_, `SymPy`_’s compiled-backend-to-be (see `SymPy vs. SymEngine`_ for details).
1313

@@ -69,9 +69,11 @@ An explicit example
6969
Details of the building process
7070
-------------------------------
7171

72+
.. currentmodule:: jitcode
73+
7274
To generate the functions needed by SciPy’s ODE or Solve IVP, JiTCODE executes a series of distinct processing steps, each of which can be invoked through a command and tweaked as needed.
7375
These commands execute previous steps as needed, i.e., if they have not been performed yet.
74-
If you are happy with the default options, however, you do not need to bother with this and can just use the commands at the very end of the chain, namely `set_integrator`, `set_initial_value`, or `save_compiled`.
76+
If you are happy with the default options, however, you do not need to bother with this and can just use the commands at the very end of the chain, namely :meth:`~_jitcode.jitcode.set_integrator`, :meth:`~_jitcode.jitcode.set_initial_value`, or :meth:`~_jitcode.jitcode.save_compiled`.
7577

7678
The following diagram details which command calls which other command when needed:
7779

@@ -102,12 +104,12 @@ A more complicated example
102104
Calculating Lyapunov exponents with `jitcode_lyap`
103105
--------------------------------------------------
104106

105-
`jitcode_lyap` is a simple extension of `jitcode` that almost automatically handles calculating Lyapunov exponents by evolving tangent vectors [BGGS80]_.
106-
It works just like `jitcode`, except that it generates and integrates additional differential equations for the tangent vectors.
107-
After every call of `integrate`, the tangent vectors are orthonormalised, and the “local” Lyapunov exponents for this integration step are returned alongside with the system’s state.
107+
:class:`~_jitcode.jitcode_lyap` is a simple extension of :class:`~_jitcode.jitcode` that almost automatically handles calculating Lyapunov exponents by evolving tangent vectors [BGGS80]_.
108+
It works just like :class:`~_jitcode.jitcode`, except that it generates and integrates additional differential equations for the tangent vectors.
109+
After every call of :meth:`~_jitcode.jitcode_lyap.integrate`, the tangent vectors are orthonormalised, and the “local” Lyapunov exponents for this integration step are returned alongside with the system’s state.
108110
These can then be further processed to obtain the Lyapunov exponents.
109111
The tangent vectors are initialised with random vectors, and you have to take care of the preiterations that the tangent vectors require to align themselves.
110-
You also have to take care not to `integrate` for too long to avoid a numerical overflow in the tangent vectors.
112+
You also have to take care not to :meth:`~_jitcode.jitcode_lyap.integrate` for too long to avoid a numerical overflow in the tangent vectors.
111113

112114
Estimates for the Lyapunov vectors are returned as well.
113115

@@ -124,7 +126,7 @@ Estimates for the Lyapunov vectors are returned as well.
124126
Calculating transversal Lyapunov exponents with `jitcode_transversal_lyap`
125127
--------------------------------------------------------------------------
126128

127-
`jitcode_transversal_lyap` is a variant of `jitcode_lyap` that calculates Lyapunov exponents transversal to a user-defined synchronisation manifold.
129+
:class:`~_jitcode.jitcode_transversal_lyap` is a variant of :class:`~_jitcode.jitcode_lyap` that calculates Lyapunov exponents transversal to a user-defined synchronisation manifold.
128130
It automatically conflates the differential equations of a group of synchronised components into one equation on the synchronisation manifold.
129131
Moreover, it transforms the equations for the tangent vectors such that the tangent vector is automatically orthogonal to the synchronisation manifold.
130132
If you are interested in the mathematical details, please read `the accompanying paper`_.

examples/SW_of_Roesslers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
\\dot{z}_i &= b + z_i (x_i -c) + k \\sum_{j=0}^N (z_j-z_i)
1313
\\end{alignedat}
1414
15-
The control parameters shall be :math:`a = 0.165`, :math:`b = 0.2`, :math:`c = 10.0`, and :math:`k = 0.01`. The (frequency) parameter :math:`ω_i` shall be picked randomly from the uniform distribution on :math:`[0.8,1.0]` for each :math:`i`. :math:`A∈ℝ^{N×N}` shall be the adjacency matrix of a one-dimensional small-world network (which shall be provided by a function `small_world_network` in the following example code). So, the :math:`x` components are coupled diffusively with a small-world coupling topology, while the :math:`z` components are coupled diffusively to their mean field, with the coupling term being modulated with :math:`\\sin(t)`.
15+
The control parameters shall be :math:`a = 0.165`, :math:`b = 0.2`, :math:`c = 10.0`, and :math:`k = 0.01`. The (frequency) parameter :math:`ω_i` shall be picked randomly from the uniform distribution on :math:`[0.8,1.0]` for each :math:`i`. :math:`A∈ℝ^{N×N}` shall be the adjacency matrix of a one-dimensional small-world network (which shall be provided by a function :any:`small_world_network` in the following example code). So, the :math:`x` components are coupled diffusively with a small-world coupling topology, while the :math:`z` components are coupled diffusively to their mean field, with the coupling term being modulated with :math:`\\sin(t)`.
1616
1717
Without further ado, here is the example code (`complete running example <https://raw.githubusercontent.com/neurophysik/jitcode/master/examples/SW_of_Roesslers.py>`_); highlighted lines will be commented upon below:
1818
@@ -28,7 +28,7 @@
2828
2929
* Since we need :math:`\\sum_{j=0}^N x_j` to calculate the derivative of :math:`z` for every oscillator, it is prudent to only calculate this once. Therefore we define a helper symbol for this in lines 26 and 27, which we employ in line 35. (See the arguments of `jitcode` for details.)
3030
31-
* In line 32, we implement :math:`\\sin(t)`. For this purpose we had to import `t` in line 3. Also, we need to use `symengine.sin` – in contrast to `math.sin` or `numpy.sin`.
31+
* In line 32, we implement :math:`\\sin(t)`. For this purpose we had to import `t` in line 3. Also, we need to use `symengine.sin` – in contrast to :func:`math.sin` or :data:`numpy.sin`.
3232
3333
* As this is a large system, we use a generator function instead of a list to define :math:`f` (lines 29-36) and have the code automatically be split into chunks of 150 lines, corresponding to the equations of fifty oscillators, in line 44. (For this system, any reasonably sized multiple of 3 is a good choice for `chunk_size`; for other systems, the precise choice of the value may be more relevant.) See `large_systems` for the rationale.
3434
"""

0 commit comments

Comments
 (0)