From 79d06c8827598e8f294c3b2c3dd4ff98dd0964b2 Mon Sep 17 00:00:00 2001 From: ojdf Date: Mon, 2 Sep 2024 14:46:49 +0000 Subject: [PATCH] deploy: 3da410b9266edc276045f716598bd37063ed2bfd --- .buildinfo | 4 + .../fast/ao_power_spectra/index.doctree | Bin 0 -> 49081 bytes .doctrees/autoapi/fast/comms/index.doctree | Bin 0 -> 60686 bytes .../complete_orbit_simulation/index.doctree | Bin 0 -> 28174 bytes .doctrees/autoapi/fast/conf/index.doctree | Bin 0 -> 10792 bytes .doctrees/autoapi/fast/fast/index.doctree | Bin 0 -> 67555 bytes .doctrees/autoapi/fast/funcs/index.doctree | Bin 0 -> 58280 bytes .doctrees/autoapi/fast/index.doctree | Bin 0 -> 3453 bytes .../fast/turbulence_models/index.doctree | Bin 0 -> 22931 bytes .doctrees/autoapi/index.doctree | Bin 0 -> 4118 bytes .doctrees/configuration.doctree | Bin 0 -> 15067 bytes .doctrees/environment.pickle | Bin 0 -> 250538 bytes .doctrees/index.doctree | Bin 0 -> 6313 bytes .doctrees/install.doctree | Bin 0 -> 6794 bytes .doctrees/output.doctree | Bin 0 -> 9427 bytes .nojekyll | 0 .../fast/ao_power_spectra/index.rst.txt | 41 + _sources/autoapi/fast/comms/index.rst.txt | 227 +++++ .../complete_orbit_simulation/index.rst.txt | 91 ++ _sources/autoapi/fast/conf/index.rst.txt | 50 + _sources/autoapi/fast/fast/index.rst.txt | 253 +++++ _sources/autoapi/fast/funcs/index.rst.txt | 150 +++ _sources/autoapi/fast/index.rst.txt | 21 + .../fast/turbulence_models/index.rst.txt | 84 ++ _sources/autoapi/index.rst.txt | 11 + _sources/configuration.rst.txt | 13 + _sources/index.rst.txt | 24 + _sources/install.rst.txt | 33 + _sources/output.rst.txt | 26 + _static/basic.css | 925 ++++++++++++++++++ _static/debug.css | 69 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/graphviz.css | 19 + _static/language_data.js | 199 ++++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 258 +++++ _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 | 620 ++++++++++++ _static/skeleton.css | 296 ++++++ _static/sphinx_highlight.js | 154 +++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + autoapi/fast/ao_power_spectra/index.html | 432 ++++++++ autoapi/fast/comms/index.html | 638 ++++++++++++ .../fast/complete_orbit_simulation/index.html | 432 ++++++++ autoapi/fast/conf/index.html | 396 ++++++++ autoapi/fast/fast/index.html | 746 ++++++++++++++ autoapi/fast/funcs/index.html | 558 +++++++++++ autoapi/fast/index.html | 351 +++++++ autoapi/fast/turbulence_models/index.html | 415 ++++++++ autoapi/index.html | 339 +++++++ configuration.html | 395 ++++++++ genindex.html | 855 ++++++++++++++++ index.html | 335 +++++++ install.html | 381 ++++++++ objects.inv | Bin 0 -> 1665 bytes output.html | 345 +++++++ py-modindex.html | 351 +++++++ search.html | 305 ++++++ searchindex.js | 1 + 68 files changed, 11029 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/autoapi/fast/ao_power_spectra/index.doctree create mode 100644 .doctrees/autoapi/fast/comms/index.doctree create mode 100644 .doctrees/autoapi/fast/complete_orbit_simulation/index.doctree create mode 100644 .doctrees/autoapi/fast/conf/index.doctree create mode 100644 .doctrees/autoapi/fast/fast/index.doctree create mode 100644 .doctrees/autoapi/fast/funcs/index.doctree create mode 100644 .doctrees/autoapi/fast/index.doctree create mode 100644 .doctrees/autoapi/fast/turbulence_models/index.doctree create mode 100644 .doctrees/autoapi/index.doctree create mode 100644 .doctrees/configuration.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/install.doctree create mode 100644 .doctrees/output.doctree create mode 100644 .nojekyll create mode 100644 _sources/autoapi/fast/ao_power_spectra/index.rst.txt create mode 100644 _sources/autoapi/fast/comms/index.rst.txt create mode 100644 _sources/autoapi/fast/complete_orbit_simulation/index.rst.txt create mode 100644 _sources/autoapi/fast/conf/index.rst.txt create mode 100644 _sources/autoapi/fast/fast/index.rst.txt create mode 100644 _sources/autoapi/fast/funcs/index.rst.txt create mode 100644 _sources/autoapi/fast/index.rst.txt create mode 100644 _sources/autoapi/fast/turbulence_models/index.rst.txt create mode 100644 _sources/autoapi/index.rst.txt create mode 100644 _sources/configuration.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/install.rst.txt create mode 100644 _sources/output.rst.txt create mode 100644 _static/basic.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/graphviz.css create mode 100644 _static/language_data.js 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 autoapi/fast/ao_power_spectra/index.html create mode 100644 autoapi/fast/comms/index.html create mode 100644 autoapi/fast/complete_orbit_simulation/index.html create mode 100644 autoapi/fast/conf/index.html create mode 100644 autoapi/fast/fast/index.html create mode 100644 autoapi/fast/funcs/index.html create mode 100644 autoapi/fast/index.html create mode 100644 autoapi/fast/turbulence_models/index.html create mode 100644 autoapi/index.html create mode 100644 configuration.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 install.html create mode 100644 objects.inv create mode 100644 output.html create mode 100644 py-modindex.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..bce518f --- /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: 2eb3af4a329af07b2e72d057c034206b +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/autoapi/fast/ao_power_spectra/index.doctree b/.doctrees/autoapi/fast/ao_power_spectra/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..352883c3c847292894ea3841f0df0a78a7556724 GIT binary patch literal 49081 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 uIAjO*bht5|$_2q0j`#t9~`W$y0mo!L7( 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 P+~W>qEcKQ!q!<4WtpFC4 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/fast/conf/index.doctree b/.doctrees/autoapi/fast/conf/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..12fda26f3290beb86cd2eadea4242766f7dd44d6 GIT binary patch literal 10792 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 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/fast/fast/index.doctree b/.doctrees/autoapi/fast/fast/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3c7f06678670e84643d6b49f5eec2759a9718e27 GIT binary patch literal 67555 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 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/fast/funcs/index.doctree b/.doctrees/autoapi/fast/funcs/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7927df490d24b0c925c0fc0ce2b202624411025f GIT binary patch literal 58280 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 OOo3<;v+=~$!v6#F!DrS0 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/fast/index.doctree b/.doctrees/autoapi/fast/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ae46952ef4ca90b006f081109ba5ac86847d5f43 GIT binary patch literal 3453 zcmai1U2hz>6_q9JYImj8hZ83OY^5=rGzw~I^H2muV+1JrXmo?LLEa34JHuTv;*b-5 zSgVHsDPSiSKp+p9{+s@|9u8+_KLVo$))-!1US3|Fb9nVr?>}a|Q~wJmw&X%BuV|ht zoikg7L9R1jFy*S>s?Yvi{a9Uup`kZcdy}y$?7$=ALgt34>O~cfqq`H*UN!3vEX$nG zs$0%`yw49_R2O_0dQLdW)~3S#oLX1Kc}(wr%a(E9#`?NS`}a$V-QaZ=hNMf6?}dJo z)imr&p;$HbGa5$JIU{D?;WRP(J(1g(=|Lu`wJ_qlr)ZJB2DvX+gBi`P4VyMCl1B8et$2THg_^&0vIf%IGMRgo zt!MJ_MqKC341iD>Be+B+SDq{!36)8ov$>E7MSR9{KIfc&&m~tZ3<|o;S?PH7{2q8h z%bLJo)k5l7briJF>)%3Pn$y@l2AR8;_MmT)S&ubWr z0E=(H)eY=~lji0xZwxIyg~5IGp!$>Q!D;7ybH)Fo1j8UqZfwRq*gtr9hIq=jZa-$ zANRW#jx%qf7Lrc+j#^7nz%a1PIiVJi^0Q8x=SC~XK)BHVj!F*{bmHFE-j&`}Q+_fH z!v%w?QKt=vFw7}5)X}2E;LvF8kSaj5tiruX6%JDh1p8jYVbl!0kr<6}mn5oboJA_V z2!z`z+@B+i(qPPL@=X}WHv>Q-%egj1^(Gu!C|*e-`LNI;;KO8LlGPS+BOE8KqGP{i zK_l_gaAa7ijU$r1WGLru7;!4QVK1DqWhAVl&fC_h7kW9H`31H+zM)2;itsRu7O)I) zWf_ZE$NYps%?RkGb9hx@=-vGCFPB!}`_bkkVa8}fI90g>r~w07n=e{UOheuSkHV8n`C@N#XliE_V zAzuB;R9fb9O_oJO($p}|+AKh)2hp=m0G`CL0@vek9Rt`eKl%L6 zsOPbnXItT;WflI9ZFn%3M!a4#b0wIY*L%d~gu6mwv!SCiP$-XzKM3alWI;M+b_c-Y z7!h(8PVKF7bV;~aaETwlyDxRb{gEvwSoVVlr7a5ePCZUTB6UX7ixbW>PLU5TK9LPo zu1kp3*S^FSv5%}@k46LV)W9Ot92jUs;eJ#Ji2RnDC?a;HriqEM6TGef89Yll=zEI{ zIAacbJjmd6O;|yNB|H=dZg}?G)7_IKM zM4GWZ{Pm9ia_9Nu_#N$_XV&U?5K zaoFx!FRI(Uc0P)@aj|oGupO(JL1O}G%FuBFe|WeuEhVlHXTZyJ@b||48!G&|`X^|H rKQ};F{DEMBth8aLP#fmM&Rm1zuxX9}#zn-%D32oA=uK=B{Osy~Sawf- literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/fast/turbulence_models/index.doctree b/.doctrees/autoapi/fast/turbulence_models/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eeb88de5ea9b7945fd480e011ae5064bf80ca6b8 GIT binary patch literal 22931 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 PS}`n1@$AiiPpSMbR{BCs literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/index.doctree b/.doctrees/autoapi/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..130c42af6eb1f07a4329d39334346b68b902f40e GIT binary patch literal 4118 zcmb_fTZ<#d6`q?k(r7f7wRZ`4$B{9P*Tj-M5U@8GgINN}jw6CGAvi4UQg=yJp1!53 zdPno%unDo*fqL7@OUPeH$dkeUz%K^>p^$v1x?5_=ONdDZG<2Ohb?RKdbLvU!&%Ki^ z|7VYNE@ZkGu_#Kjh-+s%Q5F^nPmO!#-uQ$2%-yqH#jbQ#sE|9m1&&b2I8r=ykDNUs zb|Ygws?P6g9vYdY%j2RY+G78ayC=G~Wu%FDW6Sp6|J5%BAMzQ8Jjf?T@a=uX7o@=E z_UEqDsGT$L8z)X}H&`kxc5S=Tb7J>mnQ}KNrpz8NW0ag02KJFXyE4+G`+gWRtwF?h zD`iRf)rpFHwV1N-Qt=t_6n5XRIc+&{EM5|a;;z^gXZCz7vV@OSk)~XYuQGKxo-u98 ze^74B3X`#1j%6D0#Yk!B{qn_5F@>RB7{ca?<)Z17pM4~x9^`D!2Vs^PCR05iA;USx z70mExKyHIxrP~Iz3mAER@Y`2s=Z}Jscji5D$G-Q!iF1|LVe+^%c_LnhW1;@7S(ceJ zGdx)8(zK&pYEnk^j@>?Qh`Qet#l#O081V`Mf#94wCSFAzyoTTF_`L!09@+0MwrvYH z$;jEA**PKz!+k((f6d9R5I+`glft&6xX$9oJi=k<3@t_tE!GU;OD#69Cvih@Cf-Eg z_Uh1k4|KvT$+IGj8g`fYF1C;_S!fh*CVaJ5o4a`tWPf1yk=jc7Y@FCzwP8M|do zNTx_AcxuZY_)67T8ehAo_5cX5Qi{CssPaY|8h?x;TXUT~t_&YuA+>X^5YR?2>HKeM zFP3u3bn4XU)NrPqJW$-H{FO9f@JR_+!^$gzcZD&z{^@u;$8IqlAsl1yM@Deuh90l8 zzxPQ{RRyppW>X$FZmL4Fk*8lgKTkIUM>hQlHa%&wi&2T7fWSYN5O~M-*UV|8;6&8-@7qD1{nz2~kRI|2yF5QF;{92J^#} z0t9EQMmzCiuVq(lnar@b#Ey!`LrFpRZQG-;P}H-7WrsejDP^a& z9nFoA=^R7IDK#`dRm>C`AP2nK_ODr70P2=wNjob{UKlqK#}nJFT4Sah77+kL8NWlt&uSodDSQ@S*vcYsIomDF zZ1~PlOMKs5-we1?nF<6;qZk;D;R?2e#@XZ2^9?C2FU8rjjhzh<;-B`Y6uMHNK6-b3 zW8pKnmdFs8kOOT4nq4CTTu6YdxySoiROy> zJpx10BE-9g&b?e>d^)9KL)xTsWMM25Y1}VQUbja%&sQ@X8FNUKDTD4*7xo7=l!L5C z`Lz*QI?B`><#d}ky#nA23{MaqgK%^}AHMe1PvFlZH48Vy6J;g-N40oVE~9+CltN}1U@fu+!z4ku zy|qRy-$Ecm+HAR?eudHeKGVM4(~IgeCmvR$ec~%=_r$m28}YSxD83S37Pd<}<~oP= zH1U6XBffqrzIs}SS7`YS`r89>AIwk0m*O9V?KfjfM?QUbduyw@r5{Qp3uz9`yypHD zP#+-+#S>;vsl;ny$?64AawO9%UgnQ?$%`Ar`he}$B0O8SzT2<-kY4W-HY-EOeS1?@ zwS(~*h!f)3K(VpCFpFbE29}`V>_4dJ&&b>!%)QvwpSurHMR+Wt9`R1qNSyNGB>=6F cdrPv9eXknzk!y2$>>fmfkrkZK6oA3`-xc#lMgRZ+ literal 0 HcmV?d00001 diff --git a/.doctrees/configuration.doctree b/.doctrees/configuration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cf0466fde9584cf434efec908990eb3fafc56ca7 GIT binary patch literal 15067 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 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8affa06c57d8289bdfca483c4e2d8ba86b2d0f42 GIT binary patch literal 250538 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�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 SK2K^JsV|Va5mW;@zyAwluUifP literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e468d3c984d3c155fe985a134dabb8b1819ca033 GIT binary patch literal 6313 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 literal 0 HcmV?d00001 diff --git a/.doctrees/output.doctree b/.doctrees/output.doctree new file mode 100644 index 0000000000000000000000000000000000000000..80c9eea94dd61af917ab988f376e1a8cca98cf28 GIT binary patch literal 9427 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 \ No newline at end of file diff --git a/_sources/configuration.rst.txt b/_sources/configuration.rst.txt new file mode 100644 index 0000000..fa8e7c2 --- /dev/null +++ b/_sources/configuration.rst.txt @@ -0,0 +1,13 @@ +Configuration +============= + +FAST accepts a number of configuration parameters, which must be defined in a python dictionary ``p`` contained in a ``.py`` file. An example configuration file is shown below. See the comment for each configuration parameter for a description. + +Some things to keep in mind: + +- Some parameters can be set to ``"auto"`` or ``"opt"``, in which case the simulation will *attempt* to select parameters that will provide good results. This is not a guarantee that the parameters will be optimal for your particular setup! +- FAST expects atmospheric turbulence profiles in units of :math:`C_n^2 (h) \, \mathrm{d}h`, i.e. **integrated** Cn2 for each layer, units m :sup:`1/3` +- Some analytical atmopsheric turbulence models (HV57, Bufton wind model) are provided with useful functions in :py:mod:`fast.turbulence_models` + +.. literalinclude:: ../test/test_params.py + diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..4d55b8d --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,24 @@ +.. fast documentation master file, created by + sphinx-quickstart on Tue Jan 17 17:38:31 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to FAST's documentation! +================================ +**FAST** (Fourier domain Adaptive Optics Simulation Tool) is a simulation tool that utilises a Fourier domain AO model to enable rapid Monte Carlo characterisation of free space optical links between the Earth and satellites. This tool enables characterisation of the effect of turbulence with (or without) adaptive optics mitigation. For more details on the physics and modelling, see the paper https://doi.org/10.1364/OE.458659. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + install + configuration + output + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_sources/install.rst.txt b/_sources/install.rst.txt new file mode 100644 index 0000000..c28769f --- /dev/null +++ b/_sources/install.rst.txt @@ -0,0 +1,33 @@ +Installation +============ + +Install from PyPI with + +``pip install fast-aosim`` + +For the latest releases, the source code can be obtained from https://github.com/ojdf/fast. There is nothing to compile since FAST is pure python, just ensure that the FAST directory is on your ``PYTHONPATH``, or navigate to the directory and run + + | pip install -r requirements.txt + | pip install . + +To confirm correct installation, try running from the FAST directory: + + | cd test + | python test_script.py + +which should run a short simulation. + +Requirements +____________ +.. include:: ../requirements.txt + :literal: + +Unit Testing Requirements +_________________________ +.. include:: ../test/requirements.txt + :literal: + +Optional Requirements +_____________________ +- pyfftw (speeds up FFTs) +- sphinx (build documentation) \ No newline at end of file diff --git a/_sources/output.rst.txt b/_sources/output.rst.txt new file mode 100644 index 0000000..8237439 --- /dev/null +++ b/_sources/output.rst.txt @@ -0,0 +1,26 @@ +Running and Output +================== + +Once a config file has been created, the simulation is initialised by creating a :py:class:`~fast.fast.Fast` instance with your config file + + | import fast + | sim = fast.Fast("your_config.py") + +On initialisation, most of the relevant analytical values are automatically computed, including the relevant power spectra and link budget terms. The slow(er) Monte Carlo aspect of the simulation is started by calling :py:func:`~fast.fast.Fast.run` + + | sim.run() + +This will iterate over random or temporally correlated atmopsheric realisations, computing the coupled flux or relevant metric either at the satellite (uplink) or ground (downlink). A progress bar provides an indication of how long the process will take. + +Once completed, the simulation results can be found in ``sim.result`` (also returned from ``sim.run()``). This :py:class:`~fast.fast.FastResult` class allows rapid conversion to useful units. Currently, these are: + +- ``result.dB_rel`` - results in dB relative to the diffraction limit (no turbulence). +- ``result.dB_abs`` - results in dB including all link budget terms, i.e. Rx power / Tx power +- ``result.dBm`` - results in dBm including all terms in link budget +- ``result.power`` - results in linear power, units of Watts + +Simulation results can be saved to FITS file with most simulation parameters as header information by calling the :py:func:`~fast.fast.Fast.save` function on the sim class + + | sim.save("save_filename.fits") + + \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 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; +} + +a:visited { + color: #551A8B; +} + +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/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..4d67807 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 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..7e4c114 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + 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/graphviz.css b/_static/graphviz.css new file mode 100644 index 0000000..027576e --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /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-2024 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, if 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/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK 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..02b4b12 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,258 @@ +.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 .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.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: #ff3a3a } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #ff3a3a } /* 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: #ff3a3a } /* 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: #ff3a3a } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #ff3a3a } /* 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: #ff3a3a } /* 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..0abb2af --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={856: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(856),e=n.n(t),o=null,r=null,c=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;(function(t){const e=Math.floor(r.getBoundingClientRect().top);console.log(`headerTop: ${e}`),0==e&&t!=e?r.classList.add("scrolled"):r.classList.remove("scrolled")})(n=t),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+2.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..80ea12b --- /dev/null +++ b/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":";iCAAA,MAQWA,SAWS,IAAX,EAAAC,EACH,EAAAA,EACkB,oBAAXC,OACLA,OACAC,KAbO,EAAF,WACP,OAaJ,SAAUD,GACR,aAMA,IAAIE,EAAW,CAEbC,SAAU,SACVC,aAAc,SAGdC,QAAQ,EACRC,YAAa,SAGbC,OAAQ,EACRC,QAAQ,EAGRC,QAAQ,GA6BNC,EAAY,SAAUC,EAAMC,EAAMC,GAEpC,GAAKA,EAAOC,SAASL,OAArB,CAGA,IAAIM,EAAQ,IAAIC,YAAYL,EAAM,CAChCM,SAAS,EACTC,YAAY,EACZL,OAAQA,IAIVD,EAAKO,cAAcJ,EAVgB,CAWrC,EAOIK,EAAe,SAAUR,GAC3B,IAAIS,EAAW,EACf,GAAIT,EAAKU,aACP,KAAOV,GACLS,GAAYT,EAAKW,UACjBX,EAAOA,EAAKU,aAGhB,OAAOD,GAAY,EAAIA,EAAW,CACpC,EAMIG,EAAe,SAAUC,GACvBA,GACFA,EAASC,MAAK,SAAUC,EAAOC,GAG7B,OAFcR,EAAaO,EAAME,SACnBT,EAAaQ,EAAMC,UACF,EACxB,CACT,GAEJ,EAwCIC,EAAW,SAAUlB,EAAME,EAAUiB,GACvC,IAAIC,EAASpB,EAAKqB,wBACd1B,EAnCU,SAAUO,GAExB,MAA+B,mBAApBA,EAASP,OACX2B,WAAWpB,EAASP,UAItB2B,WAAWpB,EAASP,OAC7B,CA2Be4B,CAAUrB,GACvB,OAAIiB,EAEAK,SAASJ,EAAOD,OAAQ,KACvB/B,EAAOqC,aAAeC,SAASC,gBAAgBC,cAG7CJ,SAASJ,EAAOS,IAAK,KAAOlC,CACrC,EAMImC,EAAa,WACf,OACEC,KAAKC,KAAK5C,EAAOqC,YAAcrC,EAAO6C,cAnCjCF,KAAKG,IACVR,SAASS,KAAKC,aACdV,SAASC,gBAAgBS,aACzBV,SAASS,KAAKE,aACdX,SAASC,gBAAgBU,aACzBX,SAASS,KAAKP,aACdF,SAASC,gBAAgBC,aAkC7B,EAmBIU,EAAY,SAAUzB,EAAUX,GAClC,IAAIqC,EAAO1B,EAASA,EAAS2B,OAAS,GACtC,GAbgB,SAAUC,EAAMvC,GAChC,SAAI4B,MAAgBZ,EAASuB,EAAKxB,QAASf,GAAU,GAEvD,CAUMwC,CAAYH,EAAMrC,GAAW,OAAOqC,EACxC,IAAK,IAAII,EAAI9B,EAAS2B,OAAS,EAAGG,GAAK,EAAGA,IACxC,GAAIzB,EAASL,EAAS8B,GAAG1B,QAASf,GAAW,OAAOW,EAAS8B,EAEjE,EAOIC,EAAmB,SAAUC,EAAK3C,GAEpC,GAAKA,EAAST,QAAWoD,EAAIC,WAA7B,CAGA,IAAIC,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASR,aAG7BkD,EAAiBG,EAAI7C,GAV0B,CAWjD,EAOIiD,EAAa,SAAUC,EAAOlD,GAEhC,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASX,UAC7B6D,EAAMnC,QAAQgC,UAAUC,OAAOhD,EAASV,cAGxCoD,EAAiBG,EAAI7C,GAGrBJ,EAAU,oBAAqBiD,EAAI,CACjCM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,EAOIoD,EAAiB,SAAUT,EAAK3C,GAElC,GAAKA,EAAST,OAAd,CAGA,IAAIsD,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASR,aAG1B4D,EAAeP,EAAI7C,GAVS,CAW9B,EA6LA,OA1JkB,SAAUsD,EAAUC,GAKpC,IACIC,EAAU7C,EAAU8C,EAASC,EAAS1D,EADtC2D,EAAa,CAUjBA,MAAmB,WAEjBH,EAAWhC,SAASoC,iBAAiBN,GAGrC3C,EAAW,GAGXkD,MAAMC,UAAUC,QAAQC,KAAKR,GAAU,SAAUjB,GAE/C,IAAIxB,EAAUS,SAASyC,eACrBC,mBAAmB3B,EAAK4B,KAAKC,OAAO,KAEjCrD,GAGLJ,EAAS0D,KAAK,CACZ1B,IAAKJ,EACLxB,QAASA,GAEb,IAGAL,EAAaC,EACf,EAKAgD,OAAoB,WAElB,IAAIW,EAASlC,EAAUzB,EAAUX,GAG5BsE,EASDb,GAAWa,EAAOvD,UAAY0C,EAAQ1C,UAG1CkC,EAAWQ,EAASzD,GAzFT,SAAUkD,EAAOlD,GAE9B,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASX,UAC1B6D,EAAMnC,QAAQgC,UAAUM,IAAIrD,EAASV,cAGrC8D,EAAeP,EAAI7C,GAGnBJ,EAAU,kBAAmBiD,EAAI,CAC/BM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,CAqEIuE,CAASD,EAAQtE,GAGjByD,EAAUa,GAfJb,IACFR,EAAWQ,EAASzD,GACpByD,EAAU,KAchB,GAMIe,EAAgB,SAAUvE,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,sBAAsBf,EAAWgB,OACpD,EAMIC,EAAgB,SAAU3E,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,uBAAsB,WACrChE,EAAaC,GACbgD,EAAWgB,QACb,GACF,EAkDA,OA7CAhB,EAAWkB,QAAU,WAEfpB,GACFR,EAAWQ,EAASzD,GAItBd,EAAO4F,oBAAoB,SAAUN,GAAe,GAChDxE,EAASN,QACXR,EAAO4F,oBAAoB,SAAUF,GAAe,GAItDjE,EAAW,KACX6C,EAAW,KACXC,EAAU,KACVC,EAAU,KACV1D,EAAW,IACb,EAOEA,EA3XS,WACX,IAAI+E,EAAS,CAAC,EAOd,OANAlB,MAAMC,UAAUC,QAAQC,KAAKgB,WAAW,SAAUC,GAChD,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAKA,EAAIE,eAAeD,GAAM,OAC9BH,EAAOG,GAAOD,EAAIC,EACpB,CACF,IACOH,CACT,CAkXeK,CAAOhG,EAAUmE,GAAW,CAAC,GAGxCI,EAAW0B,QAGX1B,EAAWgB,SAGXzF,EAAOoG,iBAAiB,SAAUd,GAAe,GAC7CxE,EAASN,QACXR,EAAOoG,iBAAiB,SAAUV,GAAe,GAS9CjB,CACT,CAOF,CArcW4B,CAAQvG,EAChB,UAFM,SAEN,uBCXDwG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU1B,KAAK8B,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CCrBAJ,EAAoBO,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAOJ,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoBU,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdR,EAAoBU,EAAI,CAACN,EAASQ,KACjC,IAAI,IAAInB,KAAOmB,EACXZ,EAAoBa,EAAED,EAAYnB,KAASO,EAAoBa,EAAET,EAASX,IAC5EqB,OAAOC,eAAeX,EAASX,EAAK,CAAEuB,YAAY,EAAMC,IAAKL,EAAWnB,IAE1E,ECNDO,EAAoBxG,EAAI,WACvB,GAA0B,iBAAf0H,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAX3H,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBuG,EAAoBa,EAAI,CAACrB,EAAK6B,IAAUP,OAAOzC,UAAUqB,eAAenB,KAAKiB,EAAK6B,4CCK9EC,EAAY,KACZC,EAAS,KACTC,EAAgBzF,SAASC,gBAAgByF,UAC7C,MAAMC,EAAmB,GA8EzB,SAASC,IACP,MAAMC,EAAeC,aAAaC,QAAQ,UAAY,OAZxD,IAAkBC,EACH,WADGA,EAaItI,OAAOuI,WAAW,gCAAgCC,QAI/C,SAAjBL,EACO,QACgB,SAAhBA,EACA,OAEA,OAIU,SAAjBA,EACO,OACgB,QAAhBA,EACA,QAEA,SA9BoB,SAATG,GAA4B,SAATA,IACzCG,QAAQC,MAAM,2BAA2BJ,yBACzCA,EAAO,QAGThG,SAASS,KAAK4F,QAAQC,MAAQN,EAC9BF,aAAaS,QAAQ,QAASP,GAC9BG,QAAQK,IAAI,cAAcR,UA0B5B,CAkDA,SAASnC,KART,WAEE,MAAM4C,EAAUzG,SAAS0G,uBAAuB,gBAChDrE,MAAMsE,KAAKF,GAASlE,SAASqE,IAC3BA,EAAI9C,iBAAiB,QAAS8B,EAAe,GAEjD,CAGEiB,GA9CF,WAEE,IAAIC,EAA6B,EAC7BC,GAAU,EAEdrJ,OAAOoG,iBAAiB,UAAU,SAAUuB,GAC1CyB,EAA6BpJ,OAAOsJ,QAE/BD,IACHrJ,OAAOwF,uBAAsB,WAzDnC,IAAuB+D,GAxDvB,SAAgCA,GAC9B,MAAMC,EAAY7G,KAAK8G,MAAM3B,EAAO7F,wBAAwBQ,KAE5DgG,QAAQK,IAAI,cAAcU,KACT,GAAbA,GAAkBD,GAAaC,EACjC1B,EAAOjE,UAAUM,IAAI,YAErB2D,EAAOjE,UAAUC,OAAO,WAE5B,EAgDE4F,CADqBH,EA0DDH,GAvGtB,SAAmCG,GAC7BA,EAAYtB,EACd3F,SAASC,gBAAgBsB,UAAUC,OAAO,oBAEtCyF,EAAYxB,EACdzF,SAASC,gBAAgBsB,UAAUM,IAAI,oBAC9BoF,EAAYxB,GACrBzF,SAASC,gBAAgBsB,UAAUC,OAAO,oBAG9CiE,EAAgBwB,CAClB,CAoCEI,CAA0BJ,GAlC5B,SAA6BA,GACT,OAAd1B,IAKa,GAAb0B,EACF1B,EAAU+B,SAAS,EAAG,GAGtBjH,KAAKC,KAAK2G,IACV5G,KAAK8G,MAAMnH,SAASC,gBAAgBS,aAAehD,OAAOqC,aAE1DwF,EAAU+B,SAAS,EAAG/B,EAAU7E,cAGhBV,SAASuH,cAAc,mBAc3C,CAKEC,CAAoBP,GAwDdF,GAAU,CACZ,IAEAA,GAAU,EAEd,IACArJ,OAAO+J,QACT,CA6BEC,GA1BkB,OAAdnC,GAKJ,IAAI,IAAJ,CAAY,cAAe,CACzBrH,QAAQ,EACRyJ,WAAW,EACX9J,SAAU,iBACVI,OAAQ,KACN,IAAI2J,EAAMhI,WAAWiI,iBAAiB7H,SAASC,iBAAiB6H,UAChE,OAAOtC,EAAO7F,wBAAwBoI,OAAS,IAAMH,EAAM,CAAC,GAiBlE,CAcA5H,SAAS8D,iBAAiB,oBAT1B,WACE9D,SAASS,KAAKW,WAAWG,UAAUC,OAAO,SAE1CgE,EAASxF,SAASuH,cAAc,UAChChC,EAAYvF,SAASuH,cAAc,eAEnC1D,GACF","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 = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\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(positionY);\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 + 2.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","headerTop","floor","scrollHandlerForHeader","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..b08d58c --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 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, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + 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 = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + 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 + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + 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." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // 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, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (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; +}; + +/** + * 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, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. 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); + }, + + _parseQuery: (query) => { + // 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]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + 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; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + 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, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // 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; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * 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); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], 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.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(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, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + 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..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* 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))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + 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(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 0000000..8229587 --- /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;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..c26eac7 --- /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,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,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 // 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..05a56b1 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}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,p,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{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!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-stack--headings:var(--font-stack);--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:#6b6f76;--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:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--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-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--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-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--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:#cfd0d0;--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:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--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-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--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:#cfd0d0;--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:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--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-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--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-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}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-family:var(--font-stack--headings);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:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}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--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--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{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}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{display:flex}.theme-toggle{background:transparent;border:none;cursor:pointer;display:flex;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;width:1.25rem}.theme-toggle-header{align-items:center;display:flex;justify-content:center}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.5rem;width:1.5rem}.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,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.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{height:1rem;width:1rem;fill:currentColor;display:inline-block}.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){.content{margin-left:auto;margin-right:auto;padding:0 1em}}@media(max-width:63em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.theme-toggle-header,.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.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.5rem;width:1.5rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}}@media(max-width:48em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){article[role=main] 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:4.25rem}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}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.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>:not(span),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}[role=main] .table-wrapper.container{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:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.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);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%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 a.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..3ecc371 --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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sCAIA,aADF,WACE,CAKF,SACE,CAHJ,kBAEE,CAJE,gBAEJ,CAHI,iBAMA,yFAKA,aACA,eACA,cElbJ,iBAEE,aADA,iBACA,6BAEA,kCAEA,SACA,UAIA,gCACA,CALA,SAEA,SAEA,CAJA,0EAEA,CAFA,OAKA,CAGA,mDACE,iBAGF,gCACE,CADF,UACE,aAEJ,iCAEE,CAFF,UAEE,wCAEA,WACA,WADA,UACA,CACA,4CAGA,MACA,CADA,KACA,wCACA,UAGA,CAJA,UAIA,6DAUA,0CACE,CAFF,mBAEE,wEACA,CAVA,YACA,CAMF,mBAJE,OAOA,gBAJJ,gCACE,CANE,cACA,CAHA,oBACA,CAGA,QAGJ,CAII,0BACA,CADA,UACA,wCAEJ,kBACE,0DACA,gCACE,kBACA,CADA,YACA,oEACA,2CAMF,mDAII,CALN,YACE,CANE,cAKJ,CACE,iBAII,kEACA,yCACE,kDACA,yDACE,+CACA,uBANN,CAMM,+BANN,uCACE,qDACA,4BAEE,mBADA,0CACA,CADA,qBACA,0DACE,wCACA,sGALJ,oCACA,sBACE,kBAFF,UAEE,2CACA,wFACE,cACA,kEANN,uBACE,iDACA,CADA,UACA,0DACE,wDAEE,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,kE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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/variables/_layout.scss","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, p\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 color: var(--color-foreground-primary)\n background: var(--color-background-primary)\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-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\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 --font-stack--headings: var(--font-stack);\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: #6b6f76; // 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: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\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\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\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-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // 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: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\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 --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\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-family: var(--font-stack--headings)\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 &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\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--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--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\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\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 display: flex\n\n.theme-toggle\n display: flex\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n display: flex\n align-items: center\n justify-content: center\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: 1.5rem\n width: 1.5rem\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, .view-this-page\n svg\n color: inherit\n height: 1.25rem\n width: 1.25rem\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: $content-padded-width + $sidebar-width)\n // Center the page\n .content\n margin-left: auto\n margin-right: auto\n padding: 0 $content-padding--small\n\n@media (max-width: $content-padded-width--small + $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, .theme-toggle-header\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\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.5rem\n width: 1.5rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n\n@media (max-width: $content-width + 2* $content-padding--small)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n article[role=main] aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$content-padded-width: $content-width + 2 * $content-padding;\n$content-padded-width--small: $content-width + 2 * $content-padding--small;\n$full-width: $content-padded-width + 2 * $sidebar-width;\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: 4.25rem\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\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\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 > *:not(span),\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","[role=main] .table-wrapper.container\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: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.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 color: var(--color-sidebar-link-text)\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