From 7711aae7701b611f399faba74906b8447777f950 Mon Sep 17 00:00:00 2001 From: zhengp0 Date: Sat, 5 Aug 2023 02:40:22 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20zhengp0/?= =?UTF-8?q?xspline@3c1df4b67f98cdcc8668b6b3ed1553b1d52d1df2=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .buildinfo | 4 + _images/readme_usage_0.png | Bin 0 -> 37390 bytes _images/readme_usage_1.png | Bin 0 -> 26867 bytes _images/readme_usage_2.png | Bin 0 -> 29353 bytes _images/readme_usage_3.png | Bin 0 -> 24279 bytes _modules/index.html | 262 +++++ _modules/xspline/bspl.html | 488 ++++++++++ _modules/xspline/indi.html | 373 +++++++ _modules/xspline/poly.html | 401 ++++++++ _modules/xspline/xfunction.html | 515 ++++++++++ _modules/xspline/xspl.html | 336 +++++++ _sources/api_reference/index.rst.txt | 8 + _sources/api_reference/xspline.bspl.rst.txt | 7 + _sources/api_reference/xspline.indi.rst.txt | 7 + _sources/api_reference/xspline.poly.rst.txt | 7 + .../api_reference/xspline.xfunction.rst.txt | 7 + _sources/api_reference/xspline.xspl.rst.txt | 7 + _sources/index.rst.txt | 26 + _sources/installation.rst.txt | 20 + _sources/quickstart.rst.txt | 89 ++ _static/basic.css | 921 ++++++++++++++++++ _static/css/custom.css | 20 + _static/debug.css | 69 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 14 + _static/file.png | Bin 0 -> 286 bytes _static/language_data.js | 199 ++++ _static/logo/logo-dark.png | Bin 0 -> 109859 bytes _static/logo/logo-light.png | Bin 0 -> 92602 bytes _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 255 +++++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 566 +++++++++++ _static/skeleton.css | 296 ++++++ _static/sphinx_highlight.js | 144 +++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + api_reference/index.html | 319 ++++++ api_reference/xspline.bspl.html | 409 ++++++++ api_reference/xspline.indi.html | 393 ++++++++ api_reference/xspline.poly.html | 431 ++++++++ api_reference/xspline.xfunction.html | 412 ++++++++ api_reference/xspline.xspl.html | 332 +++++++ genindex.html | 438 +++++++++ index.html | 319 ++++++ installation.html | 291 ++++++ objects.inv | 6 + py-modindex.html | 305 ++++++ quickstart.html | 369 +++++++ search.html | 268 +++++ searchindex.js | 1 + 57 files changed, 9507 insertions(+) create mode 100644 .buildinfo create mode 100644 _images/readme_usage_0.png create mode 100644 _images/readme_usage_1.png create mode 100644 _images/readme_usage_2.png create mode 100644 _images/readme_usage_3.png create mode 100644 _modules/index.html create mode 100644 _modules/xspline/bspl.html create mode 100644 _modules/xspline/indi.html create mode 100644 _modules/xspline/poly.html create mode 100644 _modules/xspline/xfunction.html create mode 100644 _modules/xspline/xspl.html create mode 100644 _sources/api_reference/index.rst.txt create mode 100644 _sources/api_reference/xspline.bspl.rst.txt create mode 100644 _sources/api_reference/xspline.indi.rst.txt create mode 100644 _sources/api_reference/xspline.poly.rst.txt create mode 100644 _sources/api_reference/xspline.xfunction.rst.txt create mode 100644 _sources/api_reference/xspline.xspl.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/installation.rst.txt create mode 100644 _sources/quickstart.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/css/custom.css create mode 100644 _static/debug.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/language_data.js create mode 100644 _static/logo/logo-dark.png create mode 100644 _static/logo/logo-light.png create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 api_reference/index.html create mode 100644 api_reference/xspline.bspl.html create mode 100644 api_reference/xspline.indi.html create mode 100644 api_reference/xspline.poly.html create mode 100644 api_reference/xspline.xfunction.html create mode 100644 api_reference/xspline.xspl.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 installation.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 quickstart.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..71bb53f --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 26a57ff8e21a3d1389089d19f814b95f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_images/readme_usage_0.png b/_images/readme_usage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..02bbdf1fafe7c86e15300658487dd8f06fc8b29f GIT binary patch literal 37390 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 literal 0 HcmV?d00001 diff --git a/_images/readme_usage_3.png b/_images/readme_usage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6809ce0fc78829a00f790da767d4c23eb8ba2e84 GIT binary patch literal 24279 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 + + + + + + + Overview: module code - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + +

Hide navigation sidebar
+ + + + + +
+
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+ +
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_modules/xspline/bspl.html b/_modules/xspline/bspl.html new file mode 100644 index 0000000..3bfbb2d --- /dev/null +++ b/_modules/xspline/bspl.html @@ -0,0 +1,488 @@ + + + + + + + + xspline.bspl - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for xspline.bspl

+import numpy as np
+from numpy.typing import NDArray
+
+from xspline.indi import indi_int
+from xspline.typing import BsplParams, RawFunction
+from xspline.xfunction import BundleXFunction
+
+
+
[docs]def cache_bspl(function: RawFunction) -> RawFunction: + """Cache implementation for bspline basis functions, to avoid repetitively + evaluate functions. + + Parameters + ---------- + function + Raw value, derivative and definite integral functions. + + Returns + ------- + describe + Cached version of the raw functions. + + """ + cache = {} + + def wrapper_function(*args, **kwargs) -> NDArray: + key = tuple(tuple(x.ravel()) if isinstance(x, np.ndarray) else x for x in args) + if key in cache: + return cache[key] + result = function(*args, **kwargs) + cache[key] = result + return result + + def cache_clear(): + cache.clear() + + wrapper_function.cache_clear = cache_clear + return wrapper_function
+ + +
[docs]@cache_bspl +def bspl_val(params: BsplParams, x: NDArray) -> NDArray: + """Value of the bspline function. + + Parameters + ---------- + params + Bspline function parameters as a tuple including, knots, degree and the + index of the spline basis. + x + Data points. + + Returns + ------- + describe + Function value of the bspline function. + + """ + # knots, degree, and index + t, k, i = params + + if k == 0: + val = np.zeros(x.shape, dtype=x.dtype) + val[(x >= t[i]) & (x < t[i + 1])] = 1.0 + if i == len(t) - 2: + val[x == t[i + 1]] = 1.0 + else: + ii = np.maximum(np.minimum([i, i + 1, i + k, i + k + 1], len(t) - 1), 0) + + val0 = np.zeros(x.shape, dtype=x.dtype) + val1 = np.zeros(x.shape, dtype=x.dtype) + + if t[ii[0]] != t[ii[2]]: + n0 = bspl_val((t, k - 1, i), x) + val0 = (x - t[ii[0]]) * n0 / (t[ii[2]] - t[ii[0]]) + if t[ii[1]] != t[ii[3]]: + n1 = bspl_val((t, k - 1, i + 1), x) + val1 = (t[ii[3]] - x) * n1 / (t[ii[3]] - t[ii[1]]) + + val = val0 + val1 + + return val
+ + +
[docs]@cache_bspl +def bspl_der(params: BsplParams, x: NDArray, order: int) -> NDArray: + """Derivative of the bspline function. + + Parameters + ---------- + params + Bspline function parameters as a tuple including, knots, degree and the + index of the spline basis. + x + Data points. + + Returns + ------- + describe + Derivative of the bspline function. + + """ + # knots, degree, and index + t, k, i = params + + if order == 0: + return bspl_val(params, x) + + if order > k: + return np.zeros(x.shape, dtype=x.dtype) + + ii = np.maximum(np.minimum([i, i + 1, i + k, i + k + 1], len(t) - 1), 0) + + val0 = np.zeros(x.shape, dtype=x.dtype) + val1 = np.zeros(x.shape, dtype=x.dtype) + + if t[ii[0]] != t[ii[2]]: + n0 = bspl_der((t, k - 1, i), x, order - 1) + val0 = k * n0 / (t[ii[2]] - t[ii[0]]) + if t[ii[1]] != t[ii[3]]: + n1 = bspl_der((t, k - 1, i + 1), x, order - 1) + val1 = k * n1 / (t[ii[3]] - t[ii[1]]) + + val = val0 - val1 + + return val
+ + +
[docs]@cache_bspl +def bspl_int(params: BsplParams, x: NDArray, order: int) -> NDArray: + """Definite integral of the bspline function. + + Parameters + ---------- + params + Bspline function parameters as a tuple including, knots, degree and the + index of the spline basis. + x + Data points. + + Returns + ------- + describe + Definite integral of the bspline function. + + """ + # knots, degree, and index + t, k, i = params + + if order == 0: + return bspl_val(params, x) + + ii = np.maximum(np.minimum([i, i + 1, i + k, i + k + 1], len(t) - 1), 0) + if k == 0: + val = np.zeros(x.shape, dtype=x.dtype) + if t[ii[0]] != t[ii[1]]: + val = indi_int(((t[ii[0]], True), (t[ii[1]], True)), x, order) + else: + val0 = np.zeros(x.shape, dtype=x.dtype) + val1 = np.zeros(x.shape, dtype=x.dtype) + + if t[ii[0]] != t[ii[2]]: + val0 = ( + (x - t[ii[0]]) * bspl_int((t, k - 1, i), x, order) + + order * bspl_int((t, k - 1, i), x, order - 1) + ) / (t[ii[2]] - t[ii[0]]) + if t[ii[1]] != t[ii[3]]: + val1 = ( + (t[ii[3]] - x) * bspl_int((t, k - 1, i + 1), x, order) + - order * bspl_int((t, k - 1, i + 1), x, order - 1) + ) / (t[ii[3]] - t[ii[1]]) + + val = val0 + val1 + + return val
+ + +
[docs]def clear_bspl_cache() -> None: + """Clear all cache of the value, derivative and definite integral for + bspline function. + + """ + bspl_val.cache_clear() + bspl_der.cache_clear() + bspl_int.cache_clear()
+ + +
[docs]class Bspl(BundleXFunction): + """Basis spline function. + + Parameters + ---------- + params + This is a tuple that contains knots, degree and index of the basis + function. + + Example + ------- + >>> bspl = Bspl(((0.0, 1.0), 1, 0)) # knots=(0.0, 1.0), degree=2, index=0 + >>> bspl([0.0, 1.0]) + array([0., 1.]) + >>> bspl([0.0, 1.0], order=1) + array([1., 1.]) + >>> bspl([0.0, 1.0], order=2) + array([0., 0.]) + >>> bspl([0.0, 1.0], order=-1) + array([0. , 0.5]) + + """ + + def __init__(self, params: BsplParams) -> None: + super().__init__(params, bspl_val, bspl_der, bspl_int)
+ + +
[docs]def get_bspl_funs(knots: tuple[float, ...], degree: int) -> tuple[Bspl]: + """Create the bspline basis functions give knots and degree. + + Parameters + ---------- + knots + Bspline knots. + degree + Bspline degree. + + Returns + ------- + describe + A full set of bspline functions. + + """ + return tuple(Bspl((knots, degree, i)) for i in range(-degree, len(knots) - 1))
+
+
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_modules/xspline/indi.html b/_modules/xspline/indi.html new file mode 100644 index 0000000..c28ae6b --- /dev/null +++ b/_modules/xspline/indi.html @@ -0,0 +1,373 @@ + + + + + + + + xspline.indi - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for xspline.indi

+from math import factorial
+
+import numpy as np
+
+from xspline.typing import IndiParams, NDArray
+from xspline.xfunction import BundleXFunction
+
+
+
[docs]def indi_val(params: IndiParams, x: NDArray) -> NDArray: + """Indicator value function, + + Parameters + ---------- + params + Indicator parameters as a tuple consists of lower and upper bound of + the interval corresponding to the indicator function. + x + Data points. + + Returns + ------- + describe + Indicator function value. + + """ + # lower and upper bounds + lb, ub = params + + val = np.zeros(x.size, dtype=x.dtype) + ind = (x > lb[0]) & (x < ub[0]) + if lb[1]: + ind = ind | (x == lb[0]) + if ub[1]: + ind = ind | (x == ub[0]) + val[ind] = 1.0 + return val
+ + +
[docs]def indi_der(params: IndiParams, x: NDArray, order: int) -> NDArray: + """Indicator derivative function. Since indicator function is a piecewise + constant function, its derivative will always be zero. + + Parameters + ---------- + params + Indicator parameters as a tuple consists of lower and upper bound of + the interval corresponding to the indicator function. + x + Data points. + + Returns + ------- + describe + Indicator deviative value. + + """ + return np.zeros(x.size, dtype=x.dtype)
+ + +
[docs]def indi_int(params: IndiParams, x: NDArray, order: int) -> NDArray: + """Indicator definite integral function. It is a piecewise polynomial + function. + + Parameters + ---------- + params + Indicator parameters as a tuple consists of lower and upper bound of + the interval corresponding to the indicator function. + x + Data points. + + Returns + ------- + describe + Indicator definite integral value. + + """ + # lower and upper bounds + lb, ub = params + + val = np.zeros(x.size, dtype=x.dtype) + ind0 = (x >= lb[0]) & (x <= ub[0]) + ind1 = x > ub[0] + val[ind0] = (x[ind0] - lb[0]) ** (-order) / factorial(-order) + for i in range(-order): + val[ind1] += ((ub[0] - lb[0]) ** (-order - i) / factorial(-order - i)) * ( + (x[ind1] - ub[0]) ** i / factorial(i) + ) + return val
+ + +
[docs]class Indi(BundleXFunction): + """Indicator function. + + Parameters + ---------- + params + This is a tuple contains the lower and upper bounds of the indicator + function. For each bound it consists of a number for the location of the + bound and a boolean for the inclusion of the bound. For example, if we + pass in `((0.0, True), (1.0, False))`, this represents interval [0, 1). + + Example + ------- + >>> indi = Indi(((0.0, True), (1.0, False))) + >>> indi([-1.0, 0.0, 1.0]) + array([0., 1., 0.]) + >>> indi([-1.0, 0.0, 1.0], order=1) + array([0., 0., 0.]) + >>> indi([-1.0, 0.0, 1.0], order=-1) + array([0., 0., 1.]) + + """ + + def __init__(self, params: IndiParams) -> None: + super().__init__(params, indi_val, indi_der, indi_int)
+
+
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_modules/xspline/poly.html b/_modules/xspline/poly.html new file mode 100644 index 0000000..dd76c05 --- /dev/null +++ b/_modules/xspline/poly.html @@ -0,0 +1,401 @@ + + + + + + + + xspline.poly - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for xspline.poly

+from math import factorial
+
+import numpy as np
+
+from xspline.typing import PolyParams, NDArray
+from xspline.xfunction import BundleXFunction, XFunction
+
+
+
[docs]def poly_val(params: PolyParams, x: NDArray) -> NDArray: + """Polynomial value function. + + Parameters + ---------- + params + Polynomial coefficients. + x + Data points. + + Returns + ------- + describe + Polynomial function values. + + """ + return np.polyval(params, x)
+ + +
[docs]def poly_der(params: PolyParams, x: NDArray, order: int) -> NDArray: + """Polynomial derivative function. + + Parameters + ---------- + params + Polynomial coefficients. + x + Data points. + order + Order of differentiation. + + Returns + ------- + describe + Polynomial derivative values. + + """ + return np.polyval(np.polyder(params, order), x)
+ + +
[docs]def poly_int(params: PolyParams, x: NDArray, order: int) -> NDArray: + """Polynomial definite integral function. + + Parameters + ---------- + params + Polynomial coefficients. + x + Data points. + order + Order of integration. Here we use negative integer. + + Returns + ------- + describe + Polynomial definite integral values. + + """ + + return np.polyval(np.polyint(params, -order), x)
+ + +
[docs]class Poly(BundleXFunction): + """Polynomial function. A simple wrapper for the numpy poly functions. + + Parameters + ---------- + params + This a tuple contains coefficients for the terms in polynomial. + + Example + ------- + >>> poly = Poly((1.0, 0.0)) + >>> poly([0.0, 1.0]) + array([0.0, 1.0]) + >>> poly([0.0, 1.0], order=1) + array([1.0, 1.0]) + >>> poly([0.0, 1.0], order=2) + array([0.0, 0.0]) + >>> poly([0.0, 1.0]], order=-1) + array([0.0, 0.5]) + + """ + + def __init__(self, params: PolyParams) -> None: + super().__init__(params, poly_val, poly_der, poly_int)
+ + +
[docs]def get_poly_params(fun: XFunction, x: float, degree: int) -> tuple[float, ...]: + """Solve polynomial (taylor) coefficients provided the ``XFunction``. + + Parameters + ---------- + fun + Provided ``XFunction`` to be approximated. + x + The point where we want to approximate ``XFunction`` by the polynomial. + degree + Degree of the approximation polynomial. + + Returns + ------- + describe + The approximation polynomial coefficients. + + """ + if degree < 0: + return (0.0,) + rhs = np.array([fun(x, order=i) for i in range(degree, -1, -1)]) + mat = np.zeros((degree + 1, degree + 1)) + for i in range(degree + 1): + for j in range(i + 1): + mat[i, j] = factorial(degree - j) / factorial(i - j) * x ** (i - j) + return tuple(np.linalg.solve(mat, rhs))
+ + +
[docs]def get_poly_fun(fun: XFunction, x: float, degree: int) -> Poly: + """Get the approximation polynomial function. + + Parameters + ---------- + fun + Provided ``XFunction`` to be approximated. + x + The point where we want to approximate ``XFunction`` by the polynomial. + degree + Degree of the approximation polynomial. + + Returns + ------- + describe + Instance of the ``Poly`` class to approximate provided ``XFunction``. + + """ + params = get_poly_params(fun, x, degree) + return Poly(params)
+
+
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_modules/xspline/xfunction.html b/_modules/xspline/xfunction.html new file mode 100644 index 0000000..f5fd031 --- /dev/null +++ b/_modules/xspline/xfunction.html @@ -0,0 +1,515 @@ + + + + + + + + xspline.xfunction - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for xspline.xfunction

+from __future__ import annotations
+from functools import partial
+from math import factorial
+from operator import attrgetter
+
+import numpy as np
+
+from xspline.typing import (
+    BoundaryPoint,
+    Callable,
+    RawDFunction,
+    RawIFunction,
+    RawVFunction,
+    NDArray,
+)
+
+
+
[docs]class XFunction: + """Function interface that provide easy access to function value, + derivatives and definite integrals. + + Parameters + ---------- + fun + Function implementation. + + TODO: describe the interface of the function implementation + + """ + + def __init__(self, fun: Callable) -> None: + self._fun = fun + + def _check_args(self, x: NDArray, order: int) -> tuple[NDArray, int, bool]: + x, order = np.asarray(x, dtype=float), int(order) + if (x.ndim not in [0, 1, 2]) or (x.ndim == 2 and len(x) != 2): + raise ValueError( + "please provide a scalar, an 1d array, or a 2d " "array with two rows" + ) + + # reshape array + isscalar = x.ndim == 0 + if isscalar: + x = x.ravel() + if order >= 0 and x.ndim == 2: + raise ValueError( + "please provide an 1d array for function value " + "defivative computation" + ) + if order < 0 and x.ndim == 1: + x = np.vstack([np.repeat(x.min(), x.size), x]) + + # check interval bounds + if order < 0 and (x[0] > x[1]).any(): + raise ValueError("to integrate, `x` must satisfy `x[0] <= x[1]`") + + return x, order, isscalar + + def __call__(self, x: NDArray, order: int = 0) -> NDArray: + """Function returns function values, derivatives and definite integrals. + + Parameters + ---------- + x + Data points where the function is evaluated. If `order < 0` and `x` + is a 2d array with two rows, the rows will be treated as the + starting and ending points for definite interval. If `order < 0` and + `x` is a 1d array, function will use the smallest number in `x` as + the starting point of the definite interval. + order + Order of differentiation or integration. When `order = 0`, function + value will be returned. When `order > 0` function derviative will + be returned. When `order < 0`, function integral will be returned. + Default is `0`. + + Returns + ------- + describe + Return function values, derivatives or definite integrals. + + Raises + ------ + AttributeError + Raised when the function implementation is not provided. + ValueError + Raised when `x` is not a scalar, 1d array or 2d array with two rows. + ValueErorr + Raised when `order >= 0` and `x` is a 2d array. + ValueError + Raised when `order < 0` and `any(x[0] > x[1])`. + + """ + x, order, isscalar = self._check_args(x, order) + if x.size == 0: + return np.empty(shape=x.shape, dtype=x.dtype) + result = self._fun(x, order) + if isscalar: + return result[0] + return result + +
[docs] def append(self, other: XFunction, sep: BoundaryPoint) -> XFunction: + """Splice with another instance of ``XFunction`` to create a new + ``XFunction``. + + Parameters + ---------- + other + Another ``XFunction`` after the current function. + sep + The boundary point to separate two functions, before is the current + function and after the the ``other`` function. + + """ + lfun, rfun = self._fun, other._fun + + def fun(x: NDArray, order: int = 0) -> NDArray: + left = x <= sep[0] if sep[1] else x < sep[0] + + if order >= 0: + return np.where(left, lfun(x, order), rfun(x, order)) + + lboth, rboth = left.all(axis=0), (~left).all(axis=0) + landr = (~lboth) & (~rboth) + + result = np.zeros(x.shape[1], dtype=x.dtype) + result[lboth] = lfun(x[:, lboth], order) + result[rboth] = rfun(x[:, rboth], order) + + if landr.any(): + lx = np.insert(x[np.ix_([0], landr)], 1, sep[0], axis=0) + rx = np.insert(x[np.ix_([1], landr)], 0, sep[0], axis=0) + dx = x[1][landr] - sep[0] + + for i in range(1, -order): + result[landr] += lfun(lx, order + i) * (dx**i / factorial(i)) + result[landr] += lfun(lx, order) + rfun(rx, order) + return result + + return XFunction(fun)
+ + +
[docs]class BundleXFunction(XFunction): + """This is one implementation of the ``XFunction``, it takes the value, + derivative and definite integral function and bundle them together as a + ``XFunction``. + + Parameters + ---------- + params + This is the parameters that is needed for the value, derivatives and + the definitely integral function. + val_fun + Value function. + der_fun + Derviative function. + int_fun + Defintie integral function. + + """ + + def __init__( + self, + params: tuple, + val_fun: RawVFunction, + der_fun: RawDFunction, + int_fun: RawIFunction, + ) -> None: + self.params = params + self.val_fun = partial(val_fun, params) + self.der_fun = partial(der_fun, params) + self.int_fun = partial(int_fun, params) + + def fun(x: NDArray, order: int = 0) -> NDArray: + if order == 0: + return self.val_fun(x) + if order > 0: + return self.der_fun(x, order) + dx = np.diff(x, axis=0)[0] + val = self.int_fun(x[1], order) + for i in range(-order): + val -= self.int_fun(x[0], order + i) * (dx**i / factorial(i)) + return val + + super().__init__(fun)
+ + +
[docs]class BasisXFunction(XFunction): + """This is one implementation of ``XFunction`` by taking in a set of + instances of ``XFunction`` as basis functions. And the linear combination + coefficients to provide function value, derivative and definite integral. + + Parameters + ---------- + basis_funs + A set of instances of ``XFunction`` as basis functions. + coef + Coefficients for the linearly combine the basis functions. + + """ + + coef = property(attrgetter("_coef")) + + def __init__( + self, basis_funs: tuple[XFunction, ...], coef: NDArray | None = None + ) -> None: + if not all(isinstance(fun, XFunction) for fun in basis_funs): + raise TypeError("basis functions must all be instances of 'XFunction'") + self.basis_funs = tuple(basis_funs) + self.coef = coef + + def fun(x: NDArray, order: int = 0) -> NDArray: + if self.coef is None: + raise ValueError( + "please provide the coefficients for the basis functions" + ) + design_mat = self.get_design_mat(x, order=order, check_args=False) + return design_mat.dot(self.coef) + + super().__init__(fun) + + @coef.setter + def coef(self, coef: NDArray | None) -> None: + if coef is not None: + coef = np.asarray(coef, dtype=float).ravel() + if coef.size != len(self): + raise ValueError( + "number of coeffcients does not match number of basis functions" + ) + self._coef = coef + +
[docs] def get_design_mat( + self, x: NDArray, order: int = 0, check_args: bool = True + ) -> NDArray: + """Provide design matrix from the set of basis functions. + + Parameters + ---------- + x + Data points + order + Order of differentiation/integration. + check_args + If ``True`` it will check and parse the arguments. + + Returns + ------- + describe + Design matrix with dimention number of data points by number of + basis functions. + + """ + if check_args: + x, order, _ = self._check_args(x, order) + return np.vstack([xfun._fun(x, order) for xfun in self.basis_funs]).T
+ + def __len__(self) -> int: + """Number of basis functions.""" + return len(self.basis_funs)
+
+
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_modules/xspline/xspl.html b/_modules/xspline/xspl.html new file mode 100644 index 0000000..1c39b9e --- /dev/null +++ b/_modules/xspline/xspl.html @@ -0,0 +1,336 @@ + + + + + + + + xspline.xspl - xspline 0.1.0 + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for xspline.xspl

+from typing import Optional
+
+from xspline.bspl import clear_bspl_cache, get_bspl_funs
+from xspline.poly import get_poly_fun
+from xspline.xfunction import BasisXFunction
+from xspline.typing import NDArray
+
+
+
[docs]class XSpline(BasisXFunction): + """Main class for xspline functions. + + Parameters + ---------- + knots + Knots of the spline. + degree + Degree of the spline. + ldegree + Left extrapolation polynomial degree. + rdegree + Right extrapolation polynomial degree. + coef + The coefficients for linear combining the spline basis. + + """ + + def __init__( + self, + knots: tuple[float, ...], + degree: int, + ldegree: Optional[int] = None, + rdegree: Optional[int] = None, + coef: Optional[NDArray] = None, + ) -> None: + # validate inputs + knots, degree = tuple(sorted(map(float, knots))), int(degree) + if len(set(knots)) < 2: + raise ValueError("please provide at least provide 2 distinct knots") + if degree < 0: + raise ValueError("degree must be nonnegative") + ldegree = min(int(degree if ldegree is None else ldegree), degree) + rdegree = min(int(degree if rdegree is None else rdegree), degree) + + # create basis functions + mfuns = get_bspl_funs(knots, degree) + lfuns = tuple(get_poly_fun(fun, knots[0], ldegree) for fun in mfuns) + rfuns = tuple(get_poly_fun(fun, knots[-1], rdegree) for fun in mfuns) + funs = tuple( + lfun.append(mfun, (knots[0], False)).append(rfun, (knots[-1], True)) + for lfun, mfun, rfun in zip(lfuns, mfuns, rfuns) + ) + + self.knots, self.degree = knots, degree + self.ldegree, self.rdegree = ldegree, rdegree + super().__init__(funs, coef=coef) + +
[docs] def get_design_mat( + self, x: NDArray, order: int = 0, check_args: bool = True + ) -> NDArray: + """Create design matrix from spline basis functions. + + Parameters + ---------- + x + Data points. + order + Order of differentiation/integration. + check_args + If ``True``, it will automatically check and parse the arguments. + + Returns + ------- + describe + Design matrix from spline basis functions. + + """ + design_mat = super().get_design_mat(x, order, check_args) + clear_bspl_cache() + return design_mat
+
+
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/_sources/api_reference/index.rst.txt b/_sources/api_reference/index.rst.txt new file mode 100644 index 0000000..f1528f3 --- /dev/null +++ b/_sources/api_reference/index.rst.txt @@ -0,0 +1,8 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 2 + :glob: + + * \ No newline at end of file diff --git a/_sources/api_reference/xspline.bspl.rst.txt b/_sources/api_reference/xspline.bspl.rst.txt new file mode 100644 index 0000000..90c4745 --- /dev/null +++ b/_sources/api_reference/xspline.bspl.rst.txt @@ -0,0 +1,7 @@ +xspline.bspl +============ + +.. automodule:: xspline.bspl + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/api_reference/xspline.indi.rst.txt b/_sources/api_reference/xspline.indi.rst.txt new file mode 100644 index 0000000..356fe9e --- /dev/null +++ b/_sources/api_reference/xspline.indi.rst.txt @@ -0,0 +1,7 @@ +xspline.indi +============= + +.. automodule:: xspline.indi + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/api_reference/xspline.poly.rst.txt b/_sources/api_reference/xspline.poly.rst.txt new file mode 100644 index 0000000..ba2e359 --- /dev/null +++ b/_sources/api_reference/xspline.poly.rst.txt @@ -0,0 +1,7 @@ +xspline.poly +============= + +.. automodule:: xspline.poly + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/api_reference/xspline.xfunction.rst.txt b/_sources/api_reference/xspline.xfunction.rst.txt new file mode 100644 index 0000000..347c4ea --- /dev/null +++ b/_sources/api_reference/xspline.xfunction.rst.txt @@ -0,0 +1,7 @@ +xspline.xfunction +================= + +.. automodule:: xspline.xfunction + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/api_reference/xspline.xspl.rst.txt b/_sources/api_reference/xspline.xspl.rst.txt new file mode 100644 index 0000000..fa9d091 --- /dev/null +++ b/_sources/api_reference/xspline.xspl.rst.txt @@ -0,0 +1,7 @@ +xspline.xspl +============= + +.. automodule:: xspline.xspl + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..a44d138 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,26 @@ +XSpline +======= + +Advanced spline package that provides b-spline bases, their derivatives and integrals. + + +To get started please check section :ref:`User's Guide`. +And the full reference is provided in section :ref:`Interface Reference`. + +User's guide +------------ + +.. toctree:: + :maxdepth: 2 + + installation + quickstart + + +Interface reference +------------------- + +.. toctree:: + :maxdepth: 2 + + api_reference/index diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt new file mode 100644 index 0000000..ef72c54 --- /dev/null +++ b/_sources/installation.rst.txt @@ -0,0 +1,20 @@ +============ +Installation +============ + + +XSpline requires python 3.10 or higher. XSpline only depends on ``numpy>=1.25.1``. +It can be installed via + +.. code:: bash + + pip install xspline>=0.1.0 + +For developers, you can clone the repository and install the package in the +development mode. + +.. code:: + + git clone https://github.com/zhengp0/xspline.git + cd xspline + pip install -e ".[test,docs]" \ No newline at end of file diff --git a/_sources/quickstart.rst.txt b/_sources/quickstart.rst.txt new file mode 100644 index 0000000..f76a730 --- /dev/null +++ b/_sources/quickstart.rst.txt @@ -0,0 +1,89 @@ +========== +Quickstart +========== + +Usage +----- + +You can use XSpline as a univariate function or use it to get design matrix. + +.. code:: python + + import numpy as np + import matplotlib.pyplot as plt + from xspline import XSpline + + spline = XSpline(knots=[0, 0.25, 0.5, 0.75, 1], degree=3) + x = np.arange(0, 1.01, 0.01) + + +One is to use XSpline as a univariate function. In this case, user must provide +coefficients for the spline bases. + +.. code:: python + + np.random.seed(123) + spline.coef = np.random.randn(len(spline)) + y, design_mat = spline(x), spline.get_design_mat(x) + + fig, ax = plt.subplots(1, 2, figsize=(10, 3)) + ax[0].plot(x, y) + ax[1].plot(x, design_mat) + +.. image:: images/readme_usage_0.png + +XSpline can be used to obtain derivatives. + +.. code:: python + + dy, ddesign_mat = spline(x, order=1), spline.get_design_mat(x, order=1) + + fig, ax = plt.subplots(1, 2, figsize=(10, 3)) + ax[0].plot(x, dy) + ax[1].plot(x, ddesign_mat) + +.. image:: images/readme_usage_1.png + +XSpline can be used to obtain definite integrals. + +.. code:: python + + iy, idesign_mat = spline(x, order=-1), spline.get_design_mat(x, order=-1) + + fig, ax = plt.subplots(1, 2, figsize=(10, 3)) + ax[0].plot(x, iy) + ax[1].plot(x, idesign_mat) + +.. image:: images/readme_usage_2.png + +XSpline can extrapolate with different polynomial options + +.. code:: python + + np.random.seed(123) + # constant extrapolation one the left and linear extrapolation on the right + spline = XSpline( + knots=[0, 0.25, 0.5, 0.75, 1], + degree=3, + ldegree=0, + rdegree=1, + coef=np.random.randn(len(spline)), + ) + x = np.arange(-0.5, 1.51, 0.01) + y, design_mat = spline(x), spline.get_design_mat(x) + + fig, ax = plt.subplots(1, 2, figsize=(10, 3)) + ax[0].plot(x, y) + ax[1].plot(x, design_mat) + for i in range(len(ax)): + ax[i].vlines( + [0, 1], + ymin=0, + ymax=1, + transform=ax[i].get_xaxis_transform(), + linestyle="--", + linewidth=1, + color="grey", + ) + +.. image:: images/readme_usage_3.png \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..cfc60b8 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,921 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/css/custom.css b/_static/css/custom.css new file mode 100644 index 0000000..1759363 --- /dev/null +++ b/_static/css/custom.css @@ -0,0 +1,20 @@ +/* reduce the size of the main text */ + +p { + font-size: 0.95rem; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 500; +} + +.sidebar-brand-text { + font-size: 1rem; + font-weight: 500; + margin: auto; +} \ No newline at end of file diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 0000000..74d4aec --- /dev/null +++ b/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..b57ae3b --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo/logo-dark.png b/_static/logo/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b321abdfc49ab4784da2665950de220b0f32c85d GIT binary patch literal 109859 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%0AiJ-i>{ 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 literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..d9a83a7 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,255 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} \ No newline at end of file diff --git a/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 0000000..e69de29 diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 0000000..32e7c05 --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 0000000..1632189 --- /dev/null +++ b/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 0000000..7b7ddb1 --- /dev/null +++ b/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..97d56a7 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 0000000..467c878 --- /dev/null +++ b/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..aae669d --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 0000000..bc447f2 --- /dev/null +++ b/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 0000000..9ba5637 --- /dev/null +++ b/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 0000000..3d29a21 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 0000000..d1dfb10 --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"AAAA,2EAA2E,CAU3E,KAEE,6BAA8B,CAD9B,gBAEF,CASA,KACE,QACF,CAMA,KACE,aACF,CAOA,GACE,aAAc,CACd,cACF,CAUA,GACE,sBAAuB,CACvB,QAAS,CACT,gBACF,CAOA,IACE,+BAAiC,CACjC,aACF,CASA,EACE,4BACF,CAOA,YACE,kBAAmB,CACnB,yBAA0B,CAC1B,gCACF,CAMA,SAEE,kBACF,CAOA,cAGE,+BAAiC,CACjC,aACF,CAeA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CAEA,IACE,aACF,CAEA,IACE,SACF,CASA,IACE,iBACF,CAUA,sCAKE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACF,CAOA,aAEE,gBACF,CAOA,cAEE,mBACF,CAMA,gDAIE,yBACF,CAMA,wHAIE,iBAAkB,CAClB,SACF,CAMA,4GAIE,6BACF,CAMA,SACE,0BACF,CASA,OACE,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBACF,CAMA,SACE,uBACF,CAMA,SACE,aACF,CAOA,6BAEE,qBAAsB,CACtB,SACF,CAMA,kFAEE,WACF,CAOA,cACE,4BAA6B,CAC7B,mBACF,CAMA,yCACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,QACE,aACF,CAMA,QACE,iBACF,CAiBA,kBACE,YACF,CCvVA,aAcE,kEACE,uBAOF,WACE,iDAMF,gCACE,wBAEF,qCAEE,uBADA,uBACA,CAEF,SACE,wBAtBA,CCpBJ,iBAOE,6BAEA,mBANA,qBAEA,sBACA,0BAFA,oBAHA,4BAOA,6BANA,mBAOA,CAEF,gBACE,aCPF,KCGE,mHAEA,wGAGA,wBAAyB,CACzB,wBAAyB,CACzB,4BAA6B,CAC7B,yBAA0B,CAC1B,2BAA4B,CAG5B,sDAAuD,CACvD,gDAAiD,CACjD,wDAAyD,CAGzD,0CAA2C,CAC3C,gDAAiD,CACjD,gDAAiD,CAKjD,gCAAiC,CACjC,sCAAuC,CAGvC,2CAA4C,CAG5C,uCAAwC,CChCxC,+FAGA,uBAAwB,CAGxB,iCAAkC,CAClC,kCAAmC,CAEnC,+BAAgC,CAChC,sCAAuC,CACvC,sCAAuC,CACvC,qGAIA,mDAAoD,CAEpD,mCAAoC,CACpC,8CAA+C,CAC/C,gDAAiD,CACjD,kCAAmC,CACnC,6DAA8D,CAG9D,6BAA8B,CAC9B,6BAA8B,CAC9B,+BAAgC,CAChC,kCAAmC,CACnC,kCAAmC,CCPjC,ukBCYA,srCAZF,kaCVA,mLAOA,oTAWA,2UAaA,0CACA,gEACA,0CAGA,gEAUA,yCACA,+DAGA,4CACA,CACA,iEAGA,sGACA,uCACA,4DAGA,sCACA,2DAEA,4CACA,kEACA,oGACA,CAEA,0GACA,+CAGA,+MAOA,+EACA,wCAIA,4DACA,sEACA,kEACA,sEACA,gDAGA,+DACA,0CACA,gEACA,gGACA,CAGA,2DACA,qDAGA,0CACA,8CACA,oDACA,oDL7GF,iCAEA,iEAME,oCKyGA,yDAIA,sCACA,kCACA,sDAGA,0CACA,kEACA,oDAEA,sDAGA,oCACA,oEAIA,CAGA,yDAGA,qDACA,oDAGA,6DAIA,iEAGA,2DAEA,2DL9IE,4DAEA,gEAIF,gEKgGA,gFAIA,oNAOA,qDAEA,gFAIA,4DAIA,oEAMA,yEAIA,6DACA,0DAGA,uDAGA,qDAEA,wDLpII,6DAEA,yDACE,2DAMN,uCAIA,yCACE,8CAGF,sDMjDA,6DAKA,oCAIA,4CACA,kBAGF,sBAMA,2BAME,qCAGA,qCAEA,iCAEA,+BAEA,mCAEA,qCAIA,CACA,gCACA,gDAKA,kCAIA,6BAEA,0CAQA,kCAIF,8BAGE,8BACA,uCAGF,sCAKE,kCAEA,sDAGA,iCACE,CACA,2FAGA,gCACE,CACA,+DCzEJ,wCAEA,sBAEF,yDAEE,mCACA,wDAGA,2GAGA,wIACE,gDAMJ,kCAGE,6BACA,0CAGA,gEACA,8BACA,uCAKA,sCAIA,kCACA,sDACA,iCACA,sCAOA,sDAKE,gGAIE,+CAGN,sBAEE,yCAMA,0BAMA,yLAMA,aACA,MAEF,6BACE,2DAIF,wCAIE,kCAGA,SACA,kCAKA,mBAGA,CAJA,eACA,CAHF,gBAEE,CAWA,mBACA,mBACA,mDAGA,YACA,CACA,kBACA,CAEE,kBAKJ,OAPE,kBAQA,CADF,GACE,iCACA,wCAEA,wBACA,aACA,CAFA,WAEA,GACA,oBACA,CAFA,gBAEA,aACE,+CAIF,UAJE,kCAIF,WACA,iBACA,GAGA,uBACE,CAJF,yBAGA,CACE,iDACA,uCAEA,yDACE,cACA,wDAKN,yDAIE,uBAEF,kBACE,uBAEA,kDAIA,0DAGA,CAHA,oBAGA,0GAYA,aAEA,CAHA,YAGA,4HAKF,+CAGE,sBAEF,WAKE,0CAEA,CALA,qCAGA,CAJA,WAOA,SAIA,2CAJA,qCAIA,CACE,wBACA,OACA,YAEJ,gBACE,gBAIA,+CAKF,CAGE,kDAGA,CANF,8BAGE,CAGA,YAEA,CAdF,2BACE,CAHA,UAEF,CAYE,UAEA,CACA,0CACF,iEAOE,iCACA,8BAGA,wCAIA,wBAKE,0CAKF,CARE,6DAGA,CALF,qBAEE,CASA,YACA,yBAGA,CAEE,cAKN,CAPI,sBAOJ,gCAGE,qBAEA,WACA,aACA,sCAEA,mBACA,6BAGA,uEADA,qBACA,6BAIA,yBACA,qCAEE,UAEA,YACA,sBAEF,8BAGA,CAPE,aACA,WAMF,4BACE,sBACA,WAMJ,uBACE,cAYE,mBAXA,qDAKA,qCAGA,CAEA,YACA,CAHA,2BAEA,CACA,oCAEA,4CACA,uBAIA,oCAEJ,CAFI,cAIF,iBACE,CAHJ,kBAGI,yBAEA,oCAIA,qDAMF,mEAEA,CACE,8CAKA,gCAEA,qCAGA,oCAGE,sBACA,CAJF,WAEE,CAFF,eAEE,SAEA,mBACA,qCACE,aACA,CAFF,YADA,qBACA,WAEE,sBACA,kEAEN,2BAEE,iDAKA,uCAGF,CACE,0DAKA,kBACF,CAFE,sBAGA,mBACA,0BAEJ,yBAII,aADA,WACA,CAMF,UAFE,kBAEF,CAJF,gBACE,CAHE,iBAMF,6CC9ZF,yBACE,WACA,iBAEA,aAFA,iBAEA,6BAEA,kCACA,mBAKA,gCAGA,CARA,QAEA,CAGA,UALA,qBAEA,qDAGA,CALA,OAQA,4BACE,cAGF,2BACE,gCAEJ,CAHE,UAGF,8CAGE,CAHF,UAGE,wCAGA,qBACA,CAFA,UAEA,6CAGA,yCAIA,sBAHA,UAGA,kCACE,OACA,CAFF,KAEE,cAQF,0CACE,CAFF,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,OAII,eACA,CAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,qCACE,gCACA,2EACA,sDAKJ,aACE,mDAII,CAJJ,6CAII,kEACA,iBACE,iDACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the