From 0d394c9bec95ce36fb1c03b92a2e89e4d07f9c8b Mon Sep 17 00:00:00 2001 From: "Sam G." Date: Sat, 4 May 2024 21:01:23 -0700 Subject: [PATCH] refactor Mapper.compose to tree traversal dual, add collate cache to CO3 base, add Mapper.collect safety checks --- co3/accessors/sql.py | 4 +- co3/co3.py | 90 +- co3/components/__init__.py | 2 +- co3/database.py | 3 + co3/databases/sql.py | 8 + co3/managers/sql.py | 5 +- co3/mapper.py | 74 +- co3/mappers/__init__.py | 2 +- docs/_autoref/modules.rst | 7 - docs/_build/doctrees/_autoref/modules.doctree | Bin 2754 -> 0 bytes docs/_build/doctrees/environment.pickle | Bin 1095875 -> 0 bytes docs/_build/doctrees/index.doctree | Bin 23442 -> 0 bytes .../reference/documentation/index.doctree | Bin 3154 -> 0 bytes .../reference/documentation/sphinx.doctree | Bin 21759 -> 0 bytes docs/_build/html/.buildinfo | 4 - docs/_build/html/_autoref/modules.html | 373 ------ .../html/_sources/_autoref/modules.rst.txt | 7 - docs/_build/html/_sources/index.md.txt | 39 - .../reference/documentation/index.md.txt | 8 - .../reference/documentation/sphinx.md.txt | 111 -- docs/_build/html/_static/basic.css | 925 --------------- docs/_build/html/_static/debug.css | 69 -- docs/_build/html/_static/doctools.js | 156 --- .../html/_static/documentation_options.js | 13 - docs/_build/html/_static/file.png | Bin 286 -> 0 bytes docs/_build/html/_static/language_data.js | 199 ---- docs/_build/html/_static/minus.png | Bin 90 -> 0 bytes docs/_build/html/_static/plus.png | Bin 90 -> 0 bytes docs/_build/html/_static/pygments.css | 258 ---- .../html/_static/scripts/furo-extensions.js | 0 docs/_build/html/_static/scripts/furo.js | 3 - .../html/_static/scripts/furo.js.LICENSE.txt | 7 - docs/_build/html/_static/scripts/furo.js.map | 1 - docs/_build/html/_static/searchtools.js | 619 ---------- docs/_build/html/_static/skeleton.css | 296 ----- docs/_build/html/_static/sphinx_highlight.js | 154 --- .../html/_static/styles/furo-extensions.css | 2 - .../_static/styles/furo-extensions.css.map | 1 - docs/_build/html/_static/styles/furo.css | 2 - docs/_build/html/_static/styles/furo.css.map | 1 - docs/_build/html/genindex.html | 1055 ----------------- docs/_build/html/index.html | 426 ------- docs/_build/html/objects.inv | Bin 1985 -> 0 bytes .../html/reference/documentation/index.html | 301 ----- .../html/reference/documentation/sphinx.html | 417 ------- docs/_build/html/search.html | 288 ----- docs/_build/html/searchindex.js | 1 - tests/setups/vegetables.py | 2 + 48 files changed, 160 insertions(+), 5773 deletions(-) delete mode 100644 docs/_autoref/modules.rst delete mode 100644 docs/_build/doctrees/_autoref/modules.doctree delete mode 100644 docs/_build/doctrees/environment.pickle delete mode 100644 docs/_build/doctrees/index.doctree delete mode 100644 docs/_build/doctrees/reference/documentation/index.doctree delete mode 100644 docs/_build/doctrees/reference/documentation/sphinx.doctree delete mode 100644 docs/_build/html/.buildinfo delete mode 100644 docs/_build/html/_autoref/modules.html delete mode 100644 docs/_build/html/_sources/_autoref/modules.rst.txt delete mode 100644 docs/_build/html/_sources/index.md.txt delete mode 100644 docs/_build/html/_sources/reference/documentation/index.md.txt delete mode 100644 docs/_build/html/_sources/reference/documentation/sphinx.md.txt delete mode 100644 docs/_build/html/_static/basic.css delete mode 100644 docs/_build/html/_static/debug.css delete mode 100644 docs/_build/html/_static/doctools.js delete mode 100644 docs/_build/html/_static/documentation_options.js delete mode 100644 docs/_build/html/_static/file.png delete mode 100644 docs/_build/html/_static/language_data.js delete mode 100644 docs/_build/html/_static/minus.png delete mode 100644 docs/_build/html/_static/plus.png delete mode 100644 docs/_build/html/_static/pygments.css delete mode 100644 docs/_build/html/_static/scripts/furo-extensions.js delete mode 100644 docs/_build/html/_static/scripts/furo.js delete mode 100644 docs/_build/html/_static/scripts/furo.js.LICENSE.txt delete mode 100644 docs/_build/html/_static/scripts/furo.js.map delete mode 100644 docs/_build/html/_static/searchtools.js delete mode 100644 docs/_build/html/_static/skeleton.css delete mode 100644 docs/_build/html/_static/sphinx_highlight.js delete mode 100644 docs/_build/html/_static/styles/furo-extensions.css delete mode 100644 docs/_build/html/_static/styles/furo-extensions.css.map delete mode 100644 docs/_build/html/_static/styles/furo.css delete mode 100644 docs/_build/html/_static/styles/furo.css.map delete mode 100644 docs/_build/html/genindex.html delete mode 100644 docs/_build/html/index.html delete mode 100644 docs/_build/html/objects.inv delete mode 100644 docs/_build/html/reference/documentation/index.html delete mode 100644 docs/_build/html/reference/documentation/sphinx.html delete mode 100644 docs/_build/html/search.html delete mode 100644 docs/_build/html/searchindex.js diff --git a/co3/accessors/sql.py b/co3/accessors/sql.py index 53c794e..029a831 100644 --- a/co3/accessors/sql.py +++ b/co3/accessors/sql.py @@ -95,14 +95,14 @@ class SQLAccessor(RelationalAccessor[SQLTable]): def raw_select( self, connection, - sql, + sql: str, bind_params=None, mappings=False, include_cols=False, ): res = SQLEngine.execute( connection, - sql, + sa.text(sql), bind_params=bind_params, include_cols=include_cols ) diff --git a/co3/co3.py b/co3/co3.py index 5ccd5f4..37655fd 100644 --- a/co3/co3.py +++ b/co3/co3.py @@ -19,6 +19,61 @@ Generic collation syntax: def key(self): # key-specific logic ... + +.. admonition:: On multi-key attachment + + One possible quirk of the current collation registry scheme is the rather black and + white nature of key attachment. You either specify a single key, possibly to several + groups, or allow any key via passthrough under an implicit group. There's no explicit + "multi-key" pattern to make use of here, be it through "restricted passthrough" + (method still parameterized by the key, but only allows keys from a provided list) or + just simple duplicated attachment. To demonstrate via the above example: + + .. code-block:: python + + class Type(CO3): + + @collate(['key1', 'key2'], groups=['group1', 'group2']) + def keys(self, key): + # accept key as arg, but can only be 'key1' or 'key2' + ... + + This could be integrated straightforwardly in the existing registration handler, but + for the time being, it muddies the waters too much for the convenience it provides. + For starters, this isn't an all too common pattern, and you possibly open up a + slippery slope of the allowed key spec for a given method (wildcards/regex patterns? + combinatorial O(nm) key (n) group (m) pairs to register?). It can also be handled in a + few very simple ways if needed, either via full passthrough with an internal check: + + .. code-block:: python + + @collate(groups=['group1', 'group2']) + def keys(self, key): + if key not in ['key1', 'key2']: + return None + + ... + + or with a central handler and separate collation points (at least when the key list is + small): + + .. code-block:: python + + def _handle_supported_keys(self, key): + # expects only supported keys, e.g., 'key1' and 'key2' + ... + + @collate('key1') + def key1(self): + self._handle_supported_keys('key1') + + @collate('key2') + def key2(self): + self._handle_supported_keys('key2') + + The former scales better and allows general key rejection patterns if needed, while + the latter integrates a bit better with the formal collation process, e.g., will + throw ``ValueErrors`` based on key mismatches automatically. ''' import inspect import logging @@ -182,9 +237,7 @@ class FormatRegistryMeta(type): class CO3(metaclass=FormatRegistryMeta): ''' - Conversion & DB insertion base class - - CO3: COllate, COllect, COmpose + Base class supporting the central "COllate, COllect, COmpose" paradigm. - Collate: organize and transform conversion outputs, possibly across class components - Collect: gather core attributes, conversion data, and subcomponents for DB insertion @@ -202,7 +255,16 @@ class CO3(metaclass=FormatRegistryMeta): becomes particularly critical to ensure registered ``collate`` methods really are just "gathering results" from possibly heavy-duty operations, rather than performing them when called, so as to reduce wasted computation. + + .. admonition:: New: collation caching + + To help facilitate the common pattern of storing collation results, a + ``collate_cache`` parameter has been added to store key-group indexed collation + results. (Note: now requires explicit superclass instantiation.) ''' + def __init__(self): + self._collate_cache = {} + @property def attributes(self): ''' @@ -233,7 +295,13 @@ class CO3(metaclass=FormatRegistryMeta): ''' return {} - def collate(self, key, group=None, *args, **kwargs): + def collate( + self, + key, + group = None, + args : list | None = None, + kwargs : dict | None = None, + ): ''' Note: This method is sensitive to group specification. By default, the provided key @@ -245,6 +313,12 @@ class CO3(metaclass=FormatRegistryMeta): if key is None: return None + if args is None: args = [] + if kwargs is None: kwargs = {} + + if (key, group) in self._collate_cache: + return self._collate_cache[(key, group)] + if key not in self.key_registry: # keys can't match implicit group if that group isn't explicitly provided if group is None: @@ -260,7 +334,7 @@ class CO3(metaclass=FormatRegistryMeta): ) return None - return method(self, key, *args, **kwargs) + result = method(self, key, *args, **kwargs) else: method = self.key_registry[key].get(group) if method is None: @@ -269,6 +343,10 @@ class CO3(metaclass=FormatRegistryMeta): ) return None - return method(self, *args, **kwargs) + result = method(self, *args, **kwargs) + + self._collate_cache[(key, group)] = result + + return result diff --git a/co3/components/__init__.py b/co3/components/__init__.py index 123bfb8..be09923 100644 --- a/co3/components/__init__.py +++ b/co3/components/__init__.py @@ -107,7 +107,7 @@ class SQLTable(Relation[SQLTableLike]): def compose(self, _with: Self, on, outer=False): return self.__class__( - f'{self.name}+{_with.name}', + f'<{self.name}>+<{_with.name}>', self.obj.join(_with.obj, on, isouter=outer) ) diff --git a/co3/database.py b/co3/database.py index cc0892b..0bbd887 100644 --- a/co3/database.py +++ b/co3/database.py @@ -119,6 +119,9 @@ class Database[C: Component]: self._local_cache = {} self._reset_cache = False + def raw_query(self, connection, query): + raise NotImplementedError + def select(self, component: C, *args, **kwargs): ''' .. admonition:: Dev note diff --git a/co3/databases/sql.py b/co3/databases/sql.py index 7433e0c..1222589 100644 --- a/co3/databases/sql.py +++ b/co3/databases/sql.py @@ -1,3 +1,5 @@ +import sqlalchemy as sa + from co3.database import Database, Engine from co3.accessors.sql import RelationalAccessor, SQLAccessor @@ -23,6 +25,12 @@ class SQLDatabase[C: SQLTable](RelationalDatabase[C]): _manager_cls = SQLManager _engine_cls = SQLEngine + def raw_query(self, connection, query): + return SQLEngine.execute( + connection, + sa.text(query) + ) + class SQLiteDatabase(SQLDatabase[SQLTable]): pass diff --git a/co3/managers/sql.py b/co3/managers/sql.py index 53c03fc..8fd4519 100644 --- a/co3/managers/sql.py +++ b/co3/managers/sql.py @@ -75,7 +75,7 @@ class SQLManager(RelationalManager[SQLTable]): ''' def __init__(self, *args, **kwargs): ''' - The insert lock is a _reentrant lock_, meaning the same thread can acquire the + The insert lock is a *reentrant lock*, meaning the same thread can acquire the lock again without deadlocking (simplifying across methods of this class that need it). ''' @@ -132,7 +132,8 @@ class SQLManager(RelationalManager[SQLTable]): def insert_many(self, connection, inserts: dict): ''' - Perform provided table inserts. + Perform provided table inserts, aligning the insert format of + ``Collector.collect_inserts()``. Parameters: inserts: component-indexed dictionary of insert lists diff --git a/co3/mapper.py b/co3/mapper.py index 46723f8..02c87a3 100644 --- a/co3/mapper.py +++ b/co3/mapper.py @@ -31,6 +31,7 @@ Example: registration open to various types, not just those part of the same hierarchy. ''' import logging +from inspect import signature from typing import Callable, Any from collections import defaultdict @@ -230,6 +231,8 @@ class Mapper[C: Component]: if key is None: continue + logger.debug(f'Collecting for key "{key}"') + # if groups not specified, dynamically grab those explicitly attached groups # for each key group_dict = {} @@ -244,17 +247,28 @@ class Mapper[C: Component]: for group_name, group_method in group_dict.items(): method_groups[group_method].append(group_name) + logger.debug(f'Equivalence classes: "{list(method_groups.values())}"') + # collate for method equivalence classes; only need on representative group to # pass to CO3.collate to call the method key_collation_data = {} for collation_method, collation_groups in method_groups.items(): key_method_collation_data = obj.collate(key, group=collation_groups[0]) + if key_method_collation_data is None: + logger.debug( + f'Equivalence class "{collation_groups}" yielded no data, skipping' + ) + continue + for collation_group in collation_groups: # gather connective data for collation components # -> we do this here as it's obj dependent connective_data = obj.collation_attributes(key, collation_group) + if connective_data is None: + connective_data = {} + key_collation_data[collation_group] = { **connective_data, **key_method_collation_data, @@ -297,7 +311,7 @@ class Mapper[C: Component]: # handle components for comp in [c for c in obj.components if isinstance(c, CO3)]: - receipts.extend(comp.collect(collector, formats=formats)) + receipts.extend(self.collect(comp, keys=keys, groups=groups)) return receipts @@ -402,6 +416,9 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): not be explicitly clear how some JOINs should be handled up the inheritance chain (for components / sa.Relationships, it's a little easier). + + .. admonition:: On compose order + Parameters: obj: either a CO3 instance or a type reference ''' @@ -409,7 +426,9 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): if isinstance(co3_ref, CO3): type_ref = co3_ref.__class__ - attr_comp_agg = None + comp_agg = None + last_attr_comp = None + last_coll_comps = None for _cls in reversed(type_ref.__mro__[:-2]): attr_comp = self.get_attr_comp(_cls) @@ -417,8 +436,26 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): if attr_comp is None: continue + if comp_agg is None: + comp_agg = attr_comp + else: + # note the reduced attr_comp (produced this iteration) and the + # last_attr_comp (last iteration) refs passed to compose map, rather than + # their aggregated counterparts. This is because compose conditions often + # need to be specified between *atomic* components within compositional + # components, as compositions don't also expose the necessary attributes + # (or if they do, they aren't necessarily unique; e.g., JOIN two + # SQLAlchemy tables does not allow direct column access). + compose_condition = self.attr_compose_map(last_attr_comp, attr_comp) + comp_agg = comp_agg.compose( + attr_comp, + compose_condition, + *compose_args, + **compose_kwargs, + ) + # compose horizontally with components from provided action groups - coll_comp_agg = attr_comp + coll_list = [] if groups is not None: for group in groups: coll_comp = self.get_coll_comp(_cls, group=group) @@ -426,29 +463,30 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): if coll_comp is None: continue + # valid collation comps added to coll_list, to be passed to the + # coll_map in the next iteration + coll_list.append(coll_comp) + # note how the join condition is specified using the non-composite # `attr_comp` and new `coll_comp`; the composite doesn't typically # have the same attribute access and needs a ref to a specific comp - compose_condition = self.coll_compose_map(attr_comp, coll_comp) + if len(signature(self.coll_compose_map).parameters) > 2: + compose_condition = self.coll_compose_map( + attr_comp, + coll_comp, + last_coll_comps + ) + else: + compose_condition = self.coll_compose_map(attr_comp, coll_comp) - coll_comp_agg = coll_comp_agg.compose( + comp_agg = comp_agg.compose( coll_comp, compose_condition, *compose_args, **compose_kwargs, ) - if attr_comp_agg is None: - attr_comp_agg = coll_comp_agg - else: - # note the reduced attr_comp ref passed to compose map, rather than - # coll_comp_agg produced above; this is provided as the compose comp, though - compose_condition = self.attr_compose_map(attr_comp_agg, attr_comp) - attr_comp_agg = attr_comp_agg.compose( - coll_comp_agg, - compose_condition, - *compose_args, - **compose_kwargs, - ) + last_attr_comp = attr_comp + last_coll_comps = coll_list - return attr_comp_agg + return comp_agg diff --git a/co3/mappers/__init__.py b/co3/mappers/__init__.py index 36a60bf..b90804a 100644 --- a/co3/mappers/__init__.py +++ b/co3/mappers/__init__.py @@ -3,7 +3,7 @@ from typing import Self import sqlalchemy as sa from co3.mapper import Mapper -from co3.component import ComposableComponent +from co3.components import ComposableComponent class ComposableMapper[C: ComposableComponent](Mapper[C]): diff --git a/docs/_autoref/modules.rst b/docs/_autoref/modules.rst deleted file mode 100644 index 6f73bf6..0000000 --- a/docs/_autoref/modules.rst +++ /dev/null @@ -1,7 +0,0 @@ -co3 -=== - -.. toctree:: - :maxdepth: 4 - - co3 diff --git a/docs/_build/doctrees/_autoref/modules.doctree b/docs/_build/doctrees/_autoref/modules.doctree deleted file mode 100644 index cbd9793b3ee5f69814b04d1ce9dc62ddef1c1945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2754 zcmZ8jOK%%D5O!=!mSjnOBq<6cZV?n|5;V4owuhpp0_n}D4@D6mhk&4VsU>SJx#c64 z4*^=BDQbYXu)n2$uOD|;Ygq;aFNecXIbWiR^4&l<9)vO zHa_RW&~w5`wzd^^GW~5#+t}Uxl`WIoM))B%-uo4WFBkby7?LhHz7zUwOc!BS3dQ1u zpVKg+&KWWH4!NY*cSLSeoO_w1)1J z^KCyz!h=kgmG&xML!<$VZy^AkIm6b`YWF@zV*Cjp`vSkG_&vk#1%8jh;if}m4)Bbq z^Sub;Za?Avccft~R3?4S76RcRbN(X@gOVVg92Lh5vB(U6F)Fj_5JsM6^XPVY2zt)oCq?nbcgu45a286G%8m6bH1 zLQwm{Fx#-L=d`1;Nxjvnk?_giy)ezZNn9o!bH^)5!{9Km%sHV7G~!X$SqlSRF|Z`` zUsLH(rmi*n+PliTc)<@Y!mwb984AKhEOLq-aI~zj*l!#Xc)7%K)Gob|SWSR4N!(An zaNJ8px{l#^p|w-mv9-yT$4Er&i$m@!d_rjM0X0s&Wa+q3p;lb1@t=NUvGx z)mCCS+1S}I!T$==#^`MTtD}$aZfu+khbaLN&2r!)kx&d1Nmb!#!2oxT^)}it+&3)K zCMW1w&;)K$yI+KUrqu#D0uGUbsOa%! zcu-4f_NUt4iYm)|uF0}Yd^%*yN?S(OPu3L49C;_KX!vi@;j=KU zSVaH|rj^QSz{W{3r-(guM);IFSJ@wCGl=b3b?vxTXWA6A7#=3gIsj-A$4ZpPp&SFq zPoIAM9q^o*MYdr+Np8)5xiXJVrHQYX%$y147PSv_|BSm*!r9Q#Ia(-B^LP+WK**AG zz1bx|Y?T;t6AtaQa&$?!D7eHA z3g0vvP_7}w=}TY1MY{Ft+1?HTTm+B^wEzcJQ{gzx3G3$@dZJ9^m6|rKn6B>22+rWv z$kD&o2!S)^;N)QjtxLj6DkQ-JB~95n?4$OH0kXR+oq z*bsKw!#fs-E3fsT<2&{-Ta8P@{Nbjpb_cgPCPs$W3TP3-ex{`au*d;d#@?$|{t?N4 wh`)gSc(tLA@XoTRcjK@d9CyU~owzR9e*2;TMT%6dQJ!X7I|kBi?dNCz1F9@Y_y7O^ diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle deleted file mode 100644 index 855b47dd355fdb0c66507854f80bc2769e5a10f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1095875 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 cubfTxuXVp8(T2waSM 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

Ltd^xkVIwsPy{XvM@uhU^h%=ozZw-k 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 j@#cR$_OU#jb#! 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 Zyo_H4)do3sNaAhQBu=A-5?#;UJ9}ql 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 XOlP~S(pm?WEN-S)sNCqJ%X9w+&W2&0 diff --git a/docs/_build/doctrees/reference/documentation/index.doctree b/docs/_build/doctrees/reference/documentation/index.doctree deleted file mode 100644 index 555f896d35d86cbf0eb7546258b65edc0f25825f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3154 zcmaJ@TW=gS6i%A%W_PofB)x!?rl>-tt!T34@_=|k0ttzTAR$zVhic@V@vcogdC!`kl)UtzSRyZ-hTP(mCVV{Fo$3CKIZi z?IbcTQkog}(mndoUAl+1tH`;Qg^H=O8{mi;7m1>od*66h8?b);!j%@aa{~Rwu|3<38iU!EZC7@l z+UtU6)SVU+Vtd3G#V3VpjW0@H#H_U?Z%m!NS!J7W7hi$#&pDHq`t`-Ip|O6Cd84Rc@ogFnQX z(R5`L74*&kBj(07mn9xRs9jqh?ud9H*dQnB#i|m!q zfLRA@t4!spS<5ywfMt*EO`}MrMF2zu2+b7LC16`d8Y0SgR6HR(h1a)fhjF2NIYbTk z`!%I30^8Bl7@o~g-+SJtP_R=4cv67Nwx1GFAbm~6w`F1S!njj5I(f$tkgeKem+ zl{!#{8c@t5)PQeC8X^x$3KcX^qH}IoR2MNcRu8JGKDB*CbE!-u=yQtjU9&w#M00G} zJv!%znjxmpHB-yB5;`enP&Yg$Dnr!3p(sf~=^{lj^-ck~L!Kc<5vo}x;BvNGnCa0+ zN1EgN&gx}Em69rABufNvh_u7E*f={XBfTW06{I+OxOTH9g8gKNrO<@|_0v167i%x= zu6F=H(+u$ua0q=?kZe|v8AZ4goUfra?F~g^sgek_446QTZw#ll9m{MA9}y0o0H~<_ zxnpfRB!!XDf@H68U~7;RX&yEBLsSES19~bW!V4S)Nryftcbe>C1 zqve+YBC&~{bInV9j-rHXG7;X9%F6A!E>L5AIHOSs<+K50Dz>QZU-q{Df)Y)Y?^#HU zmzE&kJLo>m5%}Em#Rb@8GoVoLlpFWu?gKl_X&yD5(>v4mlnH_DzB25a%$Qt%JRXCr zkMj$|WOgjoZ0zhU&lwB=XJlxK^cbY01NzbZCm$l7Lp6=p#Cys@{5!RHR4Va!J)`QF zQ!@=ZQ2k?OQUPUMLnbJp1bzCXV-EqyG-_(IaUjyUN63}k)fbr|^N8^o6ZiqV*M;=B z@9UJH%Dyj9)Ea@h5zgf?5;7*`Xt0MdBd`aFFN+OP4k5(rvm%EIzf6RNUp0ZN&}ex! z1qSM_uk@|*iP9?P`rR5#x+NAn8*+{qv%c8AogGspk>fp0UJ!jvUiWp zQ9?0>xHwD7Zd$Q2?_iOdNM$+pv7IuHd(Q>Qu8`vubv)^88-d}}} z`?P*&+rHT#hL_k>JhA*{-?FFLc0Ivd^msQ`zt7lSdZ95kMS*?d(iM~Ae*q$t?N|T+ diff --git a/docs/_build/doctrees/reference/documentation/sphinx.doctree b/docs/_build/doctrees/reference/documentation/sphinx.doctree deleted file mode 100644 index 49973646cfe4104e5b82ec7511d7a539c19e4d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21759 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 UWJskIkqeHz1cuDJy=1fYe^uPZ2mk;8 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo deleted file mode 100644 index ba6ea85..0000000 --- a/docs/_build/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# 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: 31124ef51117182dc672bbc42963e105 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_autoref/modules.html b/docs/_build/html/_autoref/modules.html deleted file mode 100644 index 655564f..0000000 --- a/docs/_build/html/_autoref/modules.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - - - co3 - co3 documentation - - - - - - - - - - - - - - - - Contents - - - - - - Menu - - - - - - - - Expand - - - - - - Light mode - - - - - - - - - - - - - - Dark mode - - - - - - - Auto light/dark mode - - - - - - - - - - - - - - -

Hide navigation sidebar
- - - - - -
-
-
- -
- -
-
- -
- -
-
- - -
- - - - - \ No newline at end of file diff --git a/docs/_build/html/_sources/_autoref/modules.rst.txt b/docs/_build/html/_sources/_autoref/modules.rst.txt deleted file mode 100644 index 6f73bf6..0000000 --- a/docs/_build/html/_sources/_autoref/modules.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -co3 -=== - -.. toctree:: - :maxdepth: 4 - - co3 diff --git a/docs/_build/html/_sources/index.md.txt b/docs/_build/html/_sources/index.md.txt deleted file mode 100644 index 74b6ee9..0000000 --- a/docs/_build/html/_sources/index.md.txt +++ /dev/null @@ -1,39 +0,0 @@ -# `co3` package docs -{ref}`genindex` -{ref}`modindex` -{ref}`search` - -```{eval-rst} -.. autosummary:: - :nosignatures: - - co3.Accessor - co3.Collector - co3.CO3 - co3.Database - co3.Indexer - co3.Manager - co3.Mapper - co3.Component - co3.Schema - co3.Engine -``` - -```{toctree} -:maxdepth: 3 -:caption: Autoref - -_autoref/co3.rst -``` - -```{toctree} -:maxdepth: 3 -:caption: Contents - -reference/documentation/index -reference/site/index -``` - -```{include} ../README.md -``` - diff --git a/docs/_build/html/_sources/reference/documentation/index.md.txt b/docs/_build/html/_sources/reference/documentation/index.md.txt deleted file mode 100644 index a14cdde..0000000 --- a/docs/_build/html/_sources/reference/documentation/index.md.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Documentation - -```{toctree} -:hidden: - -sphinx -``` - diff --git a/docs/_build/html/_sources/reference/documentation/sphinx.md.txt b/docs/_build/html/_sources/reference/documentation/sphinx.md.txt deleted file mode 100644 index 33d6f27..0000000 --- a/docs/_build/html/_sources/reference/documentation/sphinx.md.txt +++ /dev/null @@ -1,111 +0,0 @@ -# Sphinx -The primary driver of this package's documentation is Sphinx's `autodoc` extension, -using the [Furo theme][1]. - -**High-level details**: - -- `sphinx-apidoc` generates package-based documentation to the `_autoref/` directory, - with navigation available under "Autoref" in the sidebar. -- Markdown-based documentation files are manually written under the `reference/` - directory, showing up under "Contents" in the sidebar. - -## Detailed directory structure -All files are placed under `docs/sphinx`: - -- `_`-prefixed are Sphinx-managed directories - * `_build/html/` houses output HTML files - * `_autoref/` is the target for module-based RST files written by `autodoc` -- `reference/`: houses all manually written documentation (totally separate from - auto-generated package docs) -- `conf.py`: single Sphinx configuration file -- `index.md`: documentation index, setups up a persistent sidebar across all other pages - -For manually written documentation under `reference/`, topics are nested as needed. Within -a nested directory `reference/`, an `index.md` should created with content like: - -``` -# - -\`\`\`{toctree} -:hidden: - -sub-topic-1.rst -sub-topic-2.rst -... -\`\`\` -``` - -This will add the nested directory to the sidebar navigation, using the name set under the -top-level header. See [Markdown syntax][#markdown-syntax] for more details on the syntax. - -## Sphinx autodoc -Sphinx's `autodoc` extension allows automatic generation of documents according to -(Python) subpackage structure and available docstrings. A few notes here: - -- In the `conf.py` file, autodoc is enabled by adding `"sphinx.ext.autodoc"` to - the extensions list. `"sphinx.ext.viewcode"` can also be added to provide - links to source code. -- Documents are actually generated by calling the `sphinx-apidoc` CLI command. The - current Makefile uses the following call: - - ```sh - sphinx-apidoc --module-first -o docs/sphinx/_autoref/ localsys - ``` - - This writes the automatically generated docs for modules in the package at the - local directory `localsys/` to the `docs/sphinx/_autoref` directory. These are - reStructuredText files by default. - * `--module-first` places the module-level descriptions at the top of the module page. - By default, this is placed at the bottom (oddly), and can be obscured by large lists - of subpackages if this flag isn't provided. - * See available `sphinx-apidoc` options [here][2], as well as more advanced config - [here][3]. - - -## Markdown syntax -The `myst_parser` extension enables Markdown (or something close to it) to be used when -writing documentation files. The Sphinx directives can be difficult to track, and -they change slightly under the MyST Markdown syntax. The following are a few common -blocks: - -**Page hierarchies**: the following will generate link hierarchy according to the provided -pages: - -``` -\`\`\`{toctree} -:maxdepth: -:caption: -:hidden: - -example-file-1 -example-file-2 -example-dir/index -... -\`\`\` -``` - -- `:maxdepth:` limits the depth of nesting -- `:caption:` title for the group of pages -- `:hidden:` if provided, links will only show in the sidebar (hidden on the page) -- Constituent files: listed files will be rendered as a link directly. If a listed file - has a `{toctree}` directive, this tree will be rendered in place of the page's link as a - dropdown. The dropdown will be named according to the file's top-level heading, and - clicking directly on the dropdown header will show that page's content. Files found in - the tree will be placed as links under the dropdown, recursively subject to same rules - described here. - -**Include files**: the following will include file content -pages: - -``` -\`\`\`{include} README.md -\`\`\` -``` - -**Reference directives** - - -[1]: https://pradyunsg.me/furo/ -[2]: https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html -[3]: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html# - diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css deleted file mode 100644 index f316efc..0000000 --- a/docs/_build/html/_static/basic.css +++ /dev/null @@ -1,925 +0,0 @@ -/* - * 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/docs/_build/html/_static/debug.css b/docs/_build/html/_static/debug.css deleted file mode 100644 index 74d4aec..0000000 --- a/docs/_build/html/_static/debug.css +++ /dev/null @@ -1,69 +0,0 @@ -/* - 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/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js deleted file mode 100644 index 4d67807..0000000 --- a/docs/_build/html/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * 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/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js deleted file mode 100644 index 7e4c114..0000000 --- a/docs/_build/html/_static/documentation_options.js +++ /dev/null @@ -1,13 +0,0 @@ -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/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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( diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js deleted file mode 100644 index 367b8ed..0000000 --- a/docs/_build/html/_static/language_data.js +++ /dev/null @@ -1,199 +0,0 @@ -/* - * 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/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png deleted file mode 100644 index d96755fdaf8bb2214971e0db9c1fd3077d7c419d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png deleted file mode 100644 index 7107cec93a979b9a5f64843235a16651d563ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css deleted file mode 100644 index c2e07c7..0000000 --- a/docs/_build/html/_static/pygments.css +++ /dev/null @@ -1,258 +0,0 @@ -.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: #d22323 } /* 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: #d22323 } /* Generic.Error */ -body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ -body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ -body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ -body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ -body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ -body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ -body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ -body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ -body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ -body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ -body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ -body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ -body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ -body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ -body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ -body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ -body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ -body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ -body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ -body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ -body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ -body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ -body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ -body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ -body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ -body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ -body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ -body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ -body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ -body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ -body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ -body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ -body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ -body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ -body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ -body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ -body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ -body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ -body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ -body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ -body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ -body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ -body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ -body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ -body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ -body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ -body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ -body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ -body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ -body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ -body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ -body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ -body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ -body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ -body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ -body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ -body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ -@media (prefers-color-scheme: dark) { -body:not([data-theme="light"]) .highlight pre { line-height: 125%; } -body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } -body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } -body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ -body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ -body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ -body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ -body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ -body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ -body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ -body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ -body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ -body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ -body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ -body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ -body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ -body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ -body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ -body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ -body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ -body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ -body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ -body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ -body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ -body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ -body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ -body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ -body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ -body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ -body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ -body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ -body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ -body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ -body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ -body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ -body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ -body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ -body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ -body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ -body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ -body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ -body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ -body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ -body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ -body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ -body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ -body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ -body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ -body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ -body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ -body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ -body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ -body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ -body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ -body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ -body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ -body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ -body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ -body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ -body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ -body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ -body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ -body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ -body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ -body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ -body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ -body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ -body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ -body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ -body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ -body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ -body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ -body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ -body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ -body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ -body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ -body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ -} -} \ No newline at end of file diff --git a/docs/_build/html/_static/scripts/furo-extensions.js b/docs/_build/html/_static/scripts/furo-extensions.js deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_build/html/_static/scripts/furo.js b/docs/_build/html/_static/scripts/furo.js deleted file mode 100644 index 32e7c05..0000000 --- a/docs/_build/html/_static/scripts/furo.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see furo.js.LICENSE.txt */ -(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); -//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/_build/html/_static/scripts/furo.js.LICENSE.txt b/docs/_build/html/_static/scripts/furo.js.LICENSE.txt deleted file mode 100644 index 1632189..0000000 --- a/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * 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/docs/_build/html/_static/scripts/furo.js.map b/docs/_build/html/_static/scripts/furo.js.map deleted file mode 100644 index 4705302..0000000 --- a/docs/_build/html/_static/scripts/furo.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js deleted file mode 100644 index 92da3f8..0000000 --- a/docs/_build/html/_static/searchtools.js +++ /dev/null @@ -1,619 +0,0 @@ -/* - * 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 [".headerlinks", "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) { - let score = Math.round(100 * queryLower.length / title.length) - normalResults.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id, 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/docs/_build/html/_static/skeleton.css b/docs/_build/html/_static/skeleton.css deleted file mode 100644 index 467c878..0000000 --- a/docs/_build/html/_static/skeleton.css +++ /dev/null @@ -1,296 +0,0 @@ -/* 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/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js deleted file mode 100644 index 8a96c69..0000000 --- a/docs/_build/html/_static/sphinx_highlight.js +++ /dev/null @@ -1,154 +0,0 @@ -/* 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/docs/_build/html/_static/styles/furo-extensions.css b/docs/_build/html/_static/styles/furo-extensions.css deleted file mode 100644 index bc447f2..0000000 --- a/docs/_build/html/_static/styles/furo-extensions.css +++ /dev/null @@ -1,2 +0,0 @@ -#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} -/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo-extensions.css.map b/docs/_build/html/_static/styles/furo-extensions.css.map deleted file mode 100644 index 9ba5637..0000000 --- a/docs/_build/html/_static/styles/furo-extensions.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo.css b/docs/_build/html/_static/styles/furo.css deleted file mode 100644 index 3d29a21..0000000 --- a/docs/_build/html/_static/styles/furo.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} -/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo.css.map b/docs/_build/html/_static/styles/furo.css.map deleted file mode 100644 index 1924b33..0000000 --- a/docs/_build/html/_static/styles/furo.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo.css","mappings":"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F,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,MACE,CAIE,gBAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,mBACE,kDACA,0EACA,uDAKJ,aACE,mDAII,CAJJ,6CAII,4BACA,sCACE,kEACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,+BACA,CA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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the