From 7b868f6da0a6f0ccc10a4641a6b5fdad96b9b9f5 Mon Sep 17 00:00:00 2001 From: Tony Meyer Date: Tue, 20 Aug 2024 16:18:57 +1200 Subject: [PATCH] Add section for creating deferred events. --- UPGRADING.md | 25 + docs/_build/html/.buildinfo | 4 + .../html/.doctrees/capture_events.doctree | Bin 0 -> 8119 bytes .../.doctrees/consistency_checker.doctree | Bin 0 -> 73920 bytes docs/_build/html/.doctrees/context.doctree | Bin 0 -> 198814 bytes docs/_build/html/.doctrees/environment.pickle | Bin 0 -> 4415429 bytes docs/_build/html/.doctrees/index.doctree | Bin 0 -> 512231 bytes docs/_build/html/.doctrees/state.doctree | Bin 0 -> 469466 bytes docs/_build/html/404.html | 332 ++ docs/_build/html/_modules/collections.html | 1902 +++++++++ docs/_build/html/_modules/index.html | 322 ++ docs/_build/html/_modules/ops/pebble.html | 3671 +++++++++++++++++ .../_modules/scenario/capture_events.html | 418 ++ .../scenario/consistency_checker.html | 1002 +++++ .../html/_modules/scenario/context.html | 945 +++++ docs/_build/html/_modules/scenario/state.html | 2317 +++++++++++ .../html/_sources/capture_events.rst.txt | 4 + .../html/_sources/consistency_checker.rst.txt | 4 + docs/_build/html/_sources/context.rst.txt | 5 + docs/_build/html/_sources/index.rst.txt | 26 + docs/_build/html/_sources/state.rst.txt | 5 + ...e.1e8bd061cd6da7fc9cf755528e8ffc24.min.css | 1 + .../html/_sphinx_design_static/design-tabs.js | 27 + docs/_build/html/_static/404.svg | 13 + .../_sphinx_javascript_frameworks_compat.js | 123 + docs/_build/html/_static/basic.css | 903 ++++ docs/_build/html/_static/check-solid.svg | 4 + docs/_build/html/_static/clipboard.min.js | 7 + docs/_build/html/_static/copy-button.svg | 5 + docs/_build/html/_static/copybutton.css | 94 + docs/_build/html/_static/copybutton.js | 248 ++ docs/_build/html/_static/copybutton_funcs.js | 73 + docs/_build/html/_static/custom.css | 361 ++ docs/_build/html/_static/debug.css | 69 + ...e.1e8bd061cd6da7fc9cf755528e8ffc24.min.css | 1 + docs/_build/html/_static/design-tabs.js | 27 + docs/_build/html/_static/doctools.js | 156 + .../html/_static/documentation_options.js | 14 + docs/_build/html/_static/favicon.png | Bin 0 -> 2258 bytes docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/furo_colors.css | 89 + .../html/_static/github_issue_links.css | 24 + .../_build/html/_static/github_issue_links.js | 34 + docs/_build/html/_static/header-nav.js | 10 + docs/_build/html/_static/header.css | 167 + docs/_build/html/_static/jquery.js | 2 + docs/_build/html/_static/language_data.js | 199 + docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 258 ++ docs/_build/html/_static/related-links.css | 39 + .../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 | 566 +++ docs/_build/html/_static/skeleton.css | 296 ++ docs/_build/html/_static/sphinx_highlight.js | 144 + .../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/_static/tabs.css | 89 + docs/_build/html/_static/tabs.js | 145 + docs/_build/html/_static/tag.png | Bin 0 -> 6781 bytes docs/_build/html/_static/terminal-output.css | 28 + docs/_build/html/_static/youtube.css | 33 + docs/_build/html/capture_events.html | 356 ++ docs/_build/html/consistency_checker.html | 463 +++ docs/_build/html/context.html | 947 +++++ docs/_build/html/genindex.html | 1734 ++++++++ docs/_build/html/index.html | 1911 +++++++++ docs/_build/html/objects.inv | Bin 0 -> 2886 bytes docs/_build/html/py-modindex.html | 359 ++ docs/_build/html/search.html | 328 ++ docs/_build/html/searchindex.js | 1 + docs/_build/html/state.html | 1833 ++++++++ 77 files changed, 23180 insertions(+) create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/.doctrees/capture_events.doctree create mode 100644 docs/_build/html/.doctrees/consistency_checker.doctree create mode 100644 docs/_build/html/.doctrees/context.doctree create mode 100644 docs/_build/html/.doctrees/environment.pickle create mode 100644 docs/_build/html/.doctrees/index.doctree create mode 100644 docs/_build/html/.doctrees/state.doctree create mode 100644 docs/_build/html/404.html create mode 100644 docs/_build/html/_modules/collections.html create mode 100644 docs/_build/html/_modules/index.html create mode 100644 docs/_build/html/_modules/ops/pebble.html create mode 100644 docs/_build/html/_modules/scenario/capture_events.html create mode 100644 docs/_build/html/_modules/scenario/consistency_checker.html create mode 100644 docs/_build/html/_modules/scenario/context.html create mode 100644 docs/_build/html/_modules/scenario/state.html create mode 100644 docs/_build/html/_sources/capture_events.rst.txt create mode 100644 docs/_build/html/_sources/consistency_checker.rst.txt create mode 100644 docs/_build/html/_sources/context.rst.txt create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_sources/state.rst.txt create mode 100644 docs/_build/html/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css create mode 100644 docs/_build/html/_sphinx_design_static/design-tabs.js create mode 100644 docs/_build/html/_static/404.svg create mode 100644 docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/check-solid.svg create mode 100644 docs/_build/html/_static/clipboard.min.js create mode 100644 docs/_build/html/_static/copy-button.svg create mode 100644 docs/_build/html/_static/copybutton.css create mode 100644 docs/_build/html/_static/copybutton.js create mode 100644 docs/_build/html/_static/copybutton_funcs.js create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/debug.css create mode 100644 docs/_build/html/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css create mode 100644 docs/_build/html/_static/design-tabs.js create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/favicon.png create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/furo_colors.css create mode 100644 docs/_build/html/_static/github_issue_links.css create mode 100644 docs/_build/html/_static/github_issue_links.js create mode 100644 docs/_build/html/_static/header-nav.js create mode 100644 docs/_build/html/_static/header.css create mode 100644 docs/_build/html/_static/jquery.js create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/related-links.css create mode 100644 docs/_build/html/_static/scripts/furo-extensions.js create mode 100644 docs/_build/html/_static/scripts/furo.js create mode 100644 docs/_build/html/_static/scripts/furo.js.LICENSE.txt create mode 100644 docs/_build/html/_static/scripts/furo.js.map create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/skeleton.css create mode 100644 docs/_build/html/_static/sphinx_highlight.js create mode 100644 docs/_build/html/_static/styles/furo-extensions.css create mode 100644 docs/_build/html/_static/styles/furo-extensions.css.map create mode 100644 docs/_build/html/_static/styles/furo.css create mode 100644 docs/_build/html/_static/styles/furo.css.map create mode 100644 docs/_build/html/_static/tabs.css create mode 100644 docs/_build/html/_static/tabs.js create mode 100644 docs/_build/html/_static/tag.png create mode 100644 docs/_build/html/_static/terminal-output.css create mode 100644 docs/_build/html/_static/youtube.css create mode 100644 docs/_build/html/capture_events.html create mode 100644 docs/_build/html/consistency_checker.html create mode 100644 docs/_build/html/context.html create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_build/html/state.html diff --git a/UPGRADING.md b/UPGRADING.md index 65476101..f92e2681 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -243,6 +243,31 @@ state = State(networks={"foo": Network.default()}) state = State(networks={Network.default("foo")}) ``` +### Use the .deferred() method to populate State.deferred + +Previously, there were multiple methods to populate the `State.deferred` list: +events with a `.deferred()` method, the `scenario.deferred()` method, and +creating a `DeferredEvent` object manually. Now, for Juju events, you should +always use the `.deferred()` method of the event - this also ensures that the +deferred event has all of the required links (to relations, containers, secrets, +and so on). + +```python +# Older Scenario code +deferred_start = scenario.deferred('start', handler=MyCharm._on_start) +deferred_relation_created = Relation('foo').changed_event.deferred(handler=MyCharm._on_foo_relation_changed) +deferred_config_changed = DeferredEvent( + handle_path='MyCharm/on/config_changed[1]', + owner='MyCharm', + observer='_on_config_changed' +) + +# Scenario 7.x +deferred_start = ctx.on.start().deferred(handler=MyCharm._on_start) +deferred_relation_changed = ctx.on.relation_changed(Relation('foo')).deferred(handler=MyCharm._on_foo_relation_changed) +deferred_config_changed = ctx.on.config_changed().deferred(handler=MyCharm._on_config_changed) +``` + ### Update names: State.storages, State.stored_states, Container.execs, Container.service_statuses The `State.storage` and `State.stored_state` attributes are now plurals. This diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 00000000..be31885f --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: cb630d145fb79f914052923f2f8ce54d +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/.doctrees/capture_events.doctree b/docs/_build/html/.doctrees/capture_events.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba8959f4a95f101fc2ab6c03534492f56b4f1578 GIT binary patch literal 8119 zcmeHM%a0sK8Q=AKW_QN>bYeT;tkY4HcqZ)5f)xq0c#*&|2Ntgoad^lw?Vj$Msh;iW z?sQk%y9c5WDZwihT+$pk5X3b?z>Nb!5sxE69Du(7aY5V=7cTt1s(wwcXKWz_abTsf zyQ;pb?@`~o-fVpD$Is2FKe-l%-1U!omgD$=!{SsfIf0#wnJ?0J)9$y@Z>AmDimV55 zkVH01 z0B;_M)Jpir_;$(O0lxwv@}Aa@{DPm5v}Wx3LnwiKWs?0)*XX#uq3M}Ma5t4NP2uH< zD3|`@E+#*{emUXsF5MYK><^7#Fpa=dR47T!$+Ivn`_yfAaM7!@V#Y4Ci1fb#BmJ6$ zUKYn8i+7DT@IT1t-Nx|F8_=uXAcCen2%^K@O){U)Suwl2Ww^fWB@Q!-)xFPKUd+k` zhYeU1F=y{~l(4R{IU;FUkwiX$6g&3=ydj^-rBh?Gr_J@^41ml`p+tAIjc6sZCbXs_ z&p{B|Aq<%?%M~I-S)>}X359PRjlJDCw8$+jVN1-S`z$3@{W`F`mRaI||HAj@l>xVu z5bF|LoxIXqZuRL>TH!2dEs?aesFn!bX({nT?vY6RQY3r~C!=XRuV{qhgtP^VJQp6Q za^2tfa22l5H*Eq18C4Q4LwFO|F4yP;Ts9LykOktKqtx_$oTT*CM&h5Fs;LY4DD zYE|`&q$eT0hw4_9Mv}Ff^_y)dwVYV)e7#Jo}9GAg)!H4E2+)3`p!aJ`p@5V!L09R9BvhgY+Uim>=!Dw1kwjwWPvX-Y(zB{%-JCy);^ z9m)zX%K5t`3#0YTwa=GfP1jdx zcExElRN9f_%0?x=FV4hANx;BLJYn9qyo62q68Th|gkcZ~Gag%!cs&Uyp+A9rjlMvq z=5+lhcX%Pcnu#pw)D5oJ!E!!NFO)0~X0rTfT^#kX=}GQS%s%|l_oojZ?PG7DA7?2o z%-PX{l7+WsVi|oE%M*(7_^Z++Jn>aM9`H@rWtIo#Ne`&d6)(!l-hG!npwcXrYx$>X z`8J=(As$zEk!Q@KgkkD15bxxPa;=O&Q3-I@NqHoj_(Dm68oHJflJ>qw(k-ahxpIZ! zeT(Wpl_QrV_75FrbdcRHCPHy<08Ms32>luLue^Hfd)(%Pm7Y!e9?3h~j;2_Sk0 z@leg`baQ=@=1x~7-mmgaEohMbCGyEo*Swst17A>mUit+sS?UY4DEAviR>&*M@-sJd zOTe%^&(LiFs=O#f8~5(%#PHrdqmxiYiDD-fxIAXqoY{wQSJxyRM2pKa&Z)S)-x8my ze9!9JmR$5)q{Wt3rK(+`&P}7KX{ns```THPWll8>q09aqL0=vb0T9?l`H|^7mG)OB zx1t@j)&QaSHKEw#wylK$v7_$(~Gb@Rv?haTH4Qp%-#ro!D{v)z32QAJ#x zy9(-s3Dmgwl}x~9-wW)+ikQFlBj6ZB!PuZ=!sb>qHrz3JdgE1Cn^3t-TLI*zmanU& zEdmovLriSHb$la>0w{G74Y*#@)a0NGNMp9C~WlWIKHLN%Xb~LsOV=qel4lwruzX$z} zM5mjv*6DWJ3KR9KAQq1SP#cWXHTL$5YigB!V#{FHKzP1Z-Q&V?a4M{(!>-k7ssgfW zJzGi5q`n!QesvH8S2F|n|7B_Q_#eM4?K@zC|AcMD{pmg_%WFsfAUoGiqcLH*vwh7k zX-^C--!8$%Uwcl9t-VwYZfPW}}reb8~VLu}u|bqg5KJR!3#L=m)x4dLoyz zPwIspqcU6bgDmdE*%X{1KTvL-y0wZq^fF80I{bRsYu?U`W?M%e5Sh8w5~S7%LwcGu zWC>9lVpz~Ig>UKB?sTaajcUF{d*_iCBxuh0$Zd7={Xj0~GrEy2mtrOaf*<AdVtoOLSy3WLk!#5Fo`^jRwyB$ z#y713T|LcJ>W{ok^5)qn*#8moFuDX7h2$T6p2mys`ClQ0~Pi?CN>)FXg6HU_~GP&hD9z&bG zNu(n8l50UCCQoUoQ&PEETd5r}x;z6)#!iCO7KHAGTW=+jNx_(U8UrvQFOPs(&;}%fs>?jOkW>$A9EwNGR zAu>@b4`-Q<8(V#k7|Ezy%ngEX$z?DT!vu6w3|fTYx z>|i?Xg~x&;SO?K?CzTfnQV{@1Q!wOKusG^hvvB*xkG}$Wu0{j9c0A3L$G?;x4`a1R zWe-`@bD0<@95DMGF2){^wS?7&6*+>Z`%7{YIyp8A^DG$1dU_{vJwEn@b!2jP$UXd^ zzh}LGRDW3&(`HspKSa$`7S|>cH7gVCCM8yujf>az1}Q5M0{Sos;eP3LP(Ar&e&7V! z6WFdlfDYu2;XJvDIO*5m+%YMy7g*XF>FMq;h0cuo%z+6Xg9OgdnLCjeY(O2F44pjB z#G?gX0_Xwnq1?!xBB89_K)baQxxoDU^aLoEv^# z)COrGy%fsx6SGtdscD=xC+kEcDg zj=*#s$#F9)E9(_g*|)l`%D`&Ejd#NsHDCIWlKvCm!egZQA-{Riqa}(8{rHIjW}m;7 z$d#(*DN(H0F7%gV3GwI|axgiZmU(qX!@-21spEd&70RqYpRP?7(5;CRTRB#>>HNg` zDxs#}bfJD$wlXK%aDR4?kaI)((hfWiS^^#r0vB&&^Y7vg-%h^_Q$`sJrvR0Rp}ZPl g;RPqA&lS^3|IXz-Brh0}&q5IbN1gdJT}Su+4FqW3EC2ui literal 0 HcmV?d00001 diff --git a/docs/_build/html/.doctrees/consistency_checker.doctree b/docs/_build/html/.doctrees/consistency_checker.doctree new file mode 100644 index 0000000000000000000000000000000000000000..de60d19e62caf0f71afa3041310f9dc6357895df GIT binary patch literal 73920 zcmdsg4U`>6b*4ws%xFgcvL#uTWk0XuXkKnA6< zD~??`ZnwLb4w9|8-9Cl-Eb;c4F4uRYWr21<*Vz(|m80S~tHTjdio@ZWn%l6uhdXmt zIBo?&+nwtKP+kA#ovG4IppAXX zs<&$PB)e6rSdBfwxLpSwtkUf4e6zW)ZP!?~`znsrSg@WQ26o%3DXE-WSnsesys)QoC-y2@yj#`6 z(i#jj45muBs4~Cu?4;98YVAX2RH0ft(seLgYH@O{G`=xz~vY;3Emo)>iojB@G65{_b`(e zSnUNn=!RQ*%+tj(9dvd(*FpC(gcSu1X?u8VS(}7XBRVeL#YY)uINYc=8(#Of$;Zy3 zsPAFcs+9abNYt=%lvgfTXCJptYVDphs$Iv?YVwRylfyjo?5cDcPSa@}cJ2v<{^^x4 zVcJQ87y3(k(C- z2D*kDWD^V@KHO~AVcc7s!~v@fW0PNMG)oN|hK!&IgA?z=YKt&3)oSn#JeT9_Tj3`R zkB-%XVZa}^IstTufr~FLmga15L-`F$R0%wSg$1~_8oZkLm;-&* z`J+&5?XQ{FsI>N|bfGkB|KQ*}E4^c#uwg{5)NHF=nzw4c4HjPj+noSE0ETPT?%>4+ z=#}iTs|)rX^fjUZDJc1F&|%JjKUo4_0==7)P$$gHZQJs}ML4W7(nCS>DnsZTMxi z#+|qW{y7s1$$p`efjDl2DDZ@v+iSD0rZsYK5~UDBR;?w zV#RR(du+c`1BY{h4Y3GG8APN7CVL^wp`K5P?7FD|OysMsfnd0zdYdAKy#OL!cvALV zi1h;S`jvOWcZ$3x>~_1^_NPntf}01$m^z5gEBNw9A+|X-SwiOyZfCu)mqB6zqP|T` zmepu9A&}66>hKqiUV9}53)7`N%rJYdn=D-`bu0TVt71==qE||LuDcE*Ll%c`4~4f9 zRk3#kgi9)>Kz3A4o|jtAp^^kGT*aBZE|G~2%y8&r*Gf1P-d;?yi;3^R7?2swj-9I4 zrdgSQe`rChWw%e*=*N1O^Bi_Xvcr2;EC!9S1b#HMF$i&Zg#nv_M1W*az_;B^Vp5uO ziML`?ABc*}5v!YeB3uXf+y{1IYJ?k5D+UtwTl0Xu8z3w1M)-r)oWXo|d9gLUx8ogI zyfIe1WZ6ceCWUkj_?Yr{tnZze3nN6*^<9hla%I<|jHUE^FRkZRrY8~u5MbHu8t_VL zWn9-^`;3|=Zz7QxRm3(aLTma_N>(G-iIkJZ9N`HiBIM85lpWHP;ZUQumHFISP52)} z=|#*uD7}Rw2=@t8?T4nNe7K55KeUACRRngwn@Jo&cVMZ_VC@I8yBRtOPMtA|e zK$Wr~tpcK$Qw&Ml!?p4?rMRCWHBq}VH7pclLKNe#Zq9j}0gw^-ro^bwWl^KwvMcVq zThXI_r>O?^IG`Vd_W9eOS!d2WqZV}NXjErMl|p=uEQI$Fc-&)7QE6O?(`&5NFpMc8 z{u?PG%TC^BAX!QTja-Se6caQU>+r!3dZ(ddit2w&s%~H%ea!OiOEag|{PYB>arB{~%Gz91GsN=sOIdC?pCgCf&y+v=plQ5K;!!eN2*?s5P&4ABkq+Jp%^T_`Lpmj|ouBu=luuECbm- zxRj-PkHe%0Q!~AkG*hvzBh@tNUB?`$w}EN&p1`1$=?PTJ5M769BAhVE^8CUJ#WW#= z8&fA-`y|d{b;C{avTQXfPP46e5KD!6YA1hHnKRt}e(58pO%A~%91IL@wd>uDRV@j3 z$3eICG}eXcwsJ2sF1xoC5?MG&1`~YX_;kZ@^f+N?hS^G;@DE4K2zL)5=Zu7F=R36; z^WwN>`PDT7lO_+9TDD8_C-1TFx35Wk6v@5DTIM@}}BVLRS|zE}w-fWd)jQPqRx z=ABTOxvSo8!Cd8ZXT^DsEU)!RETYs5K7oT?cWuPa00Clh#%TW)xnL9Q|F z;r$-w#6yAcShynU>4d06^kT-@drv_w1!#Nkvyd*u@5r2laT=@|offM|An>;c|4k_y zcg%LbRp;1Gi8@<0k+p}pO@894hhgwYWmSBQF&cjDcVA}?&1IR&`w2G+L zrC*F4jIRnw&hE7EPwmNsny;ZDQ?243uqqDB+9pgBk=ww>qlJ7naVo-JAV1xPA3)z| zM{~U6(j8;dJUr9`9<~E~Xtl$py(0oPW<#$w7p^q2?<8y}Lh@$gMG;boC`();;cbIL$lyVY9Ns0$y>O#I zLzE0@Lhlas70E-0eqH{I>uKj|-kGE~@de3_xnx>^tAEX`3r1}OH%I>)J=tU6v zaVOyILD8%^#(8*~;3jwIy+@(L_kIKZ=v~W4;m#5(2AL1fFys9ezMbp{y^mqmkAtX~ z)DC6e_u;Ph1U~*vcnpw}zP!{HI(ICHSPPr#dcAFMd<7vETOEto0CIa$}PRZERd zeGVpIUoQve>=)t=_~SxYdIzlHOAeGu7KNe|94)Wf|p%_ZRz@L=GP5Pb_oCh6? zhQnl(CDucE&w%J~6e2P7F1y};#Gh;qK>0n|faQ3&{_$+MUR<(edhmNwqbcGeU);jF zxCloQWVD12u-oH>#U+D%cmi*U+_(I`0J)qp8n~qZeR@*$2F#a8retd74{VnHK&(x# zM-UT-=JE=@8f6uJVCB7n*b>X(7kn=&TW-JLyO7k-FZf4V3gs7Y zDJg?o+Pul=8qxTcjP_m|zd)Ewci7TrPj-<-AxFJTlO_Cuy`%`W-=?fJSid0ELg{|N z+eq~dEEJFF$$&1^FNnJV?{5&#Nx$IBaC6{(L2rl1J%c-;@QP;;_khwjxC>rTd;_U5 z3`;MF#t3b>GD zK1;L%=FG~C)}(S~zR!n=JSMK5ECHbxz``oF27QvRMx8E|53rpbd~XG;m$EBxZw5D7 z9D(b}($!a&kAnxX;O{N%yRLLEX<*@dvF1JDy+h?6mRKGn{IDh7ik-730Hw@HP93Kw zyxTyw_ip&3V?Axb(77n9@Vu#RT#}`eSi6Y2mE9@%PHekRM+Hvv*m60xvF*I4Fjwwi zI%>t=*f;P5oV0ZWLs#=cUl4AI76dh0uu?J5=JG=M9;}_XS{YRSlr%v&)a+di^eiUX z<$VGEM~x=>z%N!p{4qif%d9!*R>?t^i8z!SOZ>Q+uD(zCWRCeOx{9Ep)e_= zXqX(~<7^fv<>T0vWm0}&R7yd)VR@8QkWR4~)aU?Uxt(qM>~T%f@Hrm8DnY8=imiK^ zv@Th$4>3a+A@w7)6bh+AiV0Gmprueq6;d>$j>q0#7FyL;Vw*lq>QNZ6s<7OseTr39 z4%Bjs3;?xbk>f0Y`Wy^$l12|#T`e4#?d&o(;)|pay%!*po;9z+HF<%RRbN9nDx7!O z8lvB^#P84&sb!&DVj*LhCK7AA&P5)A;%G*j7Q_k$Wf50+m3gF+LJg*@C|EtREM9`y zhM(NH|7i;D)fTAx1V2Ft?DA5L>^;~!{gb`dMOgrycWvD7Llvj5jf?f-0ZWV>?@`ts zaBW<_Q)$i!n@96d4bG6g9%`KZe2CAMg}aFu4EF6KB_kHa$zTYK`nW*uQe@fT8T@bv z-)IUO_U(29wtv8<3ShZn%`a7(@U;ZkfC{@Qr*T?pdNvBgnX@}pLGFZ&k+ZnTQCWer zRKB>!ndhtoNN-G_J#Hi66-z3>JDX@Pp?3pj#uwG?%v4(u{`Q1$z5AY!YwYl&2WSg@ zb`EL*KYHL@2bm<@Xtf0>P}AJ{Uxswb61z1_0&9PAi!jXG;b#zVTBUmyR@fm<`1W|B zbf^}5x4?T0;lL*@(Z+1W(J-&ExJyo2KL&h~XU1%CX`GVn8&DlKbF14;Ej&V1aGnyM zkcmWX273srMfqn(bc1us^B$1ODbF@uG0Kx&84!p<`#vW)XGH64Hs)b>kh0z_7lZgq z5kQq3JBk2upf^3h&7?R6D+w2L=-HS1a}F0+XdfImn}p#UtTm;m@JErkNGkfPafQ>v}wz%yFUJB~MBBluL*{!->?3Lo;a%1?hwE9Y4s`Yzh0my|&TuO?SR)fo}*ywYl2vZyNF4aOQ zgE7sdY&%1firz1fdK;L=XxqWJXektw)2ewjL^`rG>^klMUZo{bO*2grd=Wq}E84dK ze%!AVy(cy3m-GZGo{Sxaf{gjjwWLo#G3MJKDfk3hHxx1C!miQpxDNNw5-DeyODtq8 z(?o(XPYIq)Jl(7-#gTsuym^JV zL>f=*ACL9w;m99=M1xsYDmijggLC9)ytGVVK--(QXBJ4TDo;;TRhMw?ibWp3h8%#`mY1t??EsRYd9(KpdGu;T0pt z*_8=7&b9B89KSYdmU4r9E>?Uh!l=^pdRcLqcLp8)!PkHek5w|`!SC)h6kCUvciF5O z6i&m++qU>J;y`vm!>?4JC1KgMe3Wcj;-VU z73P}4SKl-k*sy_PVz6ZIk4Qt1&i?lysUeFtG{(EybTE>Un~-8cLTsX?P?4LEqIv&0 z$=)kS>8dlS4Xw*X_U;CCl0&^gb!LyCx(h7kAHK&ipv{-`y>#>dX-TpWH?mS25o1Sa zDOB_=q?lmRqNPxn6jC%y$|akukL#U*kdNbz&L`y;Mx_*#o9=0{3evq-gBl$GESF;r z;xW>?WVs$;hA=|vCuu1ZQiT)~r2Zi-g+i*3q9Ik~{4>z1z7iw$IZ}_ph*gED+)hjlUh-qx?MeCC$1$QjvOq_S-x9=Ggla*@t`@u z@~UUg!7aDZ>ID8cJDg{s2{j9|kxi&)JV}N@x{9CBufutX@QCxolE}gnVytmEIR-zl z?^gD=YF5X0;hc;31FiwoR{YJ#pBa7QN^2LbG&s{IwbJhTm$0+<#%L2hKV>Ik1Ov1& zG&nqGr`5LLghGBm5JlzNmKLJd}9l{zpcOiB_2zXrOA#65}q1bHg*8WWO7T2^m$>{ zO?tvbX5D@WX5+JNe}`9W){R}6%(`)0^f~MH&S)|zfb&yfXGGy`DQ}T}OX~M~DKQyy zaSy!)b8#s~Fx{T=Fjd6fEh@|{mme~iR3`oP9V_SOR+RPYc*vJNagu8mZ*7!Sc>Yv) z?}Xl^RPD-@M*cr)#bQ!1>bqBaQChPj|q@_^wq>y4lPujE;ik=iwG~uKZ?#-A zl0K^)-Pa@8W^RIPH^CT^ea}dqBP~f5;xSfgBg*_qS_*|pA;kof&(KmRObRI)Cgn_E z25T-K$9?kir2N9Dl!9_|=g+YU$^lDmg#o~FIc6kZC9O*$^%Z6aBc%SAmO>#_NHIa` z*m}zOA&*cLQZ%HhGk_UrRbPn_yNlGLFk)3yL1)k3ZgWB{f{7BPA(MjKy#sMu&VjoDq4~8=6i8*zF9TJgJ-f1vinC# z7Am68p`PYT^d&xlER?7%LKc1JhE{LjJxP|ma-8cH+sj*pxn?kd{eg`YEwR>Ld~?Q#3EWARmvpzcK~icQ(j6|b z5PSDJH?}EwmJhb`esvU{=x{8G)>P95;Y6 zDPQw5@Kj@YtkqIvpcIrlfIZ48NcWV;0G3-J+kG&G<#Nz2r%CIQ<@yjagc0rX5n2j` zR3XI#sZY>SD5MH08d6o7BLl7KD=}i9CiN(cSXEeV)IP;3D+g-1MFxP{e$NPak+dd> z&=**tjS%`BS_*|wA;kotKcuBl2o+K^gyx)9S-p{RB?{xR=vTdd%4#PEB)JI&0Lg+( z;2zR`q-$~|BrWifj$fiBQho%NSjbqWi3Agv?p7`@6L^F)OkpT56BBqVt9>2ms*bt` zAeg{(v#t~qI1G(b;cXNqFxIPw3H)0K$Og*-KoGS^kTX7 zgtI;Td9$1p=I@~du$5J&u(VeSl<}i{<{gxTm6B4CjR|v9W(A zR~_P)vxTv7pF(VGvX103McF7I6WLUXFpr-Dl{xeHdAwrGBfBzT9=Y~?GLP?I_$k8& z=TA1<#|v|hZ#3W@Q)FbYkEd6feN0u&jDI|nZNQ$d78_DT=O+XCmt^zGwKVaoQC8u3 zQq{d2q!=etks;1A$gFu~VES%U)V^0F##ZzG26N5eA$2x8FXZ~=A%8-amvr|35t8QS zA^)Bw(s{^!L+5RqsDO_Qowqs`=-VhNK2B1sIXES(K#Jj3WZ4_#RQY5X(<#Y zg%k~w(wom98|CBJQGAq?Ul^5AP;Qd(BdmgQz>-^G0I*yRYWzQu)+Lep8D2D2!NDSZ>sQhgDV%)N+dq0JQ~q$aR~^ zVV(L|@F*lLz(ek&B~m;jmsrSHrila(neJ9DFAw=9(lCYbyi7dg8(8h@NLO{#y#T>O zrki!8c*s}4El%elW4(HK$S*^p!Sax(2InEGU_%doN*+=iSe_DJ=}e>yb%3LJ0g{_6 zN4#SuA|ey~qt#gK-P3=Vb04#Ew|>T&#ds}Z_Q!%TeqJ794p-APiEYS*ioq02X&(E1kS^z%L_`E%lh|7}dL1*!c>mXZH0 zq$_OXtgkYsnRsZ5uxB$lwUrrN}L99Nw(!^@IZf4BtLxc_gc~PtXTeOml zZpFI|KE30;8~)g8H=(;7Gw>M3$iI%V3eT6y?&Vg+K>_LD;C(RlN*ovcC@O8=>}qT{ z@9!|z^O9X1+d_>$B)d8cNvU2~N0XqkhFGG(va46nWuSth-CP}$MV|XeT-F54p?$43;>qP z!LB|>T9-uX7nvc9korGpDHKwL6ceQWFIozPR3Sw}s>)_&pjCY(M(mGBJqjaM6_y*d z-)EJT1GU^D13+y-c6GD@w-$Q_)kTghOi2dHNUOnvUOOR-=>?*3k+0_=<(8HgS zT@@e9N{g^`dR4|c5ITMn(woq$H<9$J6p0_?W#2RHAv%u)@TKb6m`fX4`@G$$0D@f(;$`8et&>hjP_$!CbS>deo(ZZ-|Vz2_A=9c zy+Y0(+AmEvGurQ@r2Trc=>6DZ{LP4;g|9pQchM{c!1Miil+|m&^YvB@e9V*J`O@A` z@O&w+#2)%LqSE%w^TmeqUcy{cc)nlgVV9SLS-;CBe@GUPB=%l~q|~sY`%i+{dxa$$ zEU`CsA@B6l(M^V?!;sW)+2jsd3Kg0PDJG%mRkRc;G!;^`&@?Bp_a;)h>Ktp1!g3LN zZ(y~fJ3R)~ne8zcLvlG7l%u3^$#UJv3}M8exU>`srb3DdOi$8MD3}T<8cbEjA{T>l zmeiv#U{!r`Gbm?RW#vFEx5xlcTaZC{iZmiQ20Y2in){1+pQR;I3<{T6$XKR{1cQ=3 zU@tF&@^#WMh4H*h49bhF_I0GII_ll6U{KP{x>5|vH^Ki<;$4M7iS_DXQ2q-f8Z3i? zYH$W+^)$#M+koAWIar@*&J^cLY;-U(7U-*PivF}{UeneZ)K`#$*= zv3u3GD{VU{e!_;y?$s0-8EngnZ)r?b&5Ug6aeyuI{M^hsCmKw8teR^x>#syvt^8)zlzK}gV#H?F)Yo}uOuP}( zF!w}7?VE;)t>(2b*AyD&wm~DXUy|m-WbsJ{{WK({#v3gZm6LcXc zpZ^@!$7K1{Q?wK+{1sA6!r#x*QmF7(NYTPyxx^$R^p%g}_V5>^eANZl9E_!S8Yw7u z$oo92Al+Lc2@P(AY*)h=mi=zI{vl~evJ9`XLK~4XKc%Hms1#C6P`P0ncgE7k7V;Pa zAw@%FPVVq>QhH%b7Tt2a3)D$=dzPfA5c_Ug3WZo9#RRcsS_;*V3MrZ$H>KJ-4i=peVcTK$q7q=kl-e+JbJnL`+ ztBr?sT;J9FnVtp_GceXpgbOY z!;5>_b*=^PrQ_|{cVQl!L)jE<*5n#1-T3wwjVUx)`DGp+Q4LUcAAikd4m<-ubZx$*~EcZrJ0t+&-yCOKNrm+ zoxjO7H}Gtf)yl8ZOsksI$pNv|I{kg#=~A!65z*J8()K+)5F5_>pO|aP^uTMdO7m5+ zfaCo-kmrP*qDKrOe3{pgdW3)p|oO|3wRO`(f~`s)xtEu%dXY4Y3JNVOUTPk8nb@iqSncbOS9R2ZE7+=Zv#u0d z^>uJWl)zVEt75%+*s9M%qQSCNs0L@NR$UBN_*1e~V#8~i6RXoz(w&5W_KT3-gswW8 zNmt?N8NEai+usW3n(*+_@POm&j|!p?Wz1R&MOSGKg|srIQ?_CjOVKG8CFJOUHKnXJ zLoSrxtDs72o0mbloOB9ef?kCA1*~w+SfLdeW3|V$qT+EhSp(TUq$FJw!NaJf`BF`Z zQ6OC;a*L2IGa!|dF7LoAM!K*o6Vioi-zVvEvsh^et-`Ldm4tj)9Bs^={fp=4BFtYAO<@2;%lo3N!tdOvI;3CA?q`=6e?sDQnZjYC$sWADP8rIHJ@QAf4(TQ@*Jxj-TxsO z2yTLGx4;;Z1w+$UN&Atl=@nMi+@a}@X^9l}xx_-oGEF2x)ATNGc|+5kJGr};KE@S> z@-l^{+dy0MzEp&!>1JK2(6kB2Q-TO3G>!G@2~BT@M1u`YQ4JoN-UK%E@TUw-FDJ)* zJvx;`FGQzzLKY^`X=Nt*+I`k$!t_-Y%tPiMV>13$lflWHiErTla-sn!;p*;`&>6jU zu2XWM#T}Rt4_YsZ0)QiNA(RmLu7pgz>oyHtZ--o{#-N~18;0f}UCz)IF~dXG^rB%L ziAyf-Kuque7VVn3=}wg|NjA`^639}@rp(N z?8+qi=h{Q`9~X4Oxi-91w!wW$5WbIfb#}XJOEx}!Z%TPj2J2l*vh`@Iac37Ct-#>q zOajbTQC12^_~z)YGl^-3!i|+qyKOguvbcXZTrcm`+=ksf9Io~4Ab?GZemC3#aOwnZ z&7Xp;)o@sGquLEe?yzbd+wVTo74s>Z4u@k4cEfI4(91yjF*vW-2I`{Tf*avYz6xM9$%z1R)6&NrJuqZ!!B!$U*i23TYlG&=S2srhER z-i13G;Z$U|1q?~O4oQ8;au>g2*KBsDe9{e^a;0YZKBx>5MS|$Y`nKI_wu5pFHgVRv zhgOB-j#Z0(4u@OpQ!dyFxXO+%Um6aFtM*)H0rJ~;(rP!rR`5pKw(4+aENEL58w=Ha zINazqTAiS5H!964ywwfII>G$DH}CUZxV}_>Shm~kX1nZIjcN^`0Tl;jtH84SP0dcA z=Q7N4>4v)#PZC*p-@ul?k>?xhAX8teKS(4FH)9!mFq8u(szI5$;f9*kSm?lFAh389 zey_3{-SEP;U1_$f<*MBRe1I62S$YI;JP*YLi@4P?KN1;erEsIw37X~jR=COqP;IDo z>aB7FJTNS~AxCPgx=rj3ShwM0^~bkbzTK%d%ctrHsm=DOR@1l3YD$KZN>D!G`Ywm) zrgGKwt+^We^c>f6R5l1_GF%UZ@u3N@Gom5W4amX4Yvp;j28BD;4Y%VJ2=VPUo+Ax4 zjJZ{z%Gb56lhIFr=oV~MfSkqx0I}xQ-JpBR<~`xYmfb2te{DlstT2PE$2)Tt=#Gse zyx0kXmOs6JKiu}GT8n|xY)m!V3;Vm_HhhyQ0B@E98xFaK7S|2e!u@?$z5W-$o*Ucq zl|=SNOBH7Fcu8imHLrJ+wC54VbK#qvjbE zpzOC0A!ozQ{$eArPL&;Z!KuMN!0(z`6QRG}uUpX2?&(0g_Q6mWvfun?xz?;$!nDBZ zSfCG_jLzE|Secm+QXlWMK*UDSE^q^|Kko<50(zPiw=oYGkR8KT>?-`uT;e^qj^M2| zE#4Z}uwDr;Q=hY|(1aI31;>W1FlWPU6?p4-*{)k|t!!1R@R14ZK^_jbV9r?OzFnJ# z3WaX%Y`EHPoajQ|AFk!y3AA5;qT8st&^UrJ-(bUlvjvm_Xa&%#LLOCn-iJBqaI1C~ zj}>RPA-DPH2afJ;mE9l3oBZ1Q3=UO)0Dt^&3~$389+sFrIO{uCz`QSe?yPsNb;iOG zvD+u=zU6dyG(mhVbNMyTV%YWTO+Yt}xmR2Q&dl!6T`?}0t;T{eZ@qByx5AzrZx{aA zv>N_w!#`ifKVQW^kFJ3~=kU)1Bk<>8{PXNu`12+FvuYjuS&M)E7EX}&et>`QJTDK= z`||MHv+QUP55J+};Wt)1TukoaVsj5C>O7pt^Dr**FmCFE8`QSIDrZB*g%*Xi3l+xi zV3#M~<0w$?@b{oofwohhYu2LX#a_KAaWi^*Ov`ahN@a<*YWc(H)edmD+?LEsJh>no zhYq>Y?7$EYBhR`@vsU9Mhe3ICM%;e{kb0*39_UH8uiQC?RC*@ c)*{xqjY_Rk#TK}Lsm7}~bckM-*Y4E+2QUNv8UO$Q literal 0 HcmV?d00001 diff --git a/docs/_build/html/.doctrees/context.doctree b/docs/_build/html/.doctrees/context.doctree new file mode 100644 index 0000000000000000000000000000000000000000..667e2dd6d732182934f1570ca62a69cd5a032a94 GIT binary patch literal 198814 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 Pm#A=+ZlXchU0V1*N-53y literal 0 HcmV?d00001 diff --git a/docs/_build/html/.doctrees/environment.pickle b/docs/_build/html/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..87eba902c7af7700c51f14643efbca0a7c2e904c GIT binary patch literal 4415429 zcmeFa37jNHaWAaZ-m~{=wYs5nPVX|)qXU7xNP=Z0gji`2S_ugx(c9BgGu^#C-J?Es zcaX#bYz~>S#nHmXfQ|i(4cO-Jg%2*@2Hvxc4cM5&ww}43Z}V&(7|i#N$gHf)%Bt$l z>h6W_`+dTmt**+-jEszo_(x=9)=SqvcE%ZN&Y=H--JO+ct$C{GH&4{st>&`d?Dm75 z&+OG23pZ)E-q7Fovi`&ULa?^HveG{iOf9r3-L~&9)Y|>vz+APp?9X+}%l@k0o~yJL z{JGXjXSP%Eo8@+`HHX5TxzapUI#=y3H|C1+^-e$7&}mn=mdl2z1?4NP=3;HBA8eD9 zhrc%*5)Txqn_DORcDuIVcR+ctzTo+^KRFge6jvO&u_2xgDuOeoo;ER-0t{b!&#ybsxP)y{N_@-yix@( zWp&;1e5Xi%`oTGsa<6hSG!qj zq9XBIb&N|l%PVM;c(Ow)PBob2PSpI9BnW*!*tpVe)%^-+*>qG&1cnjKR$JiO_Cp~v zyj!~q#eOhF5>o2cx(y#Rg>QHuu}9Kb?qcNn!Dbqsc5SJOYWG}y<<(D~@!}P2Z7r>o zI<>A}>a`pF;0%b2y3>TL_N!L}o9Rw%xx9p5#b7Hpy;wd`!$|jo3yPwPbEOV7TbYwj ziYraXpD0Ws0WR{~*ouxW^eQ9~s4v)A@6~(7T1SX~XW=*mCM?k{qlO(}z4#^S+`Lfh zR9ZdAQ$Kh@wcB0k9GII^_llKjxxHNN%@;AJz^LVNmxjC5=@Ri9@UvYz)eo);Ulccr z-PYWtbC-ti&ho{Af8s!IzSr#bij~$f>RPIGQL*6EzOVvulS<4f2{UFkhEKkTsYX+( zAFNw0*YM9ad4I9hSfI(VL2w~@Q0sJhB)c1-Bjy|a0;=lxm{-kit=uRz%O_A3W(o08 zF`%^4_7|y(7l#z8M+R@^x?s;%49#L`Wfh~*t@f*jg1ymSM@lLr=K+G!;hTWttZX|dO=^zV6S>Wnk!iYB4wcPix-{||J>4y zH+|oImt8Tv?`huLoOjt3-m+hAcD!!Y_fA%!Ydo}Gsrn1DvZ;rsrsnqVpYry5cQBVb zo`0&+=q;cG4X3w=q4mn%5h$M`N>RaQKt-3Ay$9*u!(O-CUh=zK!0WcW#aaW5qoS&u zAp7C4V(-w=qh81`ueInkQ4c6=g$2aRqR$=g!5g1@+fnAm!`_{WqGO`jW8O*3G(oA5 zk_CEuZc1@g&_gd4#49slGa+*!9G$LLX<&AE*URn{`6qR-&~5j8Fq60`%9NQ_*a2_3 zwNP7JW!^SwCwvc-@^IA_y@KRo*a(dxY7jJr6fB6Y^E*_4>o2l3JSqk1V56a`DnfQ{ zDp#rnVwiXR4g5BwfhI>`-@d1DJrC;wBPy&ln|_-(@H8InIjHtVW4>HD4vFxa7+exh zPZ(#f)&Uu{%5i_8=-pjwG`xA=TPb%sBoB}wZn|47cfFI~gDg3Po^`6NUW3atJ=p4b zF3l2DZZ4qTEVAB8&97jrG3fk=D-v%ur@Pctj~c2qJz;OPVdQCZ2!x8EL~jm}t!Q>< zn0!I~?W~8W#0)xusRV_CF*bgIyYtKZBG*&maxE9x=v7hN zGq@yq>o*rVcf%NQ_i0dc?Xb_gLZ6c?#9>|3VIG}YlMQdDpwB@0W;h7On^XhFE0U#) zqhG3^>@>A8uyOq|tg}?z<+mVJI zCP+vQR3)?zyJBQ&nqD1#9P!v|!H*%IO}xi7hAdXos@Q>xT{uBT6n{V}TX~&YvQKhq zVfN@;skdrPG0#Ga%WXh`-@&FB2DRHR*T9S=Qg6f*Qkdlvt=fV|?%`~^*JL%x<`>2l zqOzpu)EY(@LCVx6_cbpurnOcI#mgjwVpk?^6 z=Y*ve{Kayw(Ji%B2#r&aqY!KquXYfk*#;Lv*P!U^n$ZA zPrtN`;0{KXYud1~3J1N}uQr17l(&UAPEp)1w%SW`*YuCPqW?<#FIbCsPrv#=aCul1 zzX9~h3y^eB(IJo3Z_ZIjqXXwmzSaviHEZ1!fVWlnNZaLgG;D=n)5@w~KU~xjp_b*N zD}DtnR#$@!rJGI=|MBBE;Y4WM<}9J2E6M#F75EG+;qL24?eH=I7KoB7WDOLgK=lx2Vv@$io97V;{CaZ6~ z;|nd2Og;BcVX(*t;JRcagwYPFFj%<{`~h3Ql^38!#8krGg$*L^QCkvRM;}R~fMH{l zOq&A$H=zyhwA`*#c|6Kq2eE(#Ff}n%G)QVuDoYB7K(Wc-=LQj#g^s$j+FM41a$z3V z#T$>7jv_b!eYH`>z$gp@Z34Yo?#_0qzTe#sq1@I%u&UyhI=w}T%a8_ISA<4I={6>M z8^JJWy#fiT1AC0VfuVaupuKR7n1A~&)l!y5)fApzT&VU!?6Ycle5~t&0E`nv6zAo!LrHc)nApj_sWnVM+PZ0cDxfWvV+DJhO^OX$DctM znUuOt$u`l_ET&blPQ<9j&Q55|D1ol|D~O01U90}`!(>U`&wqcD|9+7EqVZ;L8OstS zC>ua|o(UT}P*)riojNM6yvuZa7hHP+%2vv3fZo+-tG2(?9a6es#K9sQxuB zf?a?+6p!a9rU;?KjI1N>alt25XR7~;3T_O8y49k1b0Zcd{4#>m;f?ixJ>^yPb2I-xZaKU@g~L{i*6t z3$ff0+JMqLR`(!UN5uVY$9;dLbh6wgS49!CtJ7NnSb~C5PwtnE?WJ%ijX7q*@-nen zfGRv^g4s9lS8C)Nh@q+8SG`~KaW}IEazlW&wAd)qYob|cR+nrODI4d2a{fuB8-4|MiOJGU^ zuGAL*#Q6`syE}TKxpnIClz7Zbqtz?a?Jay;Ou~M(pzaF-Lk{$-|E!(}(*}CrW&ktm zFG;J1u%k2$GwQ7!+zuAh;b|?_XjN}xuX(&lSWcA@v~++IsdFdv&TZn?d$k2|U$9zq zsY32Rf1iG92?hP|mZTS}T_MU4MFm9w{Fs6ge(;0pA5}l9ND@p9;jd9H5G;afl(S*2 zs8{rYZX;zt%C9Pl71|Z_?E>^orvd<2tRyP|*~1+sCs8cJovgtf?jM$Ki9WIZB##dI zx7Gycks?9TAWC40Aj&|N>D8)BJGo}Sy-K^r-hYhM;yHOQNLN6>p&fg^i{C#9PzF^= zmIU^B3M#zzV!VPNL)cLDXRALal`exTme~*&iwC>42b#(z1zO!#-7gABSdA92<|@Qj zJ`t<^hMm~VHA3mOq-L*PRlS<)slKoJOXA`q)!!BuKVSU?(ZmjZ3tF^YHVCY~17L;K zxxj}Vh}AqYHV6#zZQ&@uqDqe)Zv(5V$7gZ9LY31vAXY_siC-0MMxKPcUwvowU7~>XfvAoNB65YUkZd_u&_m!tw1an-$s&dXD{(*pVG6~Y z)oZFx76gg@iXdhw0$S@CXvrQ4$%E+zAnC$i=)kT>3dEQSLq~Q@`lrE}MNhsg8Om;R z1V?1AW#`1hm{13z*|1|3c*(Tt&IVTw1cBKFIp_6p5*Z_8Feo7<W`6{;Xx7&v#|vdgC#=4(vEV?PcG4f#!V?qzz^MOokCRjw;wz$49!&*nsA0F zW#B}+*z~(|&6VXjS@s#%%=w*b=U@$ImzNuG_u&+f=Oid#Y(O=}d9pohN~$pO0?)j! z0MLKmzP=xO895s;r>ksz&%EzmDs+EXNL2*gMQ}n6NZ9bz6f{k^e@*;;=m<#ZfLwfo zH0sXqK1WsvM#u+S!v{UGPmhSwyThC0aLGW4GzRCZN0HtTtM!B`gjqNzEW<&F&<%ku z4$gblUANxq9XWX0P2P1k-FEPnTc2_8#vAXr>FCiL`l98tqgSO1)b-0q)7f+D!6P@{ zb?|1qck8XsXw)bQ8@{uZ0x733S+JHszU0aRP$}+^aH8uw#A6^ummq(HjvQirTE*u!Hc1lz$wKd<`DQ+Q_3@K%G36AiS3&ayrLgH!} z@oPk18olKvn6A@FWllleu7>x|6K`}|D-HjI-+*Re97z7x5%K08QNmKydbOIlJ+s-8 zWSu2mx-l6#s$K z$YG3j>tqMQ&+lxJ?+EO4@tK(Td|%QhjITEJ_@U&sX_@(nBpo9z))yq{)fZG>DC)g{ zl#^H~3DJ=*9#$dts-fA!P%Ils*_5h@U?@!izJFfSLYtDifYU@oCVF+3UPO4T@JaY> z?GXiNVGY8e)}Bxhmq7X9_0~&R<6yV+)#AyyQA_ekw9*iq`J#(Mk-ji0*Tw{bLPly8 zV2hyO=4Z4&!iZi}x)~EfA_j~vCe)^ILSclD%5+DM7*Z%7UZbYXHhL`*Mk#FP)7|Cr zaads?-4r6hRSTw57CEZ}iEsGA!iG?${(fa7c3~RV5b~zbg)z}1x~f;eM>qlL3ZD2} ztn{I`h*C#Tk^xvSVa?E^t)KK#Juc<+&MRVT4`euAPQO#Fc2bz0^N|il$?TzxN-mWvoE>iNyntx z-o{1bIw&5m>opPD7ApNLen!z3g)NkmN|bTc(swp62fL|Lrx1}wjG>EAsI((HDy7;& z2@!e5=|Gkc6fV2F0;z(TPkOeqLJLU1xySugi2s6cWH<8qWSKg|SFJ@}>}erBzLCse zgY^4m@{?zfSQN=v!QsXH4IkNM{}R)7ea z3o-)7xy0%Td--RnpJ72DizD?9VB(QI-V;4WGA;#fII6MUZ_Z+(sbc3w#bk3~WFc5{ zRa9(yRE$?M65BaGPb=M&p{(hq*{G78Q6(r!7&WmP%5{-R)zR~FqIZRegv$33)s^$2 zB1ln3?rnRy)Bs$8y@=}3xP~nE6(Qb;T!d`XXcSRn3TuQ9cSJ47<X&Lft~UJhpsuAEZ^8FA266fKpy$u z$O9KI?a`lE4#=JkBIXpkIO$WOjDVL?4^$6JSF3uf@QkXrNq6&z{P(%?-`m52&kHZ^ z2rrIS?_@fvcUSKb1f3nNhe=d`E z@x!IXW#evI=0H^{ue12AP$D|3;KC_oN6z7gKyKt$VyzQ~1B<^v@bcxI{2X(=Bw}_1 z%&>?{z9Mo+*0axu3*dgFNh2T=tX-rhGEgesrjW3(=qj))nqA}tgK|g07-Ssx9}S%& zZdaO067>>$zmWkHjN)kw;g+y5q*^>AC`s|FP}PKyHNmj(X{Q0R!rAN6S>Db~GlE(M zf*?rG=HgtwAL0$MZp1O6&{&_%1z07O5cDZQi}kvG|L`A4lg*FyR1QYDT(=k_JcBip zsroR~YaYb^^D3f70F4vE=5qClM=c~kaCL!00Ah)&fxIBhdx<7Q$Mxr8u|__&Utd7t z8AnaD_QmT9Ed+-t@CX9bYLDoJSWX8{<>*4#wiuEy4!|Ar!6Mco5sc%VKys>XqGx3L0iaI$^R$#NbWwE<5Sm}#NkuxX3T;`blnIH+ zdiT%+u?$`!A;X$K7Ki}u__Yh@sZ0gpr&=X4ep#q=< z>qd)bMyPZW%fSmRA>E$*30bcCGu5|qzYI1u+{`nwm&`3XnM}lZW>vo}l ziz;5S@pie_Rqa9!_cvEJQwB+}36nsiY&;5_1;<>ZY=+4vP$(b-7Kf<7$}`eLE7)#G zJ8Tfx54OuqEG0?HYtaLhr9;3??l#8$YDzsoj#U5fnZdb|N_A7@VESFG{s-s8A0juH z7ufME+$OAE#NO}2o5J1DsuA{jsIK#3b=Au!%3_I<$dLP^)oX+V=>FNUw}da=KfKmz zA10b!h?4~^hTGMP5jVUP|6T@4Hi$a=hrhoU?2#TbK}B#?tn(pNd$(~Pt4PRqM1D|+ zWGQnEd&X&nRDj~`q_-(tBhy5JGvUw&+XSWvEpD)m5F1t+D1{qgB1(YabV*cwHq34L zII;?WrJlyB{ijUB-q+stZ46E5x$Ge zSnLNzNCb&?HNU&a3EL1pu>l`7(R)Ts+iOki7>`!l>SrRV7;MKo0)?L^aF z-rW_3EU{5?k@WzIPE~=m0Lc)rhsg@|vI_~hM34#54hex4z=5;$4301z3>J#B*Q#rS zLD@*bwlK{BLyXnz>OW&;gAz$fVI~Q3&B+TwZ{%pkrqay^KlAQ)PQBps=hi>I_KY*= z*SofVs;m+FXjkCEKgPHA>8FM7bTT}0l{40=Lg&xU&QWPp91yt@@tvF)Ws(ywW2X? zt_1%BhNHx7?$H^-T9R*HqTfzXnq26LK`oW%D_n4|UK@735TxPih2hJMljYS8Vkg1g6780u^a4`Lh=x-}UDZbnBRE$q|I-8OVL{=G@YD{NAKt|d zMT8f4r3flW9`dreT|O!EPXK&2RjN3+1#1!TUkhvxD45wPiubFZ3}3518FW{R^=t7D zO4grBKVNG+)z0%cc>68b(;?AwU%tfe1ncfZl!|m@boz%``W1a~7|jM=QRw#T*Q2Rm zGj&_^q<%Hs*dY6GgpD%tM0@kt@TD!b5Mo+e1s^1L<`_WnzKQyC@Ydlod-H-5 zn`q&N_w5*LR7|eVQ6n3XsKzTJDTNNB5V~5w4gVr;{ao?S^Ta<##Xon6f4C!L8*Na)q?CTdZnJA&%mNQzk{CeVu+42!)KTY5m56qq>_D4?7 zN9|g*{_Mb%qsdhL*2t5{m^#6_l`@@?wNs?)Kg|n=3>i7%mO3Vj7F@dhvK)nP30@>n zt#~1H#Ab>lh{L7~(u0G%UlPZrz@ePw^dk<3VDGKiOmg(b!@Obaxe(DZatyp@g)ohe zZCLIUm0IS}8bf`?F#nQ0AgXKb!(4waRmV#AIfImLI0ibvq&S#}J5mBfSfVec{hFk~ zfW*8HZE7>%o;C28?xrL>4@m>qN(oNWNj5lqWWk4h0hu=Kp62v&0bm-=2`**FQoPvz=NyoWKTuk0GbMt}LhsfOxceDz?#LKP&c} zpY(B30Shy2)1`YP8A0=4Hc-3MaWyqvoO*WaBt*A8!&(ZPT9GeZ!TS6R9Xi9tPVNK7aZep@nuwg1 zJ>k8$bTSQ`Ua^T62i=+4>^~>d^T%KMV^QB9f9ad3_qZ4KA9vC?fKqWDptK_wPzmvY z8Wv-k%n3sr|77ywxM?_Xyyx>$e?o7OU@6JODhml%vxn_oycrvUNL#>ZsT4(_uyH07 z4>lyB?9F4h&hc3+7*26WYxV}QzUYM`BQza9qvNB{5{Wounks5~$8MrX?=i1%vI^l` z_HMz6O;q{J)Vxp4NzJ*i4@2o4J4*Hyg{h#2?U6{#emb->6gjG1UWKG0t&=LJh@Ace zTRbVy{Pbe6xQ{o%6CK>pG-*@P&h*-`Ln21Z^q|(TJ{)ERT5o|GKH-aMsX}DL;p{Bq z8PzX(EZG3MaONUfYlqbHG!CuMA~FPsC(=|v&7%#dc%luai6$MdEMYoFXPnTA940jp#K&Lyv$2T?J*rPdvp-I3+N`Fr$*7HTcAHgiSwBt>sGckvcam)6Q7FWxG=*aJ z!-+-1OVUNBgFUs=rxb@)LGcK{VDC3_i!^k&HN_l16*Cl(LQaA))Y?7kVVH3?5 zNZ}$A0x3mtkOEfG+hl%VI5WFj|~xrVCcT-tc<#f)1?kz@#uheC+*)C zp6f!59NlFAK%^6}*%mgOZ3`P5-PM6HUc|AAY*mE`h25e9%cQ}Ph#^Es6cLiA(as6JVM7MH`Auc62cYB zX1U-do-_=o)hS0fAr5#PXaAOabWSjK4B-F)08|`whxGv;7!ld<;nd=Js2CgzlhjMZ zA+by#V9J=y*dP{xrs>=^rha1>e_d8Dv} zNJEKf%OT$}2CP5%0lP3oFW!x&wb`TA&kEMOddB|!2irg#OaA`-2XOl1tc=`>U@aq@ zQ(f!621AtCvxeQlkzSF8NXpjKvx*L(xc9^gCu!#E4EmC(Gw&wQCe~)@&=Vx|7(g%B zs@EU(MV8-y_&5#=jJ>f%dn0^7X!VVflcrDbf$@sLZ&G!vLw^ld5N}pDYYv!=(zCQB zC6~D;r`xYkb+PI8L_x)S1rG>D9L&^RgpXme?Bi+?^I;HJ#Q6} znEo_Xma>vEU7)?|D8#&rsT&hY}h`5y^w8!}3MWPz6pWV!2Jy0qYTk>vn+7m)7`zD8`~oY5WZ#>fr8SyEyCtET zg0Kqj5LAo-)x0pS0>&rTYMA1{=ue4HIxw0f5r*CVvy2hSAr?v4>T)qcf6OD4qt3{9 zd|V8299!KRAF(kii_{_eax`Qzqvh}z$uQ^cS2G5w9?!~{itLUeo&#f>LVILZ{x2Do z=NPRh;ee1ez^pbt{KVjt9O5UCp-eqr^W{IT1D+#pv7MLKrFlzu~mR} z7vLV2Bym2aQCisl{{MmwnUP+gJTCYnRLeQmyBGYHM% zfy>;Hx*|!(?oXL9ycD-BJj_viQpa5M{6S0#mNh;|p|Fn@e(`bR?kRk!@R0Dx3%9Kv zqI?+fg+h1(c!UB)INk;Nx792{-rL;*lEROYw~g-`YaThJY7{9)NggYLPdIvaiEk%R z>0YN0Mc^5yeQ%H?hEVXe0g321?Y|2)n2bnYlPr3KHOX>XF z1KzYsEStVz#=9;g4j&4@7g!E>s+c!@!wuNXEc|6@8aAtUO$Gec3@sUBf@mj3-5M`! zNJcn3v;LpUs6Ryu2Ww7dZwr1q)yd1FM7_QFH!JnG{$hIhL3&TD-@aK@_M>!Vu1HQ^ z91pL7DVd|>VjPh|Vt~U3a3V;I%bS%PncUXy8z$w$c2@=^fE94UX>Dm1s)*YUwh=kJ z@t=SDiTkuIZhkO}oAnRSQ{IH9dcB!@ZFjjIP+2|XW9k{ByPwF@-A&Y8(br8xgiAO7 z#I>8dxtn~jnUB;WJKrhTKfD47Wx&uZ#Gj_Xd0?lo zkINK^2sAJb<97`)xFkm(o(J6rV`ZGS5Nt-<;;^xP{VFW11o*rnpUv2>&htZcP$khH zY{64L`fw4S4Sgio3{W5r5TJ9)xr z^sXFKP2ru)`4G)gNtNp?t>mD}VU|j&tdTTEx_&W;&{RuoTCNv`jUn#kAbYflxhI@= zI`Yk$sr73?W9A%v00qV}M+KM1I!8yU>~GYBPk^8%XsTWoL}!DF!@bjVw1ZNeD< z=g6<8Vh5VkocujzIC|?*3dcG!G7C1~2aW~l^C4&L}voTtw?BcKn#((IpQmm_7&GMisnvOn5&`yV!DfmSq;TX^`Tc?UI+ITfRbB7X%*5kCGb95`i4G|2lDq=d`J0Elr#%zWA&n=@2c@m25cbyWvpO zFW5|z9TtWU6t7=MKRFDb{odGYiSwHu3AV~h+6j$sk_0=NEvfMFiDSMcx%67YM2H^o zLKRyS#W~uyIPQ>a{WWMi@F*&I!Y2^e>v#oLVzkl~TJwGJ5N%l2{fxEOp*?MWC>&a- zztMaWJW(gg2$f>3V0v1Mh`uHE=G9U3le^*``ILIxz{3YH+>y?TO?y|L;F%efrA=-J zpMYph75YRiVR@8MjPofrt&^}mN~WS{--luYtA#F2a1jb>Oq<nMu(*IfT!3n1441&)kQZ z1H!vh#GTG0q|;DM|1el{z0wE*hhA^u&_8#lHCWTi4!3`T>SVZ>bDlizPLxZyT~bB) z75tfUbAjT_>1mT?bi+`2|LRU2t=Mt?5`7Y@=cn)wpOfgV(8r-l+Gi#Dk4W@NUsTuG z>H_2~)bS;!uh2V0R{dA$%A1luU)is}KYSDpI*k*%CmO&J z19uHop!@c}fp?Q3f86W8%Z_iwvmr`1@kd34t8#2c4~4x1ALb~E6R&jFVYtB9<NGN_H?|r&FGmqv#-h^F2$Y{>YoDJbB4%f(VpAfGX>eO zs!u~@E+Mk|mzD5+C6v1QSE(}>DwyBlL>-f3QZjjcZc-7l2&(I$43eENpmOF+ESbeg zurAdFYk)Y{<05q@Nr^5}87{>0scee4PeP*ZU>2p+oam5dNYpV@HXe!Eo6O@dSx(7P z{Wjv4J?54Yb_t1DbzWi&3M4A7A7?06myc$nGuiOr>{>;fg^Q$M`mzaS9wTPT!5kI( z6oEdsR}EZo${@>BjV>c9C#VVwpN=4cFi8U$`}L#P6^iqZ!z^p$c*`RmM7}m2R9fve z4&Oy~cMGTRw&`RxN&%-0r1aIv8os`YU7+|vR|nf(X;*894)Dd+P%d8dZV@5tl+hC~ z87Yz2PCDP~PSLsH-lC6qT-)~wjoNV>2#1VLPiB+XuKDBE;a5DL&j0iQ$kJoDklwA)62f_;H#}Oh*3m|9f0`{H1RZe0cn&Z_Va}A@Z-9 zkjU3xsq~0EQr;5H$wYYZ)lCRgK^agTAYqXOpQeG-AenynMduezlZw~Qftm-`SF>iL6YKWjG^ykJ~;$qCF+A;oy``@EOP z56j((gDBhO#=X;G0!(Y!y{=)a589nmen^@Ha0pxd2C9d(bB$+wJO@<{@eD~-4Eslp zA;&E?N-mpt{WCczbBs;}Yq1W6l`Aa^W4k%+ZJcQUUz1y3!Js0EzyEef-bE8Ix!$sX+|!OA4)aehM-=LIh2O&M1f$ zB*7Vusg=-gvHMAd5&{8UUL}KU$528ljVP;3n>|8{{C7h~K`_&TY!2~D*=m$kVKySd zeHtaH3(R3wg~F97saYbcVueJ(qoCmfbak=1x&&8`)Gy_~m(gEIU{bmS!%&L)C|qKV z?qJtE>bV)i6g}4hor8KV(+5&QubfNr64mSfrh3g+F1>z~mI{nsPbfj;f`j7o+R3>g zJ0qV#6q{sP$hne~!hYJ=IOFZ#e;lcGOP$l65AtI)ZYd!&XDs`+jLOmwwu43{T2qBK zG5nTc-upJK!Cm8Wbwp%Wj&b<8K!CR(YA6b6ry3X;I1`mYcP3IfHw+KsBu zx?`*E8rJi7^K>S^Z#%d%@dS_^vB??Y?t-;1Wj&XSp8pvXy|!2stl1wvlel=liHkqu z&WidM&_?E#k7%X%Q>Y%&7tdW-$D68+V7s_w4AYl$(B_bXB4~55bJnDemRmm|IvP*U z!4a@Ry@sPusK-a>%>A(;q8kPuzLSFw4rBD6$z!y^BwUD3c+;S7+tzeVo}wFE(lrEq zV;!fFDvOrI2T$zNzbyXy7)^8SN5Z~0(_$dI&0xd4BOH)h%lYC6lqMvsd$t+OATs{~pi<)VBo(c3ghXTAq_kIPAk6To6e+cSn=@Y-S3 zA(UL99$(P8HrmY)a>IQ?1C9%#CFbs`sVm=*A)U@X?3*(xOA~bmAC_o!QxO*2jY8Cq z+O$qsJowNS%jpY6*f4P$!@Gtid9O{fLOm($9c4i?fkXB85DB3NYay*i@N@*E#h8k7 z5CeO1aPai^&_JL(;y|$}44wWyo?Adnqgj}mfI6X@h1Ae#++JLM5SbP@>;_3Uv^B9& zL#_vX9q|AKIu9J<6k2P`;W;TUnG^AU7(|(7!a`izj0Qu`%z{pzraE=#v|c3n8dCL_ z84agORg_w|5xZ}x_bCxxIU3RC+fSmov4N$>QJDso)-fUJdv8TzAqi1EhLt2^B(+i2 z*K4S(4k>7upytK0XKb@k)(~2AWpFS$0yY*EA0@Ih2~HWOEF2Mqy3Ogpk~d(U3)*Fn zKQb&?(e91gKrzSoH_;Wx`1#5u+RY}NbB+~9CbuQ>;!16yttZS#K%&+(%sr9fX^~zU z8jf6ovk=5`HSKM-&<)p>16gbhk%g!rgcWhqvrd03BwE}u)Wan-TuRhTy_6z$qZpkh z*v$oZjvKW_jAfe~$6NZoq=NGfuWRid46@QL>-1NldMF^*1>ZwCsB(a2lB(=f8G94g z^Kww-m?q+2JeM63bFmW@X*5c+B^~1{sMz*5X7Oe{XR;qKXl8DcZBDRNFR)jK``L9iU`Sb zb}q(pd6}Lp5e;|?>~)3WO5+?@@lKojc3Lu0R8hUa2~!mG}yl)8|fZHNdx_x;zb1Tk8T^_ zf8%yt22F*PsyFhd8LYLN3+@>=_>UNnimyg<0M562F-`|yFRIVs02FdiGJ9RMOZ0syA+JzbJ#wexKl_VG9X2}X;ZfFD7(H76jlOraz2C<<7PfHq%*BXEYn zJr_sdDF^X!P<%9pVF7;;b-BFKp^coh)pJ;{pfGGLri<`KgKTrq^STIcqdEt<2tS?C zaH^@#?;`vJnsdXnW=fE8z`!q{GG`Zop#} zjLStZCya0rv{^MK7vU2`GP?+WMpx`2@Krt+L9t|VF2W_eW;S3UV6WvLh?Taa4YNs! z372L&2cohZp24=zGmtf;xdn3lYoM0+2Sega^^~e5@;d}yv6~xT+DnWzsbFg~Z{Rz2 z7slxg{3oi<;SFrtp=*wz#?j>+sYZh2MCA2r<2=SadOv9sJ_sz0vPUn0PxYT55<*jJojkL}=(p}u8&3>d^NV>pl^-(? z?$md0uio#vv%+Ps-iJ{=utmPTdY{Nao5Nl`L7R*HvnKeL)X}KFB|18hy?S5G!3T%E zdS6T)qi|cE;em!Xjp_9D9P~Milb~;`<1|ub(O$j56Z`b<)q4*H!wk$x%o^?0OCVe6 zbc-{qsBZ*UCfut>WQo0cm+izA{S5c&(Y58TXi8t8_6Ml~1syW{mG6PQdi$u0iq;r( zi@D&zWcTV_L!{_dao}FPYcq&XfmI{z)w>GqxjA8`cpGu&r=v10?mY0@Pa^-EMUwN+ zSxm>gS8r@b&ZXi!F+)h|+yJZPD?g9MUXQ9@K{u2nW7fs@UwogoUvIwE!%?SLl_`7S zhP_%72i`5>v(}WeRrYu@Us9kTe>H|By2l__OuWa|oq^NP@n0CMO%dWmNFV3WX#nkF zFfGPUW}DxBxp;&`*d&FwF1h*vs)rVH4K@5k4yqiI4kT4EWDq;na^0=9PS;$T z{)HT5IY#H}U%{zn#*vm=)RC4TC*zaNb+W2@-oA$OqP%_Cbt^f2zn%;8LUF=xQ$8&JNd2B2{B_nKYx$V)O;{@GW ze+|(eDnP594xWzS53%PXcGRYsDPH3F7Mcl+2v(q(qj0I`+bCtZP8$6JOPrt%=^$?C z417+cSJsg*T-r)cW=Ug$tlOniV>(A^8a`=)#GzTeN8QxH>l&jaHy=aR9xZj4Ok}bL zNQ#h1w|wmjh-6;qxsa}Sp@*+rmOB`8@up10lF21w%qfUpie+tU(87R`mnOnUvzno? zF1y-Nf{eKn9;u3Hxz6X-L;H! zJ`j*F0qQprV^Rflq-^gW$iZ_5N%(K59`b1+>H*t5UzdX_2h=91a&^3ZG6z-eyh_gY zCXyrAWUArQC3#jmGaza_@H5k>F$Vo0+KOS&xZMhY=!a0$0;1X+5@Y7FM)&s(+RV`&36>VAVjY(Lj?vPHu+(I!fTbGWQ{%yI zu=I08GQ-l((-p%~zRCwn6-y=uOJ|nLm6G&ah6rs&M}6o}Ppe~SKsq}Zkm}XuK%?iR zkto-B?631|F^jy2hJswkL6)P$+QD~0$H_QEc zK1<5~5l~}1E>t=aWB=&`=zYw8GVoUDJbe)5Eayp^LBe_Z7Xu-=I8PUo^K{$6Lu$u{ z^r2KdF6KK8QQpvmzn3w}X*efI6Iv1df2J<$uG4QDEsf|pnG6-Klg9NixlW%YlG%0o z99^;N#8>%TC&iLcw{DpEbfWiK(%qom53zOQtE%V!TlJi;TzdZK>Dsz+@iTEkKRyq9 z6rVBgAseRBD0lGn;HL5nakyl((rOe=^bMJCwdiL0PYz2Dp3zc4ekAw+zAD`IuJ@*= zPx~j9)}EEF(w*}vwq#V6ra2s}6VaL~$cg!08B4|AAt5#gG`M$M9;!_3(?xKMn>ajo zHjlE2BY{)(ClUz?5XKKa-DXI+>7>M-8J4G*r(^jyat!WRd?Uv$Yr?9|#kUHi7cE%( zCpOAzRb>po)Lnx|H@fr4R)1?n9~+mMX1U;jP=)Y(Dkj8VUi#)2o&UZlac z>GbbKx)L2UH)}{$5bZ@uAX_DCSZw|#AlL|=d$<>g$P#;z{*JEbXSf%Mt}Rzw!!AM! zzGXnc3|HLVi}d^$~3PRtJGT)!75(I z?M|>yZ&qb&37lFoC{%|2W6=BBcOvUwqxSUGrftTHCLs9t4B}EO#Yo$Z{*^|0KBeYF z-@ue)!(M&|mAP*_V(H^;M=X)N?dZZRR@>hJI~@*)ka-dwNV-UsnDNZPbCRsfbjcbd z(AF1J&fOCiDq|*?be&IyQzSlR=tmN&y=ZT2LUkD`8;?+(lfq?7p6a`ZVS2<(47;U? zGYp;;#k1=Ck}=gGRPRHOM^hZZwG^=IHEUfDU-BuhtTbx)yicvw^xFOdy;|Gvc+2Hx zuiQX*2HVR{_|TWFW-N%Avkt>`y3SpE5;aGhC8s5BAg1j=UN0T>yU3`ibr4eG$k)lL zkF9$26~5(K6I)K&eo5R>QL^~nyYr*HcTjuf#=X-# z?fivlwIjzpN#$jB_Y^2hF_A7C?jA<<(D1H-m`8I^<=}Nnsa?e2X!I`0s*lT>{hTMl(Nuvy8u zay1x+YWEEV@!=d)ZpNpeGrvFoEf6Jidm8W5B$UZDv2AhxGY3`9ymJ9+Rxlyj7MGy& z>JJh9sk%uU3#Hy&C;b<5aL8fO|1GMADzapLKv?c;IjC|NH%XN%uhyLH?Af>+ekQ5P zoMu!e&AB>Va%i>VgQyWgM64~v_RK`&!g(D}1n+~`vQ!{|N|@5&p@?C`nx(b;}UHlH`%o9Im1(PIKTZm&Ja@ zoV0OKArNbPU3zYY=|s=9Sl*zX50T<KVrPq(5!!dk48E@gDLsh?W{Fdfo zD>=PkxAGBG!9>@92~LTsIHWe5uUh%8pG$cUjb2)hTvhY2jLOmwwSyTWT2n?9p5*%MX*?n@)#2udN$cgWu&lpl!S%^F4en4f`UVFPj<7`Ydr$4-8UfX59H}k z{zQhs9f~J1?ATv!FLh?T{riufq^l5#7wYjmhV@)BdTuR)?hl_yoV?$3u-@d(3YQZp zA4B!9wDC3gb$X`+Vd9oCOh1={HizYGL7R)sv!?c!)av5vL`UPpv&kO8_z0c3KQ=^k z!{Eb*bMV1osrt8)$0$5}(g+ZRHx2s!XAb%t#!1jO)^QrCvS<}}@Wej-tH7_oV3=!X z5*bIUzzJk4eQt9G^^E}W!&P7+ORNHaldkAzxC%_y7JAndzCiEKqt_H@$UyJ*D)8YU zR)Lqxr%EfW4(X-hb%^Vh8=V`9rQ6DBOVu`t+#Po&(u z7i`mQ;=mIrx6m7k(I)Y!*8WqJgmmW0YM)|Zvmz78PlQKuq(6!m#K3Mudt+P0I~$d` zui~*t^3pJi>6lNXyn9^X>lB11*hn(x22|xpMBi?hrjgf|Bfn+HG3H!+>2MAo`SQz+ zZWRkraCW>!T0!(~_vhyuzIU?KKHg}R7raWV*)7+aemk}-<@~l`b&BqCnkA5m4HHM? zV!SNgPR0wJUM$xdJzB(#PMlO|Ic3dCJuikYCpxBP4_HwIh2;I%2{p2y(T?=j0Yho= zXO)6ksK3#C66{W@M(8$s7xpGayP^J~+lDY5br+^lR=J*QH#fdjt|Trg*D1crwHAx| zp@-nUoV958Lm`P2Tj8>tHIM2cA+8~TZVsv(LIRSim>pMgE8H38t07`9&q0;rQdaD! zLZ%^W@rvx8zIde}v1sv1bl1j(A~u>tq2(q;OC1SFZA%0%aR8JH9nzIv1D>b0bSPcPxy_2X!Bfq z^`ppd4h=Og9|Sc;bvbb6j%dQlI?_PqdgHmU{PLb5<9p6Y*KjE~X%u+5({65jUX8_^ zRMUOYODGd|g}uQdzjiCj#;7O#OxxWXC+fTu)#pH+*XE$g!GKDtvQg($#AVaO9?C&n z60|e&@H0=IJUemhGmkJI3XbL+ox5`|zW%Kqi0)bjQ$&hfVPS&M z*DofQUSv#*NwKvXq2~5#kx^mGFlqZD4Q%3Mp@(Qn2hqvh-5a(FQ+Ru%6yg2C@Yps z&M03lH{A|e3O_HwEQ?o%j!s@N$S}+LSP0xq^UlZsg_WemCpVY{M1V59X-N884EY;M z(npC<{+QidaL@P+blCk+16tp{ImZf79_4-6(VC+b(iw2n)_d%pjni!ZJgU!Owm+DI zDhIPIsmeCnTUc%-e+}XLcn<1DGv9mT(Md_x$gAao6PBgTXVDX8N&Q{Kt5kVjH{DyA zj)d1Wc=6R71K}VhUqtl~UTaDX*c15m98@_3dL&h@yjp)A214PIp){t;oJ2=wr% z8dHWIr?q~%q|a*S^&o0IcrwApF`~Q_Og9i^Xw1S;&t)iJVM=Yz2u%5y!MzMjX(to! z5tpva{Nm5t_t+(BblhSDDTSxFm_WlcQn51C|rJ(_cKD$G3u#=75ORHh|auVX^k za{8y}^q^X|{|GDv*JErJDpM;sC z3y;wiM;G`iUvxpKkI6+BU<#$N8JPVPojVx$^6KrOV+{KS#TcS0bA%brN+KQE;>3RStLR7>mMY>qzdSoYeH~RaNc_HtsE?O z5QP7W>T?7Trp|X(HZI##Bvq~fgmZIH<<2XSaes}86p7+A?R&c9&T8lFAZk3(gJjdi z0feW3=|%uSGf-g+;i)JiG1X(V!JqvPZO(`o!aEEeI>iunKTB-Ni+p0`oeF;@seoZV zZ^$7#Nvh3)jz34e(&GnDGg?ZBAKZE;9cM}*f!0Ynv2>O8dv^RvuUk9eN1i!t4UHlQ zII(mdrXKSq^5{?a!U%~^1((Y2v`@I<#JgNYJ< z$C+r!{$O+;;crv$Ea@B*{;m*n7=JI&72|Kd%7?#|TmgTN)O+(B0MUExuz=LsWx~-A z$4ot-dfrw&=PQ?x-n$M^PO>dt+NAeKso7RI$bz(|UewzSs4=V-@9B9;2@_i*HOGIL3hY z=!#!CrdV4Lk*giy$zerB~ z&Gd&ThvFC6S;QH$-OP@~mNA0eHdj^mK8DqKEm@}?P=|CKx>*f{Nx_e}_k1MP`9sVQ z7oM8Pz*uAXF;q4l)v2*Zj$xEh(jpeIc9Bs!eNflLVue{FY5|qO(Yz>O%c8=Xvy(X( zZcfc|<7hZDI%I5CyHp{9n7><$s!9wenLT1v8eEyOc5Sw=*UUrZmMMRJ2BE1d*;86? zjH#wSFigeA^31jTKKvip%?0!03g%>SOa(yVhsf;>Kb3T2tfGV@`9iqBG`X*R90x0Ut=(b|Eylf`h|hGb6u-F~-E|)X*SUIq4ywjIS8dTaoP((2GxVKOc_ehlJ66WAf}PInaews~zJt2p9Yg9s+wby?r%jOyfAGaP zzjy{EqfgV$))w%oZsX2MxzoXk(+goOz4=b1U0WeKsq|C@+Ypd)u-NLMkt%Wy;-2em zW9^rzBVU#=5fU6-jVGq=or<2A4Lp+3KpJ35QY@CEOO%I>?s^^|vth@cX@eW3#w`Sa~W1X0~FnhEk_So#qCr(Fa&Pq~Xh8LPOke2OoiBSAbWCaBm zUt)CFEnqGcOq9)J8X}R;qgkue2(sG&LjOi2b2ii0=!&zM_{t@xhvOKW45(N#x!nZC za<5x0aY$A>uD}eB7~z>q(!(=hO+!a#=7x;UsETt0XU?-i4N+|(!f7AszgaQGoS@o$ zV@_}09Zy4W+G0%=&p->$nc>Or zrL|n?Vl{R+bANHFxeqHE+S(U~v-Yaq9LE0KxUr8aOSAQx;zh*Fh;AFR;f;oj4mBG_ zvGlLEn+uLj%F;)S2=%CC=y!!HFt^q^yaJ;lbMA{T@3i|iPP6}ZRG-7_zdr|64rX6c zm2LLd5qC}J@Aq?%m869;?0)*<3zIYQ;*0FMg$@TSzI-M}&mDrhLk)->VgGUtsvO5- zA~-B<5Y#+QjxBT#RVJA9`qVeGIYF9sP?@jAKy-_Rb+tu;O)0~B3Rmqfkwx7 z4f}Z!`W2zsq3mZ?rc{I`e59=LU*$uS ziY24&g)diFQEpkRCKZLVWj)y#Vye9Ar5zIMh>j-wa#;A~UP+ zzR`eRwEISO-E{%z$8+@DT}-kE#9jb;M-HkS$HR32Xrw_HumJRd9Nl#u1j|ElaoD3R z770qT?i2l?RI(+@C(UO~w zA$c052AeEovIoeEkW07J;D0BQd2#1I=!zG2_{wF8gJBk@1}m0KE>&n>w8ti%EJUJf z;KqwofLV!lF?xMy$hbcvMMxkO^w~Jn z3>XC-Znc{W?i-g+n#`+EhgzvYSG+`tfac8}Qsd=4{Sa)s=L=nGcXpg`@rkHD z2VA@=2UQMmQBswSPOJ@khD<&^2Zf^{l_z9NLgx2OhXOG<$LeSfPPmVig>N4UWnSji zJY=SJm2*(#0IhQJs+EH(cV1=7b;5_|AI?FRqcGcUkf0+g0nR~cE%2ESP)%Z8(;JkxC{3xo2`n4v{^|8rwy*YW_nS&~a$s?(9<<XN*&u34R8$CZl&haR@+pET?f8L5?0oT6KIcoZWOB~ewBKAg~vF`hP#%O6o-^XN~@O?D?j>-4=8j;Mt&;Ow-_I>y& zpYNksGCAMpN_?yh#};%~OCb;*=mcGs-~?H<4DAhFHOL#XtIpvTT@blN3H7CAFYQV# zE5geO&yBgV{gQNzHvx}n%5E;GjNfBQU`ncSAB*dBvE8q6x=t6N`W&v)Tn?%njH#q5 z8;RPk)Ac#1as;9iah-Aw!t-);*L@INU8hnGsvOW?PF^kNpvvOaW9!aXa|Zo~B&NHN z$9#WZ!j`wIk5vsNxd}ehgE{DP6y1sWP@>Nky3FT8CFt?`g~XgxH9MjY^`;!0wC{=v93ZWi78tn@Pf}+Gz09#jASaEfPF?3Or}HR|88M*zvOlRb%wCHc-X7pY@kU zOC$POCNqVfrEz>re%8Mc$?Ru+jjq_w;;VdqmSV}|{H&{Mof4gp-EK7+e!Em5_j{nH zbw!e=W!E#buXW8pUn`;V9Nt!RXhSif+hLZ0eHQ3h8Ks5Cl~}@aOe$nu|EzMOqot_2;;M{RoqcnCALW5_NpNVZ!zc{ zBcxqV73+}pO-4&2LRyo}0@7+@F(yd+%S19m+Fzk7hO~T@57H`@Ob*gs+AJ^o12OD5 z2^f}M92&G?=0E44%E4MnsDpy`TH3wDhykf9v46dP!iT1PsJ6*D9wex$B)bT)0%XBfuybGN+Fs86lA*g&l z9$TPNn>_+l{-L2~TtMZ{=k)45d7>?ujTmsW9~&cff5wQV#BGK;WTyTHk$w<8e4)|O zh~Us_}&~;IhZ_2l`CTWP!6iT7Z794LHM&A-E|)X%f%UxMgKQBsB*w) zIeGO@IjC~yRkpw;WPp4t2U(61JFyH9F%lN$%jf4L=``Wy~UAqQ0slSfkJ>fk&j2UYI8O3MHtq9^Rx43s`g%3lH59FJ#{fVkMVxf9(s ze47wjh2G6wC}4Rv+ME&C|J8U7h-CJ1x^%@}4qxT-auiD@=j9YT$7?I4ZlhB=fzP=t zt`2l}VqbLSbCzOt4DI&}Jo7VNaSjJaJ7dkNEzJ|!ky28)MAlPde*B0bwG;P^e#mZa z5@&u|3`sZRqh)UVl--|kx<_wC^*P+5_vE0;!C*?N2B1x5tRZV3%t2O?E*^fD@t86< zM29USoDXUyOo94ah%>1&I%?*|XLIn~K^*=9)#t#PU(G?41J;yOxnj+)=b*}+SE-pB zMD>Kh=0N$g9*SCC4cxmotGwr;p3GI4NR{b6p*)S&Vfv$ zFR>Nv>e8U;&a|Qeo7#_!S@K*%b|(%_58KTJ^WzWP+bl`7{9_5>&)eM^Cq{h{s?UK@ zS8`D0U}z;(*%;MM`glnWsz!sT<4O9+IS8-M(OvgJa1G(VEeBN&$S^0b-kpOgcV1-+ zY(fbC13AcYl-P-d@Wn`2cr%}0m7u-r_Y-qcwd;r>{J+Ypd-KRRwXlX>B%4DVRsWg6%$)~!8 zNM@hv$#lg&6<_7^sT4~l=TlwUU0unS?M^Qa?K=(3cIVo1_)A*Kpr|6vM_Q*pmf7xn z%aHCPhRjXe7kZA}+$6HyBj!#Z+r4b}VVsW7{ir^NFLC6H5uirwv4q# zu`t#*Qx{Y+y^FEleJAPQj1~B#0*2apyV3SgYHPSG<7ZLDx>5dVqoomzvdJ=Glr_GN z$tZt-NM@t_LAqk2%vbr0vSJC0vL&e*GeSyG^wB8uqs5~4+Lw(}YnSJiudg)9olf6R z9LV}^9A{MjnCkh*RnPg#rRR^XLrwI-D5cfwlljuhEE{$PUDM2wOCx{YU?vF~O5hx>*4lhG&jZL>oCjpmc!eAP-}f4RNXneq1T zKYo&~_C-5x-V%H1>U*!dwCkVh9`L5Q3)45uc-JlXol2=wTPk%{$`${Br;2#fH{77U znpY5@L=LMlz5k9zFRe$ePU1ggRF($d9V{c!nku@Eo5c;zIpn#D$OJPs)srbLoRr{$`q- z30$h5K_r9*wH`kqf3uS9ScjtfMu&Ff>Ck71z|Rfep+9lx(BGo0K0-TUQ#9;Wq5kDq z$@N?^dj4md&6?Ki51)xK#&3fam%Fo~{spvAPLzEq@t;5eF_ssjdSHitj8VOg^o~iG zxMk3GO%B?=ftE69`v(-zX>+l8^|;V}NmX`{=xBU+Hib$y>};VPAE7h%$A*Y*7<@RK zgAWd4baV0;Z4lNWBwUD3c+;To1v%(*7$-sBSjTCk%Kkq{uq%Wf=FTp@3uQ- z691za#HU*OPodf1%$3zXee-%Y3(Cup{wQ7$1N#QF=jM2s;%y}M{S+z-HbVM2MifZ& z$=l=oQ!9;HrPl2~!UX_*oBc=XUnV+OB)>veET&(@Rq)hsf+2AM6RbF_goG!p@>jme z&zLyE6Ko`za|5b!B%I)q2w5I?tSQwCSAd`2ff2+wB7W(e#fhX*wZ_S z94LI$%d1q&?d9o?ce2$!-e{Eb#SyvhXFJ<{ zdk(Tji>MFIb|>pdW?f(>fiR`*U?ay)yXdfm9y4&QO4CKRqnh>&2}fMBT!<_+|wn0 zRy&`9bdIv5!?=?ir6A3kvG25qzGG!4RN(k-xNghB1)e38vK%UH{s_SMmo%YtaQ7Q% zUITZLvWla=8DzOPJw6$9#w#}(-tGSUd;?29D}K97z7n8X4YwD|wMH!C-R)Jw1UECr zJ@x+)1Z!@IR)PE`SU=%3&7Q4BLKvA7tsb+rWCGhKO&86bA+N~G+&7*$z-gqSE z5LI*wq)Jw8dr4#@i3IjC~5yOOGG$huiE-V7T3Ne{|H>2@KZ@|ArN z+5P{Oqx%j(ZMdOPl5f)XuQ_OQ9GX~?&bhJBSwz^x#z#$d38e2gd9Z#zjGDqaL+Q-A z^Z29~^29JxhVzr4aO>};F-+Bp+ZI_HcKmMP!H2cgd{eB@KbjhRD&Kn`E<9CL1fWXes-ROJF8Pdvx&d@z5 zWjRCId=k#kn+zohDIMAwdiuf00jm1tMz@NnHy{Wd*(C? zF4IZ6VwZ`p^0`ckC6jZR3jQg-f(78p@qrH0g~|l0U_nv6J+!;DZ&2husxpVObXF2+ zsZsmQT3h;hrgq$$z|O0TQHRKbo|4)C0Q#%9AfJ*T&!`W&9qFXf=h!B|VG zvOTADG#Vx<{YVb79Fe*0G;NXcz~qdK$7R=D{iRRl=(z)?8)`t-^NcV@{>y#VIt}g`fRHhLz5UQ`lLsvqx*o zy#`VlJ#r#?T`Z#@V{du6++4sH=9-yd3CDL09sSceUFvctzH+I+6#WWt&EyXA%4cFM43A4y#^CZzqcOKgTYw|9a1*; zV`e@;{Wqy*-Stk@n;*!aAqBM+>La8O|2o=pi#cVa5dQ%xb59|rDPE7I5bOMr(yOw9 z>yh-X71B!s2btxN@6|b^%9wOnQef%83|*Ts=_J_$C*8JZwc1cQVl4#dI-TlHtA z96wGBbzHJ>R2v&o)W&fn7ix(x!8hd;$4<`cJr%SnOnLZ^KB08|^kS4AT32#q7 zsZ(vWyL5%TpH{PmZ>ANY#-{fj_tbhDv$Hxu4AR1) z1B4EQE+P&6t}cBnA9IZg zYP&vnjmdY-JiGWa^{qjt7GF`%GO0@AozqxS@0+5GqRlvEad;uxj0Jyd#0eP^+;tXi zUof%c{;3MucFZhcSt^t{k(ApOT~gK%%Tiig{-pfG^pFRl`Xqm17QGO=ccj;@Q0G&* zSa*WA?H!EP_0Fm|5_nKa{3`k|a#Mt>J`JBpxXK0uDrRMzDP!Z34RIOl9UA8v3q_9e zXzWlU305p?D2`=K#I*+rl#{WWrYuJVg{aKyE&BoNk=v1@QrJ5^IN#ea_;yuqRgQP8SIX%^aE3On#GV2Hs{Vn18 zzY;o2bNzeRoKPCy!B4^kOGFbPK#0LW z@uUVZk%?v-%5YolCX`M?PS}7bmafgtbtd!k#QNM9nSftZI{~7!T1>$IhK6}zJGF9t zO6Jh(!=`%Ts)+}56W*YJ~Y-NmOM*IgT`J{_ud%2a*6(atXzO7_tbD=dFn)KBmEF09s>o2tEl%(sIa zqP%Hu%i~_mz&9usW5=snzKx#|dsC+fC%R-Q1e( z49|+1#NkU(Ui1zpKcVe1cbHnnJzV8f4qOb)gUR8#xZ47#Vz{`9s%#H7C84buKvo(+ z%5Yz!hX)Xx8dX5mCbX%cJCTr_0-zTLjGPe(DKsH&_S7o_sAA5CmA_C;_LOfDaxz@r z7%*J^ByiX2y921IdaW)KYLEu+J{CY%IpH|S*30FS9et9bHNJHEAY+Tz%C7{Boh>OG zc#R+=$dM?%wcn`hr{@@s~u>pN3PY<&UaDk1UpPInQ^y>xau34?niA zk$u?IV2aDB^8@6b@?|J98ierO&gZp2)3FBboWLwbMmaeK%g3o?O23ZK7W%&w;C-P)$*z}}+O?m=$-eZ+sY&9~y zA=7zo77kl))aF}rwLSHjF0v5L=WYvb;;|XV+XdjHOr%!r^j*ZFGN60tdyrbS8o}C}lC(_$2kB-M7sX&4qWH6rz_xB*X zVXC!Hu9iKY*U2s?K*PLff?C^Y!njPX?PEjR+y?xXO&slxH_}3nzNS4j`@_`iXwJZ_ zbS5+A4KEiOcnnxhxpC2Day>eHUp1Gp2OymA4 z$$e)GcE!<0C8mLLBUwcx3XDc-0!|OE*Qy!{fy|^#c!Ga!?zT3I8%#DshSBCE`v@(@ z=Gpnp>o;tWwMy$jVXaSEMfJsQu`{_DsvM!|=gW3qsMnELEB~DbBJqKovD-m5Dy#TO zWO{YFJaCqdS}{o+mm*uaiVXN$Q5^T3xL8Em(7W)Hh~tV+VR2l|lK#bUPr^LJ)G8kx zxrRcYBeb)awH!y9;&6?aANBc@qaFYbQdmy63wZT4%I~)&e592UrAoQ-+qx z9?UHy`4s`YpXF=2GO^pgb-SzZYUmW^rX~xCSe0g+6K%7Mglyzf(KM$ZP4Wp9XLV6%@Ut)lAxEuwX5kE;0`snM(7;pUKWAL<^ z_=%$~MD*m))2!%;)C_U#sxecrK{iWpfy zii0kGnbpCDl~-hGdu3l_wLAGUomnZg;)sR#mo}!lGEAI(xM` zJ@`_nXmKtJxLmMUN9_6gv~_o!RYHR8(0l+SXa!KkfCP%FY)G&a8BQJS7Y2~U#036* zT0u_fszo()2RY`X2fsRCYQ)0oi!?XgHnG%YszRiqY-09nK z?+;)AduA$vlPO9yx*q9|wV%_^1@N>QIGJXb1fu*BbV2sxwEc-e<(J_N2UHq#OPKUD z9EkR%IiT_hTcN5>T|uQRBGl8tCQ_X5+1LxJNJGmQby}!0xD{e%zez?>$jlboak~f` zHh0|aCq0#fm6Z7sRvI%@5v=?nk}P25kMNU#mEuzvtkf*&AFMoacB(#;iYaH?c-vWb z-V-vy-xbD_*H#aVME~W2OtJ}yEC(H2b@sM%Pr~CaMr!M0R;=GLR6AE3eb8y%Fxr`| zk2gkY`mNgfEnBoMR@v1n9v%w>VFH0$#lP*OhR9#Tjgxo)9tL-49%c~DT(3I zg(JbXvAVoyLLKUmfTl(|zF4~ig!PTc8-caogr5Y~7N5efwq5}J!`hobuy;cYcNF6S zuu2AXpg_m_$eplhM>5hT3Ip)rynwFNZUC@0PJ^-=iy^j+!wyJ)Q6e(?Az2t7Z~y~jp-eP3gPGnGPwM96159@VG8sogCLwi~SKktwek8i$F>(m>3U0_bBdT1!ZdG+a4KSl=W^TY&Tpf@cQsfGs&3Jed(cN-@OIy{LZT zAc@n@U&GUCJk1P%BYe&#@R9hOHiC)0&j?<0yia2k())Zr(W)8Vr{kHOk1pl-T)Pdm zI&kE^z?zVeBCZ5cy9f$+q1QDd?)AvN9i@^M34psXKq?3331)bg94~x&WGheRO4p)CLzboJUL*v{7K-tnP&u0RrOk3eU*&5p)#aS=2HTw zD<>j{r|anQM?(0dMr;3c7xU@>4zQ)has4v3EHYfoTqEi9^XH(Ft8p{hnm700bK%)4}l?jrVs<5mu#TS@&#I3NP=gPeg|AK^rIb;V}NCMWNw1S0JY z5S_He<2Z_UA|uQl&kpISq@zgLEFDE-F1*N>wFUMnq*(Zge}bQcpC~?s`H7k%;3qml zp0St|Ym@!Ie_8KX>S&)q&2De&YVga(r(hE}^N_te^~mqiBNv}IBfk~*|FH&JW9~kk z>AnsfL`Ws84T_QBLW$jAaET9!KMR)_FIY;e#1zDO&`)}O0mo|4bY?`9EXl`^joU9L-1tSm@!<#PGpE-OM z)Ps-LXW>TM#weVr3b)rbCPo{(@syj9+KyIh3SPUYKGlIy#jovb!E&7UM$wk!J)0A&503^fo?(~T#bpp>bB?Lsy=vVcC2rxbW;@1NKzDqVDa-4)lwrG z_k*~ie3HgRW}nDttb!;4(&|+w+$h35F0G7`9uQqzKh^o)L3PHfXE3rau3TqMpk?!t zU)eVx$_tEy#f)E)l59R8!u$)qFh`7AEq?~h1B7=XDLL7`OV5JU;?eLPeZdL1DXO@p zVr>9b3@2VuWzXq>-r3Iy&EfB;pMP?|0McBQpwOHkCu}b2 zxKQggAU{o*a;pO({s$g%3|;BeTogbgb84(8ok2-oW+f-$ za$UfH*|Xwv64@He*HGFNIH8+|v@QR!REM^*KT-NHiSOe2EU`Lw?=D`7KaL+uZ7;tf zdVX&JyBS>SLi1@$Ge^(AEPyJ85Gbm+dVV2*Du$j{RM~p|u+-^~Cw9=j*Fv9Bsis^c z*pVrJTfi{V7mA~+aRF1a)Xuzl$BBiLx)b>4h6XxCks+e*`90aP)?!rdz!=<2{&=6*}CfaF;IHD~t~ z+^ebJ3dqp`RPhDGafEJ)6}(jAOKze9G8jNr{}v3MngjKn5WDQv@>0AcW<0)bsL?9TNESjzzR3v zl}kqYq&IDS@f{>MmN*`~BSy(1aojDuN>K2d1DL`Pqt`?8yq#G7=ugpmRjDq5+SQ6V zbN z(w6n3nAn?sOmqj_5@JH=T)|j zO~J`84Ir!ZYO26bl)ps}PpeOVln!6ZmwTji3-%eWt zMgUc58YaVKt=vuWO+b#DbWy-i`4hlh(^m&j#aPqD#KLitb_7tx6bpBWR<@ny6ObG? zX?MV&`!66b380EEAY3=;wg9U7&#N~DP{rp}wvJ74lim|RR_WDLftw`Pkq>C{Q5aV@ z-W$L-#&jyY!*!GXM*vj}Hz^Ps{#yW5d|rjQNk0pqt-PBg8R?VWwDrYzlTMV$VkZw#P{0d@j) z`?~|E;`1sD?0hVMw(?*{GSVl#Y3qv*c8>BERwq`@wufuX-^8y;ltUj8ob!zU9x_(w zSE2a;obzA+RSYwrsN(94p9E0FSPP0OdtOB(G0r5*wh?a7ao;EMVQiWR7e_UMhEjm$ zcS2@-C6j#N<4*H20X*YRGuJ$944{f(9s-xdIRRAhd1af2W#Wtps^ipmM7doQKwWtQ zAz9g9193`xZbs(u8Zn1lhxiE3@8e%cyWxF{aCtO<%ZydL4Vn)yA=3d=F-(Y}imO{* z5I_}Uy(p?|6S5SKKG9Q~ZA0X{WP)E6Ky*1HB8ezvMQ#ydQ-Ku;oawg*FpWRcTr2Xy z0IC>PB#>91380G4E60k6BZ%~}5SjSPB#J7oAz41c2lk95qo}IbkQ^C6^rLP_ z4h5q9)iQkfZz zu_B0*1<%B}El?3+}T4R52tvkXK(1po-6{ z9M{+_-~V0!Sxjl|%NCrR1)ovit4*%x|2lwgjOkPgiVJF1J&6yh8K5RmnI92A6`xl& zsFC};@xFs_j#KjOP6?o`Jfx9~^hs~p`r>cF9pO1tII(QD`CFlW5x*hPjQ*B@nJoc) zW30*%Xg&bUTpB1!Jl(NH}r56PZl`%_-DlVA$lK`q15*^5^y8@`<^NI~--Wfm^Q(F51X5=jR%mH6* zaz+2|1Ng?6PNkr@VCMb+su*A)>fGR$(Y%sIrv{;8rqYQr&bNu4~s>;I{$wHsp zrmZYKj5*4C1wzabH!ic<_)YwlAJG06=qC096e2uc+eci<1JV zVypp0l?`Z0ZUUbjKy;c27l$$xYyzJy#HNBx;J}%FW&qRpGtIRO+XJX#ScX7e?FyiZ z&nw$9s10A@=ca7}&j(Of-a<%LR%#(iHTGS7DtP{NC3nHm_{RM!$=T1Bz~xXcTo{Zl zga1OEXvQ5_LRWO_?Hd~4(;PKA-I|!2YIHWo7rAU!m%l9ZmbDu@n-dGsgK$=PZ#n!i z(HdWfKEEFrjp*5UA=RBgjQ5_E%j4^b9p2mx?UlHM4#xZe>=?<4#Eo-rM=`=bU$zi^ zD1H`k?2MBIpV`#Wf?w*sUQ4n$~xkV;B~bKclHJJlR- zb{B3DFYKweXBKXWzK?VW5qTIt39)$u2NUx~(JQW(KuKAIo0KG9Pz-oiLMc-J8s%9C z^*3-T&8q?b3coOg`W|@K&=|ebuWZb=8y&nhtX8jen$vSrb-2l^CMp5fcWRBjjqy3W z5v`^a!Eh|nQlihy`u&41`t#Hl2&(-yA(38d=MlfGlUy}37H!^gd3+Y$KRI28%kzNE z?fKel3*%nhR;@iZGXq!A0psBa)$VZZ;;!H_yxFme6vLVzeEvb7_#8c=g>FA7$PPoE zy^IK*HdBMq_4G;a0}nrn~4AFYW-ZASyyBxSJyHc06-OPHhIA|KY((p%>K1%5@=KOW_N;}T7MsJz*OmOvwp$1R z;Fj6hR;Sr*!NMoC(Kc^SwRxM{65;Bm{&RJOWsw?H9@K~S2` zF$k9IKW7b`8oqUBx6!W6x8`b-_1z7)X0+3-&vd0;8XG%bUQ#(WHdMo-ug2?BQ}g2G zJ0qUT{wC1|Ab6vP^6%-?^VYp{?24K;SdGQeYGuj!*XvZMER_}J(%^h=K>|qp> zjhWg+vol_APlz^+7d6IGZo@HIyrE$Jc^UF(`v<+%MxS&Qq~CD4Go$eUsFt_{NHth1 zu>go;PAeISnq8;DFXM^c5tpJA!Mb&dpv|3IHbM^}6 zaQI8zbK)<(3>q{1CA<-AQto9k-KG72F$;=T?JF53ctC0`b7pUO%q&VepM703ckzWK z%e_g&!sP66*{Wp`hx?wz819nc;v?eNG$qd3g>=O^&yw|Ca$$XZvS#R2WyrvjX?F1b z^x1ZEX1qB&)u>H0I?WrQ=4glV>s2QwG&^2)pQl2IK+uDm@|%WMpNX7$@=!rw3q_M>Hgq*0B?hFq+S7VKko!VO;C> zO2xA24oB}LpV@+HJ`;j^q_1x(tzW|a z7EfC5V^2ngwEiPBR*AIwd6gluM@W(V2lj|EL{_!=nb0;X5ZQKPy0yD8G1_U2Lp*)7 z-PqmiKw?41Z~gxdQ0o&}^O-HO<})d>zP_o*{vP{VJdynkdonUacGZ)s5?L>=GDP-B zDYCz0k0?WARh$1A+GYunjiGA0apN3hW}wglPOab2$Pm^IFabVcHJ{nSYCe-t)$Nsv z>FLA5XwVh2Y(#5)JGx8lp&F?0s?&!X+E3B?*!NmKj- z9bmUZp`U?4#qw**sQFB4P1-6I(|fU{#S_!dvS%YhOz(%rDiPBIEDmKz>M>GM|CT+D z3`tdOej>EZ;*!eQ5h#>nr6RhyduuPb8ltT=NL*^|>4qasY}p6rv;mCEy&NEZVWW`b^&+{#jnrSA%9fw&B0r(UHB^0mf*MThTfT$sXmVl zlE`N0FF*pAi!m!*BQ2HSI4Qrm6L$R8IMq$0hu1`=+Z3`C^VCN4E~VtA_C3LK*V;W?}J-DjVj?bfu)UuaIxwqWP>vib8T>+R_w{4fW;*Yt%5aBH=b zV3+sC`oI7j$t;*My0g_9+%Pgwga4gW+uCl|XKrYW)H+h&;+h3WnhryhL{&V)C9^FuZw4+kRu4~L94@v-Gf`&mpvNbma z>4y!`yG%Efxrs=`un{`0op)YsD*&+F4eWQWGq@gDw4>f$pV7bKh%P?x5@7Z|)qo)n zQ+Hqk_I{T67KC_2BIkI+d3oEJ+pYQCpsg)h&HpDFb{gvc)uJKQwA3nVL4S32c(&zI z^|4dcAL&ZKN3e)O6iuDv(OFiya&PwHonm>;G$4PZK0e;)bkNKthEJB+!56TOh1#A3 zH3BJL_=Zp-Lp8|r!aoN@!5Su^)FA~0>o3N}YY3~ zinRu#qk|i2gK&7AA);?=IA(picfKjd)st6}_4QG(C{P z=r#07Z?XI_D^CT>w&E5KRW4_Ub68VY7=GJUyQ#=b!_53gthC{hLoZX6b zjF6TXzd1ZE>ssO|)vR1lWxSx#zGty(T?Ut9^*b1S-}=@507Ap z$TU3P^`FRHBG=`d+lPEuOH;i}rubI@WS3i+ii*+;^A|#TDp;73wUsW+QjH}C_oQHk=ti6{c{B&u zwMXILp58$=Tw9=leWgN^V|-GEp-sHQsq0{TC64it2eF8ge1^6Hr^HDQ6T3cmwCHRSr|zNx)&21%jtX~ z83|0M9j;k%O$WSTJ7B(CeoF%bmyouoXXH~^X=+uiCC!!S8Q8E`{_2nvhiW@8@PH=> zzz+Zvb^hb`gyWC#bO=8~Fd7T&cQ!$Ywdk4w-uOppkp*4vj$z>wAqah99Koj;=KtSA zmCH`b>T^L1DhpgDGNsO0aAfMAhR9}1f-C;T^I$M~kUr@RTv2a>p9^O*bm*j+4~S-& zu67N54+xUXi?Cr!rK6MhGfHwY%EIMQ$xm$EafWb*YnwJD(hr{?tc#05$h=%2kS{RX zf~}%%ODpriXfrrJy#uD;w25|o3U-9rt(hAZZeK9Azj{U8?N?OG)R$v(!cTe$d;%Vd z@ZPf8gD<+hMl~Wn_t^>gs|{K&z#x!jnjtT@K(9nNM5}b!DIbt<^8Fce z6u^c=INmGS;1v#ho-G_pahz15GJj+RDS8J;Cx1kh@M>PzDK}q0N>rhkBv(uV?fFX? zI#iyV88Q)CHL)jaq;8-y z6>EtN#U-0aDQ%5nt5WOzZZ@0M(CzgeK!rHvzAztP$y(9h9Ng@0+}hMEG<| zbdvb@Wc*i&z@MUKeG?+BN#U$u8E^6ZphHsIkxJR!^&yF=M0JxVM1`DspY9G!%ese;5hE0P0W=Si z!wtn=8$cB!6sxGR5JrOO1Z-G}+@+{tB7m&4m;kZnbQ2_ccmRz1Dm=zmoy5J`nC#5E zh6-(lsG&PzvMm-NiR71Tqa)uNFmk?_WKW2Dd*#alsAA5CwJDW*du6Ff(Cb)D!ge|d zuL~G1dlERv$JySxQ*UpjD9q@5q(9bbPCuu@(@Mg|y>#m%;>aI>PK-D*u`eo=9DNYp zQJ5eJ9UHVu2s4a>(FO=~T=CHH_N&1Y5|-XRa2H)9Y0cHClaM(939Rv1lb8q#K?caI zR%aMOs=+X(c(!IP#H`q1^EelkA@-e=$np^ zNCg?z1QDAb5HhJWd&Gvz5EbUP8R96w{J>V?KvC@@9VkOZc_&jjP^+{a6XQpfvTDfRQh-qcVbZz^szz@a+a@(^@W zG48iB>Fg>hqEGFIWJMf_|9;Y92d^j zP%Zuj4*%Qk+_>%_>72Z@&F*-sbhu81<^vqA^8%=1I9!UVY<#~IIZloGB>`kH0lwei z66BOla#2Hf#3aYz8VwjZ1M3%>5ZB?F4xoxTAANDSe3LL_dA&na{QfXtxco`r21jlU zpsMP%x*zC5%B$B0P{kAtcc~7j*a%Y7x0RaXmERLE@cs+Qrvj+r3yGuEZn75CO;kv} z6hKw~dG+l8s`$LhF@Be~W*U@Pj|7ladPOZ2bX2sKI4({`EGY#dMjMeiF^F^eSqo3A zi6wb~w+JV#x`2d}Y+M~jlm_56C!%DGKziYak@;ptlrGp>+trxgw7Whvhxd!k;_d)m zX(CURC*dQg39G{`CU^*jIu%<*oGjnEnkI>7aWJrf=~)!>wGT~%L9+4y(i5=qo~3jP zG*RqVvF1~8xBW>EbY&k;$fGWn z9S!S2L8YWF?m)&q2dTpm?F+3bFaQ4J-&_aginW9yrS0nwg&U5;iho{weo|$$_c%S=TNW9N9lN5WP z`@yS@2WpH&x=lBcsmbs_9e-+gEBKV-Ex5o^-n3K$U?C2DfOK~_5oa>4keCGb6Tmoi zWw<{kc6IL~}N9tyTk2sE#AqP5BV0eRwcIpY}ttBF-gpN}~%N z$Fs}^?m2FE{n)^@`4($n2X#Jy!w+B$g0HBI0HUQlfKo%3`xZ6V20#G${E&%<5fRQtBPN4}|rRAN1&sPP|#+(%k zd>-Lhhvm2JeAA;>csdMya{vq2)8oLyjF4Cc3{6q7(KC?#SP44)oB>a(fuUZ*B_Qa> zpdTZj*0xJA{QNk)=D<&51QKAKjYHBQ6At{m$cCRHTM#N~;D+6)xe44285f7gZmmUg^Y7CxOx^gEagFR^V6iKl5mwyjfAVl{8a>3{~1XZ zaP`~xNx)U{DGaV^mh=ynaH# zO}-}5{+~n!3rTw!DEd>kyWVxx2SF1q#roF)p+^xA`i!|~?$Xu`mo{h0;Lep7nd-3+ zGdZPNOQHDy+JumMFG?? z=fy&vgqG4lPv4~Epv~(7hRvQ72L*AWVa5iHUwp3o9Bxa<{mOUCXQW0jn9Z43LaREOG%qTvEVMfi8{$a-B z;YJnr1ZQ25110{4IGgOPnZh`+mW>mkr2vFD5O1R6&wbc%-{hh6x$z4k$?qZZRS3eA z!GrH~yX#$DJsyl%dI=m{;UK});`$O1htbDo@nepE>yD(#nBym)`2g(ql>n+3*iTWF zjr|CJiLm`k0Cj0Qp+GwLZzA^JEn$ZOR95}sCL)QR#C=KQzN zwqeduPsE1&ckswD zvrOJlLAZW=Mz`K=uy4WXxZbA4u=#B@NG7>vCKx6F0PFz%WV&{Iq7&n14ksFo3 ziBkm9A`*O$%aH)Wt49KHF$_=K-u9>w?v}?(AGw z{UL$z}!8lCY`D3uuP%+|-@ z=zaZGZT*%l+OJm{Z)N;bs^cbcg0(%ebR4(9Z#JVbkLHRPunKAQN_eW_$=I5jaB1y5 zuMZHL%y5iZocm+em}0BVhfr(u5m90vB;!Jt&^Ds5iWj)(-!n1$Zegi9o;%?@W9oa^EE(S zGol1f-4rTs#YHzmUGhYAQ`yFdHv2Xi6g5R2ZI-I^ZAi9QYF$pvKao+u)KqYQ`SL64 zO-M(jypO*mJp2jiy)+M#gUf$}4U5=oB8;dzy$6@u4&39foP#oo>BfcacB_r2OpB65 zkSv9TYLL({vmTBNYk+$vyrSBC!}Qy{`p`addX3o=?^&A$Vhc>GgMBnNJzV&*wTs)^*l?H`0vksP>9tzKykB>@kLbZiThao~1z zEQ(X&^?Gj26i063t1{m4V*DiH9pY0~yu(n2i+kku+3m)3YjeNAL03TXx>|#X7_w(5qJv{jci+-J4otoG|Qf)VIBNWZqBY%J;uU zl)+snBA$qe$K;f8x?k&d*Ndu;Q}|irb?)hD-f)GO5pr^Je{v3&d#^jnyhsMe(SH{- z57PEFDs8 zGhpP5Y@|XHvL8q~6_XzYP{o`NYrj^|KvDiJy;X3X>~w2lZVIknEp(ciR`DqawMLpH{o9<| z+-}@B*XVQ+yLMY`xY05Xv%06YxJ?vBt2w8(q_iA>Q+4%wT5~>xy4L@))WK;lkd<-` zkzeY7^#PSW%k8cor?#ZACDzJx{v>c6$a@2*s(P)u{>uLdpsJ*3pwCp=U-5}Xj=%DQfZ?)5!|@|B!oV5+ zN{U^L#*zNm>N)*f0#B>)S2B@{@KlyQgLo=wpd|KDmcgrzk7A5OqVCJd)Np*1(;Ocq z29&mMq7WzbPWV43Xlo6Oju`_iv{fBlmdv%}&??eXNxy`$Tlyu&oK)nOoP;C`zvN{6 zB>WQbDa9)VMe(7 z^f*NjNfW8eBehXci~%=m!AXRW?k8>s-cZ}LMSh9}+`Xn!?1z!9L-7rf=<|r2_1%AX zqT5}S*HXsWDh3l}@sOx=`JNR9UYEh&gsb1TeziaORr21CtoMpukAAhwl3Z`&m(W)| zOSAkCUXXHm1vC!|)&aLUf%zQ)R56UFqKb>FW&@~V;3`FxJ(J7j0*t5HE&;Ft_wn0g znY}oG@N&>ACZja^x>*R2CzcSgCD8#g9KiID7VAp|Rgt|o*O)pop0L5lo>6rZJ<*M6 zx6{8ZVA>cQ`3pG+?%Mo709A~&si@+v&A$tvim^5oRnANbYZ%XT&eBXvp8ZAu+2vMd zRmrno71C3|!j!D7bYYfi?7MoEr@)2i5}dHuEs9jEjc4&Vv@#&@F~n56uOEAR5=LM^z10%cGBGIGj($OT9z8 z$hEh|9GkYtGDSEZG;RKpjOGJm;`4g#Bi%4NqVF>U*i6aH^5; z$4=6EC6XbFrp{-Onbx~G-l-WE|Zi9f5ggZ z-&1eTEZic~)lq9E>FP4ESJ`PrZgMa5Q}JB^1ypLUIqxSGSsjGiS@Y~zj1048tEkAK z)6pXp6pIX8QO8q*yN$M0Fk(I+<9!vfuR4{S6pg$B8y5K%i5fK<6rbJD;@lq}om>UTN&D zPtQ(41a7>$ceph(-09Za-N6lpj4abUbSxR*WKKF@$RG(+? z*-5o$W*4^h92mig7#VBLBxNAB=KM6$Y-&#D)Skb~7?nr4nQ9YHQb00_YRyjyCVLuA zjnZXk%`ZY@hSppv2nkV|$dwF@xm+R|IyVA zpXk*2a10@3iv@fHtXMKkNy+*}sPPc>1#f0cmm1ABP@Qs;-yoVOu1jACnyuTwVm(~^ z0+-a9Gw|iiI2^{(s=*x@a9Lw*qTa37I<2`je2e-KU!H8WcEKwx33u@(je2(gAIS4+ zgbHrX>~8I9$OBy_0RxK@U9_6XQm2A04XI?^j{J@owiTE9wHjxcDn=&ibU$b~UL$Gh z6rX3S)1^30Dmj@yvK3@eczHZhVk*hBSjPz&Pa@dJXWyJ({k#<%utl4LSu%a z>?^!nDc2F5saOzpE#}%Fa!%=?TB?-J*@rz*9-R|F#kE>(-5IL+k}5ewqTcQ8REbjq zNvh=jIFyQ{N{+()(({xg9Mho(M&Z;jNDi4#ISojoec0kZ zISw}t$1%B-Hi~Zf_fF5Qj7w`eAlZ0b7O6_@yZHczr1owaiPSfU%DDxFfaf!ose*f{ z+g-0weHC0PWAq+_eY#D5u8F+M9jaa}K9kAV)q5>84;G8NtM|?Tsu;U^iYg1`B+5WQ zyp&S74+oHy7ELArtD;%QcspqMtVT6-XY)6w6z+=wBj<}r_Jmj$GZF>y&jIu?XU57u zwx}tc@Zg)6oOIJ42MnA&F&sSQ?C#yE_f=EWYV>DFf2{MIe*OTSRu{*ncgEP~8I@d<_+bsW}HYc-s%as=6H3->8J3E?_+}?dmzdR8K82A_xB$-GY_}T|7w(1-b8S$h zF2OcWEshmK-1zYL^Duci6@m-G^^&%RQ2Z>kanjSE*gI{E&epq=BjAy?hia`oGmUoq zc}J(whIOz0?99|>JCm*MDDK*h)XXyzYUkC?-B};USoxL>@$TxN0~^msj-wa+;GadW z#pm6toBrvW58T6s`LV;+dlIfx!<<*l>~3%AszwYRNsXj|-h55vh%>H7`xF%cJ| z5bl!@2r`rAS7}j>XI}yc<9jk^r?{l+IrFf2FuD(;PhWt4JZj?k`1}R%kJ3(`z`sQX zL<*;(laYj2J2}Vd?{AIV+~csGk%65VGO%wWp%1`61qb#O#=z{7#cTV$=lxwDe1ADKw+I|sU(h;xdB<)*aJBHS2)|$5Uw*%;dVX`T zv9s=zYP5ViRCP_%5pGSCOm~YbqN1~bTQo^Zna`vUDurxqtsTz%9?*FSFB*1kKY&#j zNS3UE`XqkBKVP;GeJFn9IKhTFmo|S1{!An03@6yFcRK2+b+|NPq&5QRNB~txC*Bb? z#=APDSQW#pP%qMSyw8xHEv#;Z{CaEso!Ip;(U$}#WKo=0e#<3UwEM4QbnnGh-vq|W zlpc0Y-WQ-ho@J!sMt0D@1@@`Q*y9Lt6*`G|R=Bt_SJEDA)HB8Y;(L;H%@WS{Ln za5Bx9#i#KLQ>^cyX;8fjw#LQzPAGFYZVQ+D#G*a6fWb@ownj%Av5hoiB)Z;>*#@S1X|a+5?~5I_}U zyIoObVQ(u*)ZN{^C4j0v@9v^8fxBsxUjj=8{x%V=2zScia+IFqvnH8-De@mpB4c6! zb^3W0JT2h?O4kpaz+RS05gVv~1zq*5cx;cTj(F$vo$#h&RFdUqj6)*!t8if2gk?C5 z(Io)8i=9!TdQJAqXeUD7=5Unkm95gX2ObP0%Pu~OLlHZLAHz>#r%-(2?3W4CfOXhf zNAzjG>~S+tdG57x@eRaa7>yy^1`%ErU~1*c1H( zNr;Ex=;<%O(`xi|>f#Uzdf62z3R*HN*38S{6-P50luOP0CBn@L<74s4JNhoIV=`pF8PmQ-;yvkXdBhb#rd$e=hNIy07;Z#HGF142aDr}n? zF^k?x`xUvAlds8gJ`E>JLj$UJ`>>pc-0m3H5$9~~`#2S=3MX@;oX>H-JC;06$hr6F z$?6>8fC>9T096bVrl{hYux|xW^;j@ra=4CZ2{U0Sk{^8- z850Yr)6bjXX*DJ+U3Cci^-Ji)v0qA2#K!Aa@Q!1=4BDmfdJ7Jw-^Pn}B8`_pNkztM z;90TpT8*EC@e-dNlg8^blIm5+h$SbKP@PFy>ZdVVm({P=sO?YbQ}0PH&3ZRoPZ= zse6y%RRLr%&0gfK&CI>Wu+YYl9J*tf!Yp9QvWU(=9>r4Y^s^40R$~FP^^LHE9q7!l zgqBu`En*kmbu6MW7HJWW#ldN{(RVyAjGCN2ZJ8Z^VY}UGUj+wk&cS8K zX$5A<-DAe9sb*dftwq-&zj%4saYjFb(~V9CE@~FlV^AQre*L0XhTV;`=o=L`T=;>E z#ys&~PGuO<>J{PCG^vdE**jcXd(W*3k;vGxG1C>+g?-*7JP&Y`sS8WtQ*u)s~x0&!ro)9?tk0FB!uL;W^lwA{cu(MQS$mo(U15% z;#6-v0?mU#<|a%1I)ExhvXr8VtBF=!=~rtNXd*?GU7crc0ojSdxtUb!0!U_JW9~T_ zXJdj4If|9vZjnprt=ND@zZveR zTL5>pTL5>n-UpNTZ}h^MZnHZt-4D1&$|z&IS=`msnrKW78)&Im?c8k{3&yrOy$xok zne^#pYSlYLcVT}fjI+)HC9C-j8N_)Oh*`SAuB>|<^yjxgX-kjFF{!M32Q+5Xt`t1& zUdW!PtP}G12pY{~OEg6koPw4`a6F{Eqv(K?3y`_*kaa}@ORi2dQpIvpog|-%PyB= zH^m&=1koTk3kfSy8#Cjrxf!@=3@RP*_DE!4Z4eK~tn=>`I>JaXxgo4S|Y@>}8lW_TA8>+RZ=98PXy?4 zd7tJz`rmq)sQSU&37Wea?m18g5~Dan+3Ccl*38uWlWN`eyt+kF+%ky=7sI5ObA%=U z;*W6W+1QwA?Z@PmmF;@7)6kbrUWTARyfvnmi>h3`s2UD1>A7zZ$o;)UF=nbf)CqJyN<@@yE81 z1rZ+eeYV?O?>SWk{9WGY@VH(0bYz@&aA^~4bbV^u`UaZz_4-^{eh$KnJ2dTk`xF2p z1{*>1pk%o**qZ{VVg#HNRhIU)!mKM4lc_3xMF3@~uH-7XGJT?j7fmljc^8`;(4C(J zpfDU$lyyKcx|BxXRYW#SWhsKMiUCf*KId+eHv|lxFD$dy z9YEo#)j9Fg-vB{UANu&F7oY^f_QB2{4WNq6H;&zMVu(pWa*D2tnn=G_E7|ii$X@RE z2k?in+`kOXgA#J2Jtr3b-2kc>v!UA&P{rp}#u7uieQ}k=l0m1RD}ksIQDLDa z#mQ*B6s#f=n$}zmdX=~-Jz8kFKfIt6ZBhbntQ@I9t|r_Asq|iSQ=$Z(b|M4V1|{A^ z2;K!R$HIVR7SnO~Nn|mJPpo_%^ruM)yfe4?5vL@JiALq+$c@l_-pC7NF`cSMJ)}o1 zKCwo-`V?40M6>_ZZVK)>0~9Hw;%L4zCX?Hl0Wu8kXa?ZHorp1^b= zPM{}3%(h{dWi;jk(hR+fw0fmCHDsA#-*7rcm-m z>RP>w&x(kV`|x6D9_+21c(W8$4<$@~MW$&XfHp=Bi=>TX`JC0Aq!ipN2Wp=bzB1Oc z@n8oddxrMiXiX7*LHKZY03R50^p5m7S}qMlOt=)E_)9|HM+4|%%#)9eC||hygt?0GCX=&eeV^mP7`Qh_cS+R_d z9}-$A(snXFE--iIH850Z2wbx49iZqJNQ!9`*SdqE+UCD9i1%QsQu`i1hyE(d2-)|V zkbMs!k|HBSh^fd3c|zb+IGgT|H47nQp)ZJY$##fmhZ-#I?~LZh*Hl21f@^O?B+O(j$Eh zQQ=&N6lyJyv$Br%6QQlzeb%ABr(g%>dO6e`f_?n&`V689tQb807rEs*`cBPKvWI#S zbXVDeIUO1^HVT&tLh_FPOgjL4VVtFHwB}kI)b?+spAV|M>09nDshp9jTTaa5p*PC?e&JzZ(8!SDj0)T z2^TNFI^5TkT%+z@=4x{oWF?a)L>eY=(mYzlyMV*}!7;bH>dwLP@k_hU_WtI6kb4xX zL;hCg9(ODnOL|zxIR~o)&4avfr(+# zF*dmrRa{GRRLGuAP^P&K%7$#Fum4h?kl4EL3uMVIpO`nolE1E86<4mNXG|rU6 z^=M7*c58~9{@C86hIXNXez3>K=V%msN(ZV08OWQ z8Aooe~8FnA!#pjL&t+|cl|<_n$4Fi0kz{qF%f}ibnXOXa&8d&r8|r&(dBoFNID zq4@xGxix?)2D(&Kana>71E}KjDji)S$$dtbxsvBd_yZu9eLi5{*9T>=@kP;{C0TVikLGG^STqtmpZ6TAFQqD>@k+N7tF=#ny8 zqDx~oDnge%Bw3)#SK%jtF2$!Xbg5Ya=+cq$3_b2dZfP!=9KDfn=51YJ>jDJ}uhS#H zQ;%GH;*9*(#VS}h=Hl}&yW$Esge(2b)q^$Ej^9fK(1KhV*z8?fRl%;zhtvHB;O(R0 zA3y3P5FbR5pp4RJlfBjbiHyd43W#CukXG+{;KtX zaEc#(2F(M82`heB`W(NK@JJo!^jJw7$BH`M&_nt>#UIOo_NDmYm;gR7iXV=I=2PY< zu5%y>Wbv0|Ic*G}k5T*}>8o^}N;Q@gKjbg$#V>w%5Ck!&_#uUCt<4?IybIbZ;X1{| z4@j0Qet0%Y3;r1wKj3G_FEZ4<#QyKW1~g*G@Qd8yhxPfz4~YDV6*gR-A?!|J135oa z+gu6cNS990!cOeQ+(=)F@6%1r$qZ6F`mt1*!UXikbGoP?lFigMG-hO77d*I92#+XJ z5CSF26p~Wngt2bkbzfolB}=4`qHyq_qT}?w1Si$pQh6?ZVG8~|*4c#{uWZc1F?z74 z)WK8t5DC?0(UXC5^e}sAe6rr2u1&T&U298;^FyNWUr9(R6k$)r$jQ?9M`C2ADtS;llrf@6zCnUk^#U7k8dJ_YrJSTej`ym4i_iOV9X#2JP zdq$k9e*dfGt|a*_pGO?0@|Vy&fK%@7>+0u%TxcU-%%U>(krY+jeWarTs7eW}-Lc<3 zaESr@FS-Vx%k~(Xy;VEUiaa|?V5Upj(AqjQPrORj!l?nYr|n7*&{{47@a(+1N!A0+ zet^wznFHth!T_G7%y-T-+owO|-A!^;09B0eMz*Q(L4eJq^_~@gpva)Qpna=#bNXNp}h)XG)R_=(Yzjo z2>*;@H2B$x(HLMxy1yU92DBAp#b~a}kI@vno5X=o#lkv&k+E!S+f&62C3jj znniJ+1{^+OUf}?hig0lT97!^bcRfreVV+vI-r1F$J|aanycvSJ|C5kgNRU#e+l~w_ zT9`pD<~*)H=V{>3T-E48d^NdaW6vaJ^Xq^sw+l9MM zAZ|T1H3rvh!4$&J_SE6HC73gDoJ@wQ_HiJ?vgCM&ac~S&55^#kSU?*1gni_w39U%op98glKbSO8>BuqD^Cm-5K1hI zBL|I*QQ@L2Sz|t=-5j?VJb6l4S*J8-vc^gi?;RfBxJCKmaY%1O*ri0rITyZ6C-||ZmG1{{{ex%LJ9bo2Bi zBT$r_o}?JyY>MPu`|`ek!SjX1zV>DR^`@+AV=f$f>lrZtpAMjwaRrQzhdEckd^vzB zHV-)#&WZab+si3BFnS@<@6}V*d}x)=RR9kKaEYM+9)#vWEjjX^a}mtX1E^xmouZ1% zt9`fm{VAUc=kqFexgqtwkkw+zqtnk$AgV+lUWDA$d09T2EsD)*FbBPqpq_O#%n9(C z6SX&1lni!E5>A4gde6(c1h#KqxG)%9Cbn^-{J>UnQWWh(fIYgl9bU@TdA0nfqil-& zt26ME$iEVwIQdrsmsWQ*4BZrwBR6(VyvaGmv(BEZNBtB%YVnCP>RVw>Eezft&tlzW z^%=M_7!Jo8pQ^*5Y7mx+Gh;U_^bU$Y53ASunO%0i>SJ)cyLY69hcq|#c86*JgGOpM zYeHmJ>F9-cH!;NAAW5z<+MF4wVOXrO=$FSl7pK@0s%Hb=dPZXv=yIghE8nSc-wbqc zjY})zoCR^}%HHnq?EFajacS`jvDhV`qipfiZkO;ppQlXPSqh(`IV3@&D7$!Sg&wmR zoYLPCl>3s9!GycT`Gc`j%tpf3a*XxeD`wW1jV7--2}|%={8VnM?1$eF2ELBZKu-SI zYoPfwsF`#6$2$V3Vn9tr6&Gs$O#oF4sHv#3XK{rx1bQZO9QXKjGR^k}kj`}6tpn&Z z*;$9s<))zhy^tTD?q{T+N#=S`T`}GNkWLW1O;F|Jh^`ivT3Y6Kw%qK{{ot+msaloz z4VkVV222-&84pYP9S1OHRsJe~D#of*RB>13%Ip0I#3wk6RjH`5SLJd#&2~Q~OqwXZ$nHsm0Gubk6Y9WOVLIY(V?_ z8PPen?)fM;r?#~tf|Q+NDY5U&Sb(HC40tlU_d!jqwv8goucwS0Oec={4q!o%yf`u@5PLC^2}rOF5oSVMd^gc-1M8>eM{0AOMy;;X3DumA4M51ZUK<caT~+b4Df zmrMC!OsF+Yy_K=->4_8#FGYc*%^telR8*zcbduL;4ycy51Sm~evg^Q@{5`rvO*>q7 z6v8g+9I;slZ`RI>cTNT`n?E1Vn%FRajI6;k+*la~6%0$f-5uO8B=<}PH*A3H=UBCm z4AkI%O3x1qJwDul%YSAEH;^Zw>EYH%vbq+(d%29I5gP*8=~2ID;S!h9 zB)nhlF_Hb*jXOaa&g3X@wHJVQ9zpp)cOLfS4v$fHyeB7TDRpO#ii{Xr@7aZq2vDfr zze}U2Qv?VVfoEeBzf5s|s|Bg72c5&T&)#r&iH7jdBbRD zwm#k%sp+?B>$hytxj4#Ht&D$47w{DsN`<|J_neHze6q>#?vYj=`g4RlN$|PUrM1t( zAx=NE_q&z}nWw5meMijnv`en`7d@;kbC7%rccLjIL2umIX_|-Lj0HJ}${(wJT&PA3lfaYPXa>G}z3ZRN1;EJm3_|&R|yF^0n44^I5lk}%&TDv@lq|JC% z#0q^%GeOgcIwT32k_jB}z+2^1j-7rk0ydV2wTP&SOq;URyU3RM7&PD0+u1#})Z=5h zKMqe70KG$-V`JS(b9^zGX;v8KiCCd07HLiUrvQjzZwb!jhB?KutI7Jz#8g8RX*Dp} z#PVEAv_pjUGh`^GF>Qh$pN+QeKN z>)u2~olMP%Q6eM^0XVVPQ?f0>qOTFc`@$mS*w`#`)sqLKj2=ebh#b2|@RP`~6Q4NQW&$P(;H!nEe`lN>FI)%Xx||r}VrgY-0ub(@ z4#I_>6vnsPtHZZ30FF^Ak`aJ%p(aLz&4%U3H*JxQR{{-eNVK2m$c$WwZ^)w9?|CrY zI%rpDQIvs0zjxPQZ!tJ6AfugCw6EcM7SDopjAXKjk}|sJU}Ufcd#@UzA<@zsYBm1+ zrK$l^d{1jhEU;2wL#+@zIR+@_#jhOB_kf$ylIL^&QP{rftu|KdLe4%`$_TVy;@FR0 z!ZNA^TSXV4{0KmGIeanzl~5H5PW3bb6RIaZH6cM(hLFqo_zhX-EM#@sh0{%}!Ee+A zUV_t4C*)ntjft8JL5ZVJu?~JNWh;RHbD|Hgt!O>j@&4%7$Pp7qT}66I!BOjEOdJmx zKnw)|`H9vHTwe``dRizc^G!0m3DRjHb)Tv(GKQxxkUcy{hB+9Bij%}ZhRo$*pyd)1 zEMy^|7a(T@0=fx52?QiQg&`n4-DU4|p-p~u&>2ix6`789u#V5|lZ(XcP zgQG5kJKU$z>kJM^5FfsjiuDAc9>Bv0IUX*^c+{_4c?-^%Z#3MX%)2rg^MuAYr`95^ zUU5y;GLFGdqKnLKxnvD_Fx zliQR_Hqxm7zwueYxoPFQ&^#amI}LBCIVee({EAG|&jM&;kf))n`<+O_h_3^X+T#(f4ndX z6>k#w8H2|7X+T0GMTVmgQ<35L1P#R{m>Ml8A#rR$9|qM|R43O4${P=uI__^9XWjJf zpN3zU>&@OJ8OB|bXUs)&wQ1qdK>FOC$tD~jD7HpKhy!*{CK|I-t@*};t?Cu?E@7Z9@R(83J(%G!H7*Sv)x>ggqgED#qebRB;W# zg#lFYc_mZ!-8F(lCvcjsk;Rfer=JCo%@V%7@Zx2LTMASYd$Qv&?4An2_Dn1m=ebS5 z3y$+|tQqOx{25Vv8P30x%e7TlxEdni=FaAL9bI{-=)nW%+z|% z3C!*qZ#O0&)vXCp0LyWypgp2HcV)

YAg0LP(wO`>-s4<|`aJdazop5%1V2@&E< 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

% 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%0DpU~;YOmQiOhWU^f|k3A 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 |4%VnHI6;A!8n#fk6)+=UwgYlnJMKA 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%0Dq4gGpl*|EE0UG-dRZQb4 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Ƚ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Ƚ$sb=3+h;U=bE$DVAXcR$?{QU>(+DBQ{|RwqiSW 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Ƚ$rm7 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

_vLOg%bnk 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 literal 0 HcmV?d00001 diff --git a/docs/_build/html/.doctrees/state.doctree b/docs/_build/html/.doctrees/state.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a845992d7c1b26fd3f38ee3f46c24565641844d9 GIT binary patch literal 469466 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ø|7I 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 + + + + + + + Page not found - Scenario documentation + + + + + + + + + + + + + + + + +

+ + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+
+

Page not found

+
+
+
+

Sorry, but the documentation page that you are looking for was not found.

+ +

Documentation changes over time, and pages are moved around. We try to redirect you to the updated content where possible, but unfortunately, that didn't work this time (maybe because the content you were looking for does not exist in this version of the documentation).

+

You can try to use the navigation to locate the content you're looking for, or search for a similar page.

+ +
+
+ Penguin with a question mark +
+
+
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/collections.html b/docs/_build/html/_modules/collections.html new file mode 100644 index 00000000..d43a86db --- /dev/null +++ b/docs/_build/html/_modules/collections.html @@ -0,0 +1,1902 @@ + + + + + + + + collections - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for collections

+'''This module implements specialized container datatypes providing
+alternatives to Python's general purpose built-in containers, dict,
+list, set, and tuple.
+
+* namedtuple   factory function for creating tuple subclasses with named fields
+* deque        list-like container with fast appends and pops on either end
+* ChainMap     dict-like class for creating a single view of multiple mappings
+* Counter      dict subclass for counting hashable objects
+* OrderedDict  dict subclass that remembers the order entries were added
+* defaultdict  dict subclass that calls a factory function to supply missing values
+* UserDict     wrapper around dictionary objects for easier dict subclassing
+* UserList     wrapper around list objects for easier list subclassing
+* UserString   wrapper around string objects for easier string subclassing
+
+'''
+
+__all__ = [
+    'ChainMap',
+    'Counter',
+    'OrderedDict',
+    'UserDict',
+    'UserList',
+    'UserString',
+    'defaultdict',
+    'deque',
+    'namedtuple',
+]
+
+import _collections_abc
+import sys as _sys
+
+from itertools import chain as _chain
+from itertools import repeat as _repeat
+from itertools import starmap as _starmap
+from keyword import iskeyword as _iskeyword
+from operator import eq as _eq
+from operator import itemgetter as _itemgetter
+from reprlib import recursive_repr as _recursive_repr
+from _weakref import proxy as _proxy
+
+try:
+    from _collections import deque
+except ImportError:
+    pass
+else:
+    _collections_abc.MutableSequence.register(deque)
+
+try:
+    from _collections import _deque_iterator
+except ImportError:
+    pass
+
+try:
+    from _collections import defaultdict
+except ImportError:
+    pass
+
+
+################################################################################
+### OrderedDict
+################################################################################
+
+class _OrderedDictKeysView(_collections_abc.KeysView):
+
+    def __reversed__(self):
+        yield from reversed(self._mapping)
+
+class _OrderedDictItemsView(_collections_abc.ItemsView):
+
+    def __reversed__(self):
+        for key in reversed(self._mapping):
+            yield (key, self._mapping[key])
+
+class _OrderedDictValuesView(_collections_abc.ValuesView):
+
+    def __reversed__(self):
+        for key in reversed(self._mapping):
+            yield self._mapping[key]
+
+class _Link(object):
+    __slots__ = 'prev', 'next', 'key', '__weakref__'
+
+class OrderedDict(dict):
+    'Dictionary that remembers insertion order'
+    # An inherited dict maps keys to values.
+    # The inherited dict provides __getitem__, __len__, __contains__, and get.
+    # The remaining methods are order-aware.
+    # Big-O running times for all methods are the same as regular dictionaries.
+
+    # The internal self.__map dict maps keys to links in a doubly linked list.
+    # The circular doubly linked list starts and ends with a sentinel element.
+    # The sentinel element never gets deleted (this simplifies the algorithm).
+    # The sentinel is in self.__hardroot with a weakref proxy in self.__root.
+    # The prev links are weakref proxies (to prevent circular references).
+    # Individual links are kept alive by the hard reference in self.__map.
+    # Those hard references disappear when a key is deleted from an OrderedDict.
+
+    def __new__(cls, /, *args, **kwds):
+        "Create the ordered dict object and set up the underlying structures."
+        self = dict.__new__(cls)
+        self.__hardroot = _Link()
+        self.__root = root = _proxy(self.__hardroot)
+        root.prev = root.next = root
+        self.__map = {}
+        return self
+
+    def __init__(self, other=(), /, **kwds):
+        '''Initialize an ordered dictionary.  The signature is the same as
+        regular dictionaries.  Keyword argument order is preserved.
+        '''
+        self.__update(other, **kwds)
+
+    def __setitem__(self, key, value,
+                    dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link):
+        'od.__setitem__(i, y) <==> od[i]=y'
+        # Setting a new item creates a new link at the end of the linked list,
+        # and the inherited dictionary is updated with the new key/value pair.
+        if key not in self:
+            self.__map[key] = link = Link()
+            root = self.__root
+            last = root.prev
+            link.prev, link.next, link.key = last, root, key
+            last.next = link
+            root.prev = proxy(link)
+        dict_setitem(self, key, value)
+
+    def __delitem__(self, key, dict_delitem=dict.__delitem__):
+        'od.__delitem__(y) <==> del od[y]'
+        # Deleting an existing item uses self.__map to find the link which gets
+        # removed by updating the links in the predecessor and successor nodes.
+        dict_delitem(self, key)
+        link = self.__map.pop(key)
+        link_prev = link.prev
+        link_next = link.next
+        link_prev.next = link_next
+        link_next.prev = link_prev
+        link.prev = None
+        link.next = None
+
+    def __iter__(self):
+        'od.__iter__() <==> iter(od)'
+        # Traverse the linked list in order.
+        root = self.__root
+        curr = root.next
+        while curr is not root:
+            yield curr.key
+            curr = curr.next
+
+    def __reversed__(self):
+        'od.__reversed__() <==> reversed(od)'
+        # Traverse the linked list in reverse order.
+        root = self.__root
+        curr = root.prev
+        while curr is not root:
+            yield curr.key
+            curr = curr.prev
+
+    def clear(self):
+        'od.clear() -> None.  Remove all items from od.'
+        root = self.__root
+        root.prev = root.next = root
+        self.__map.clear()
+        dict.clear(self)
+
+    def popitem(self, last=True):
+        '''Remove and return a (key, value) pair from the dictionary.
+
+        Pairs are returned in LIFO order if last is true or FIFO order if false.
+        '''
+        if not self:
+            raise KeyError('dictionary is empty')
+        root = self.__root
+        if last:
+            link = root.prev
+            link_prev = link.prev
+            link_prev.next = root
+            root.prev = link_prev
+        else:
+            link = root.next
+            link_next = link.next
+            root.next = link_next
+            link_next.prev = root
+        key = link.key
+        del self.__map[key]
+        value = dict.pop(self, key)
+        return key, value
+
+    def move_to_end(self, key, last=True):
+        '''Move an existing element to the end (or beginning if last is false).
+
+        Raise KeyError if the element does not exist.
+        '''
+        link = self.__map[key]
+        link_prev = link.prev
+        link_next = link.next
+        soft_link = link_next.prev
+        link_prev.next = link_next
+        link_next.prev = link_prev
+        root = self.__root
+        if last:
+            last = root.prev
+            link.prev = last
+            link.next = root
+            root.prev = soft_link
+            last.next = link
+        else:
+            first = root.next
+            link.prev = root
+            link.next = first
+            first.prev = soft_link
+            root.next = link
+
+    def __sizeof__(self):
+        sizeof = _sys.getsizeof
+        n = len(self) + 1                       # number of links including root
+        size = sizeof(self.__dict__)            # instance dictionary
+        size += sizeof(self.__map) * 2          # internal dict and inherited dict
+        size += sizeof(self.__hardroot) * n     # link objects
+        size += sizeof(self.__root) * n         # proxy objects
+        return size
+
+    update = __update = _collections_abc.MutableMapping.update
+
+    def keys(self):
+        "D.keys() -> a set-like object providing a view on D's keys"
+        return _OrderedDictKeysView(self)
+
+    def items(self):
+        "D.items() -> a set-like object providing a view on D's items"
+        return _OrderedDictItemsView(self)
+
+    def values(self):
+        "D.values() -> an object providing a view on D's values"
+        return _OrderedDictValuesView(self)
+
+    __ne__ = _collections_abc.MutableMapping.__ne__
+
+    __marker = object()
+
+    def pop(self, key, default=__marker):
+        '''od.pop(k[,d]) -> v, remove specified key and return the corresponding
+        value.  If key is not found, d is returned if given, otherwise KeyError
+        is raised.
+
+        '''
+        marker = self.__marker
+        result = dict.pop(self, key, marker)
+        if result is not marker:
+            # The same as in __delitem__().
+            link = self.__map.pop(key)
+            link_prev = link.prev
+            link_next = link.next
+            link_prev.next = link_next
+            link_next.prev = link_prev
+            link.prev = None
+            link.next = None
+            return result
+        if default is marker:
+            raise KeyError(key)
+        return default
+
+    def setdefault(self, key, default=None):
+        '''Insert key with a value of default if key is not in the dictionary.
+
+        Return the value for key if key is in the dictionary, else default.
+        '''
+        if key in self:
+            return self[key]
+        self[key] = default
+        return default
+
+    @_recursive_repr()
+    def __repr__(self):
+        'od.__repr__() <==> repr(od)'
+        if not self:
+            return '%s()' % (self.__class__.__name__,)
+        return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
+
+    def __reduce__(self):
+        'Return state information for pickling'
+        state = self.__getstate__()
+        if state:
+            if isinstance(state, tuple):
+                state, slots = state
+            else:
+                slots = {}
+            state = state.copy()
+            slots = slots.copy()
+            for k in vars(OrderedDict()):
+                state.pop(k, None)
+                slots.pop(k, None)
+            if slots:
+                state = state, slots
+            else:
+                state = state or None
+        return self.__class__, (), state, None, iter(self.items())
+
+    def copy(self):
+        'od.copy() -> a shallow copy of od'
+        return self.__class__(self)
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        '''Create a new ordered dictionary with keys from iterable and values set to value.
+        '''
+        self = cls()
+        for key in iterable:
+            self[key] = value
+        return self
+
+    def __eq__(self, other):
+        '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
+        while comparison to a regular mapping is order-insensitive.
+
+        '''
+        if isinstance(other, OrderedDict):
+            return dict.__eq__(self, other) and all(map(_eq, self, other))
+        return dict.__eq__(self, other)
+
+    def __ior__(self, other):
+        self.update(other)
+        return self
+
+    def __or__(self, other):
+        if not isinstance(other, dict):
+            return NotImplemented
+        new = self.__class__(self)
+        new.update(other)
+        return new
+
+    def __ror__(self, other):
+        if not isinstance(other, dict):
+            return NotImplemented
+        new = self.__class__(other)
+        new.update(self)
+        return new
+
+
+try:
+    from _collections import OrderedDict
+except ImportError:
+    # Leave the pure Python version in place.
+    pass
+
+
+################################################################################
+### namedtuple
+################################################################################
+
+try:
+    from _collections import _tuplegetter
+except ImportError:
+    _tuplegetter = lambda index, doc: property(_itemgetter(index), doc=doc)
+
+def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None):
+    """Returns a new subclass of tuple with named fields.
+
+    >>> Point = namedtuple('Point', ['x', 'y'])
+    >>> Point.__doc__                   # docstring for the new class
+    'Point(x, y)'
+    >>> p = Point(11, y=22)             # instantiate with positional args or keywords
+    >>> p[0] + p[1]                     # indexable like a plain tuple
+    33
+    >>> x, y = p                        # unpack like a regular tuple
+    >>> x, y
+    (11, 22)
+    >>> p.x + p.y                       # fields also accessible by name
+    33
+    >>> d = p._asdict()                 # convert to a dictionary
+    >>> d['x']
+    11
+    >>> Point(**d)                      # convert from a dictionary
+    Point(x=11, y=22)
+    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
+    Point(x=100, y=22)
+
+    """
+
+    # Validate the field names.  At the user's option, either generate an error
+    # message or automatically replace the field name with a valid name.
+    if isinstance(field_names, str):
+        field_names = field_names.replace(',', ' ').split()
+    field_names = list(map(str, field_names))
+    typename = _sys.intern(str(typename))
+
+    if rename:
+        seen = set()
+        for index, name in enumerate(field_names):
+            if (not name.isidentifier()
+                or _iskeyword(name)
+                or name.startswith('_')
+                or name in seen):
+                field_names[index] = f'_{index}'
+            seen.add(name)
+
+    for name in [typename] + field_names:
+        if type(name) is not str:
+            raise TypeError('Type names and field names must be strings')
+        if not name.isidentifier():
+            raise ValueError('Type names and field names must be valid '
+                             f'identifiers: {name!r}')
+        if _iskeyword(name):
+            raise ValueError('Type names and field names cannot be a '
+                             f'keyword: {name!r}')
+
+    seen = set()
+    for name in field_names:
+        if name.startswith('_') and not rename:
+            raise ValueError('Field names cannot start with an underscore: '
+                             f'{name!r}')
+        if name in seen:
+            raise ValueError(f'Encountered duplicate field name: {name!r}')
+        seen.add(name)
+
+    field_defaults = {}
+    if defaults is not None:
+        defaults = tuple(defaults)
+        if len(defaults) > len(field_names):
+            raise TypeError('Got more default values than field names')
+        field_defaults = dict(reversed(list(zip(reversed(field_names),
+                                                reversed(defaults)))))
+
+    # Variables used in the methods and docstrings
+    field_names = tuple(map(_sys.intern, field_names))
+    num_fields = len(field_names)
+    arg_list = ', '.join(field_names)
+    if num_fields == 1:
+        arg_list += ','
+    repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')'
+    tuple_new = tuple.__new__
+    _dict, _tuple, _len, _map, _zip = dict, tuple, len, map, zip
+
+    # Create all the named tuple methods to be added to the class namespace
+
+    namespace = {
+        '_tuple_new': tuple_new,
+        '__builtins__': {},
+        '__name__': f'namedtuple_{typename}',
+    }
+    code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))'
+    __new__ = eval(code, namespace)
+    __new__.__name__ = '__new__'
+    __new__.__doc__ = f'Create new instance of {typename}({arg_list})'
+    if defaults is not None:
+        __new__.__defaults__ = defaults
+
+    @classmethod
+    def _make(cls, iterable):
+        result = tuple_new(cls, iterable)
+        if _len(result) != num_fields:
+            raise TypeError(f'Expected {num_fields} arguments, got {len(result)}')
+        return result
+
+    _make.__func__.__doc__ = (f'Make a new {typename} object from a sequence '
+                              'or iterable')
+
+    def _replace(self, /, **kwds):
+        result = self._make(_map(kwds.pop, field_names, self))
+        if kwds:
+            raise ValueError(f'Got unexpected field names: {list(kwds)!r}')
+        return result
+
+    _replace.__doc__ = (f'Return a new {typename} object replacing specified '
+                        'fields with new values')
+
+    def __repr__(self):
+        'Return a nicely formatted representation string'
+        return self.__class__.__name__ + repr_fmt % self
+
+    def _asdict(self):
+        'Return a new dict which maps field names to their values.'
+        return _dict(_zip(self._fields, self))
+
+    def __getnewargs__(self):
+        'Return self as a plain tuple.  Used by copy and pickle.'
+        return _tuple(self)
+
+    # Modify function metadata to help with introspection and debugging
+    for method in (
+        __new__,
+        _make.__func__,
+        _replace,
+        __repr__,
+        _asdict,
+        __getnewargs__,
+    ):
+        method.__qualname__ = f'{typename}.{method.__name__}'
+
+    # Build-up the class namespace dictionary
+    # and use type() to build the result class
+    class_namespace = {
+        '__doc__': f'{typename}({arg_list})',
+        '__slots__': (),
+        '_fields': field_names,
+        '_field_defaults': field_defaults,
+        '__new__': __new__,
+        '_make': _make,
+        '_replace': _replace,
+        '__repr__': __repr__,
+        '_asdict': _asdict,
+        '__getnewargs__': __getnewargs__,
+        '__match_args__': field_names,
+    }
+    for index, name in enumerate(field_names):
+        doc = _sys.intern(f'Alias for field number {index}')
+        class_namespace[name] = _tuplegetter(index, doc)
+
+    result = type(typename, (tuple,), class_namespace)
+
+    # For pickling to work, the __module__ variable needs to be set to the frame
+    # where the named tuple is created.  Bypass this step in environments where
+    # sys._getframe is not defined (Jython for example) or sys._getframe is not
+    # defined for arguments greater than 0 (IronPython), or where the user has
+    # specified a particular module.
+    if module is None:
+        try:
+            module = _sys._getframemodulename(1) or '__main__'
+        except AttributeError:
+            try:
+                module = _sys._getframe(1).f_globals.get('__name__', '__main__')
+            except (AttributeError, ValueError):
+                pass
+    if module is not None:
+        result.__module__ = module
+
+    return result
+
+
+########################################################################
+###  Counter
+########################################################################
+
+def _count_elements(mapping, iterable):
+    'Tally elements from the iterable.'
+    mapping_get = mapping.get
+    for elem in iterable:
+        mapping[elem] = mapping_get(elem, 0) + 1
+
+try:                                    # Load C helper function if available
+    from _collections import _count_elements
+except ImportError:
+    pass
+
+class Counter(dict):
+    '''Dict subclass for counting hashable items.  Sometimes called a bag
+    or multiset.  Elements are stored as dictionary keys and their counts
+    are stored as dictionary values.
+
+    >>> c = Counter('abcdeabcdabcaba')  # count elements from a string
+
+    >>> c.most_common(3)                # three most common elements
+    [('a', 5), ('b', 4), ('c', 3)]
+    >>> sorted(c)                       # list all unique elements
+    ['a', 'b', 'c', 'd', 'e']
+    >>> ''.join(sorted(c.elements()))   # list elements with repetitions
+    'aaaaabbbbcccdde'
+    >>> sum(c.values())                 # total of all counts
+    15
+
+    >>> c['a']                          # count of letter 'a'
+    5
+    >>> for elem in 'shazam':           # update counts from an iterable
+    ...     c[elem] += 1                # by adding 1 to each element's count
+    >>> c['a']                          # now there are seven 'a'
+    7
+    >>> del c['b']                      # remove all 'b'
+    >>> c['b']                          # now there are zero 'b'
+    0
+
+    >>> d = Counter('simsalabim')       # make another counter
+    >>> c.update(d)                     # add in the second counter
+    >>> c['a']                          # now there are nine 'a'
+    9
+
+    >>> c.clear()                       # empty the counter
+    >>> c
+    Counter()
+
+    Note:  If a count is set to zero or reduced to zero, it will remain
+    in the counter until the entry is deleted or the counter is cleared:
+
+    >>> c = Counter('aaabbc')
+    >>> c['b'] -= 2                     # reduce the count of 'b' by two
+    >>> c.most_common()                 # 'b' is still in, but its count is zero
+    [('a', 3), ('c', 1), ('b', 0)]
+
+    '''
+    # References:
+    #   http://en.wikipedia.org/wiki/Multiset
+    #   http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html
+    #   http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm
+    #   http://code.activestate.com/recipes/259174/
+    #   Knuth, TAOCP Vol. II section 4.6.3
+
+    def __init__(self, iterable=None, /, **kwds):
+        '''Create a new, empty Counter object.  And if given, count elements
+        from an input iterable.  Or, initialize the count from another mapping
+        of elements to their counts.
+
+        >>> c = Counter()                           # a new, empty counter
+        >>> c = Counter('gallahad')                 # a new counter from an iterable
+        >>> c = Counter({'a': 4, 'b': 2})           # a new counter from a mapping
+        >>> c = Counter(a=4, b=2)                   # a new counter from keyword args
+
+        '''
+        super().__init__()
+        self.update(iterable, **kwds)
+
+    def __missing__(self, key):
+        'The count of elements not in the Counter is zero.'
+        # Needed so that self[missing_item] does not raise KeyError
+        return 0
+
+    def total(self):
+        'Sum of the counts'
+        return sum(self.values())
+
+    def most_common(self, n=None):
+        '''List the n most common elements and their counts from the most
+        common to the least.  If n is None, then list all element counts.
+
+        >>> Counter('abracadabra').most_common(3)
+        [('a', 5), ('b', 2), ('r', 2)]
+
+        '''
+        # Emulate Bag.sortedByCount from Smalltalk
+        if n is None:
+            return sorted(self.items(), key=_itemgetter(1), reverse=True)
+
+        # Lazy import to speedup Python startup time
+        import heapq
+        return heapq.nlargest(n, self.items(), key=_itemgetter(1))
+
+    def elements(self):
+        '''Iterator over elements repeating each as many times as its count.
+
+        >>> c = Counter('ABCABC')
+        >>> sorted(c.elements())
+        ['A', 'A', 'B', 'B', 'C', 'C']
+
+        Knuth's example for prime factors of 1836:  2**2 * 3**3 * 17**1
+
+        >>> import math
+        >>> prime_factors = Counter({2: 2, 3: 3, 17: 1})
+        >>> math.prod(prime_factors.elements())
+        1836
+
+        Note, if an element's count has been set to zero or is a negative
+        number, elements() will ignore it.
+
+        '''
+        # Emulate Bag.do from Smalltalk and Multiset.begin from C++.
+        return _chain.from_iterable(_starmap(_repeat, self.items()))
+
+    # Override dict methods where necessary
+
+    @classmethod
+    def fromkeys(cls, iterable, v=None):
+        # There is no equivalent method for counters because the semantics
+        # would be ambiguous in cases such as Counter.fromkeys('aaabbc', v=2).
+        # Initializing counters to zero values isn't necessary because zero
+        # is already the default value for counter lookups.  Initializing
+        # to one is easily accomplished with Counter(set(iterable)).  For
+        # more exotic cases, create a dictionary first using a dictionary
+        # comprehension or dict.fromkeys().
+        raise NotImplementedError(
+            'Counter.fromkeys() is undefined.  Use Counter(iterable) instead.')
+
+    def update(self, iterable=None, /, **kwds):
+        '''Like dict.update() but add counts instead of replacing them.
+
+        Source can be an iterable, a dictionary, or another Counter instance.
+
+        >>> c = Counter('which')
+        >>> c.update('witch')           # add elements from another iterable
+        >>> d = Counter('watch')
+        >>> c.update(d)                 # add elements from another counter
+        >>> c['h']                      # four 'h' in which, witch, and watch
+        4
+
+        '''
+        # The regular dict.update() operation makes no sense here because the
+        # replace behavior results in some of the original untouched counts
+        # being mixed-in with all of the other counts for a mismash that
+        # doesn't have a straight-forward interpretation in most counting
+        # contexts.  Instead, we implement straight-addition.  Both the inputs
+        # and outputs are allowed to contain zero and negative counts.
+
+        if iterable is not None:
+            if isinstance(iterable, _collections_abc.Mapping):
+                if self:
+                    self_get = self.get
+                    for elem, count in iterable.items():
+                        self[elem] = count + self_get(elem, 0)
+                else:
+                    # fast path when counter is empty
+                    super().update(iterable)
+            else:
+                _count_elements(self, iterable)
+        if kwds:
+            self.update(kwds)
+
+    def subtract(self, iterable=None, /, **kwds):
+        '''Like dict.update() but subtracts counts instead of replacing them.
+        Counts can be reduced below zero.  Both the inputs and outputs are
+        allowed to contain zero and negative counts.
+
+        Source can be an iterable, a dictionary, or another Counter instance.
+
+        >>> c = Counter('which')
+        >>> c.subtract('witch')             # subtract elements from another iterable
+        >>> c.subtract(Counter('watch'))    # subtract elements from another counter
+        >>> c['h']                          # 2 in which, minus 1 in witch, minus 1 in watch
+        0
+        >>> c['w']                          # 1 in which, minus 1 in witch, minus 1 in watch
+        -1
+
+        '''
+        if iterable is not None:
+            self_get = self.get
+            if isinstance(iterable, _collections_abc.Mapping):
+                for elem, count in iterable.items():
+                    self[elem] = self_get(elem, 0) - count
+            else:
+                for elem in iterable:
+                    self[elem] = self_get(elem, 0) - 1
+        if kwds:
+            self.subtract(kwds)
+
+    def copy(self):
+        'Return a shallow copy.'
+        return self.__class__(self)
+
+    def __reduce__(self):
+        return self.__class__, (dict(self),)
+
+    def __delitem__(self, elem):
+        'Like dict.__delitem__() but does not raise KeyError for missing values.'
+        if elem in self:
+            super().__delitem__(elem)
+
+    def __repr__(self):
+        if not self:
+            return f'{self.__class__.__name__}()'
+        try:
+            # dict() preserves the ordering returned by most_common()
+            d = dict(self.most_common())
+        except TypeError:
+            # handle case where values are not orderable
+            d = dict(self)
+        return f'{self.__class__.__name__}({d!r})'
+
+    # Multiset-style mathematical operations discussed in:
+    #       Knuth TAOCP Volume II section 4.6.3 exercise 19
+    #       and at http://en.wikipedia.org/wiki/Multiset
+    #
+    # Outputs guaranteed to only include positive counts.
+    #
+    # To strip negative and zero counts, add-in an empty counter:
+    #       c += Counter()
+    #
+    # Results are ordered according to when an element is first
+    # encountered in the left operand and then by the order
+    # encountered in the right operand.
+    #
+    # When the multiplicities are all zero or one, multiset operations
+    # are guaranteed to be equivalent to the corresponding operations
+    # for regular sets.
+    #     Given counter multisets such as:
+    #         cp = Counter(a=1, b=0, c=1)
+    #         cq = Counter(c=1, d=0, e=1)
+    #     The corresponding regular sets would be:
+    #         sp = {'a', 'c'}
+    #         sq = {'c', 'e'}
+    #     All of the following relations would hold:
+    #         set(cp + cq) == sp | sq
+    #         set(cp - cq) == sp - sq
+    #         set(cp | cq) == sp | sq
+    #         set(cp & cq) == sp & sq
+    #         (cp == cq) == (sp == sq)
+    #         (cp != cq) == (sp != sq)
+    #         (cp <= cq) == (sp <= sq)
+    #         (cp < cq) == (sp < sq)
+    #         (cp >= cq) == (sp >= sq)
+    #         (cp > cq) == (sp > sq)
+
+    def __eq__(self, other):
+        'True if all counts agree. Missing counts are treated as zero.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return all(self[e] == other[e] for c in (self, other) for e in c)
+
+    def __ne__(self, other):
+        'True if any counts disagree. Missing counts are treated as zero.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return not self == other
+
+    def __le__(self, other):
+        'True if all counts in self are a subset of those in other.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return all(self[e] <= other[e] for c in (self, other) for e in c)
+
+    def __lt__(self, other):
+        'True if all counts in self are a proper subset of those in other.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return self <= other and self != other
+
+    def __ge__(self, other):
+        'True if all counts in self are a superset of those in other.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return all(self[e] >= other[e] for c in (self, other) for e in c)
+
+    def __gt__(self, other):
+        'True if all counts in self are a proper superset of those in other.'
+        if not isinstance(other, Counter):
+            return NotImplemented
+        return self >= other and self != other
+
+    def __add__(self, other):
+        '''Add counts from two counters.
+
+        >>> Counter('abbb') + Counter('bcc')
+        Counter({'b': 4, 'c': 2, 'a': 1})
+
+        '''
+        if not isinstance(other, Counter):
+            return NotImplemented
+        result = Counter()
+        for elem, count in self.items():
+            newcount = count + other[elem]
+            if newcount > 0:
+                result[elem] = newcount
+        for elem, count in other.items():
+            if elem not in self and count > 0:
+                result[elem] = count
+        return result
+
+    def __sub__(self, other):
+        ''' Subtract count, but keep only results with positive counts.
+
+        >>> Counter('abbbc') - Counter('bccd')
+        Counter({'b': 2, 'a': 1})
+
+        '''
+        if not isinstance(other, Counter):
+            return NotImplemented
+        result = Counter()
+        for elem, count in self.items():
+            newcount = count - other[elem]
+            if newcount > 0:
+                result[elem] = newcount
+        for elem, count in other.items():
+            if elem not in self and count < 0:
+                result[elem] = 0 - count
+        return result
+
+    def __or__(self, other):
+        '''Union is the maximum of value in either of the input counters.
+
+        >>> Counter('abbb') | Counter('bcc')
+        Counter({'b': 3, 'c': 2, 'a': 1})
+
+        '''
+        if not isinstance(other, Counter):
+            return NotImplemented
+        result = Counter()
+        for elem, count in self.items():
+            other_count = other[elem]
+            newcount = other_count if count < other_count else count
+            if newcount > 0:
+                result[elem] = newcount
+        for elem, count in other.items():
+            if elem not in self and count > 0:
+                result[elem] = count
+        return result
+
+    def __and__(self, other):
+        ''' Intersection is the minimum of corresponding counts.
+
+        >>> Counter('abbb') & Counter('bcc')
+        Counter({'b': 1})
+
+        '''
+        if not isinstance(other, Counter):
+            return NotImplemented
+        result = Counter()
+        for elem, count in self.items():
+            other_count = other[elem]
+            newcount = count if count < other_count else other_count
+            if newcount > 0:
+                result[elem] = newcount
+        return result
+
+    def __pos__(self):
+        'Adds an empty counter, effectively stripping negative and zero counts'
+        result = Counter()
+        for elem, count in self.items():
+            if count > 0:
+                result[elem] = count
+        return result
+
+    def __neg__(self):
+        '''Subtracts from an empty counter.  Strips positive and zero counts,
+        and flips the sign on negative counts.
+
+        '''
+        result = Counter()
+        for elem, count in self.items():
+            if count < 0:
+                result[elem] = 0 - count
+        return result
+
+    def _keep_positive(self):
+        '''Internal method to strip elements with a negative or zero count'''
+        nonpositive = [elem for elem, count in self.items() if not count > 0]
+        for elem in nonpositive:
+            del self[elem]
+        return self
+
+    def __iadd__(self, other):
+        '''Inplace add from another counter, keeping only positive counts.
+
+        >>> c = Counter('abbb')
+        >>> c += Counter('bcc')
+        >>> c
+        Counter({'b': 4, 'c': 2, 'a': 1})
+
+        '''
+        for elem, count in other.items():
+            self[elem] += count
+        return self._keep_positive()
+
+    def __isub__(self, other):
+        '''Inplace subtract counter, but keep only results with positive counts.
+
+        >>> c = Counter('abbbc')
+        >>> c -= Counter('bccd')
+        >>> c
+        Counter({'b': 2, 'a': 1})
+
+        '''
+        for elem, count in other.items():
+            self[elem] -= count
+        return self._keep_positive()
+
+    def __ior__(self, other):
+        '''Inplace union is the maximum of value from either counter.
+
+        >>> c = Counter('abbb')
+        >>> c |= Counter('bcc')
+        >>> c
+        Counter({'b': 3, 'c': 2, 'a': 1})
+
+        '''
+        for elem, other_count in other.items():
+            count = self[elem]
+            if other_count > count:
+                self[elem] = other_count
+        return self._keep_positive()
+
+    def __iand__(self, other):
+        '''Inplace intersection is the minimum of corresponding counts.
+
+        >>> c = Counter('abbb')
+        >>> c &= Counter('bcc')
+        >>> c
+        Counter({'b': 1})
+
+        '''
+        for elem, count in self.items():
+            other_count = other[elem]
+            if other_count < count:
+                self[elem] = other_count
+        return self._keep_positive()
+
+
+########################################################################
+###  ChainMap
+########################################################################
+
+class ChainMap(_collections_abc.MutableMapping):
+    ''' A ChainMap groups multiple dicts (or other mappings) together
+    to create a single, updateable view.
+
+    The underlying mappings are stored in a list.  That list is public and can
+    be accessed or updated using the *maps* attribute.  There is no other
+    state.
+
+    Lookups search the underlying mappings successively until a key is found.
+    In contrast, writes, updates, and deletions only operate on the first
+    mapping.
+
+    '''
+
+    def __init__(self, *maps):
+        '''Initialize a ChainMap by setting *maps* to the given mappings.
+        If no mappings are provided, a single empty dictionary is used.
+
+        '''
+        self.maps = list(maps) or [{}]          # always at least one map
+
+    def __missing__(self, key):
+        raise KeyError(key)
+
+    def __getitem__(self, key):
+        for mapping in self.maps:
+            try:
+                return mapping[key]             # can't use 'key in mapping' with defaultdict
+            except KeyError:
+                pass
+        return self.__missing__(key)            # support subclasses that define __missing__
+
+    def get(self, key, default=None):
+        return self[key] if key in self else default
+
+    def __len__(self):
+        return len(set().union(*self.maps))     # reuses stored hash values if possible
+
+    def __iter__(self):
+        d = {}
+        for mapping in map(dict.fromkeys, reversed(self.maps)):
+            d |= mapping                        # reuses stored hash values if possible
+        return iter(d)
+
+    def __contains__(self, key):
+        return any(key in m for m in self.maps)
+
+    def __bool__(self):
+        return any(self.maps)
+
+    @_recursive_repr()
+    def __repr__(self):
+        return f'{self.__class__.__name__}({", ".join(map(repr, self.maps))})'
+
+    @classmethod
+    def fromkeys(cls, iterable, *args):
+        'Create a ChainMap with a single dict created from the iterable.'
+        return cls(dict.fromkeys(iterable, *args))
+
+    def copy(self):
+        'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]'
+        return self.__class__(self.maps[0].copy(), *self.maps[1:])
+
+    __copy__ = copy
+
+    def new_child(self, m=None, **kwargs):      # like Django's Context.push()
+        '''New ChainMap with a new map followed by all previous maps.
+        If no map is provided, an empty dict is used.
+        Keyword arguments update the map or new empty dict.
+        '''
+        if m is None:
+            m = kwargs
+        elif kwargs:
+            m.update(kwargs)
+        return self.__class__(m, *self.maps)
+
+    @property
+    def parents(self):                          # like Django's Context.pop()
+        'New ChainMap from maps[1:].'
+        return self.__class__(*self.maps[1:])
+
+    def __setitem__(self, key, value):
+        self.maps[0][key] = value
+
+    def __delitem__(self, key):
+        try:
+            del self.maps[0][key]
+        except KeyError:
+            raise KeyError(f'Key not found in the first mapping: {key!r}')
+
+    def popitem(self):
+        'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.'
+        try:
+            return self.maps[0].popitem()
+        except KeyError:
+            raise KeyError('No keys found in the first mapping.')
+
+    def pop(self, key, *args):
+        'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].'
+        try:
+            return self.maps[0].pop(key, *args)
+        except KeyError:
+            raise KeyError(f'Key not found in the first mapping: {key!r}')
+
+    def clear(self):
+        'Clear maps[0], leaving maps[1:] intact.'
+        self.maps[0].clear()
+
+    def __ior__(self, other):
+        self.maps[0].update(other)
+        return self
+
+    def __or__(self, other):
+        if not isinstance(other, _collections_abc.Mapping):
+            return NotImplemented
+        m = self.copy()
+        m.maps[0].update(other)
+        return m
+
+    def __ror__(self, other):
+        if not isinstance(other, _collections_abc.Mapping):
+            return NotImplemented
+        m = dict(other)
+        for child in reversed(self.maps):
+            m.update(child)
+        return self.__class__(m)
+
+
+################################################################################
+### UserDict
+################################################################################
+
+class UserDict(_collections_abc.MutableMapping):
+
+    # Start by filling-out the abstract methods
+    def __init__(self, dict=None, /, **kwargs):
+        self.data = {}
+        if dict is not None:
+            self.update(dict)
+        if kwargs:
+            self.update(kwargs)
+
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, key):
+        if key in self.data:
+            return self.data[key]
+        if hasattr(self.__class__, "__missing__"):
+            return self.__class__.__missing__(self, key)
+        raise KeyError(key)
+
+    def __setitem__(self, key, item):
+        self.data[key] = item
+
+    def __delitem__(self, key):
+        del self.data[key]
+
+    def __iter__(self):
+        return iter(self.data)
+
+    # Modify __contains__ and get() to work like dict
+    # does when __missing__ is present.
+    def __contains__(self, key):
+        return key in self.data
+
+    def get(self, key, default=None):
+        if key in self:
+            return self[key]
+        return default
+
+
+    # Now, add the methods in dicts but not in MutableMapping
+    def __repr__(self):
+        return repr(self.data)
+
+    def __or__(self, other):
+        if isinstance(other, UserDict):
+            return self.__class__(self.data | other.data)
+        if isinstance(other, dict):
+            return self.__class__(self.data | other)
+        return NotImplemented
+
+    def __ror__(self, other):
+        if isinstance(other, UserDict):
+            return self.__class__(other.data | self.data)
+        if isinstance(other, dict):
+            return self.__class__(other | self.data)
+        return NotImplemented
+
+    def __ior__(self, other):
+        if isinstance(other, UserDict):
+            self.data |= other.data
+        else:
+            self.data |= other
+        return self
+
+    def __copy__(self):
+        inst = self.__class__.__new__(self.__class__)
+        inst.__dict__.update(self.__dict__)
+        # Create a copy and avoid triggering descriptors
+        inst.__dict__["data"] = self.__dict__["data"].copy()
+        return inst
+
+    def copy(self):
+        if self.__class__ is UserDict:
+            return UserDict(self.data.copy())
+        import copy
+        data = self.data
+        try:
+            self.data = {}
+            c = copy.copy(self)
+        finally:
+            self.data = data
+        c.update(self)
+        return c
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        d = cls()
+        for key in iterable:
+            d[key] = value
+        return d
+
+
+################################################################################
+### UserList
+################################################################################
+
+class UserList(_collections_abc.MutableSequence):
+    """A more or less complete user-defined wrapper around list objects."""
+
+    def __init__(self, initlist=None):
+        self.data = []
+        if initlist is not None:
+            # XXX should this accept an arbitrary sequence?
+            if type(initlist) == type(self.data):
+                self.data[:] = initlist
+            elif isinstance(initlist, UserList):
+                self.data[:] = initlist.data[:]
+            else:
+                self.data = list(initlist)
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def __lt__(self, other):
+        return self.data < self.__cast(other)
+
+    def __le__(self, other):
+        return self.data <= self.__cast(other)
+
+    def __eq__(self, other):
+        return self.data == self.__cast(other)
+
+    def __gt__(self, other):
+        return self.data > self.__cast(other)
+
+    def __ge__(self, other):
+        return self.data >= self.__cast(other)
+
+    def __cast(self, other):
+        return other.data if isinstance(other, UserList) else other
+
+    def __contains__(self, item):
+        return item in self.data
+
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, i):
+        if isinstance(i, slice):
+            return self.__class__(self.data[i])
+        else:
+            return self.data[i]
+
+    def __setitem__(self, i, item):
+        self.data[i] = item
+
+    def __delitem__(self, i):
+        del self.data[i]
+
+    def __add__(self, other):
+        if isinstance(other, UserList):
+            return self.__class__(self.data + other.data)
+        elif isinstance(other, type(self.data)):
+            return self.__class__(self.data + other)
+        return self.__class__(self.data + list(other))
+
+    def __radd__(self, other):
+        if isinstance(other, UserList):
+            return self.__class__(other.data + self.data)
+        elif isinstance(other, type(self.data)):
+            return self.__class__(other + self.data)
+        return self.__class__(list(other) + self.data)
+
+    def __iadd__(self, other):
+        if isinstance(other, UserList):
+            self.data += other.data
+        elif isinstance(other, type(self.data)):
+            self.data += other
+        else:
+            self.data += list(other)
+        return self
+
+    def __mul__(self, n):
+        return self.__class__(self.data * n)
+
+    __rmul__ = __mul__
+
+    def __imul__(self, n):
+        self.data *= n
+        return self
+
+    def __copy__(self):
+        inst = self.__class__.__new__(self.__class__)
+        inst.__dict__.update(self.__dict__)
+        # Create a copy and avoid triggering descriptors
+        inst.__dict__["data"] = self.__dict__["data"][:]
+        return inst
+
+    def append(self, item):
+        self.data.append(item)
+
+    def insert(self, i, item):
+        self.data.insert(i, item)
+
+    def pop(self, i=-1):
+        return self.data.pop(i)
+
+    def remove(self, item):
+        self.data.remove(item)
+
+    def clear(self):
+        self.data.clear()
+
+    def copy(self):
+        return self.__class__(self)
+
+    def count(self, item):
+        return self.data.count(item)
+
+    def index(self, item, *args):
+        return self.data.index(item, *args)
+
+    def reverse(self):
+        self.data.reverse()
+
+    def sort(self, /, *args, **kwds):
+        self.data.sort(*args, **kwds)
+
+    def extend(self, other):
+        if isinstance(other, UserList):
+            self.data.extend(other.data)
+        else:
+            self.data.extend(other)
+
+
+################################################################################
+### UserString
+################################################################################
+
+class UserString(_collections_abc.Sequence):
+
+    def __init__(self, seq):
+        if isinstance(seq, str):
+            self.data = seq
+        elif isinstance(seq, UserString):
+            self.data = seq.data[:]
+        else:
+            self.data = str(seq)
+
+    def __str__(self):
+        return str(self.data)
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def __int__(self):
+        return int(self.data)
+
+    def __float__(self):
+        return float(self.data)
+
+    def __complex__(self):
+        return complex(self.data)
+
+    def __hash__(self):
+        return hash(self.data)
+
+    def __getnewargs__(self):
+        return (self.data[:],)
+
+    def __eq__(self, string):
+        if isinstance(string, UserString):
+            return self.data == string.data
+        return self.data == string
+
+    def __lt__(self, string):
+        if isinstance(string, UserString):
+            return self.data < string.data
+        return self.data < string
+
+    def __le__(self, string):
+        if isinstance(string, UserString):
+            return self.data <= string.data
+        return self.data <= string
+
+    def __gt__(self, string):
+        if isinstance(string, UserString):
+            return self.data > string.data
+        return self.data > string
+
+    def __ge__(self, string):
+        if isinstance(string, UserString):
+            return self.data >= string.data
+        return self.data >= string
+
+    def __contains__(self, char):
+        if isinstance(char, UserString):
+            char = char.data
+        return char in self.data
+
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, index):
+        return self.__class__(self.data[index])
+
+    def __add__(self, other):
+        if isinstance(other, UserString):
+            return self.__class__(self.data + other.data)
+        elif isinstance(other, str):
+            return self.__class__(self.data + other)
+        return self.__class__(self.data + str(other))
+
+    def __radd__(self, other):
+        if isinstance(other, str):
+            return self.__class__(other + self.data)
+        return self.__class__(str(other) + self.data)
+
+    def __mul__(self, n):
+        return self.__class__(self.data * n)
+
+    __rmul__ = __mul__
+
+    def __mod__(self, args):
+        return self.__class__(self.data % args)
+
+    def __rmod__(self, template):
+        return self.__class__(str(template) % self)
+
+    # the following methods are defined in alphabetical order:
+    def capitalize(self):
+        return self.__class__(self.data.capitalize())
+
+    def casefold(self):
+        return self.__class__(self.data.casefold())
+
+    def center(self, width, *args):
+        return self.__class__(self.data.center(width, *args))
+
+    def count(self, sub, start=0, end=_sys.maxsize):
+        if isinstance(sub, UserString):
+            sub = sub.data
+        return self.data.count(sub, start, end)
+
+    def removeprefix(self, prefix, /):
+        if isinstance(prefix, UserString):
+            prefix = prefix.data
+        return self.__class__(self.data.removeprefix(prefix))
+
+    def removesuffix(self, suffix, /):
+        if isinstance(suffix, UserString):
+            suffix = suffix.data
+        return self.__class__(self.data.removesuffix(suffix))
+
+    def encode(self, encoding='utf-8', errors='strict'):
+        encoding = 'utf-8' if encoding is None else encoding
+        errors = 'strict' if errors is None else errors
+        return self.data.encode(encoding, errors)
+
+    def endswith(self, suffix, start=0, end=_sys.maxsize):
+        return self.data.endswith(suffix, start, end)
+
+    def expandtabs(self, tabsize=8):
+        return self.__class__(self.data.expandtabs(tabsize))
+
+    def find(self, sub, start=0, end=_sys.maxsize):
+        if isinstance(sub, UserString):
+            sub = sub.data
+        return self.data.find(sub, start, end)
+
+    def format(self, /, *args, **kwds):
+        return self.data.format(*args, **kwds)
+
+    def format_map(self, mapping):
+        return self.data.format_map(mapping)
+
+    def index(self, sub, start=0, end=_sys.maxsize):
+        return self.data.index(sub, start, end)
+
+    def isalpha(self):
+        return self.data.isalpha()
+
+    def isalnum(self):
+        return self.data.isalnum()
+
+    def isascii(self):
+        return self.data.isascii()
+
+    def isdecimal(self):
+        return self.data.isdecimal()
+
+    def isdigit(self):
+        return self.data.isdigit()
+
+    def isidentifier(self):
+        return self.data.isidentifier()
+
+    def islower(self):
+        return self.data.islower()
+
+    def isnumeric(self):
+        return self.data.isnumeric()
+
+    def isprintable(self):
+        return self.data.isprintable()
+
+    def isspace(self):
+        return self.data.isspace()
+
+    def istitle(self):
+        return self.data.istitle()
+
+    def isupper(self):
+        return self.data.isupper()
+
+    def join(self, seq):
+        return self.data.join(seq)
+
+    def ljust(self, width, *args):
+        return self.__class__(self.data.ljust(width, *args))
+
+    def lower(self):
+        return self.__class__(self.data.lower())
+
+    def lstrip(self, chars=None):
+        return self.__class__(self.data.lstrip(chars))
+
+    maketrans = str.maketrans
+
+    def partition(self, sep):
+        return self.data.partition(sep)
+
+    def replace(self, old, new, maxsplit=-1):
+        if isinstance(old, UserString):
+            old = old.data
+        if isinstance(new, UserString):
+            new = new.data
+        return self.__class__(self.data.replace(old, new, maxsplit))
+
+    def rfind(self, sub, start=0, end=_sys.maxsize):
+        if isinstance(sub, UserString):
+            sub = sub.data
+        return self.data.rfind(sub, start, end)
+
+    def rindex(self, sub, start=0, end=_sys.maxsize):
+        return self.data.rindex(sub, start, end)
+
+    def rjust(self, width, *args):
+        return self.__class__(self.data.rjust(width, *args))
+
+    def rpartition(self, sep):
+        return self.data.rpartition(sep)
+
+    def rstrip(self, chars=None):
+        return self.__class__(self.data.rstrip(chars))
+
+    def split(self, sep=None, maxsplit=-1):
+        return self.data.split(sep, maxsplit)
+
+    def rsplit(self, sep=None, maxsplit=-1):
+        return self.data.rsplit(sep, maxsplit)
+
+    def splitlines(self, keepends=False):
+        return self.data.splitlines(keepends)
+
+    def startswith(self, prefix, start=0, end=_sys.maxsize):
+        return self.data.startswith(prefix, start, end)
+
+    def strip(self, chars=None):
+        return self.__class__(self.data.strip(chars))
+
+    def swapcase(self):
+        return self.__class__(self.data.swapcase())
+
+    def title(self):
+        return self.__class__(self.data.title())
+
+    def translate(self, *args):
+        return self.__class__(self.data.translate(*args))
+
+    def upper(self):
+        return self.__class__(self.data.upper())
+
+    def zfill(self, width):
+        return self.__class__(self.data.zfill(width))
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html new file mode 100644 index 00000000..74423dbf --- /dev/null +++ b/docs/_build/html/_modules/index.html @@ -0,0 +1,322 @@ + + + + + + + + Overview: module code - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+ +
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ops/pebble.html b/docs/_build/html/_modules/ops/pebble.html new file mode 100644 index 00000000..0a031da8 --- /dev/null +++ b/docs/_build/html/_modules/ops/pebble.html @@ -0,0 +1,3671 @@ + + + + + + + + ops.pebble - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for ops.pebble

+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Client for the Pebble API (HTTP over Unix socket).
+
+For a command-line interface for local testing, see test/pebble_cli.py.
+"""
+
+import binascii
+import builtins
+import copy
+import dataclasses
+import datetime
+import email.message
+import email.parser
+import enum
+import http.client
+import io
+import json
+import logging
+import os
+import select
+import shutil
+import signal
+import socket
+import sys
+import tempfile
+import threading
+import time
+import typing
+import urllib.error
+import urllib.parse
+import urllib.request
+import warnings
+from typing import (
+    IO,
+    TYPE_CHECKING,
+    Any,
+    AnyStr,
+    BinaryIO,
+    Callable,
+    Dict,
+    Generator,
+    Generic,
+    Iterable,
+    List,
+    Literal,
+    Optional,
+    Protocol,
+    Sequence,
+    TextIO,
+    Tuple,
+    TypedDict,
+    Union,
+)
+
+import websocket  # type: ignore
+
+from ops._private import timeconv, yaml
+
+# Public as these are used in the Container.add_layer signature
+ServiceDict = typing.TypedDict(
+    'ServiceDict',
+    {
+        'summary': str,
+        'description': str,
+        'startup': str,
+        'override': str,
+        'command': str,
+        'after': Sequence[str],
+        'before': Sequence[str],
+        'requires': Sequence[str],
+        'environment': Dict[str, str],
+        'user': str,
+        'user-id': Optional[int],
+        'group': str,
+        'group-id': Optional[int],
+        'working-dir': str,
+        'on-success': str,
+        'on-failure': str,
+        'on-check-failure': Dict[str, Any],
+        'backoff-delay': str,
+        'backoff-factor': Optional[int],
+        'backoff-limit': str,
+        'kill-delay': Optional[str],
+    },
+    total=False,
+)
+
+HttpDict = typing.TypedDict('HttpDict', {'url': str, 'headers': Dict[str, str]}, total=False)
+TcpDict = typing.TypedDict('TcpDict', {'port': int, 'host': str}, total=False)
+ExecDict = typing.TypedDict(
+    'ExecDict',
+    {
+        'command': str,
+        # see JujuVersion.supports_exec_service_context
+        'service-context': str,
+        'environment': Dict[str, str],
+        'user-id': Optional[int],
+        'user': str,
+        'group-id': Optional[int],
+        'group': str,
+        'working-dir': str,
+    },
+    total=False,
+)
+
+CheckDict = typing.TypedDict(
+    'CheckDict',
+    {
+        'override': str,
+        'level': Union['CheckLevel', str],
+        'period': Optional[str],
+        'timeout': Optional[str],
+        'http': Optional[HttpDict],
+        'tcp': Optional[TcpDict],
+        'exec': Optional[ExecDict],
+        'threshold': Optional[int],
+    },
+    total=False,
+)
+
+# In Python 3.11+ 'services' and 'labels' should be NotRequired, and total=True.
+LogTargetDict = typing.TypedDict(
+    'LogTargetDict',
+    {
+        'override': Union[Literal['merge'], Literal['replace']],
+        'type': Literal['loki'],
+        'location': str,
+        'services': List[str],
+        'labels': Dict[str, str],
+    },
+    total=False,
+)
+
+LayerDict = typing.TypedDict(
+    'LayerDict',
+    {
+        'summary': str,
+        'description': str,
+        'services': Dict[str, ServiceDict],
+        'checks': Dict[str, CheckDict],
+        'log-targets': Dict[str, LogTargetDict],
+    },
+    total=False,
+)
+
+PlanDict = typing.TypedDict(
+    'PlanDict',
+    {
+        'services': Dict[str, ServiceDict],
+        'checks': Dict[str, CheckDict],
+        'log-targets': Dict[str, LogTargetDict],
+    },
+    total=False,
+)
+
+_AuthDict = TypedDict(
+    '_AuthDict',
+    {
+        'permissions': Optional[str],
+        'user-id': Optional[int],
+        'user': Optional[str],
+        'group-id': Optional[int],
+        'group': Optional[str],
+        'path': Optional[str],
+        'make-dirs': Optional[bool],
+        'make-parents': Optional[bool],
+    },
+    total=False,
+)
+
+_ServiceInfoDict = TypedDict(
+    '_ServiceInfoDict',
+    {'startup': Union['ServiceStartup', str], 'current': Union['ServiceStatus', str], 'name': str},
+)
+
+# Callback types for _MultiParser header and body handlers
+
+
+class _BodyHandler(Protocol):
+    def __call__(self, data: bytes, done: bool = False) -> None: ...
+
+
+_HeaderHandler = Callable[[bytes], None]
+
+# tempfile.NamedTemporaryFile has an odd interface because of that
+# 'name' attribute, so we need to make a Protocol for it.
+
+
+class _Tempfile(Protocol):
+    name = ''
+
+    def write(self, data: bytes): ...
+
+    def close(self): ...
+
+
+class _FileLikeIO(Protocol[typing.AnyStr]):  # That also covers TextIO and BytesIO
+    def read(self, __n: int = ...) -> typing.AnyStr: ...  # for BinaryIO
+
+    def write(self, __s: typing.AnyStr) -> int: ...
+
+    def __enter__(self) -> typing.IO[typing.AnyStr]: ...
+
+
+_AnyStrFileLikeIO = Union[_FileLikeIO[bytes], _FileLikeIO[str]]
+_TextOrBinaryIO = Union[TextIO, BinaryIO]
+_IOSource = Union[str, bytes, _AnyStrFileLikeIO]
+
+_SystemInfoDict = TypedDict('_SystemInfoDict', {'version': str})
+
+if TYPE_CHECKING:
+    from typing_extensions import NotRequired
+
+    _CheckInfoDict = TypedDict(
+        '_CheckInfoDict',
+        {
+            'name': str,
+            'level': NotRequired[Optional[Union['CheckLevel', str]]],
+            'status': Union['CheckStatus', str],
+            'failures': NotRequired[int],
+            'threshold': int,
+            'change-id': NotRequired[str],
+        },
+    )
+    _FileInfoDict = TypedDict(
+        '_FileInfoDict',
+        {
+            'path': str,
+            'name': str,
+            'size': NotRequired[Optional[int]],
+            'permissions': str,
+            'last-modified': str,
+            'user-id': NotRequired[Optional[int]],
+            'user': NotRequired[Optional[str]],
+            'group-id': NotRequired[Optional[int]],
+            'group': NotRequired[Optional[str]],
+            'type': Union['FileType', str],
+        },
+    )
+
+    _ProgressDict = TypedDict('_ProgressDict', {'label': str, 'done': int, 'total': int})
+    _TaskDict = TypedDict(
+        '_TaskDict',
+        {
+            'id': str,
+            'kind': str,
+            'summary': str,
+            'status': str,
+            'log': NotRequired[Optional[List[str]]],
+            'progress': _ProgressDict,
+            'spawn-time': str,
+            'ready-time': NotRequired[Optional[str]],
+            'data': NotRequired[Optional[Dict[str, Any]]],
+        },
+    )
+    _ChangeDict = TypedDict(
+        '_ChangeDict',
+        {
+            'id': str,
+            'kind': str,
+            'summary': str,
+            'status': str,
+            'ready': bool,
+            'spawn-time': str,
+            'tasks': NotRequired[Optional[List[_TaskDict]]],
+            'err': NotRequired[Optional[str]],
+            'ready-time': NotRequired[Optional[str]],
+            'data': NotRequired[Optional[Dict[str, Any]]],
+        },
+    )
+
+    _Error = TypedDict('_Error', {'kind': str, 'message': str})
+    _Item = TypedDict('_Item', {'path': str, 'error': NotRequired[_Error]})
+    _FilesResponse = TypedDict('_FilesResponse', {'result': List[_Item]})
+
+    _WarningDict = TypedDict(
+        '_WarningDict',
+        {
+            'message': str,
+            'first-added': str,
+            'last-added': str,
+            'last-shown': NotRequired[Optional[str]],
+            'expire-after': str,
+            'repeat-after': str,
+        },
+    )
+
+    _NoticeDict = TypedDict(
+        '_NoticeDict',
+        {
+            'id': str,
+            'user-id': NotRequired[Optional[int]],
+            'type': str,
+            'key': str,
+            'first-occurred': str,
+            'last-occurred': str,
+            'last-repeated': str,
+            'occurrences': int,
+            'last-data': NotRequired[Optional[Dict[str, str]]],
+            'repeat-after': NotRequired[str],
+            'expire-after': NotRequired[str],
+        },
+    )
+
+
+class _WebSocket(Protocol):
+    def connect(self, url: str, socket: socket.socket): ...
+
+    def shutdown(self): ...
+
+    def send(self, payload: str): ...
+
+    def send_binary(self, payload: bytes): ...
+
+    def recv(self) -> Union[str, bytes]: ...
+
+
+logger = logging.getLogger(__name__)
+
+
+class _NotProvidedFlag:
+    pass
+
+
+_not_provided = _NotProvidedFlag()
+
+
+class _UnixSocketConnection(http.client.HTTPConnection):
+    """Implementation of HTTPConnection that connects to a named Unix socket."""
+
+    def __init__(
+        self, host: str, socket_path: str, timeout: Union[_NotProvidedFlag, float] = _not_provided
+    ):
+        if timeout is _not_provided:
+            super().__init__(host)
+        else:
+            assert isinstance(timeout, (int, float)), timeout  # type guard for pyright
+            super().__init__(host, timeout=timeout)
+        self.socket_path = socket_path
+
+    def connect(self):
+        """Override connect to use Unix socket (instead of TCP socket)."""
+        if not hasattr(socket, 'AF_UNIX'):
+            raise NotImplementedError(f'Unix sockets not supported on {sys.platform}')
+        self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+        self.sock.connect(self.socket_path)
+        if self.timeout is not _not_provided:
+            self.sock.settimeout(self.timeout)
+
+
+class _UnixSocketHandler(urllib.request.AbstractHTTPHandler):
+    """Implementation of HTTPHandler that uses a named Unix socket."""
+
+    def __init__(self, socket_path: str):
+        super().__init__()
+        self.socket_path = socket_path
+
+    def http_open(self, req: urllib.request.Request):
+        """Override http_open to use a Unix socket connection (instead of TCP)."""
+        return self.do_open(
+            _UnixSocketConnection,  # type:ignore
+            req,
+            socket_path=self.socket_path,
+        )
+
+
+def _format_timeout(timeout: float) -> str:
+    """Format timeout for use in the Pebble API.
+
+    The format is in seconds with a millisecond resolution and an 's' suffix,
+    as accepted by the Pebble API (which uses Go's time.ParseDuration).
+    """
+    return f'{timeout:.3f}s'
+
+
+def _start_thread(target: Callable[..., Any], *args: Any, **kwargs: Any) -> threading.Thread:
+    """Helper to simplify starting a thread."""
+    thread = threading.Thread(target=target, args=args, kwargs=kwargs)
+    thread.start()
+    return thread
+
+
+class Error(Exception):
+    """Base class of most errors raised by the Pebble client."""
+
+    def __repr__(self):
+        return f'<{type(self).__module__}.{type(self).__name__} {self.args}>'
+
+
+class TimeoutError(TimeoutError, Error):
+    """Raised when a polling timeout occurs."""
+
+
+class ConnectionError(Error):
+    """Raised when the Pebble client can't connect to the socket."""
+
+
+class ProtocolError(Error):
+    """Raised when there's a higher-level protocol error talking to Pebble."""
+
+
+class PathError(Error):
+    """Raised when there's an error with a specific path."""
+
+    kind: typing.Literal['not-found', 'permission-denied', 'generic-file-error']
+    """Short string representing the kind of error."""
+
+    message: str
+    """Human-readable error message from the API."""
+
+    def __init__(self, kind: str, message: str):
+        """This shouldn't be instantiated directly."""
+        self.kind = kind  # type: ignore
+        self.message = message
+
+    def __str__(self):
+        return f'{self.kind} - {self.message}'
+
+    def __repr__(self):
+        return f'PathError({self.kind!r}, {self.message!r})'
+
+
+class APIError(Error):
+    """Raised when an HTTP API error occurs talking to the Pebble server."""
+
+    body: Dict[str, Any]
+    """Body of the HTTP response, parsed as JSON."""
+
+    code: int
+    """HTTP status code."""
+
+    status: str
+    """HTTP status string (reason)."""
+
+    message: str
+    """Human-readable error message from the API."""
+
+    def __init__(self, body: Dict[str, Any], code: int, status: str, message: str):
+        """This shouldn't be instantiated directly."""
+        super().__init__(message)  # Makes str(e) return message
+        self.body = body
+        self.code = code
+        self.status = status
+        self.message = message
+
+    def __repr__(self):
+        return f'APIError({self.body!r}, {self.code!r}, {self.status!r}, {self.message!r})'
+
+
+class ChangeError(Error):
+    """Raised by actions when a change is ready but has an error."""
+
+    err: str
+    """Human-readable error message."""
+
+    change: 'Change'
+    """Change object associated with this error."""
+
+    def __init__(self, err: str, change: 'Change'):
+        """This shouldn't be instantiated directly."""
+        self.err = err
+        self.change = change
+
+    def __str__(self):
+        parts = [self.err]
+
+        # Append any task logs to the error message
+        for i, task in enumerate(self.change.tasks):
+            if not task.log:
+                continue
+            parts.append(f'\n----- Logs from task {i} -----\n')
+            parts.append('\n'.join(task.log))
+
+        if len(parts) > 1:
+            parts.append('\n-----')
+
+        return ''.join(parts)
+
+    def __repr__(self):
+        return f'ChangeError({self.err!r}, {self.change!r})'
+
+
+class ExecError(Error, Generic[AnyStr]):
+    """Raised when a :meth:`Client.exec` command returns a non-zero exit code."""
+
+    STR_MAX_OUTPUT = 1024
+    """Maximum number of characters that stdout/stderr are truncated to in ``__str__``."""
+
+    command: List[str]
+    """Command line of command being executed."""
+
+    exit_code: int
+    """The process's exit code. Because this is an error, this will always be non-zero."""
+
+    stdout: Optional[AnyStr]
+    """Standard output from the process.
+
+    If :meth:`ExecProcess.wait_output` was being called, this is the captured
+    stdout as a str (or bytes if encoding was None). If :meth:`ExecProcess.wait`
+    was being called, this is None.
+    """
+
+    stderr: Optional[AnyStr]
+    """Standard error from the process.
+
+    If :meth:`ExecProcess.wait_output` was being called and ``combine_stderr``
+    was False, this is the captured stderr as a str (or bytes if encoding was
+    None). If :meth:`ExecProcess.wait` was being called or ``combine_stderr``
+    was True, this is None.
+    """
+
+    def __init__(
+        self,
+        command: List[str],
+        exit_code: int,
+        stdout: Optional[AnyStr],
+        stderr: Optional[AnyStr],
+    ):
+        self.command = command
+        self.exit_code = exit_code
+        self.stdout = stdout
+        self.stderr = stderr
+
+    def __str__(self):
+        message = f'non-zero exit code {self.exit_code} executing {self.command!r}'
+
+        for name, out in [('stdout', self.stdout), ('stderr', self.stderr)]:
+            if out is None:
+                continue
+            truncated = ' [truncated]' if len(out) > self.STR_MAX_OUTPUT else ''
+            out = out[: self.STR_MAX_OUTPUT]
+            message = f'{message}, {name}={out!r}{truncated}'
+
+        return message
+
+
+class WarningState(enum.Enum):
+    """Enum of states for get_warnings() select parameter."""
+
+    ALL = 'all'
+    PENDING = 'pending'
+
+
+class ChangeState(enum.Enum):
+    """Enum of states for get_changes() select parameter."""
+
+    ALL = 'all'
+    IN_PROGRESS = 'in-progress'
+    READY = 'ready'
+
+
+class SystemInfo:
+    """System information object."""
+
+    def __init__(self, version: str):
+        self.version = version
+
+    @classmethod
+    def from_dict(cls, d: '_SystemInfoDict') -> 'SystemInfo':
+        """Create new SystemInfo object from dict parsed from JSON."""
+        return cls(version=d['version'])
+
+    def __repr__(self):
+        return f'SystemInfo(version={self.version!r})'
+
+
+class Warning:
+    """Warning object."""
+
+    def __init__(
+        self,
+        message: str,
+        first_added: datetime.datetime,
+        last_added: datetime.datetime,
+        last_shown: Optional[datetime.datetime],
+        expire_after: str,
+        repeat_after: str,
+    ):
+        self.message = message
+        self.first_added = first_added
+        self.last_added = last_added
+        self.last_shown = last_shown
+        self.expire_after = expire_after
+        self.repeat_after = repeat_after
+
+    @classmethod
+    def from_dict(cls, d: '_WarningDict') -> 'Warning':
+        """Create new Warning object from dict parsed from JSON."""
+        return cls(
+            message=d['message'],
+            first_added=timeconv.parse_rfc3339(d['first-added']),
+            last_added=timeconv.parse_rfc3339(d['last-added']),
+            last_shown=(
+                timeconv.parse_rfc3339(d['last-shown'])  # type: ignore
+                if d.get('last-shown')
+                else None
+            ),
+            expire_after=d['expire-after'],
+            repeat_after=d['repeat-after'],
+        )
+
+    def __repr__(self):
+        return (
+            'Warning('
+            f'message={self.message!r}, '
+            f'first_added={self.first_added!r}, '
+            f'last_added={self.last_added!r}, '
+            f'last_shown={self.last_shown!r}, '
+            f'expire_after={self.expire_after!r}, '
+            f'repeat_after={self.repeat_after!r})'
+        )
+
+
+class TaskProgress:
+    """Task progress object."""
+
+    def __init__(
+        self,
+        label: str,
+        done: int,
+        total: int,
+    ):
+        self.label = label
+        self.done = done
+        self.total = total
+
+    @classmethod
+    def from_dict(cls, d: '_ProgressDict') -> 'TaskProgress':
+        """Create new TaskProgress object from dict parsed from JSON."""
+        return cls(
+            label=d['label'],
+            done=d['done'],
+            total=d['total'],
+        )
+
+    def __repr__(self):
+        return (
+            'TaskProgress('
+            f'label={self.label!r}, '
+            f'done={self.done!r}, '
+            f'total={self.total!r})'
+        )
+
+
+class TaskID(str):
+    """Task ID (a more strongly-typed string)."""
+
+    def __repr__(self):
+        return f'TaskID({str(self)!r})'
+
+
+class Task:
+    """Task object."""
+
+    def __init__(
+        self,
+        id: TaskID,
+        kind: str,
+        summary: str,
+        status: str,
+        log: List[str],
+        progress: TaskProgress,
+        spawn_time: datetime.datetime,
+        ready_time: Optional[datetime.datetime],
+        data: Optional[Dict[str, Any]] = None,
+    ):
+        self.id = id
+        self.kind = kind
+        self.summary = summary
+        self.status = status
+        self.log = log
+        self.progress = progress
+        self.spawn_time = spawn_time
+        self.ready_time = ready_time
+        self.data = data or {}
+
+    @classmethod
+    def from_dict(cls, d: '_TaskDict') -> 'Task':
+        """Create new Task object from dict parsed from JSON."""
+        return cls(
+            id=TaskID(d['id']),
+            kind=d['kind'],
+            summary=d['summary'],
+            status=d['status'],
+            log=d.get('log') or [],
+            progress=TaskProgress.from_dict(d['progress']),
+            spawn_time=timeconv.parse_rfc3339(d['spawn-time']),
+            ready_time=(
+                timeconv.parse_rfc3339(d['ready-time'])  # type: ignore
+                if d.get('ready-time')
+                else None
+            ),
+            data=d.get('data') or {},
+        )
+
+    def __repr__(self):
+        return (
+            'Task('
+            f'id={self.id!r}, '
+            f'kind={self.kind!r}, '
+            f'summary={self.summary!r}, '
+            f'status={self.status!r}, '
+            f'log={self.log!r}, '
+            f'progress={self.progress!r}, '
+            f'spawn_time={self.spawn_time!r}, '
+            f'ready_time={self.ready_time!r}, '
+            f'data={self.data!r})'
+        )
+
+
+class ChangeID(str):
+    """Change ID (a more strongly-typed string)."""
+
+    def __repr__(self):
+        return f'ChangeID({str(self)!r})'
+
+
+class Change:
+    """Change object."""
+
+    def __init__(
+        self,
+        id: ChangeID,
+        kind: str,
+        summary: str,
+        status: str,
+        tasks: List[Task],
+        ready: bool,
+        err: Optional[str],
+        spawn_time: datetime.datetime,
+        ready_time: Optional[datetime.datetime],
+        data: Optional[Dict[str, Any]] = None,
+    ):
+        self.id = id
+        self.kind = kind
+        self.summary = summary
+        self.status = status
+        self.tasks = tasks
+        self.ready = ready
+        self.err = err
+        self.spawn_time = spawn_time
+        self.ready_time = ready_time
+        self.data = data or {}
+
+    @classmethod
+    def from_dict(cls, d: '_ChangeDict') -> 'Change':
+        """Create new Change object from dict parsed from JSON."""
+        return cls(
+            id=ChangeID(d['id']),
+            kind=d['kind'],
+            summary=d['summary'],
+            status=d['status'],
+            tasks=[Task.from_dict(t) for t in d.get('tasks') or []],
+            ready=d['ready'],
+            err=d.get('err'),
+            spawn_time=timeconv.parse_rfc3339(d['spawn-time']),
+            ready_time=(
+                timeconv.parse_rfc3339(d['ready-time'])  # type: ignore
+                if d.get('ready-time')
+                else None
+            ),
+            data=d.get('data') or {},
+        )
+
+    def __repr__(self):
+        return (
+            'Change('
+            f'id={self.id!r}, '
+            f'kind={self.kind!r}, '
+            f'summary={self.summary!r}, '
+            f'status={self.status!r}, '
+            f'tasks={self.tasks!r}, '
+            f'ready={self.ready!r}, '
+            f'err={self.err!r}, '
+            f'spawn_time={self.spawn_time!r}, '
+            f'ready_time={self.ready_time!r}, '
+            f'data={self.data!r})'
+        )
+
+
+class Plan:
+    """Represents the effective Pebble configuration.
+
+    A plan is the combined layer configuration. The layer configuration is
+    documented at https://github.com/canonical/pebble/#layer-specification.
+    """
+
+    def __init__(self, raw: Optional[Union[str, 'PlanDict']] = None):
+        if isinstance(raw, str):  # noqa: SIM108
+            d = yaml.safe_load(raw) or {}  # type: ignore
+        else:
+            d = raw or {}
+        d = typing.cast('PlanDict', d)
+
+        self._raw = raw
+        self._services: Dict[str, Service] = {
+            name: Service(name, service) for name, service in d.get('services', {}).items()
+        }
+        self._checks: Dict[str, Check] = {
+            name: Check(name, check) for name, check in d.get('checks', {}).items()
+        }
+        self._log_targets: Dict[str, LogTarget] = {
+            name: LogTarget(name, target) for name, target in d.get('log-targets', {}).items()
+        }
+
+    @property
+    def services(self) -> Dict[str, 'Service']:
+        """This plan's services mapping (maps service name to Service).
+
+        This property is currently read-only.
+        """
+        return self._services
+
+    @property
+    def checks(self) -> Dict[str, 'Check']:
+        """This plan's checks mapping (maps check name to :class:`Check`).
+
+        This property is currently read-only.
+        """
+        return self._checks
+
+    @property
+    def log_targets(self) -> Dict[str, 'LogTarget']:
+        """This plan's log targets mapping (maps log target name to :class:`LogTarget`).
+
+        This property is currently read-only.
+        """
+        return self._log_targets
+
+    def to_dict(self) -> 'PlanDict':
+        """Convert this plan to its dict representation."""
+        fields = [
+            ('services', {name: service.to_dict() for name, service in self._services.items()}),
+            ('checks', {name: check.to_dict() for name, check in self._checks.items()}),
+            (
+                'log-targets',
+                {name: target.to_dict() for name, target in self._log_targets.items()},
+            ),
+        ]
+        dct = {name: value for name, value in fields if value}
+        return typing.cast('PlanDict', dct)
+
+    def to_yaml(self) -> str:
+        """Return this plan's YAML representation."""
+        return yaml.safe_dump(self.to_dict())
+
+    __str__ = to_yaml
+
+    def __eq__(self, other: Union['PlanDict', 'Plan']) -> bool:
+        if isinstance(other, dict):
+            return self.to_dict() == other
+        elif isinstance(other, Plan):
+            return self.to_dict() == other.to_dict()
+        return NotImplemented
+
+
+class Layer:
+    """Represents a Pebble configuration layer.
+
+    The format of this is documented at
+    https://github.com/canonical/pebble/#layer-specification.
+    """
+
+    #: Summary of the purpose of this layer.
+    summary: str
+    #: Long-form description of this layer.
+    description: str
+    #: Mapping of name to :class:`Service` defined by this layer.
+    services: Dict[str, 'Service']
+    #: Mapping of check to :class:`Check` defined by this layer.
+    checks: Dict[str, 'Check']
+    #: Mapping of target to :class:`LogTarget` defined by this layer.
+    log_targets: Dict[str, 'LogTarget']
+
+    def __init__(self, raw: Optional[Union[str, 'LayerDict']] = None):
+        if isinstance(raw, str):  # noqa: SIM108
+            d = yaml.safe_load(raw) or {}  # type: ignore # (Any 'raw' type)
+        else:
+            d = raw or {}
+        d = typing.cast('LayerDict', d)
+
+        self.summary = d.get('summary', '')
+        self.description = d.get('description', '')
+        self.services = {
+            name: Service(name, service) for name, service in d.get('services', {}).items()
+        }
+        self.checks = {name: Check(name, check) for name, check in d.get('checks', {}).items()}
+        self.log_targets = {
+            name: LogTarget(name, target) for name, target in d.get('log-targets', {}).items()
+        }
+
+    def to_yaml(self) -> str:
+        """Convert this layer to its YAML representation."""
+        return yaml.safe_dump(self.to_dict())
+
+    def to_dict(self) -> 'LayerDict':
+        """Convert this layer to its dict representation."""
+        fields = [
+            ('summary', self.summary),
+            ('description', self.description),
+            ('services', {name: service.to_dict() for name, service in self.services.items()}),
+            ('checks', {name: check.to_dict() for name, check in self.checks.items()}),
+            ('log-targets', {name: target.to_dict() for name, target in self.log_targets.items()}),
+        ]
+        dct = {name: value for name, value in fields if value}
+        return typing.cast('LayerDict', dct)
+
+    def __repr__(self) -> str:
+        return f'Layer({self.to_dict()!r})'
+
+    def __eq__(self, other: Union['LayerDict', 'Layer']) -> bool:
+        """Reports whether this layer configuration is equal to another."""
+        if isinstance(other, dict):
+            return self.to_dict() == other
+        elif isinstance(other, Layer):
+            return self.to_dict() == other.to_dict()
+        else:
+            return NotImplemented
+
+    __str__ = to_yaml
+
+
+class Service:
+    """Represents a service description in a Pebble configuration layer."""
+
+    def __init__(self, name: str, raw: Optional['ServiceDict'] = None):
+        self.name = name
+        dct: ServiceDict = raw or {}
+        self.summary = dct.get('summary', '')
+        self.description = dct.get('description', '')
+        self.startup = dct.get('startup', '')
+        self.override = dct.get('override', '')
+        self.command = dct.get('command', '')
+        self.after = list(dct.get('after', []))
+        self.before = list(dct.get('before', []))
+        self.requires = list(dct.get('requires', []))
+        self.environment = dict(dct.get('environment', {}))
+        self.user = dct.get('user', '')
+        self.user_id = dct.get('user-id')
+        self.group = dct.get('group', '')
+        self.group_id = dct.get('group-id')
+        self.working_dir = dct.get('working-dir', '')
+        self.on_success = dct.get('on-success', '')
+        self.on_failure = dct.get('on-failure', '')
+        self.on_check_failure = dict(dct.get('on-check-failure', {}))
+        self.backoff_delay = dct.get('backoff-delay', '')
+        self.backoff_factor = dct.get('backoff-factor')
+        self.backoff_limit = dct.get('backoff-limit', '')
+        self.kill_delay = dct.get('kill-delay', '')
+
+    def to_dict(self) -> 'ServiceDict':
+        """Convert this service object to its dict representation."""
+        fields = [
+            ('summary', self.summary),
+            ('description', self.description),
+            ('startup', self.startup),
+            ('override', self.override),
+            ('command', self.command),
+            ('after', self.after),
+            ('before', self.before),
+            ('requires', self.requires),
+            ('environment', self.environment),
+            ('user', self.user),
+            ('user-id', self.user_id),
+            ('group', self.group),
+            ('group-id', self.group_id),
+            ('working-dir', self.working_dir),
+            ('on-success', self.on_success),
+            ('on-failure', self.on_failure),
+            ('on-check-failure', self.on_check_failure),
+            ('backoff-delay', self.backoff_delay),
+            ('backoff-factor', self.backoff_factor),
+            ('backoff-limit', self.backoff_limit),
+            ('kill-delay', self.kill_delay),
+        ]
+        dct = {name: value for name, value in fields if value}
+        return typing.cast('ServiceDict', dct)
+
+    def _merge(self, other: 'Service'):
+        """Merges this service object with another service definition.
+
+        For attributes present in both objects, the passed in service
+        attributes take precedence.
+        """
+        for name, value in other.__dict__.items():
+            if not value or name == 'name':
+                continue
+            if name in ['after', 'before', 'requires']:
+                getattr(self, name).extend(value)
+            elif name in ['environment', 'on_check_failure']:
+                getattr(self, name).update(value)
+            else:
+                setattr(self, name, value)
+
+    def __repr__(self) -> str:
+        return f'Service({self.to_dict()!r})'
+
+    def __eq__(self, other: Union['ServiceDict', 'Service']) -> bool:
+        """Reports whether this service configuration is equal to another."""
+        if isinstance(other, dict):
+            return self.to_dict() == other
+        elif isinstance(other, Service):
+            return self.to_dict() == other.to_dict()
+        else:
+            return NotImplemented
+
+
+class ServiceStartup(enum.Enum):
+    """Enum of service startup options."""
+
+    ENABLED = 'enabled'
+    DISABLED = 'disabled'
+
+
+class ServiceStatus(enum.Enum):
+    """Enum of service statuses."""
+
+    ACTIVE = 'active'
+    INACTIVE = 'inactive'
+    ERROR = 'error'
+
+
+class ServiceInfo:
+    """Service status information."""
+
+    def __init__(
+        self,
+        name: str,
+        startup: Union[ServiceStartup, str],
+        current: Union[ServiceStatus, str],
+    ):
+        self.name = name
+        self.startup = startup
+        self.current = current
+
+    def is_running(self) -> bool:
+        """Return True if this service is running (in the active state)."""
+        return self.current == ServiceStatus.ACTIVE
+
+    @classmethod
+    def from_dict(cls, d: '_ServiceInfoDict') -> 'ServiceInfo':
+        """Create new ServiceInfo object from dict parsed from JSON."""
+        try:
+            startup = ServiceStartup(d['startup'])
+        except ValueError:
+            startup = d['startup']
+        try:
+            current = ServiceStatus(d['current'])
+        except ValueError:
+            current = d['current']
+        return cls(
+            name=d['name'],
+            startup=startup,
+            current=current,
+        )
+
+    def __repr__(self):
+        return (
+            'ServiceInfo('
+            f'name={self.name!r}, '
+            f'startup={self.startup}, '
+            f'current={self.current})'
+        )
+
+
+class Check:
+    """Represents a check in a Pebble configuration layer."""
+
+    def __init__(self, name: str, raw: Optional['CheckDict'] = None):
+        self.name = name
+        dct: CheckDict = raw or {}
+        self.override: str = dct.get('override', '')
+        try:
+            level: Union[CheckLevel, str] = CheckLevel(dct.get('level', ''))
+        except ValueError:
+            level = dct.get('level', '')
+        self.level = level
+        self.period: Optional[str] = dct.get('period', '')
+        self.timeout: Optional[str] = dct.get('timeout', '')
+        self.threshold: Optional[int] = dct.get('threshold')
+
+        http = dct.get('http')
+        if http is not None:
+            http = copy.deepcopy(http)
+        self.http: Optional[HttpDict] = http
+
+        tcp = dct.get('tcp')
+        if tcp is not None:
+            tcp = copy.deepcopy(tcp)
+        self.tcp: Optional[TcpDict] = tcp
+
+        exec_ = dct.get('exec')
+        if exec_ is not None:
+            exec_ = copy.deepcopy(exec_)
+        self.exec: Optional[ExecDict] = exec_
+
+    def to_dict(self) -> 'CheckDict':
+        """Convert this check object to its dict representation."""
+        level: str = self.level.value if isinstance(self.level, CheckLevel) else self.level
+        fields = [
+            ('override', self.override),
+            ('level', level),
+            ('period', self.period),
+            ('timeout', self.timeout),
+            ('threshold', self.threshold),
+            ('http', self.http),
+            ('tcp', self.tcp),
+            ('exec', self.exec),
+        ]
+        dct = {name: value for name, value in fields if value}
+        return typing.cast('CheckDict', dct)
+
+    def __repr__(self) -> str:
+        return f'Check({self.to_dict()!r})'
+
+    def __eq__(self, other: Union['CheckDict', 'Check']) -> bool:
+        """Reports whether this check configuration is equal to another."""
+        if isinstance(other, dict):
+            return self.to_dict() == other
+        elif isinstance(other, Check):
+            return self.to_dict() == other.to_dict()
+        else:
+            return NotImplemented
+
+    def _merge_exec(self, other: 'ExecDict') -> None:
+        """Merges this exec object with another exec definition.
+
+        For attributes present in both objects, the passed in exec
+        attributes take precedence.
+        """
+        if self.exec is None:
+            self.exec = {}
+        for name, value in other.items():
+            if not value:
+                continue
+            if name == 'environment':
+                current = self.exec.get(name, {})
+                current.update(value)  # type: ignore
+                self.exec[name] = current
+            else:
+                self.exec[name] = value
+
+    def _merge_http(self, other: 'HttpDict') -> None:
+        """Merges this http object with another http definition.
+
+        For attributes present in both objects, the passed in http
+        attributes take precedence.
+        """
+        if self.http is None:
+            self.http = {}
+        for name, value in other.items():
+            if not value:
+                continue
+            if name == 'headers':
+                current = self.http.get(name, {})
+                current.update(value)  # type: ignore
+                self.http[name] = current
+            else:
+                self.http[name] = value
+
+    def _merge_tcp(self, other: 'TcpDict') -> None:
+        """Merges this tcp object with another tcp definition.
+
+        For attributes present in both objects, the passed in tcp
+        attributes take precedence.
+        """
+        if self.tcp is None:
+            self.tcp = {}
+        for name, value in other.items():
+            if not value:
+                continue
+            self.tcp[name] = value
+
+    def _merge(self, other: 'Check'):
+        """Merges this check object with another check definition.
+
+        For attributes present in both objects, the passed in check
+        attributes take precedence.
+        """
+        for name, value in other.__dict__.items():
+            if not value or name == 'name':
+                continue
+            if name == 'http':
+                self._merge_http(value)
+            elif name == 'tcp':
+                self._merge_tcp(value)
+            elif name == 'exec':
+                self._merge_exec(value)
+            else:
+                setattr(self, name, value)
+
+
+class CheckLevel(enum.Enum):
+    """Enum of check levels."""
+
+    UNSET = ''
+    ALIVE = 'alive'
+    READY = 'ready'
+
+
+class CheckStatus(enum.Enum):
+    """Enum of check statuses."""
+
+    UP = 'up'
+    DOWN = 'down'
+
+
+class LogTarget:
+    """Represents a log target in a Pebble configuration layer."""
+
+    def __init__(self, name: str, raw: Optional['LogTargetDict'] = None):
+        self.name = name
+        dct: LogTargetDict = raw or {}
+        self.override: str = dct.get('override', '')
+        self.type = dct.get('type', '')
+        self.location = dct.get('location', '')
+        self.services: List[str] = list(dct.get('services', []))
+        labels = dct.get('labels')
+        labels = copy.deepcopy(labels) if labels is not None else {}
+        self.labels: Dict[str, str] = labels
+
+    def to_dict(self) -> 'LogTargetDict':
+        """Convert this log target object to its dict representation."""
+        fields = [
+            ('override', self.override),
+            ('type', self.type),
+            ('location', self.location),
+            ('services', self.services),
+            ('labels', self.labels),
+        ]
+        dct = {name: value for name, value in fields if value}
+        return typing.cast('LogTargetDict', dct)
+
+    def __repr__(self):
+        return f'LogTarget({self.to_dict()!r})'
+
+    def __eq__(self, other: Union['LogTargetDict', 'LogTarget']):
+        if isinstance(other, dict):
+            return self.to_dict() == other
+        elif isinstance(other, LogTarget):
+            return self.to_dict() == other.to_dict()
+        else:
+            return NotImplemented
+
+    def _merge(self, other: 'LogTarget'):
+        """Merges this log target object with another log target definition.
+
+        For attributes present in both objects, the passed in log target
+        attributes take precedence.
+        """
+        for name, value in other.__dict__.items():
+            if not value or name == 'name':
+                continue
+            if name == 'labels':
+                getattr(self, name).update(value)
+            elif name == 'services':
+                getattr(self, name).extend(value)
+            else:
+                setattr(self, name, value)
+
+
+class FileType(enum.Enum):
+    """Enum of file types."""
+
+    FILE = 'file'
+    DIRECTORY = 'directory'
+    SYMLINK = 'symlink'
+    SOCKET = 'socket'
+    NAMED_PIPE = 'named-pipe'
+    DEVICE = 'device'
+    UNKNOWN = 'unknown'
+
+
+class FileInfo:
+    """Stat-like information about a single file or directory."""
+
+    path: str
+    """Full path of the file."""
+
+    name: str
+    """Base name of the file."""
+
+    type: Union['FileType', str]
+    """Type of the file ("file", "directory", "symlink", etc)."""
+
+    size: Optional[int]
+    """Size of the file (will be 0 if ``type`` is not "file")."""
+
+    permissions: int
+    """Unix permissions of the file."""
+
+    last_modified: datetime.datetime
+    """Time file was last modified."""
+
+    user_id: Optional[int]
+    """User ID of the file."""
+
+    user: Optional[str]
+    """Username of the file."""
+
+    group_id: Optional[int]
+    """Group ID of the file."""
+
+    group: Optional[str]
+    """Group name of the file."""
+
+    def __init__(
+        self,
+        path: str,
+        name: str,
+        type: Union['FileType', str],
+        size: Optional[int],
+        permissions: int,
+        last_modified: datetime.datetime,
+        user_id: Optional[int],
+        user: Optional[str],
+        group_id: Optional[int],
+        group: Optional[str],
+    ):
+        self.path = path
+        self.name = name
+        self.type = type
+        self.size = size
+        self.permissions = permissions
+        self.last_modified = last_modified
+        self.user_id = user_id
+        self.user = user
+        self.group_id = group_id
+        self.group = group
+
+    @classmethod
+    def from_dict(cls, d: '_FileInfoDict') -> 'FileInfo':
+        """Create new FileInfo object from dict parsed from JSON."""
+        try:
+            file_type = FileType(d['type'])
+        except ValueError:
+            file_type = d['type']
+        return cls(
+            path=d['path'],
+            name=d['name'],
+            type=file_type,
+            size=d.get('size'),
+            permissions=int(d['permissions'], 8),
+            last_modified=timeconv.parse_rfc3339(d['last-modified']),
+            user_id=d.get('user-id'),
+            user=d.get('user'),
+            group_id=d.get('group-id'),
+            group=d.get('group'),
+        )
+
+    def __repr__(self):
+        return (
+            'FileInfo('
+            f'path={self.path!r}, '
+            f'name={self.name!r}, '
+            f'type={self.type}, '
+            f'size={self.size}, '
+            f'permissions=0o{self.permissions:o}, '
+            f'last_modified={self.last_modified!r}, '
+            f'user_id={self.user_id}, '
+            f'user={self.user!r}, '
+            f'group_id={self.group_id}, '
+            f'group={self.group!r})'
+        )
+
+
+class CheckInfo:
+    """Check status information.
+
+    A list of these objects is returned from :meth:`Client.get_checks`.
+    """
+
+    name: str
+    """Name of the check."""
+
+    level: Optional[Union[CheckLevel, str]]
+    """Check level.
+
+    This can be :attr:`CheckLevel.ALIVE`, :attr:`CheckLevel.READY`, or None (level not set).
+    """
+
+    status: Union[CheckStatus, str]
+    """Status of the check.
+
+    :attr:`CheckStatus.UP` means the check is healthy (the number of failures
+    is less than the threshold), :attr:`CheckStatus.DOWN` means the check is
+    unhealthy (the number of failures has reached the threshold).
+    """
+
+    failures: int
+    """Number of failures since the check last succeeded.
+
+    This is reset to zero if the check succeeds.
+    """
+
+    threshold: int
+    """Failure threshold.
+
+    This is how many consecutive failures for the check to be considered "down".
+    """
+
+    change_id: Optional[ChangeID]
+    """Change ID of ``perform-check`` or ``recover-check`` change driving this check.
+
+    This will be None on older versions of Pebble, which did not use changes
+    to drive health checks.
+    """
+
+    def __init__(
+        self,
+        name: str,
+        level: Optional[Union[CheckLevel, str]],
+        status: Union[CheckStatus, str],
+        failures: int = 0,
+        threshold: int = 0,
+        change_id: Optional[ChangeID] = None,
+    ):
+        self.name = name
+        self.level = level
+        self.status = status
+        self.failures = failures
+        self.threshold = threshold
+        self.change_id = change_id
+
+    @classmethod
+    def from_dict(cls, d: '_CheckInfoDict') -> 'CheckInfo':
+        """Create new :class:`CheckInfo` object from dict parsed from JSON."""
+        try:
+            level = CheckLevel(d.get('level', ''))
+        except ValueError:
+            level = d.get('level')
+        try:
+            status = CheckStatus(d['status'])
+        except ValueError:
+            status = d['status']
+        return cls(
+            name=d['name'],
+            level=level,
+            status=status,
+            failures=d.get('failures', 0),
+            threshold=d['threshold'],
+            change_id=ChangeID(d['change-id']) if 'change-id' in d else None,
+        )
+
+    def __repr__(self):
+        return (
+            'CheckInfo('
+            f'name={self.name!r}, '
+            f'level={self.level}, '
+            f'status={self.status}, '
+            f'failures={self.failures}, '
+            f'threshold={self.threshold!r}, '
+            f'change_id={self.change_id!r})'
+        )
+
+
+class NoticeType(enum.Enum):
+    """Enum of notice types."""
+
+    CUSTOM = 'custom'
+    """A custom notice reported via the Pebble client API or ``pebble notify``.
+    The key and data fields are provided by the user. The key must be in
+    the format ``example.com/path`` to ensure well-namespaced notice keys.
+    """
+
+    CHANGE_UPDATE = 'change-update'
+    """Recorded whenever a change's status is updated. The key for change-update
+    notices is the change ID.
+    """
+
+
+class NoticesUsers(enum.Enum):
+    """Enum of :meth:`Client.get_notices` ``users`` values."""
+
+    ALL = 'all'
+    """Return notices from all users (any user ID, including public notices).
+
+    This only works for Pebble admins (for example, root).
+    """
+
+
+class ChangeKind(enum.Enum):
+    """Enum of Pebble Change kinds."""
+
+    START = 'start'
+    STOP = 'stop'
+    RESTART = 'restart'
+    REPLAN = 'replan'
+    EXEC = 'exec'
+    RECOVER_CHECK = 'recover-check'
+    PERFORM_CHECK = 'perform-check'
+
+
+class ChangeStatus(enum.Enum):
+    """Enum of Pebble Change statuses."""
+
+    HOLD = 'Hold'
+    """Hold status means the task should not run for the moment, perhaps as a
+	consequence of an error on another task."""
+
+    DO = 'Do'
+    """Do status means the change or task is ready to start."""
+
+    DOING = 'Doing'
+    """Doing status means the change or task is running or an attempt was made to run it."""
+
+    DONE = 'Done'
+    """Done status means the change or task was accomplished successfully."""
+
+    ABORT = 'Abort'
+    """Abort status means the task should stop doing its activities and then undo."""
+
+    UNDO = 'Undo'
+    """Undo status means the change or task should be undone, probably due to an error."""
+
+    UNDOING = 'Undoing'
+    """UndoingStatus means the change or task is being undone or an attempt was made to undo it."""
+
+    ERROR = 'Error'
+    """Error status means the change or task has errored out while running or being undone."""
+
+    WAIT = 'Wait'
+    """Wait status means the task was accomplished successfully but some
+	external event needs to happen before work can progress further."""
+
+
+@dataclasses.dataclass(frozen=True)
+class Notice:
+    """Information about a single notice."""
+
+    id: str
+    """Server-generated unique ID for this notice."""
+
+    user_id: Optional[int]
+    """UID of the user who may view this notice (None means notice is public)."""
+
+    type: Union[NoticeType, str]
+    """Type of the notice."""
+
+    key: str
+    """The notice key, a string that differentiates notices of this type.
+
+    This is in the format ``example.com/path``.
+    """
+
+    first_occurred: datetime.datetime
+    """The first time one of these notices (type and key combination) occurs."""
+
+    last_occurred: datetime.datetime
+    """The last time one of these notices occurred."""
+
+    last_repeated: datetime.datetime
+    """The time this notice was last repeated.
+
+    See Pebble's `Notices documentation <https://github.com/canonical/pebble/#notices>`_
+    for an explanation of what "repeated" means.
+    """
+
+    occurrences: int
+    """The number of times one of these notices has occurred."""
+
+    last_data: Dict[str, str] = dataclasses.field(default_factory=dict)
+    """Additional data captured from the last occurrence of one of these notices."""
+
+    repeat_after: Optional[datetime.timedelta] = None
+    """Minimum time after one of these was last repeated before Pebble will repeat it again."""
+
+    expire_after: Optional[datetime.timedelta] = None
+    """How long since one of these last occurred until Pebble will drop the notice."""
+
+    @classmethod
+    def from_dict(cls, d: '_NoticeDict') -> 'Notice':
+        """Create new Notice object from dict parsed from JSON."""
+        try:
+            notice_type = NoticeType(d['type'])
+        except ValueError:
+            notice_type = d['type']
+        return cls(
+            id=d['id'],
+            user_id=d.get('user-id'),
+            type=notice_type,
+            key=d['key'],
+            first_occurred=timeconv.parse_rfc3339(d['first-occurred']),
+            last_occurred=timeconv.parse_rfc3339(d['last-occurred']),
+            last_repeated=timeconv.parse_rfc3339(d['last-repeated']),
+            occurrences=d['occurrences'],
+            last_data=d.get('last-data') or {},
+            repeat_after=timeconv.parse_duration(d['repeat-after'])
+            if 'repeat-after' in d
+            else None,
+            expire_after=timeconv.parse_duration(d['expire-after'])
+            if 'expire-after' in d
+            else None,
+        )
+
+
+class ExecProcess(Generic[AnyStr]):
+    """Represents a process started by :meth:`Client.exec`.
+
+    To avoid deadlocks, most users should use :meth:`wait_output` instead of
+    reading and writing the :attr:`stdin`, :attr:`stdout`, and :attr:`stderr`
+    attributes directly. Alternatively, users can pass stdin/stdout/stderr to
+    :meth:`Client.exec`.
+
+    This class should not be instantiated directly, only via
+    :meth:`Client.exec`.
+    """
+
+    stdin: Optional[IO[AnyStr]]
+    """Standard input for the process.
+
+    If the stdin argument was not passed to :meth:`Client.exec`, this is a
+    writable file-like object the caller can use to stream input to the
+    process. It is None if stdin was passed to :meth:`Client.exec`.
+    """
+
+    stdout: Optional[IO[AnyStr]]
+    """Standard output from the process.
+
+    If the stdout argument was not passed to :meth:`Client.exec`, this is a
+    readable file-like object the caller can use to stream output from the
+    process. It is None if stdout was passed to :meth:`Client.exec`.
+    """
+
+    stderr: Optional[IO[AnyStr]]
+    """Standard error from the process.
+
+    If the stderr argument was not passed to :meth:`Client.exec` and
+    ``combine_stderr`` was False, this is a readable file-like object the
+    caller can use to stream error output from the process. It is None if
+    stderr was passed to :meth:`Client.exec` or ``combine_stderr`` was True.
+    """
+
+    def __init__(
+        self,
+        stdin: Optional[IO[AnyStr]],
+        stdout: Optional[IO[AnyStr]],
+        stderr: Optional[IO[AnyStr]],
+        client: 'Client',
+        timeout: Optional[float],
+        control_ws: '_WebSocket',
+        stdio_ws: '_WebSocket',
+        stderr_ws: Optional['_WebSocket'],
+        command: List[str],
+        encoding: Optional[str],
+        change_id: ChangeID,
+        cancel_stdin: Optional[Callable[[], None]],
+        cancel_reader: Optional[int],
+        threads: List[threading.Thread],
+    ):
+        self.stdin = stdin
+        self.stdout = stdout
+        self.stderr = stderr
+        self._client = client
+        self._timeout = timeout
+        self._control_ws = control_ws
+        self._stdio_ws = stdio_ws
+        self._stderr_ws = stderr_ws
+        self._command = command
+        self._encoding = encoding
+        self._change_id = change_id
+        self._cancel_stdin = cancel_stdin
+        self._cancel_reader = cancel_reader
+        self._threads = threads
+        self._waited = False
+
+    def __del__(self):
+        if not self._waited:
+            msg = 'ExecProcess instance garbage collected without call to wait() or wait_output()'
+            warnings.warn(msg, ResourceWarning)
+
+    def wait(self):
+        """Wait for the process to finish.
+
+        If a timeout was specified to the :meth:`Client.exec` call, this waits
+        at most that duration.
+
+        Raises:
+            ChangeError: if there was an error starting or running the process.
+            ExecError: if the process exits with a non-zero exit code.
+        """
+        exit_code = self._wait()
+        if exit_code != 0:
+            raise ExecError(self._command, exit_code, None, None)
+
+    def _wait(self) -> int:
+        self._waited = True
+        timeout = self._timeout
+        if timeout is not None:
+            # A bit more than the command timeout to ensure that happens first
+            timeout += 1
+        change = self._client.wait_change(self._change_id, timeout=timeout)
+
+        # If stdin reader thread is running, stop it
+        if self._cancel_stdin is not None:
+            self._cancel_stdin()
+
+        # Wait for all threads to finish (e.g., message barrier sent)
+        for thread in self._threads:
+            thread.join()
+
+        # If we opened a cancel_reader pipe, close the read side now (write
+        # side was already closed by _cancel_stdin().
+        if self._cancel_reader is not None:
+            os.close(self._cancel_reader)
+
+        # Close websockets (shutdown doesn't send CLOSE message or wait for response).
+        self._control_ws.shutdown()
+        self._stdio_ws.shutdown()
+        if self._stderr_ws is not None:
+            self._stderr_ws.shutdown()
+
+        if change.err:
+            raise ChangeError(change.err, change)
+
+        exit_code = -1
+        if change.tasks:
+            exit_code = change.tasks[0].data.get('exit-code', -1)
+        return exit_code
+
+    def wait_output(self) -> Tuple[AnyStr, Optional[AnyStr]]:
+        """Wait for the process to finish and return tuple of (stdout, stderr).
+
+        If a timeout was specified to the :meth:`Client.exec` call, this waits
+        at most that duration. If combine_stderr was True, stdout will include
+        the process's standard error, and stderr will be None.
+
+        Raises:
+            ChangeError: if there was an error starting or running the process.
+            ExecError: if the process exits with a non-zero exit code.
+            TypeError: if :meth:`Client.exec` was called with the ``stdout`` argument.
+        """
+        if self.stdout is None:
+            raise TypeError(
+                "can't use wait_output() when exec was called with the stdout argument; "
+                'use wait() instead'
+            )
+
+        if self._encoding is not None:
+            out = io.StringIO()
+            err = io.StringIO() if self.stderr is not None else None
+        else:
+            out = io.BytesIO()
+            err = io.BytesIO() if self.stderr is not None else None
+
+        t = _start_thread(shutil.copyfileobj, self.stdout, out)
+        self._threads.append(t)
+
+        if self.stderr is not None:
+            t = _start_thread(shutil.copyfileobj, self.stderr, err)
+            self._threads.append(t)
+
+        exit_code: int = self._wait()
+
+        out_value = typing.cast(AnyStr, out.getvalue())
+        err_value = typing.cast(AnyStr, err.getvalue()) if err is not None else None
+        if exit_code != 0:
+            raise ExecError[AnyStr](self._command, exit_code, out_value, err_value)
+
+        return (out_value, err_value)
+
+    def send_signal(self, sig: Union[int, str]):
+        """Send the given signal to the running process.
+
+        Args:
+            sig: Name or number of signal to send, e.g., "SIGHUP", 1, or
+                signal.SIGHUP.
+        """
+        if isinstance(sig, int):
+            sig = signal.Signals(sig).name
+        payload = {
+            'command': 'signal',
+            'signal': {'name': sig},
+        }
+        msg = json.dumps(payload, sort_keys=True)
+        self._control_ws.send(msg)
+
+
+def _has_fileno(f: Any) -> bool:
+    """Return True if the file-like object has a valid fileno() method."""
+    try:
+        f.fileno()
+        return True
+    except Exception:
+        # Some types define a fileno method that raises io.UnsupportedOperation,
+        # but just catching all exceptions here won't hurt.
+        return False
+
+
+def _reader_to_websocket(
+    reader: '_WebsocketReader',
+    ws: '_WebSocket',
+    encoding: str,
+    cancel_reader: Optional[int] = None,
+    bufsize: int = 16 * 1024,
+):
+    """Read reader through to EOF and send each chunk read to the websocket."""
+    while True:
+        if cancel_reader is not None:
+            # Wait for either a read to be ready or the caller to cancel stdin
+            result = select.select([cancel_reader, reader], [], [])
+            if cancel_reader in result[0]:
+                break
+
+        chunk = reader.read(bufsize)
+        if not chunk:
+            break
+        if isinstance(chunk, str):
+            chunk = chunk.encode(encoding)
+        ws.send_binary(chunk)
+
+    ws.send('{"command":"end"}')  # type: ignore # Send "end" command as TEXT frame to signal EOF
+
+
+def _websocket_to_writer(ws: '_WebSocket', writer: '_WebsocketWriter', encoding: Optional[str]):
+    """Receive messages from websocket (until end signal) and write to writer."""
+    while True:
+        chunk = ws.recv()
+
+        if isinstance(chunk, str):
+            try:
+                payload = json.loads(chunk)
+            except ValueError:
+                # Garbage sent, try to keep going
+                logger.warning('Cannot decode I/O command (invalid JSON)')
+                continue
+            command = payload.get('command')
+            if command != 'end':
+                # A command we don't recognize, keep going
+                logger.warning('Invalid I/O command %r', command)
+                continue
+            # Received "end" command (EOF signal), stop thread
+            break
+
+        if encoding is not None:
+            chunk = typing.cast(bytes, chunk).decode(encoding)
+        writer.write(chunk)
+
+
+class _WebsocketWriter(io.BufferedIOBase):
+    """A writable file-like object that sends what's written to it to a websocket."""
+
+    def __init__(self, ws: '_WebSocket'):
+        self.ws = ws
+
+    def writable(self):
+        """Denote this file-like object as writable."""
+        return True
+
+    def write(self, chunk: Union[str, bytes]) -> int:
+        """Write chunk to the websocket."""
+        if not isinstance(chunk, bytes):
+            raise TypeError(f'value to write must be bytes, not {type(chunk).__name__}')
+        self.ws.send_binary(chunk)
+        return len(chunk)
+
+    def close(self):
+        """Send end-of-file message to websocket."""
+        self.ws.send('{"command":"end"}')
+
+
+class _WebsocketReader(io.BufferedIOBase):
+    """A readable file-like object whose reads come from a websocket."""
+
+    def __init__(self, ws: '_WebSocket'):
+        self.ws = ws
+        self.remaining = b''
+        self.eof = False
+
+    def readable(self) -> bool:
+        """Denote this file-like object as readable."""
+        return True
+
+    def read(self, n: int = -1) -> Union[str, bytes]:
+        """Read up to n bytes from the websocket (or one message if n<0)."""
+        if self.eof:
+            # Calling read() multiple times after EOF should still return EOF
+            return b''
+
+        while not self.remaining:
+            chunk = self.ws.recv()
+
+            if isinstance(chunk, str):
+                try:
+                    payload = json.loads(chunk)
+                except ValueError:
+                    # Garbage sent, try to keep going
+                    logger.warning('Cannot decode I/O command (invalid JSON)')
+                    continue
+                command = payload.get('command')
+                if command != 'end':
+                    # A command we don't recognize, keep going
+                    logger.warning('Invalid I/O command %r', command)
+                    continue
+                # Received "end" command, return EOF designator
+                self.eof = True
+                return b''
+
+            self.remaining = chunk
+
+        if n < 0:
+            n = len(self.remaining)
+        result: Union[str, bytes] = self.remaining[:n]
+        self.remaining = self.remaining[n:]
+        return result
+
+    def read1(self, n: int = -1) -> Union[str, bytes]:
+        """An alias for read."""
+        return self.read(n)
+
+
+class Client:
+    """Pebble API client.
+
+    Defaults to using a Unix socket at socket_path (which must be specified
+    unless a custom opener is provided).
+
+    For methods that wait for changes, such as :meth:`start_services` and :meth:`replan_services`,
+    if the change fails or times out, then a :class:`ChangeError` or :class:`TimeoutError` will be
+    raised.
+
+    All methods may raise exceptions when there are problems communicating with Pebble. Problems
+    connecting to or transferring data with Pebble will raise a :class:`ConnectionError`. When an
+    error occurs executing the request, such as trying to add an invalid layer or execute a command
+    that does not exist, an :class:`APIError` is raised.
+
+    The ``timeout`` parameter specifies a timeout in seconds for blocking operations like the
+    connection attempt to Pebble; used by ``urllib.request.OpenerDirector.open``. It's not for
+    methods like :meth:`start_services` and :meth:`replan_services` mentioned above, and it's not
+    for the command execution timeout defined in method :meth:`Client.exec`.
+    """
+
+    _chunk_size = 8192
+
+    def __init__(
+        self,
+        socket_path: str,
+        opener: Optional[urllib.request.OpenerDirector] = None,
+        base_url: str = 'http://localhost',
+        timeout: float = 5.0,
+    ):
+        if not isinstance(socket_path, str):
+            raise TypeError(f'`socket_path` should be a string, not: {type(socket_path)}')
+        if opener is None:
+            opener = self._get_default_opener(socket_path)
+        self.socket_path = socket_path
+        self.opener = opener
+        self.base_url = base_url
+        self.timeout = timeout
+
+    @classmethod
+    def _get_default_opener(cls, socket_path: str) -> urllib.request.OpenerDirector:
+        """Build the default opener to use for requests (HTTP over Unix socket)."""
+        opener = urllib.request.OpenerDirector()
+        opener.add_handler(_UnixSocketHandler(socket_path))
+        opener.add_handler(urllib.request.HTTPDefaultErrorHandler())
+        opener.add_handler(urllib.request.HTTPRedirectHandler())
+        opener.add_handler(urllib.request.HTTPErrorProcessor())
+        return opener
+
+    # we need to cast the return type depending on the request params
+    def _request(
+        self,
+        method: str,
+        path: str,
+        query: Optional[Dict[str, Any]] = None,
+        body: Optional[Dict[str, Any]] = None,
+    ) -> Dict[str, Any]:
+        """Make a JSON request to the Pebble server with the given HTTP method and path.
+
+        If query dict is provided, it is encoded and appended as a query string
+        to the URL. If body dict is provided, it is serialied as JSON and used
+        as the HTTP body (with Content-Type: "application/json"). The resulting
+        body is decoded from JSON.
+        """
+        headers = {'Accept': 'application/json'}
+        data = None
+        if body is not None:
+            data = json.dumps(body).encode('utf-8')
+            headers['Content-Type'] = 'application/json'
+
+        response = self._request_raw(method, path, query, headers, data)
+        self._ensure_content_type(response.headers, 'application/json')
+        raw_resp: Dict[str, Any] = json.loads(response.read())
+        return raw_resp
+
+    @staticmethod
+    def _ensure_content_type(
+        headers: email.message.Message,
+        expected: 'Literal["multipart/form-data", "application/json"]',
+    ):
+        """Parse Content-Type header from headers and ensure it's equal to expected.
+
+        Return a dict of any options in the header, e.g., {'boundary': ...}.
+        """
+        ctype = headers.get_content_type()
+        params = headers.get_params() or {}
+        options = {key: value for key, value in params if value}
+        if ctype != expected:
+            raise ProtocolError(f'expected Content-Type {expected!r}, got {ctype!r}')
+        return options
+
+    def _request_raw(
+        self,
+        method: str,
+        path: str,
+        query: Optional[Dict[str, Any]] = None,
+        headers: Optional[Dict[str, Any]] = None,
+        data: Optional[Union[bytes, Generator[bytes, Any, Any]]] = None,
+    ) -> http.client.HTTPResponse:
+        """Make a request to the Pebble server; return the raw HTTPResponse object."""
+        url = self.base_url + path
+        if query:
+            url = f'{url}?{urllib.parse.urlencode(query, doseq=True)}'
+
+        if headers is None:
+            headers = {}
+        request = urllib.request.Request(url, method=method, data=data, headers=headers)  # noqa: S310
+
+        try:
+            response = self.opener.open(request, timeout=self.timeout)
+        except urllib.error.HTTPError as e:
+            code = e.code
+            status = e.reason
+            try:
+                body: Dict[str, Any] = json.loads(e.read())
+                message: str = body['result']['message']
+            except (OSError, ValueError, KeyError) as e2:
+                # Will only happen on read error or if Pebble sends invalid JSON.
+                body: Dict[str, Any] = {}
+                message = f'{type(e2).__name__} - {e2}'
+            raise APIError(body, code, status, message) from None
+        except urllib.error.URLError as e:
+            if e.args and isinstance(e.args[0], FileNotFoundError):
+                raise ConnectionError(
+                    f'Could not connect to Pebble: socket not found at {self.socket_path!r} '
+                    '(container restarted?)'
+                ) from None
+            raise ConnectionError(e.reason) from e
+
+        return response
+
+    def get_system_info(self) -> SystemInfo:
+        """Get system info."""
+        resp = self._request('GET', '/v1/system-info')
+        return SystemInfo.from_dict(resp['result'])
+
+    def get_warnings(self, select: WarningState = WarningState.PENDING) -> List[Warning]:
+        """Get list of warnings in given state (pending or all)."""
+        query = {'select': select.value}
+        resp = self._request('GET', '/v1/warnings', query)
+        return [Warning.from_dict(w) for w in resp['result']]
+
+    def ack_warnings(self, timestamp: datetime.datetime) -> int:
+        """Acknowledge warnings up to given timestamp, return number acknowledged."""
+        body = {'action': 'okay', 'timestamp': timestamp.isoformat()}
+        resp = self._request('POST', '/v1/warnings', body=body)
+        return resp['result']
+
+    def get_changes(
+        self,
+        select: ChangeState = ChangeState.IN_PROGRESS,
+        service: Optional[str] = None,
+    ) -> List[Change]:
+        """Get list of changes in given state, filter by service name if given."""
+        query: Dict[str, Union[str, int]] = {'select': select.value}
+        if service is not None:
+            query['for'] = service
+        resp = self._request('GET', '/v1/changes', query)
+        return [Change.from_dict(c) for c in resp['result']]
+
+    def get_change(self, change_id: ChangeID) -> Change:
+        """Get single change by ID."""
+        resp = self._request('GET', f'/v1/changes/{change_id}')
+        return Change.from_dict(resp['result'])
+
+    def abort_change(self, change_id: ChangeID) -> Change:
+        """Abort change with given ID."""
+        body = {'action': 'abort'}
+        resp = self._request('POST', f'/v1/changes/{change_id}', body=body)
+        return Change.from_dict(resp['result'])
+
+    def autostart_services(self, timeout: float = 30.0, delay: float = 0.1) -> ChangeID:
+        """Start the startup-enabled services and wait (poll) for them to be started.
+
+        Args:
+            timeout: Seconds before autostart change is considered timed out (float). If
+                timeout is 0, submit the action but don't wait; just return the change ID
+                immediately.
+            delay: Seconds before executing the autostart change (float).
+
+        Returns:
+            ChangeID of the autostart change.
+
+        Raises:
+            ChangeError: if one or more of the services didn't start, and ``timeout`` is non-zero.
+        """
+        return self._services_action('autostart', [], timeout, delay)
+
+    def replan_services(self, timeout: float = 30.0, delay: float = 0.1) -> ChangeID:
+        """Replan by (re)starting changed and startup-enabled services and wait for them to start.
+
+        Args:
+            timeout: Seconds before replan change is considered timed out (float). If
+                timeout is 0, submit the action but don't wait; just return the change
+                ID immediately.
+            delay: Seconds before executing the replan change (float).
+
+        Returns:
+            ChangeID of the replan change.
+
+        Raises:
+            ChangeError: if one or more of the services didn't stop/start, and ``timeout`` is
+                non-zero.
+        """
+        return self._services_action('replan', [], timeout, delay)
+
+    def start_services(
+        self,
+        services: Iterable[str],
+        timeout: float = 30.0,
+        delay: float = 0.1,
+    ) -> ChangeID:
+        """Start services by name and wait (poll) for them to be started.
+
+        Args:
+            services: Non-empty list of services to start.
+            timeout: Seconds before start change is considered timed out (float). If
+                timeout is 0, submit the action but don't wait; just return the change
+                ID immediately.
+            delay: Seconds before executing the start change (float).
+
+        Returns:
+            ChangeID of the start change.
+
+        Raises:
+            ChangeError: if one or more of the services didn't stop/start, and ``timeout`` is
+                non-zero.
+        """
+        return self._services_action('start', services, timeout, delay)
+
+    def stop_services(
+        self,
+        services: Iterable[str],
+        timeout: float = 30.0,
+        delay: float = 0.1,
+    ) -> ChangeID:
+        """Stop services by name and wait (poll) for them to be started.
+
+        Args:
+            services: Non-empty list of services to stop.
+            timeout: Seconds before stop change is considered timed out (float). If
+                timeout is 0, submit the action but don't wait; just return the change
+                ID immediately.
+            delay: Seconds before executing the stop change (float).
+
+        Returns:
+            ChangeID of the stop change.
+
+        Raises:
+            ChangeError: if one or more of the services didn't stop/start and ``timeout`` is
+                non-zero.
+        """
+        return self._services_action('stop', services, timeout, delay)
+
+    def restart_services(
+        self,
+        services: Iterable[str],
+        timeout: float = 30.0,
+        delay: float = 0.1,
+    ) -> ChangeID:
+        """Restart services by name and wait (poll) for them to be started.
+
+        Args:
+            services: Non-empty list of services to restart.
+            timeout: Seconds before restart change is considered timed out (float). If
+                timeout is 0, submit the action but don't wait; just return the change
+                ID immediately.
+            delay: Seconds before executing the restart change (float).
+
+        Returns:
+            ChangeID of the restart change.
+
+        Raises:
+            ChangeError: if one or more of the services didn't stop/start and ``timeout`` is
+                non-zero.
+        """
+        return self._services_action('restart', services, timeout, delay)
+
+    def _services_action(
+        self,
+        action: str,
+        services: Iterable[str],
+        timeout: Optional[float],
+        delay: float,
+    ) -> ChangeID:
+        if isinstance(services, (str, bytes)) or not hasattr(services, '__iter__'):
+            raise TypeError(
+                f'services must be of type Iterable[str], not {type(services).__name__}'
+            )
+
+        services = list(services)
+        for s in services:
+            if not isinstance(s, str):
+                raise TypeError(f'service names must be str, not {type(s).__name__}')
+
+        body = {'action': action, 'services': services}
+        resp = self._request('POST', '/v1/services', body=body)
+        change_id = ChangeID(resp['change'])
+        if timeout:
+            change = self.wait_change(change_id, timeout=timeout, delay=delay)
+            if change.err:
+                raise ChangeError(change.err, change)
+        return change_id
+
+    def wait_change(
+        self,
+        change_id: ChangeID,
+        timeout: Optional[float] = 30.0,
+        delay: float = 0.1,
+    ) -> Change:
+        """Wait for the given change to be ready.
+
+        If the Pebble server supports the /v1/changes/{id}/wait API endpoint,
+        use that to avoid polling, otherwise poll /v1/changes/{id} every delay
+        seconds.
+
+        Args:
+            change_id: Change ID of change to wait for.
+            timeout: Maximum time in seconds to wait for the change to be
+                ready. It may be None, in which case wait_change never times out.
+            delay: If polling, this is the delay in seconds between attempts.
+
+        Returns:
+            The Change object being waited on.
+
+        Raises:
+            TimeoutError: If the maximum timeout is reached.
+        """
+        try:
+            return self._wait_change_using_wait(change_id, timeout)
+        except NotImplementedError:
+            # Pebble server doesn't support wait endpoint, fall back to polling
+            return self._wait_change_using_polling(change_id, timeout, delay)
+
+    def _wait_change_using_wait(self, change_id: ChangeID, timeout: Optional[float]):
+        """Wait for a change to be ready using the wait-change API."""
+        deadline = time.time() + timeout if timeout is not None else 0
+
+        # Hit the wait endpoint every Client.timeout-1 seconds to avoid long
+        # requests (the -1 is to ensure it wakes up before the socket timeout)
+        while True:
+            this_timeout = max(self.timeout - 1, 1)  # minimum of 1 second
+            if timeout is not None:
+                time_remaining = deadline - time.time()
+                if time_remaining <= 0:
+                    break
+                # Wait the lesser of the time remaining and Client.timeout-1
+                this_timeout = min(time_remaining, this_timeout)
+
+            try:
+                return self._wait_change(change_id, this_timeout)
+            except (socket.timeout, builtins.TimeoutError):
+                # NOTE: in Python 3.10 socket.timeout is an alias of TimeoutError,
+                # but we still need to support Python 3.8, so catch both.
+                # Catch timeout from wait endpoint and loop to check deadline.
+                pass
+
+        raise TimeoutError(f'timed out waiting for change {change_id} ({timeout} seconds)')
+
+    def _wait_change(self, change_id: ChangeID, timeout: Optional[float] = None) -> Change:
+        """Call the wait-change API endpoint directly."""
+        query: Dict[str, Any] = {}
+        if timeout is not None:
+            query['timeout'] = _format_timeout(timeout)
+
+        try:
+            resp = self._request('GET', f'/v1/changes/{change_id}/wait', query)
+        except APIError as e:
+            if e.code == 404:
+                raise NotImplementedError(
+                    'server does not implement wait-change endpoint'
+                ) from None
+            if e.code == 504:
+                raise TimeoutError(
+                    f'timed out waiting for change {change_id} ({timeout} seconds)'
+                ) from None
+            raise
+
+        return Change.from_dict(resp['result'])
+
+    def _wait_change_using_polling(
+        self, change_id: ChangeID, timeout: Optional[float], delay: float
+    ):
+        """Wait for a change to be ready by polling the get-change API."""
+        deadline = time.time() + timeout if timeout is not None else 0
+
+        while timeout is None or time.time() < deadline:
+            change = self.get_change(change_id)
+            if change.ready:
+                return change
+
+            time.sleep(delay)
+
+        raise TimeoutError(f'timed out waiting for change {change_id} ({timeout} seconds)')
+
+    def add_layer(
+        self, label: str, layer: Union[str, 'LayerDict', Layer], *, combine: bool = False
+    ):
+        """Dynamically add a new layer onto the Pebble configuration layers.
+
+        If combine is False (the default), append the new layer as the top
+        layer with the given label. If combine is True and the label already
+        exists, the two layers are combined into a single one considering the
+        layer override rules; if the layer doesn't exist, it is added as usual.
+        """
+        if not isinstance(label, str):
+            raise TypeError(f'label must be a str, not {type(label).__name__}')
+
+        if isinstance(layer, str):
+            layer_yaml = layer
+        elif isinstance(layer, dict):
+            layer_yaml = Layer(layer).to_yaml()
+        elif isinstance(layer, Layer):
+            layer_yaml = layer.to_yaml()
+        else:
+            raise TypeError(
+                f'layer must be str, dict, or pebble.Layer, not {type(layer).__name__}'
+            )
+
+        body = {
+            'action': 'add',
+            'combine': combine,
+            'label': label,
+            'format': 'yaml',
+            'layer': layer_yaml,
+        }
+        self._request('POST', '/v1/layers', body=body)
+
+    def get_plan(self) -> Plan:
+        """Get the Pebble plan (contains combined layer configuration)."""
+        resp = self._request('GET', '/v1/plan', {'format': 'yaml'})
+        return Plan(resp['result'])
+
+    def get_services(self, names: Optional[Iterable[str]] = None) -> List[ServiceInfo]:
+        """Get the service status for the configured services.
+
+        If names is specified, only fetch the service status for the services
+        named.
+        """
+        query = None
+        if names is not None:
+            query = {'names': ','.join(names)}
+        resp = self._request('GET', '/v1/services', query)
+        return [ServiceInfo.from_dict(info) for info in resp['result']]
+
+    @typing.overload
+    def pull(self, path: str, *, encoding: None) -> BinaryIO: ...
+
+    @typing.overload
+    def pull(self, path: str, *, encoding: str = 'utf-8') -> TextIO: ...
+
+    def pull(self, path: str, *, encoding: Optional[str] = 'utf-8') -> Union[BinaryIO, TextIO]:
+        """Read a file's content from the remote system.
+
+        Args:
+            path: Path of the file to read from the remote system.
+            encoding: Encoding to use for decoding the file's bytes to str,
+                or None to specify no decoding.
+
+        Returns:
+            A readable file-like object, whose read() method will return str
+            objects decoded according to the specified encoding, or bytes if
+            encoding is None.
+
+        Raises:
+            PathError: If there was an error reading the file at path, for
+                example, if the file doesn't exist or is a directory.
+        """
+        query = {
+            'action': 'read',
+            'path': path,
+        }
+        headers = {'Accept': 'multipart/form-data'}
+        response = self._request_raw('GET', '/v1/files', query, headers)
+
+        options = self._ensure_content_type(response.headers, 'multipart/form-data')
+        boundary = options.get('boundary', '')
+        if not boundary:
+            raise ProtocolError(f'invalid boundary {boundary!r}')
+
+        parser = _FilesParser(boundary)
+
+        while True:
+            chunk = response.read(self._chunk_size)
+            if not chunk:
+                break
+            parser.feed(chunk)
+
+        resp = parser.get_response()
+        if resp is None:
+            raise ProtocolError('no "response" field in multipart body')
+        self._raise_on_path_error(resp, path)
+
+        filenames = parser.filenames()
+        if not filenames:
+            raise ProtocolError('no file content in multipart response')
+        elif len(filenames) > 1:
+            raise ProtocolError('single file request resulted in a multi-file response')
+
+        filename = filenames[0]
+        if filename != path:
+            raise ProtocolError(f'path not expected: {filename!r}')
+
+        f = parser.get_file(path, encoding)
+
+        parser.remove_files()
+        return f
+
+    @staticmethod
+    def _raise_on_path_error(resp: '_FilesResponse', path: str):
+        result = resp['result'] or []  # in case it's null instead of []
+        paths = {item['path']: item for item in result}
+        if path not in paths:
+            raise ProtocolError(f'path not found in response metadata: {resp}')
+        error = paths[path].get('error')
+        if error:
+            raise PathError(error['kind'], error['message'])
+
+    def push(
+        self,
+        path: str,
+        source: '_IOSource',
+        *,
+        encoding: str = 'utf-8',
+        make_dirs: bool = False,
+        permissions: Optional[int] = None,
+        user_id: Optional[int] = None,
+        user: Optional[str] = None,
+        group_id: Optional[int] = None,
+        group: Optional[str] = None,
+    ):
+        """Write content to a given file path on the remote system.
+
+        Args:
+            path: Path of the file to write to on the remote system.
+            source: Source of data to write. This is either a concrete str or
+                bytes instance, or a readable file-like object.
+            encoding: Encoding to use for encoding source str to bytes, or
+                strings read from source if it is a TextIO type. Ignored if
+                source is bytes or BinaryIO.
+            make_dirs: If True, create parent directories if they don't exist.
+            permissions: Permissions (mode) to create file with (Pebble default
+                is 0o644).
+            user_id: User ID (UID) for file.
+            user: Username for file. User's UID must match user_id if both are
+                specified.
+            group_id: Group ID (GID) for file.
+            group: Group name for file. Group's GID must match group_id if
+                both are specified.
+
+        Raises:
+            PathError: If there was an error writing the file to the path; for example, if the
+                destination path doesn't exist and ``make_dirs`` is not used.
+        """
+        info = self._make_auth_dict(permissions, user_id, user, group_id, group)
+        info['path'] = path
+        if make_dirs:
+            info['make-dirs'] = True
+        metadata = {
+            'action': 'write',
+            'files': [info],
+        }
+
+        data, content_type = self._encode_multipart(metadata, path, source, encoding)
+
+        headers = {
+            'Accept': 'application/json',
+            'Content-Type': content_type,
+        }
+        response = self._request_raw('POST', '/v1/files', None, headers, data)
+        self._ensure_content_type(response.headers, 'application/json')
+        resp = json.loads(response.read())
+        # we need to cast the Dict[Any, Any] to _FilesResponse
+        self._raise_on_path_error(typing.cast('_FilesResponse', resp), path)
+
+    @staticmethod
+    def _make_auth_dict(
+        permissions: Optional[int],
+        user_id: Optional[int],
+        user: Optional[str],
+        group_id: Optional[int],
+        group: Optional[str],
+    ) -> '_AuthDict':
+        d: _AuthDict = {}
+        if permissions is not None:
+            d['permissions'] = format(permissions, '03o')
+        if user_id is not None:
+            d['user-id'] = user_id
+        if user is not None:
+            d['user'] = user
+        if group_id is not None:
+            d['group-id'] = group_id
+        if group is not None:
+            d['group'] = group
+        return d
+
+    def _encode_multipart(
+        self, metadata: Dict[str, Any], path: str, source: '_IOSource', encoding: str
+    ):
+        # Python's stdlib mime/multipart handling is screwy and doesn't handle
+        # binary properly, so roll our own.
+        if isinstance(source, str):
+            source_io: _AnyStrFileLikeIO = io.StringIO(source)
+        elif isinstance(source, bytes):
+            source_io: _AnyStrFileLikeIO = io.BytesIO(source)
+        else:
+            source_io: _AnyStrFileLikeIO = source  # type: ignore
+        boundary = binascii.hexlify(os.urandom(16))
+        path_escaped = path.replace('"', '\\"').encode('utf-8')
+        content_type = f"multipart/form-data; boundary=\"{boundary.decode('utf-8')}\""
+
+        def generator() -> Generator[bytes, None, None]:
+            yield b''.join([
+                b'--',
+                boundary,
+                b'\r\n',
+                b'Content-Type: application/json\r\n',
+                b'Content-Disposition: form-data; name="request"\r\n',
+                b'\r\n',
+                json.dumps(metadata).encode('utf-8'),
+                b'\r\n',
+                b'--',
+                boundary,
+                b'\r\n',
+                b'Content-Type: application/octet-stream\r\n',
+                b'Content-Disposition: form-data; name="files"; filename="',
+                path_escaped,
+                b'"\r\n',
+                b'\r\n',
+            ])
+
+            content: Union[str, bytes] = source_io.read(self._chunk_size)
+            while content:
+                if isinstance(content, str):
+                    content = content.encode(encoding)
+                yield content
+                content = source_io.read(self._chunk_size)
+
+            yield b''.join([
+                b'\r\n',
+                b'--',
+                boundary,
+                b'--\r\n',
+            ])
+
+        return generator(), content_type
+
+    def list_files(
+        self, path: str, *, pattern: Optional[str] = None, itself: bool = False
+    ) -> List[FileInfo]:
+        """Return list of directory entries from given path on remote system.
+
+        Despite the name, this method returns a list of files *and*
+        directories, similar to :func:`os.listdir` or :func:`os.scandir`.
+
+        Args:
+            path: Path of the directory to list, or path of the file to return
+                information about.
+            pattern: If specified, filter the list to just the files that match,
+                for example ``*.txt``.
+            itself: If path refers to a directory, return information about the
+                directory itself, rather than its contents.
+
+        Raises:
+            PathError: if there was an error listing the directory; for example, if the directory
+                does not exist.
+        """
+        query = {
+            'action': 'list',
+            'path': path,
+        }
+        if pattern:
+            query['pattern'] = pattern
+        if itself:
+            query['itself'] = 'true'
+        resp = self._request('GET', '/v1/files', query)
+        result = resp['result'] or []  # in case it's null instead of []
+        return [FileInfo.from_dict(d) for d in result]
+
+    def make_dir(
+        self,
+        path: str,
+        *,
+        make_parents: bool = False,
+        permissions: Optional[int] = None,
+        user_id: Optional[int] = None,
+        user: Optional[str] = None,
+        group_id: Optional[int] = None,
+        group: Optional[str] = None,
+    ):
+        """Create a directory on the remote system with the given attributes.
+
+        Args:
+            path: Path of the directory to create on the remote system.
+            make_parents: If True, create parent directories if they don't exist.
+            permissions: Permissions (mode) to create directory with (Pebble
+                default is 0o755).
+            user_id: User ID (UID) for directory.
+            user: Username for directory. User's UID must match user_id if
+                both are specified.
+            group_id: Group ID (GID) for directory.
+            group: Group name for directory. Group's GID must match group_id
+                if both are specified.
+
+        Raises:
+            PathError: if there was an error making the directory; for example, if the parent path
+                does not exist, and ``make_parents`` is not used.
+        """
+        info = self._make_auth_dict(permissions, user_id, user, group_id, group)
+        info['path'] = path
+        if make_parents:
+            info['make-parents'] = True
+        body = {
+            'action': 'make-dirs',
+            'dirs': [info],
+        }
+        resp = self._request('POST', '/v1/files', None, body)
+        self._raise_on_path_error(typing.cast('_FilesResponse', resp), path)
+
+    def remove_path(self, path: str, *, recursive: bool = False):
+        """Remove a file or directory on the remote system.
+
+        Args:
+            path: Path of the file or directory to delete from the remote system.
+            recursive: If True, and path is a directory, recursively delete it and
+                       everything under it. If path is a file, delete the file. In
+                       either case, do nothing if the file or directory does not
+                       exist. Behaviourally similar to ``rm -rf <file|dir>``.
+
+        Raises:
+            pebble.PathError: If a relative path is provided, or if `recursive` is False
+                and the file or directory cannot be removed (it does not exist or is not empty).
+        """
+        info: Dict[str, Any] = {'path': path}
+        if recursive:
+            info['recursive'] = True
+        body = {
+            'action': 'remove',
+            'paths': [info],
+        }
+        resp = self._request('POST', '/v1/files', None, body)
+        self._raise_on_path_error(typing.cast('_FilesResponse', resp), path)
+
+    # Exec I/O is str if encoding is provided (the default)
+    @typing.overload
+    def exec(
+        self,
+        command: List[str],
+        *,
+        service_context: Optional[str] = None,
+        environment: Optional[Dict[str, str]] = None,
+        working_dir: Optional[str] = None,
+        timeout: Optional[float] = None,
+        user_id: Optional[int] = None,
+        user: Optional[str] = None,
+        group_id: Optional[int] = None,
+        group: Optional[str] = None,
+        stdin: Optional[Union[str, TextIO]] = None,
+        stdout: Optional[TextIO] = None,
+        stderr: Optional[TextIO] = None,
+        encoding: str = 'utf-8',
+        combine_stderr: bool = False,
+    ) -> ExecProcess[str]: ...
+
+    # Exec I/O is bytes if encoding is explicitly set to None
+    @typing.overload
+    def exec(
+        self,
+        command: List[str],
+        *,
+        service_context: Optional[str] = None,
+        environment: Optional[Dict[str, str]] = None,
+        working_dir: Optional[str] = None,
+        timeout: Optional[float] = None,
+        user_id: Optional[int] = None,
+        user: Optional[str] = None,
+        group_id: Optional[int] = None,
+        group: Optional[str] = None,
+        stdin: Optional[Union[bytes, BinaryIO]] = None,
+        stdout: Optional[BinaryIO] = None,
+        stderr: Optional[BinaryIO] = None,
+        encoding: None = None,
+        combine_stderr: bool = False,
+    ) -> ExecProcess[bytes]: ...
+
+    def exec(
+        self,
+        command: List[str],
+        *,
+        service_context: Optional[str] = None,
+        environment: Optional[Dict[str, str]] = None,
+        working_dir: Optional[str] = None,
+        timeout: Optional[float] = None,
+        user_id: Optional[int] = None,
+        user: Optional[str] = None,
+        group_id: Optional[int] = None,
+        group: Optional[str] = None,
+        stdin: Optional[Union[str, bytes, TextIO, BinaryIO]] = None,
+        stdout: Optional[Union[TextIO, BinaryIO]] = None,
+        stderr: Optional[Union[TextIO, BinaryIO]] = None,
+        encoding: Optional[str] = 'utf-8',
+        combine_stderr: bool = False,
+    ) -> ExecProcess[Any]:
+        r"""Execute the given command on the remote system.
+
+        Two method signatures are shown because this method returns an
+        :class:`ExecProcess` that deals with strings if ``encoding`` is
+        specified (the default ), or one that deals with bytes if ``encoding``
+        is set to ``None``.
+
+        Most of the parameters are explained in the "Parameters" section
+        below, however, input/output handling is a bit more complex. Some
+        examples are shown below::
+
+            # Simple command with no output; just check exit code
+            >>> process = client.exec(['send-emails'])
+            >>> process.wait()
+
+            # Fetch output as string
+            >>> process = client.exec(['python3', '--version'])
+            >>> version, _ = process.wait_output()
+            >>> print(version)
+            Python 3.8.10
+
+            # Fetch both stdout and stderr as strings
+            >>> process = client.exec(['pg_dump', '-s', ...])
+            >>> schema, logs = process.wait_output()
+
+            # Stream input from a string and write output to files
+            >>> stdin = 'foo\nbar\n'
+            >>> with open('out.txt', 'w') as out, open('err.txt', 'w') as err:
+            ...     process = client.exec(['awk', '{ print toupper($0) }'],
+            ...                           stdin=stdin, stdout=out, stderr=err)
+            ...     process.wait()
+            >>> open('out.txt').read()
+            'FOO\nBAR\n'
+            >>> open('err.txt').read()
+            ''
+
+            # Real-time streaming using ExecProcess.stdin and ExecProcess.stdout
+            >>> process = client.exec(['cat'])
+            >>> def stdin_thread():
+            ...     for line in ['one\n', '2\n', 'THREE\n']:
+            ...         process.stdin.write(line)
+            ...         process.stdin.flush()
+            ...         time.sleep(1)
+            ...     process.stdin.close()
+            ...
+            >>> threading.Thread(target=stdin_thread).start()
+            >>> for line in process.stdout:
+            ...     print(datetime.datetime.now().strftime('%H:%M:%S'), repr(line))
+            ...
+            16:20:26 'one\n'
+            16:20:27 '2\n'
+            16:20:28 'THREE\n'
+            >>> process.wait()  # will return immediately as stdin was closed
+
+            # Show exception raised for non-zero return code
+            >>> process = client.exec(['ls', 'notexist'])
+            >>> out, err = process.wait_output()
+            Traceback (most recent call last):
+              ...
+            ExecError: "ls" returned exit code 2
+            >>> exc = sys.last_value
+            >>> exc.exit_code
+            2
+            >>> exc.stdout
+            ''
+            >>> exc.stderr
+            "ls: cannot access 'notfound': No such file or directory\n"
+
+        Args:
+            command: Command to execute: the first item is the name (or path)
+                of the executable, the rest of the items are the arguments.
+            service_context: If specified, run the command in the context of
+                this service. Specifically, inherit its environment variables,
+                user/group settings, and working directory. The other exec
+                options will override the service context; ``environment``
+                will be merged on top of the service's.
+            environment: Environment variables to pass to the process.
+            working_dir: Working directory to run the command in. If not set,
+                Pebble uses the target user's $HOME directory (and if the user
+                argument is not set, $HOME of the user Pebble is running as).
+            timeout: Timeout in seconds for the command execution, after which
+                the process will be terminated. If not specified, the
+                execution never times out.
+            user_id: User ID (UID) to run the process as.
+            user: Username to run the process as. User's UID must match
+                user_id if both are specified.
+            group_id: Group ID (GID) to run the process as.
+            group: Group name to run the process as. Group's GID must match
+                group_id if both are specified.
+            stdin: A string or readable file-like object that is sent to the
+                process's standard input. If not set, the caller can write
+                input to :attr:`ExecProcess.stdin` to stream input to the
+                process.
+            stdout: A writable file-like object that the process's standard
+                output is written to. If not set, the caller can use
+                :meth:`ExecProcess.wait_output` to capture output as a string,
+                or read from :meth:`ExecProcess.stdout` to stream output from
+                the process.
+            stderr: A writable file-like object that the process's standard
+                error is written to. If not set, the caller can use
+                :meth:`ExecProcess.wait_output` to capture error output as a
+                string, or read from :meth:`ExecProcess.stderr` to stream
+                error output from the process. Must be None if combine_stderr
+                is True.
+            encoding: If encoding is set (the default is UTF-8), the types
+                read or written to stdin/stdout/stderr are str, and encoding
+                is used to encode them to bytes. If encoding is None, the
+                types read or written are raw bytes.
+            combine_stderr: If True, process's stderr output is combined into
+                its stdout (the stderr argument must be None). If False,
+                separate streams are used for stdout and stderr.
+
+        Returns:
+            A Process object representing the state of the running process.
+            To wait for the command to finish, the caller will typically call
+            :meth:`ExecProcess.wait` if stdout/stderr were provided as
+            arguments to :meth:`exec`, or :meth:`ExecProcess.wait_output` if
+            not.
+
+        Raises:
+            APIError: if an error occurred communicating with pebble, or if the command is not
+                found.
+            ExecError: if the command exits with a non-zero exit code.
+        """
+        if not isinstance(command, list) or not all(isinstance(s, str) for s in command):
+            raise TypeError(f'command must be a list of str, not {type(command).__name__}')
+        if len(command) < 1:
+            raise ValueError('command must contain at least one item')
+
+        if stdin is not None:
+            if isinstance(stdin, str):
+                if encoding is None:
+                    raise ValueError('encoding must be set if stdin is str')
+                stdin = io.BytesIO(stdin.encode(encoding))
+            elif isinstance(stdin, bytes):
+                if encoding is not None:
+                    raise ValueError('encoding must be None if stdin is bytes')
+                stdin = io.BytesIO(stdin)
+            elif not hasattr(stdin, 'read'):
+                raise TypeError('stdin must be str, bytes, or a readable file-like object')
+
+        if combine_stderr and stderr is not None:
+            raise ValueError('stderr must be None if combine_stderr is True')
+
+        body = {
+            'command': command,
+            'service-context': service_context,
+            'environment': environment or {},
+            'working-dir': working_dir,
+            'timeout': _format_timeout(timeout) if timeout is not None else None,
+            'user-id': user_id,
+            'user': user,
+            'group-id': group_id,
+            'group': group,
+            'split-stderr': not combine_stderr,
+        }
+        resp = self._request('POST', '/v1/exec', body=body)
+        change_id = resp['change']
+        task_id = resp['result']['task-id']
+
+        stderr_ws: Optional[_WebSocket] = None
+        try:
+            control_ws = self._connect_websocket(task_id, 'control')
+            stdio_ws = self._connect_websocket(task_id, 'stdio')
+            if not combine_stderr:
+                stderr_ws = self._connect_websocket(task_id, 'stderr')
+        except websocket.WebSocketException as e:  # type: ignore
+            # Error connecting to websockets, probably due to the exec/change
+            # finishing early with an error. Call wait_change to pick that up.
+            change = self.wait_change(ChangeID(change_id))
+            if change.err:
+                raise ChangeError(change.err, change) from e
+            raise ConnectionError(f'unexpected error connecting to websockets: {e}') from e
+
+        cancel_stdin: Optional[Callable[[], None]] = None
+        cancel_reader: Optional[int] = None
+        threads: List[threading.Thread] = []
+
+        if stdin is not None:
+            if _has_fileno(stdin):
+                # Create a pipe so _reader_to_websocket can select() on the
+                # reader as well as this cancel_reader; when we write anything
+                # to cancel_writer it'll trigger the select and end the thread.
+                cancel_reader, cancel_writer = os.pipe()
+
+                def _cancel_stdin():
+                    os.write(cancel_writer, b'x')  # doesn't matter what we write
+                    os.close(cancel_writer)
+
+                cancel_stdin = _cancel_stdin
+
+            t = _start_thread(_reader_to_websocket, stdin, stdio_ws, encoding, cancel_reader)
+            threads.append(t)
+            process_stdin = None
+        else:
+            process_stdin = _WebsocketWriter(stdio_ws)
+            if encoding is not None:
+                process_stdin = io.TextIOWrapper(process_stdin, encoding=encoding, newline='')  # type: ignore
+
+        if stdout is not None:
+            t = _start_thread(_websocket_to_writer, stdio_ws, stdout, encoding)
+            threads.append(t)
+            process_stdout = None
+        else:
+            process_stdout = _WebsocketReader(stdio_ws)
+            if encoding is not None:
+                process_stdout = io.TextIOWrapper(process_stdout, encoding=encoding, newline='')  # type: ignore
+
+        process_stderr = None
+        if not combine_stderr:
+            if stderr is not None:
+                t = _start_thread(_websocket_to_writer, stderr_ws, stderr, encoding)
+                threads.append(t)
+            else:
+                ws = typing.cast('_WebSocket', stderr_ws)
+                process_stderr = _WebsocketReader(ws)
+                if encoding is not None:
+                    process_stderr = io.TextIOWrapper(
+                        process_stderr,  # type: ignore
+                        encoding=encoding,
+                        newline='',
+                    )
+
+        process: ExecProcess[Any] = ExecProcess(
+            stdin=process_stdin,  # type: ignore
+            stdout=process_stdout,  # type: ignore
+            stderr=process_stderr,  # type: ignore
+            client=self,
+            timeout=timeout,
+            stdio_ws=stdio_ws,
+            stderr_ws=stderr_ws,
+            control_ws=control_ws,
+            command=command,
+            encoding=encoding,
+            change_id=ChangeID(change_id),
+            cancel_stdin=cancel_stdin,
+            cancel_reader=cancel_reader,
+            threads=threads,
+        )
+        return process
+
+    def _connect_websocket(self, task_id: str, websocket_id: str) -> '_WebSocket':
+        sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+        # Set socket timeout to a short timeout during connection phase, in
+        # case the Pebble side times out (5s), so this side doesn't hang. See:
+        # https://github.com/canonical/operator/issues/1246
+        sock.settimeout(self.timeout)
+        sock.connect(self.socket_path)
+        url = self._websocket_url(task_id, websocket_id)
+        ws: _WebSocket = websocket.WebSocket(skip_utf8_validation=True)  # type: ignore
+        ws.connect(url, socket=sock)
+        # Reset to no timeout so connection can be "long polling" when data is
+        # being received.
+        sock.settimeout(None)
+        return ws
+
+    def _websocket_url(self, task_id: str, websocket_id: str) -> str:
+        base_url = self.base_url.replace('http://', 'ws://')
+        url = f'{base_url}/v1/tasks/{task_id}/websocket/{websocket_id}'
+        return url
+
+    def send_signal(self, sig: Union[int, str], services: Iterable[str]):
+        """Send the given signal to the list of services named.
+
+        Args:
+            sig: Name or number of signal to send, for example ``"SIGHUP"``, ``1``, or
+                ``signal.SIGHUP``.
+            services: Non-empty list of service names to send the signal to.
+
+        Raises:
+            APIError: If any of the services are not in the plan or are not
+                currently running.
+        """
+        if isinstance(services, (str, bytes)) or not hasattr(services, '__iter__'):
+            raise TypeError(
+                f'services must be of type Iterable[str], not {type(services).__name__}'
+            )
+        for s in services:
+            if not isinstance(s, str):
+                raise TypeError(f'service names must be str, not {type(s).__name__}')
+
+        if isinstance(sig, int):
+            sig = signal.Signals(sig).name
+        body = {
+            'signal': sig,
+            'services': services,
+        }
+        self._request('POST', '/v1/signals', body=body)
+
+    def get_checks(
+        self, level: Optional[CheckLevel] = None, names: Optional[Iterable[str]] = None
+    ) -> List[CheckInfo]:
+        """Get the check status for the configured checks.
+
+        Args:
+            level: Optional check level to query for (default is to fetch
+                checks with any level).
+            names: Optional list of check names to query for (default is to
+                fetch all checks).
+
+        Returns:
+            List of :class:`CheckInfo` objects.
+        """
+        query: Dict[str, Any] = {}
+        if level is not None:
+            query['level'] = level.value
+        if names:
+            query['names'] = list(names)
+        resp = self._request('GET', '/v1/checks', query)
+        return [CheckInfo.from_dict(info) for info in resp['result']]
+
+    def notify(
+        self,
+        type: NoticeType,
+        key: str,
+        *,
+        data: Optional[Dict[str, str]] = None,
+        repeat_after: Optional[datetime.timedelta] = None,
+    ) -> str:
+        """Record an occurrence of a notice with the specified options.
+
+        Args:
+            type: Notice type (currently only "custom" notices are supported).
+            key: Notice key; must be in "example.com/path" format.
+            data: Data fields for this notice.
+            repeat_after: Only allow this notice to repeat after this duration
+                has elapsed (the default is to always repeat).
+
+        Returns:
+            The notice's ID.
+        """
+        body: Dict[str, Any] = {
+            'action': 'add',
+            'type': type.value,
+            'key': key,
+        }
+        if data is not None:
+            body['data'] = data
+        if repeat_after is not None:
+            body['repeat-after'] = _format_timeout(repeat_after.total_seconds())
+        resp = self._request('POST', '/v1/notices', body=body)
+        return resp['result']['id']
+
+    def get_notice(self, id: str) -> Notice:
+        """Get details about a single notice by ID.
+
+        Raises:
+            APIError: if a notice with the given ID is not found (``code`` 404)
+        """
+        resp = self._request('GET', f'/v1/notices/{id}')
+        return Notice.from_dict(resp['result'])
+
+    def get_notices(
+        self,
+        *,
+        users: Optional[NoticesUsers] = None,
+        user_id: Optional[int] = None,
+        types: Optional[Iterable[Union[NoticeType, str]]] = None,
+        keys: Optional[Iterable[str]] = None,
+    ) -> List[Notice]:
+        """Query for notices that match all of the provided filters.
+
+        Pebble returns notices that match all of the filters, for example, if
+        called with ``types=[NoticeType.CUSTOM], keys=["example.com/a"]``,
+        Pebble will only return custom notices that also have key "example.com/a".
+
+        If no filters are specified, return notices viewable by the requesting
+        user (notices whose ``user_id`` matches the requester UID as well as
+        public notices).
+
+        Note that the "after" filter is not yet implemented, as it's not
+        needed right now and it's hard to implement correctly with Python's
+        datetime type, which only has microsecond precision (and Go's Time
+        type has nanosecond precision).
+
+        Args:
+            users: Change which users' notices to return (instead of returning
+                notices for the current user).
+            user_id: Filter for notices for the specified user, including
+                public notices (only works for Pebble admins).
+            types: Filter for notices with any of the specified types.
+            keys: Filter for notices with any of the specified keys.
+        """
+        query: Dict[str, Union[str, List[str]]] = {}
+        if users is not None:
+            query['users'] = users.value
+        if user_id is not None:
+            query['user-id'] = str(user_id)
+        if types is not None:
+            query['types'] = [(t.value if isinstance(t, NoticeType) else t) for t in types]
+        if keys is not None:
+            query['keys'] = list(keys)
+        resp = self._request('GET', '/v1/notices', query)
+        return [Notice.from_dict(info) for info in resp['result']]
+
+
+class _FilesParser:
+    """A limited purpose multi-part parser backed by files for memory efficiency."""
+
+    def __init__(self, boundary: Union[bytes, str]):
+        self._response: Optional[_FilesResponse] = None  # externally managed
+        self._part_type: Optional[Literal['response', 'files']] = None  # externally managed
+        self._headers: Optional[email.message.Message] = None  # externally managed
+        self._files: Dict[str, _Tempfile] = {}
+
+        # Prepare the MIME multipart boundary line patterns.
+        if isinstance(boundary, str):
+            boundary = boundary.encode()
+
+        # State vars, as we may enter the feed() function multiple times.
+        self._response_data = bytearray()
+
+        self._max_lookahead = 8 * 1024 * 1024
+
+        self._parser = _MultipartParser(
+            boundary, self._process_header, self._process_body, max_lookahead=self._max_lookahead
+        )
+
+        # RFC 2046 says that the boundary string needs to be preceded by a CRLF.
+        # Unfortunately, the request library's header parsing logic strips off one of
+        # these, so we'll prime the parser buffer with that missing sequence.
+        self._parser.feed(b'\r\n')
+
+    def _process_header(self, data: bytes):
+        parser = email.parser.BytesFeedParser()
+        parser.feed(data)
+        self._headers = parser.close()
+
+        content_disposition = self._headers.get_content_disposition()
+        if content_disposition != 'form-data':
+            raise ProtocolError(f'unexpected content disposition: {content_disposition!r}')
+
+        name = self._headers.get_param('name', header='content-disposition')
+        if name == 'files':
+            filename = self._headers.get_filename()
+            if filename is None:
+                raise ProtocolError('multipart "files" part missing filename')
+            self._prepare_tempfile(filename)
+        elif name != 'response':
+            raise ProtocolError(f'unexpected name in content-disposition header: {name!r}')
+
+        self._part_type = typing.cast('Literal["response", "files"]', name)
+
+    def _process_body(self, data: bytes, done: bool = False):
+        if self._part_type == 'response':
+            self._response_data.extend(data)
+            if done:
+                if len(self._response_data) > self._max_lookahead:
+                    raise ProtocolError('response end marker not found')
+                resp = json.loads(self._response_data.decode())
+                self._response = typing.cast('_FilesResponse', resp)
+                self._response_data = bytearray()
+        elif self._part_type == 'files':
+            if done:
+                # This is the final write.
+                outfile = self._get_open_tempfile()
+                outfile.write(data)
+                outfile.close()
+                self._headers = None
+            else:
+                # Not the end of file data yet. Don't open/close file for intermediate writes
+                outfile = self._get_open_tempfile()
+                outfile.write(data)
+
+    def remove_files(self):
+        """Remove all temporary files on disk."""
+        for file in self._files.values():
+            os.unlink(file.name)
+        self._files.clear()
+
+    def feed(self, data: bytes):
+        """Provide more data to the running parser."""
+        self._parser.feed(data)
+
+    def _prepare_tempfile(self, filename: str):
+        tf = tempfile.NamedTemporaryFile(delete=False)
+        self._files[filename] = tf  # type: ignore # we have a custom protocol for it
+        self.current_filename = filename
+
+    def _get_open_tempfile(self):
+        return self._files[self.current_filename]
+
+    def get_response(self) -> Optional['_FilesResponse']:
+        """Return the deserialized JSON object from the multipart "response" field."""
+        return self._response
+
+    def filenames(self):
+        """Return a list of filenames from the "files" parts of the response."""
+        return list(self._files.keys())
+
+    def get_file(self, path: str, encoding: Optional[str]) -> '_TextOrBinaryIO':
+        """Return an open file object containing the data."""
+        mode = 'r' if encoding else 'rb'
+        # We're using text-based file I/O purely for file encoding purposes, not for
+        # newline normalization.  newline='' serves the line endings as-is.
+        newline = '' if encoding else None
+        file_io = open(  # noqa: SIM115
+            self._files[path].name,
+            mode,
+            encoding=encoding,
+            newline=newline,
+        )
+        # open() returns IO[Any]
+        return typing.cast('_TextOrBinaryIO', file_io)
+
+
+class _MultipartParser:
+    def __init__(
+        self,
+        marker: bytes,
+        handle_header: '_HeaderHandler',
+        handle_body: '_BodyHandler',
+        max_lookahead: int = 0,
+        max_boundary_length: int = 0,
+    ):
+        r"""Configures a parser for mime multipart messages.
+
+        Args:
+            marker: the multipart boundary marker (i.e. in "\r\n--<marker>--\r\n")
+
+            handle_header(data): called once with the entire contents of a part
+            header as encountered in data fed to the parser
+
+            handle_body(data, done=False): called incrementally as part body
+            data is fed into the parser - its "done" parameter is set to true when
+            the body is complete.
+
+            max_lookahead: maximum amount of bytes to buffer when searching for a complete header.
+
+            max_boundary_length: maximum number of bytes that can make up a part
+            boundary (e.g. \r\n--<marker>--\r\n")
+        """
+        self._marker = marker
+        self._handle_header = handle_header
+        self._handle_body = handle_body
+        self._max_lookahead = max_lookahead
+        self._max_boundary_length = max_boundary_length
+
+        self._buf = bytearray()
+        self._pos = 0  # current position in buf
+        self._done = False  # whether we have found the terminal boundary and are done parsing
+        self._header_terminator = b'\r\n\r\n'
+
+        # RFC 2046 notes optional "linear whitespace" (e.g. [ \t]+) after the boundary pattern
+        # and the optional "--" suffix.  The boundaries strings can be constructed as follows:
+        #
+        #     boundary = \r\n--<marker>[ \t]+\r\n
+        #     terminal_boundary = \r\n--<marker>--[ \t]+\r\n
+        #
+        # 99 is arbitrarily chosen to represent a max number of linear
+        # whitespace characters to help avoid wrongly writing boundary
+        # characters into a (temporary) file.
+        if not max_boundary_length:
+            self._max_boundary_length = len(b'\r\n--' + marker + b'--\r\n') + 99
+
+    def feed(self, data: bytes):
+        """Feeds data incrementally into the parser."""
+        if self._done:
+            return
+        self._buf.extend(data)
+
+        while True:
+            # seek to a boundary if we aren't already on one
+            i, n, self._done = _next_part_boundary(self._buf, self._marker)
+            if i == -1 or self._done:
+                return  # waiting for more data or terminal boundary reached
+
+            if self._pos == 0:
+                # parse the part header
+                if self._max_lookahead and len(self._buf) - self._pos > self._max_lookahead:
+                    raise ProtocolError('header terminator not found')
+                term_index = self._buf.find(self._header_terminator)
+                if term_index == -1:
+                    return  # waiting for more data
+
+                start = i + n
+                # data includes the double CRLF at the end of the header.
+                end = term_index + len(self._header_terminator)
+
+                self._handle_header(self._buf[start:end])
+                self._pos = end
+            else:
+                # parse the part body
+                ii, _, self._done = _next_part_boundary(self._buf, self._marker, start=self._pos)
+                safe_bound = max(0, len(self._buf) - self._max_boundary_length)
+                if ii != -1:
+                    # part body is finished
+                    self._handle_body(self._buf[self._pos : ii], done=True)
+                    self._buf = self._buf[ii:]
+                    self._pos = 0
+                    if self._done:
+                        return  # terminal boundary reached
+                elif safe_bound > self._pos:
+                    # write partial body data
+                    data = self._buf[self._pos : safe_bound]
+                    self._pos = safe_bound
+                    self._handle_body(data)
+                    return  # waiting for more data
+                else:
+                    return  # waiting for more data
+
+
+def _next_part_boundary(buf: bytes, marker: bytes, start: int = 0) -> Tuple[int, int, bool]:
+    """Returns the index of the next boundary marker in buf beginning at start.
+
+    Returns:
+        (index, length, is_terminal) or (-1, -1, False) if no boundary is found.
+    """
+    prefix = b'\r\n--' + marker
+    suffix = b'\r\n'
+    terminal_midfix = b'--'
+
+    i = buf.find(prefix, start)
+    if i == -1:
+        return -1, -1, False
+
+    pos = i + len(prefix)
+    is_terminal = False
+    if buf[pos:].startswith(terminal_midfix):
+        is_terminal = True
+        pos += len(terminal_midfix)
+
+    # Note: RFC 2046 notes optional "linear whitespace" (e.g. [ \t]) after the boundary pattern
+    # and the optional "--" suffix.
+    tail = buf[pos:]
+    for c in tail:
+        if c not in b' \t':
+            break
+        pos += 1
+
+    if buf[pos:].startswith(suffix):
+        pos += len(suffix)
+        return i, pos - i, is_terminal
+    return -1, -1, False
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/scenario/capture_events.html b/docs/_build/html/_modules/scenario/capture_events.html new file mode 100644 index 00000000..a21e78ac --- /dev/null +++ b/docs/_build/html/_modules/scenario/capture_events.html @@ -0,0 +1,418 @@ + + + + + + + + scenario.capture_events - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for scenario.capture_events

+#!/usr/bin/env python3
+# Copyright 2023 Canonical Ltd.
+# See LICENSE file for licensing details.
+
+import typing
+from contextlib import contextmanager
+from typing import Type, TypeVar
+
+from ops import CollectStatusEvent
+from ops.framework import (
+    CommitEvent,
+    EventBase,
+    Framework,
+    Handle,
+    NoTypeError,
+    PreCommitEvent,
+)
+
+_T = TypeVar("_T", bound=EventBase)
+
+
+
[docs]@contextmanager +def capture_events( + *types: Type[EventBase], + include_framework=False, + include_deferred=True, +): + """Capture all events of type ``*types`` (using instance checks). + + Example:: + + from ops.charm import StartEvent + from scenario import Event, State + from charm import MyCustomEvent, MyCharm # noqa + + def test_my_event(): + ctx = Context(MyCharm, meta=MyCharm.META) + with capture_events(StartEvent, MyCustomEvent) as captured: + ctx.run(ctx.on.start(), State()) + + assert len(captured) == 2 + e1, e2 = captured + assert isinstance(e2, MyCustomEvent) + assert e2.custom_attr == 'foo' + """ + allowed_types = types or (EventBase,) + + captured = [] + _real_emit = Framework._emit + _real_reemit = Framework.reemit + + def _wrapped_emit(self, evt): + if not include_framework and isinstance( + evt, + (PreCommitEvent, CommitEvent, CollectStatusEvent), + ): + return _real_emit(self, evt) + + if isinstance(evt, allowed_types): + # dump/undump the event to ensure any custom attributes are (re)set by restore() + evt.restore(evt.snapshot()) + captured.append(evt) + + return _real_emit(self, evt) + + def _wrapped_reemit(self): + # Framework calls reemit() before emitting the main juju event. We intercept that call + # and capture all events in storage. + + if not include_deferred: + return _real_reemit(self) + + # load all notices from storage as events. + for event_path, _, _ in self._storage.notices(): + event_handle = Handle.from_path(event_path) + try: + event = self.load_snapshot(event_handle) + except NoTypeError: + continue + event = typing.cast(EventBase, event) + event.deferred = False + self._forget(event) # prevent tracking conflicts + + if not include_framework and isinstance( + event, + (PreCommitEvent, CommitEvent), + ): + continue + + if isinstance(event, allowed_types): + captured.append(event) + + return _real_reemit(self) + + Framework._emit = _wrapped_emit # type: ignore + Framework.reemit = _wrapped_reemit # type: ignore + + yield captured + + Framework._emit = _real_emit # type: ignore + Framework.reemit = _real_reemit # type: ignore
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/scenario/consistency_checker.html b/docs/_build/html/_modules/scenario/consistency_checker.html new file mode 100644 index 00000000..48c921f9 --- /dev/null +++ b/docs/_build/html/_modules/scenario/consistency_checker.html @@ -0,0 +1,1002 @@ + + + + + + + + scenario.consistency_checker - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for scenario.consistency_checker

+#!/usr/bin/env python3
+# Copyright 2023 Canonical Ltd.
+# See LICENSE file for licensing details.
+
+"""
+The :meth:`check_consistency` function is the primary entry point for the
+consistency checks. Calling it ensures that the :class:`State` and the event,
+in combination with the ``Context``, is viable in Juju. For example, Juju can't
+emit a ``foo-relation-changed`` event on your charm unless your charm has
+declared a ``foo`` relation endpoint in its metadata.
+
+Normally, there is no need to explicitly call this function; that happens
+automatically behind the scenes whenever you trigger an event.
+
+If you have a clear false negative, are explicitly testing 'edge',
+inconsistent situations, or for whatever reason the checker is in your way, you
+can set the ``SCENARIO_SKIP_CONSISTENCY_CHECKS`` environment variable and skip
+it altogether.
+"""
+
+import marshal
+import os
+import re
+from collections import defaultdict
+from collections.abc import Sequence
+from numbers import Number
+from typing import TYPE_CHECKING, Iterable, List, NamedTuple, Tuple, Union
+
+from scenario.runtime import InconsistentScenarioError
+from scenario.runtime import logger as scenario_logger
+from scenario.state import (
+    PeerRelation,
+    SubordinateRelation,
+    _Action,
+    _CharmSpec,
+    _normalize_name,
+)
+
+if TYPE_CHECKING:  # pragma: no cover
+    from scenario.state import State, _Event
+
+logger = scenario_logger.getChild("consistency_checker")
+
+
+
[docs]class Results(NamedTuple): + """Consistency checker return type. + + Each consistency check function returns a ``Results`` instance with the + warnings and errors found during the check. + """ + + errors: Iterable[str] + warnings: Iterable[str]
+ + +
[docs]def check_consistency( + state: "State", + event: "_Event", + charm_spec: "_CharmSpec", + juju_version: str, +): + """Validate the combination of a state, an event, a charm spec, and a Juju version. + + When invoked, it performs a series of checks that validate that the state is + consistent with itself, with the event being emitted, the charm metadata, + and so on. + + This function performs some basic validation of the combination of inputs + that goes into a test and determines if the scenario is a + realistic/plausible/consistent one. + + A scenario is inconsistent if it can practically never occur because it + contradicts the Juju model. For example: Juju guarantees that upon calling + ``config-get``, a charm will only ever get the keys it declared in its + ``config.yaml``, so a :class:`scenario.State` declaring some config keys + that are not in the charm's ``config.yaml`` is nonsense, and the combination + of the two is inconsistent. + """ + juju_version_: Tuple[int, ...] = tuple(map(int, juju_version.split("."))) + + if os.getenv("SCENARIO_SKIP_CONSISTENCY_CHECKS"): + logger.info("skipping consistency checks.") + return + + errors = [] + warnings = [] + + for check in ( + check_containers_consistency, + check_config_consistency, + check_resource_consistency, + check_event_consistency, + check_secrets_consistency, + check_storages_consistency, + check_relation_consistency, + check_network_consistency, + check_cloudspec_consistency, + check_storedstate_consistency, + ): + results = check( + state=state, + event=event, + charm_spec=charm_spec, + juju_version=juju_version_, + ) + errors.extend(results.errors) + warnings.extend(results.warnings) + + if errors: + err_fmt = "\n".join(errors) + raise InconsistentScenarioError( + f"Inconsistent scenario. The following errors were found: {err_fmt}", + ) + if warnings: + err_fmt = "\n".join(warnings) + logger.warning( + f"This scenario is probably inconsistent. Double check, and ignore this " + f"warning if you're sure. " + f"The following warnings were found: {err_fmt}", + )
+ + +
[docs]def check_resource_consistency( + *, + state: "State", + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check the internal consistency of the resources from metadata and in :class:`scenario.State`.""" + errors = [] + warnings = [] + + resources_from_meta = set(charm_spec.meta.get("resources", {})) + resources_from_state = {resource.name for resource in state.resources} + if not resources_from_meta.issuperset(resources_from_state): + errors.append( + f"any and all resources passed to State.resources need to have been defined in " + f"metadata.yaml. Metadata resources: {resources_from_meta}; " + f"State.resources: {resources_from_state}.", + ) + return Results(errors, warnings)
+ + +
[docs]def check_event_consistency( + *, + event: "_Event", + charm_spec: "_CharmSpec", + state: "State", + **_kwargs, # noqa: U101 +) -> Results: + """Check the internal consistency of the ``_Event`` data structure. + + For example, it checks that a relation event has a relation instance, and that + the relation endpoint name matches the event prefix. + """ + errors = [] + warnings = [] + + # custom event: can't make assumptions about its name and its semantics + # todo: should we then just skip the other checks? + if not event._is_builtin_event(charm_spec): + warnings.append( + "this is a custom event; if its name makes it look like a builtin one " + "(e.g. a relation event, or a workload event), you might get some false-negative " + "consistency checks.", + ) + + if event._is_relation_event: + _check_relation_event(charm_spec, event, state, errors, warnings) + + if event._is_workload_event: + _check_workload_event(charm_spec, event, state, errors, warnings) + + if event._is_action_event: + _check_action_event(charm_spec, event, state, errors, warnings) + + if event._is_storage_event: + _check_storage_event(charm_spec, event, state, errors, warnings) + + return Results(errors, warnings)
+ + +def _check_relation_event( + charm_spec: _CharmSpec, # noqa: U100 + event: "_Event", + state: "State", + errors: List[str], + warnings: List[str], # noqa: U100 +): + if not event.relation: + errors.append( + "cannot construct a relation event without the relation instance. " + "Please pass one.", + ) + else: + if not event.name.startswith(_normalize_name(event.relation.endpoint)): + errors.append( + f"relation event should start with relation endpoint name. {event.name} does " + f"not start with {event.relation.endpoint}.", + ) + if event.relation not in state.relations: + errors.append( + f"cannot emit {event.name} because relation {event.relation.id} is not in the state.", + ) + + +def _check_workload_event( + charm_spec: _CharmSpec, # noqa: U100 + event: "_Event", + state: "State", + errors: List[str], + warnings: List[str], # noqa: U100 +): + if not event.container: + errors.append( + "cannot construct a workload event without the container instance. " + "Please pass one.", + ) + elif not event.name.startswith(_normalize_name(event.container.name)): + errors.append( + f"workload event should start with container name. {event.name} does " + f"not start with {event.container.name}.", + ) + if event.container not in state.containers: + errors.append( + f"cannot emit {event.name} because container {event.container.name} " + f"is not in the state.", + ) + if not event.container.can_connect: + warnings.append( + "you **can** fire fire pebble-ready while the container cannot connect, " + "but that's most likely not what you want.", + ) + + +def _check_action_event( + charm_spec: _CharmSpec, + event: "_Event", + state: "State", # noqa: U100 + errors: List[str], + warnings: List[str], +): + action = event.action + if not action: + errors.append( + "cannot construct a workload event without the container instance. " + "Please pass one.", + ) + return + + elif not event.name.startswith(_normalize_name(action.name)): + errors.append( + f"action event should start with action name. {event.name} does " + f"not start with {action.name}.", + ) + if action.name not in (charm_spec.actions or ()): + errors.append( + f"action event {event.name} refers to action {action.name} " + f"which is not declared in the charm metadata (actions.yaml).", + ) + return + + _check_action_param_types(charm_spec, action, errors, warnings) + + +def _check_storage_event( + charm_spec: _CharmSpec, + event: "_Event", + state: "State", + errors: List[str], + warnings: List[str], # noqa: U100 +): + storage = event.storage + meta = charm_spec.meta + + if not storage: + errors.append( + "cannot construct a storage event without the Storage instance. " + "Please pass one.", + ) + elif not event.name.startswith(_normalize_name(storage.name)): + errors.append( + f"storage event should start with storage name. {event.name} does " + f"not start with {storage.name}.", + ) + elif storage.name not in meta["storage"]: + errors.append( + f"storage event {event.name} refers to storage {storage.name} " + f"which is not declared in the charm metadata (metadata.yaml) under 'storage'.", + ) + elif storage not in state.storages: + errors.append( + f"cannot emit {event.name} because storage {storage.name} " + f"is not in the state.", + ) + + +def _check_action_param_types( + charm_spec: _CharmSpec, + action: _Action, + errors: List[str], + warnings: List[str], +): + actions = charm_spec.actions + if not actions: + return + + to_python_type = { + "string": str, + "boolean": bool, + "integer": int, + "number": Number, + "array": Sequence, + "object": dict, + } + expected_param_type = {} + for par_name, par_spec in actions[action.name].get("params", {}).items(): + value = par_spec.get("type") + if not value: + errors.append( + f"action parameter {par_name} has no type. " + f"Charmcraft will be unhappy about this. ", + ) + continue + + try: + expected_param_type[par_name] = to_python_type[value] + except KeyError: + warnings.append( + f"unknown data type declared for parameter {par_name}: type={value}. " + f"Cannot consistency-check.", + ) + + for provided_param_name, provided_param_value in action.params.items(): + expected_type = expected_param_type.get(provided_param_name) + if not expected_type: + errors.append( + f"param {provided_param_name} is not a valid parameter for {action.name}: " + "missing from action specification", + ) + continue + if not isinstance(provided_param_value, expected_type): + errors.append( + f"param {provided_param_name} is of type {type(provided_param_value)}: " + f"expecting {expected_type}", + ) + + +
[docs]def check_storages_consistency( + *, + state: "State", + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of the :class:`scenario.State` storages with the charm_spec metadata.""" + state_storage = state.storages + meta_storage = (charm_spec.meta or {}).get("storage", {}) + errors = [] + + if missing := {s.name for s in state_storage}.difference( + set(meta_storage.keys()), + ): + errors.append( + f"some storages passed to State were not defined in metadata.yaml: {missing}", + ) + + seen = [] + for s in state_storage: + tag = (s.name, s.index) + if tag in seen: + errors.append( + f"duplicate storage in State: storage {s.name} with index {s.index} " + f"occurs multiple times in State.storages.", + ) + seen.append(tag) + + return Results(errors, [])
+ + +def _is_secret_identifier(value: Union[str, int, float, bool]) -> bool: + """Return true iff the value is in the form `secret:{secret id}`.""" + # cf. https://github.com/juju/juju/blob/13eb9df3df16a84fd471af8a3c95ddbd04389b71/core/secrets/secret.go#L48 + return bool(re.match(r"secret:[0-9a-z]{20}$", str(value))) + + +
[docs]def check_config_consistency( + *, + state: "State", + charm_spec: "_CharmSpec", + juju_version: Tuple[int, ...], + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of the :class:`scenario.State` config with the charm_spec config.""" + state_config = state.config + meta_config = (charm_spec.config or {}).get("options", {}) + errors = [] + + for key, value in state_config.items(): + if key not in meta_config: + errors.append( + f"config option {key!r} in state.config but not specified in config.yaml or " + f"charmcraft.yaml.", + ) + continue + + converters = { + "string": str, + "int": int, + "float": float, + "boolean": bool, + } + if juju_version >= (3, 4): + converters["secret"] = str + + validators = { + "secret": _is_secret_identifier, + } + + expected_type_name = meta_config[key].get("type", None) + if not expected_type_name: + errors.append(f"config.yaml invalid; option {key!r} has no 'type'.") + continue + validator = validators.get(expected_type_name) + + expected_type = converters.get(expected_type_name) + if not expected_type: + errors.append( + f"config invalid for option {key!r}: 'type' {expected_type_name} unknown", + ) + + elif not isinstance(value, expected_type): + errors.append( + f"config invalid; option {key!r} should be of type {expected_type} " + f"but is of type {type(value)}.", + ) + + elif validator and not validator(value): + errors.append( + f"config invalid: option {key!r} value {value!r} is not valid.", + ) + + return Results(errors, [])
+ + +
[docs]def check_secrets_consistency( + *, + event: "_Event", + state: "State", + juju_version: Tuple[int, ...], + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of any :class:`scenario.Secret` in the :class:`scenario.State`.""" + errors = [] + if not event._is_secret_event: + return Results(errors, []) + + assert event.secret is not None + if event.secret not in state.secrets: + secret_key = event.secret.id if event.secret.id else event.secret.label + errors.append( + f"cannot emit {event.name} because secret {secret_key} is not in the state.", + ) + elif juju_version < (3,): + errors.append( + f"secrets are not supported in the specified juju version {juju_version}. " + f"Should be at least 3.0.", + ) + + return Results(errors, [])
+ + +
[docs]def check_network_consistency( + *, + state: "State", + event: "_Event", # noqa: U100 + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of any :class:`scenario.Network` in the :class:`scenario.State`.""" + errors = [] + + meta_bindings = set(charm_spec.meta.get("extra-bindings", ())) + all_relations = charm_spec.get_all_relations() + non_sub_relations = { + endpoint + for endpoint, metadata in all_relations + if metadata.get("scope") != "container" # mark of a sub + } + + state_bindings = {network.binding_name for network in state.networks} + if diff := state_bindings.difference(meta_bindings.union(non_sub_relations)): + errors.append( + f"Some network bindings defined in State are not in the metadata: {diff}.", + ) + + endpoints = {endpoint for endpoint, metadata in all_relations} + if collisions := endpoints.intersection(meta_bindings): + errors.append( + f"Extra bindings and integration endpoints cannot share the same name: {collisions}.", + ) + + return Results(errors, [])
+ + +
[docs]def check_relation_consistency( + *, + state: "State", + event: "_Event", # noqa: U100 + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of any relations in the :class:`scenario.State`.""" + errors = [] + + peer_relations_meta = charm_spec.meta.get("peers", {}).items() + all_relations_meta = charm_spec.get_all_relations() + + def _get_relations(r): + try: + return state.get_relations(r) + except ValueError: + return () + + # check relation types + for endpoint, _ in peer_relations_meta: + for relation in _get_relations(endpoint): + if not isinstance(relation, PeerRelation): + errors.append( + f"endpoint {endpoint} is a peer relation; " + f"expecting relation to be of type PeerRelation, got {type(relation)}", + ) + + known_endpoints = [a[0] for a in all_relations_meta] + for relation in state.relations: + if (ep := relation.endpoint) not in known_endpoints: + errors.append(f"relation endpoint {ep} is not declared in metadata.") + + seen_ids = set() + for endpoint, relation_meta in all_relations_meta: + expected_sub = relation_meta.get("scope", "") == "container" + relations = _get_relations(endpoint) + for relation in relations: + if relation.id in seen_ids: + errors.append( + f"duplicate relation ID: {relation.id} is claimed " + f"by multiple Relation instances", + ) + + seen_ids.add(relation.id) + is_sub = isinstance(relation, SubordinateRelation) + if is_sub and not expected_sub: + errors.append( + f"endpoint {endpoint} is not a subordinate relation; " + f"expecting relation to be of type Relation, " + f"got {type(relation)}", + ) + if expected_sub and not is_sub: + errors.append( + f"endpoint {endpoint} is not a subordinate relation; " + f"expecting relation to be of type SubordinateRelation, " + f"got {type(relation)}", + ) + + # check for duplicate endpoint names + seen_endpoints = set() + for endpoint, _ in all_relations_meta: + if endpoint in seen_endpoints: + errors.append("duplicate endpoint name in metadata.") + break + seen_endpoints.add(endpoint) + + return Results(errors, [])
+ + +
[docs]def check_containers_consistency( + *, + state: "State", + event: "_Event", + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check the consistency of :class:`scenario.State` containers with the charm_spec metadata.""" + + # event names will be normalized; need to compare against normalized container names. + meta = charm_spec.meta + meta_containers = list(map(_normalize_name, meta.get("containers", {}))) + state_containers = [_normalize_name(c.name) for c in state.containers] + all_notices = {notice.id for c in state.containers for notice in c.notices} + all_checks = { + (c.name, check.name) for c in state.containers for check in c.check_infos + } + errors = [] + + # it's fine if you have containers in meta that are not in state.containers (yet), but it's + # not fine if: + # - you're processing a Pebble event and that container is not in state.containers or + # meta.containers + if event._is_workload_event: + evt_container_name = event.name.split("_pebble_")[0] + if evt_container_name not in meta_containers: + errors.append( + f"the event being processed concerns container {evt_container_name!r}, but a " + f"container with that name is not declared in the charm metadata", + ) + if evt_container_name not in state_containers: + errors.append( + f"the event being processed concerns container {evt_container_name!r}, but a " + f"container with that name is not present in the state. It's odd, but " + f"consistent, if it cannot connect; but it should at least be there.", + ) + if event.notice and event.notice.id not in all_notices: + errors.append( + f"the event being processed concerns notice {event.notice!r}, but that " + "notice is not in any of the containers present in the state.", + ) + if ( + event.check_info + and (evt_container_name, event.check_info.name) not in all_checks + ): + errors.append( + f"the event being processed concerns check {event.check_info.name}, but that " + "check is not the {evt_container_name} container.", + ) + + # - a container in state.containers is not in meta.containers + if diff := (set(state_containers).difference(set(meta_containers))): + errors.append( + f"some containers declared in the state are not specified in metadata. " + f"That's not possible. " + f"Missing from metadata: {diff}.", + ) + + return Results(errors, [])
+ + +
[docs]def check_cloudspec_consistency( + *, + state: "State", + event: "_Event", + charm_spec: "_CharmSpec", + **_kwargs, # noqa: U101 +) -> Results: + """Check that Kubernetes models don't have :attr:`scenario.State.cloud_spec` set.""" + + errors = [] + warnings = [] + + if state.model.type == "kubernetes" and state.model.cloud_spec: + errors.append( + "CloudSpec is only available for machine charms, not Kubernetes charms. " + "Simulate a machine substrate with: `State(..., model=Model(type='lxd'))`.", + ) + + return Results(errors, warnings)
+ + +
[docs]def check_storedstate_consistency( + *, + state: "State", + **_kwargs, # noqa: U101 +) -> Results: + """Check the internal consistency of any :class:`scenario.StoredState` in the :class:`scenario.State`.""" + errors = [] + + # Attribute names must be unique on each object. + names = defaultdict(list) + for ss in state.stored_states: + names[ss.owner_path].append(ss.name) + for owner, owner_names in names.items(): + if len(owner_names) != len(set(owner_names)): + errors.append( + f"{owner} has multiple StoredState objects with the same name.", + ) + + # The content must be marshallable. + for ss in state.stored_states: + # We don't need the marshalled state, just to know that it can be. + # This is the same "only simple types" check that ops does. + try: + marshal.dumps(ss.content) + except ValueError: + errors.append( + f"The StoredState object {ss.owner_path}.{ss.name} should contain only simple types.", + ) + return Results(errors, [])
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/scenario/context.html b/docs/_build/html/_modules/scenario/context.html new file mode 100644 index 00000000..e0710035 --- /dev/null +++ b/docs/_build/html/_modules/scenario/context.html @@ -0,0 +1,945 @@ + + + + + + + + scenario.context - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for scenario.context

+#!/usr/bin/env python3
+# Copyright 2023 Canonical Ltd.
+# See LICENSE file for licensing details.
+
+import functools
+import tempfile
+from contextlib import contextmanager
+from pathlib import Path
+from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, Union, cast
+
+import ops
+
+from scenario.logger import logger as scenario_logger
+from scenario.runtime import Runtime
+from scenario.state import (
+    ActionFailed,
+    CheckInfo,
+    Container,
+    MetadataNotFoundError,
+    Notice,
+    Secret,
+    Storage,
+    _Action,
+    _CharmSpec,
+    _Event,
+)
+
+if TYPE_CHECKING:  # pragma: no cover
+    from ops.testing import CharmType
+
+    from scenario.ops_main_mock import Ops
+    from scenario.state import AnyJson, AnyRelation, JujuLogLine, State, _EntityStatus
+
+    PathLike = Union[str, Path]
+
+logger = scenario_logger.getChild("runtime")
+
+DEFAULT_JUJU_VERSION = "3.4"
+
+
+
[docs]class InvalidEventError(RuntimeError): + """Raised when something is wrong with the event passed to :meth:`scenario.Context.run`"""
+ + +
[docs]class ContextSetupError(RuntimeError): + """Raised by :class:`scenario.Context` when setup fails."""
+ + +
[docs]class AlreadyEmittedError(RuntimeError): + """Raised when :meth:`scenario.Manager.run()` is called more than once."""
+ + +
[docs]class Manager: + """Context manager to offer test code some runtime charm object introspection. + + This class should not be instantiated directly: use a :class:`Context` + in a ``with`` statement instead, for example:: + + ctx = Context(MyCharm) + with ctx(ctx.on.start(), State()) as manager: + manager.charm.setup() + manager.run() + """ + + def __init__( + self, + ctx: "Context", + arg: _Event, + state_in: "State", + ): + self._ctx = ctx + self._arg = arg + self._state_in = state_in + + self._emitted: bool = False + + self.ops: Optional["Ops"] = None + self.output: Optional["State"] = None + + @property + def charm(self) -> ops.CharmBase: + """The charm object instantiated by ops to handle the event. + + The charm is only available during the context manager scope. + """ + if not self.ops: + raise RuntimeError( + "you should __enter__ this context manager before accessing this", + ) + return cast(ops.CharmBase, self.ops.charm) + + @property + def _runner(self): + return self._ctx._run # noqa + + def __enter__(self): + self._wrapped_ctx = wrapped_ctx = self._runner(self._arg, self._state_in) + ops = wrapped_ctx.__enter__() + self.ops = ops + return self + +
[docs] def run(self) -> "State": + """Emit the event and proceed with charm execution. + + This can only be done once. + """ + if self._emitted: + raise AlreadyEmittedError("Can only run once.") + self._emitted = True + + # wrap up Runtime.exec() so that we can gather the output state + self._wrapped_ctx.__exit__(None, None, None) + + assert self._ctx._output_state is not None + return self._ctx._output_state
+ + def __exit__(self, exc_type, exc_val, exc_tb): # noqa: U100 + if not self._emitted: + logger.debug( + "user didn't emit the event within the context manager scope. Doing so implicitly upon exit...", + ) + self.run()
+ + +def _copy_doc(original_func): + """Copy the docstring from `original_func` to the wrapped function.""" + + def decorator(wrapper_func): + @functools.wraps(wrapper_func) + def wrapped(*args, **kwargs): + return wrapper_func(*args, **kwargs) + + wrapped.__doc__ = original_func.__doc__ + return wrapped + + return decorator + + +
[docs]class CharmEvents: + """Events generated by Juju or ops pertaining to the application lifecycle. + + The events listed as attributes of this class should be accessed via the + :attr:`Context.on` attribute. For example:: + + ctx.run(ctx.on.config_changed(), state) + + This behaves similarly to the :class:`ops.CharmEvents` class but is much + simpler as there are no dynamically named attributes, and no ``__getattr__`` + version to get events. In addition, all of the attributes are methods, + which are used to connect the event to the specific object that they relate + to (or, for simpler events like "start" or "stop", take no arguments). + """ + +
[docs] @staticmethod + @_copy_doc(ops.InstallEvent) + def install(): + return _Event("install")
+ +
[docs] @staticmethod + @_copy_doc(ops.StartEvent) + def start(): + return _Event("start")
+ +
[docs] @staticmethod + @_copy_doc(ops.StopEvent) + def stop(): + return _Event("stop")
+ +
[docs] @staticmethod + @_copy_doc(ops.RemoveEvent) + def remove(): + return _Event("remove")
+ +
[docs] @staticmethod + @_copy_doc(ops.UpdateStatusEvent) + def update_status(): + return _Event("update_status")
+ +
[docs] @staticmethod + @_copy_doc(ops.ConfigChangedEvent) + def config_changed(): + return _Event("config_changed")
+ +
[docs] @staticmethod + @_copy_doc(ops.UpdateStatusEvent) + def upgrade_charm(): + return _Event("upgrade_charm")
+ +
[docs] @staticmethod + @_copy_doc(ops.PreSeriesUpgradeEvent) + def pre_series_upgrade(): + return _Event("pre_series_upgrade")
+ +
[docs] @staticmethod + @_copy_doc(ops.PostSeriesUpgradeEvent) + def post_series_upgrade(): + return _Event("post_series_upgrade")
+ +
[docs] @staticmethod + @_copy_doc(ops.LeaderElectedEvent) + def leader_elected(): + return _Event("leader_elected")
+ +
[docs] @staticmethod + @_copy_doc(ops.SecretChangedEvent) + def secret_changed(secret: Secret): + if secret.owner: + raise ValueError( + "This unit will never receive secret-changed for a secret it owns.", + ) + return _Event("secret_changed", secret=secret)
+ +
[docs] @staticmethod + @_copy_doc(ops.SecretExpiredEvent) + def secret_expired(secret: Secret, *, revision: int): + if not secret.owner: + raise ValueError( + "This unit will never receive secret-expire for a secret it does not own.", + ) + return _Event("secret_expired", secret=secret, secret_revision=revision)
+ +
[docs] @staticmethod + @_copy_doc(ops.SecretRotateEvent) + def secret_rotate(secret: Secret): + if not secret.owner: + raise ValueError( + "This unit will never receive secret-rotate for a secret it does not own.", + ) + return _Event("secret_rotate", secret=secret)
+ +
[docs] @staticmethod + @_copy_doc(ops.SecretRemoveEvent) + def secret_remove(secret: Secret, *, revision: int): + if not secret.owner: + raise ValueError( + "This unit will never receive secret-removed for a secret it does not own.", + ) + return _Event("secret_remove", secret=secret, secret_revision=revision)
+ +
[docs] @staticmethod + def collect_app_status(): + """Event triggered at the end of every hook to collect app statuses for evaluation""" + return _Event("collect_app_status")
+ +
[docs] @staticmethod + def collect_unit_status(): + """Event triggered at the end of every hook to collect unit statuses for evaluation""" + return _Event("collect_unit_status")
+ +
[docs] @staticmethod + @_copy_doc(ops.RelationCreatedEvent) + def relation_created(relation: "AnyRelation"): + return _Event(f"{relation.endpoint}_relation_created", relation=relation)
+ +
[docs] @staticmethod + @_copy_doc(ops.RelationJoinedEvent) + def relation_joined(relation: "AnyRelation", *, remote_unit: Optional[int] = None): + return _Event( + f"{relation.endpoint}_relation_joined", + relation=relation, + relation_remote_unit_id=remote_unit, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.RelationChangedEvent) + def relation_changed(relation: "AnyRelation", *, remote_unit: Optional[int] = None): + return _Event( + f"{relation.endpoint}_relation_changed", + relation=relation, + relation_remote_unit_id=remote_unit, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.RelationDepartedEvent) + def relation_departed( + relation: "AnyRelation", + *, + remote_unit: Optional[int] = None, + departing_unit: Optional[int] = None, + ): + return _Event( + f"{relation.endpoint}_relation_departed", + relation=relation, + relation_remote_unit_id=remote_unit, + relation_departed_unit_id=departing_unit, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.RelationBrokenEvent) + def relation_broken(relation: "AnyRelation"): + return _Event(f"{relation.endpoint}_relation_broken", relation=relation)
+ +
[docs] @staticmethod + @_copy_doc(ops.StorageAttachedEvent) + def storage_attached(storage: Storage): + return _Event(f"{storage.name}_storage_attached", storage=storage)
+ +
[docs] @staticmethod + @_copy_doc(ops.StorageDetachingEvent) + def storage_detaching(storage: Storage): + return _Event(f"{storage.name}_storage_detaching", storage=storage)
+ +
[docs] @staticmethod + @_copy_doc(ops.PebbleReadyEvent) + def pebble_ready(container: Container): + return _Event(f"{container.name}_pebble_ready", container=container)
+ +
[docs] @staticmethod + @_copy_doc(ops.PebbleCustomNoticeEvent) + def pebble_custom_notice(container: Container, notice: Notice): + return _Event( + f"{container.name}_pebble_custom_notice", + container=container, + notice=notice, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.PebbleCheckFailedEvent) + def pebble_check_failed(container: Container, info: CheckInfo): + return _Event( + f"{container.name}_pebble_check_failed", + container=container, + check_info=info, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.PebbleCheckRecoveredEvent) + def pebble_check_recovered(container: Container, info: CheckInfo): + return _Event( + f"{container.name}_pebble_check_recovered", + container=container, + check_info=info, + )
+ +
[docs] @staticmethod + @_copy_doc(ops.ActionEvent) + def action( + name: str, + params: Optional[Dict[str, "AnyJson"]] = None, + id: Optional[str] = None, + ): + kwargs = {} + if params: + kwargs["params"] = params + if id: + kwargs["id"] = id + return _Event(f"{name}_action", action=_Action(name, **kwargs))
+ + +
[docs]class Context: + """Represents a simulated charm's execution context. + + The main entry point to running a test. It contains: + + - the charm source code being executed + - the metadata files associated with it + - a charm project repository root + - the Juju version to be simulated + + After you have instantiated ``Context``, typically you will call :meth:`run()` to execute the + charm once, write any assertions you like on the output state returned by the call, write any + assertions you like on the ``Context`` attributes, then discard the ``Context``. + + Each ``Context`` instance is in principle designed to be single-use: + ``Context`` is not cleaned up automatically between charm runs. + + Any side effects generated by executing the charm, that are not rightful part of the + ``State``, are in fact stored in the ``Context``: + + - :attr:`juju_log` + - :attr:`app_status_history` + - :attr:`unit_status_history` + - :attr:`workload_version_history` + - :attr:`removed_secret_revisions` + - :attr:`requested_storages` + - :attr:`emitted_events` + - :attr:`action_logs` + - :attr:`action_results` + + This allows you to write assertions not only on the output state, but also, to some + extent, on the path the charm took to get there. + + A typical test will look like:: + + from charm import MyCharm, MyCustomEvent # noqa + + def test_foo(): + # Arrange: set the context up + ctx = Context(MyCharm) + # Act: prepare the state and emit an event + state_out = ctx.run(ctx.on.update_status(), State()) + # Assert: verify the output state is what you think it should be + assert state_out.unit_status == ActiveStatus('foobar') + # Assert: verify the Context contains what you think it should + assert len(c.emitted_events) == 4 + assert isinstance(c.emitted_events[3], MyCustomEvent) + + If you need access to the charm object that will handle the event, use the + class in a ``with`` statement, like:: + + def test_foo(): + ctx = Context(MyCharm) + with ctx(ctx.on.start(), State()) as manager: + manager.charm._some_private_setup() + manager.run() + """ + + juju_log: List["JujuLogLine"] + """A record of what the charm has sent to juju-log""" + app_status_history: List["_EntityStatus"] + """A record of the app statuses the charm has set""" + unit_status_history: List["_EntityStatus"] + """A record of the unit statuses the charm has set""" + workload_version_history: List[str] + """A record of the workload versions the charm has set""" + removed_secret_revisions: List[int] + """A record of the secret revisions the charm has removed""" + emitted_events: List[ops.EventBase] + """A record of the events (including custom) that the charm has processed""" + requested_storages: Dict[str, int] + """A record of the storages the charm has requested""" + action_logs: List[str] + """The logs associated with the action output, set by the charm with :meth:`ops.ActionEvent.log` + + This will be empty when handling a non-action event. + """ + action_results: Optional[Dict[str, Any]] + """A key-value mapping assigned by the charm as a result of the action. + + This will be ``None`` if the charm never calls :meth:`ops.ActionEvent.set_results` + """ + on: "CharmEvents" + """The events that this charm can respond to. + + Use this when calling :meth:`run` to specify the event to emit. + """ + + def __init__( + self, + charm_type: Type["CharmType"], + meta: Optional[Dict[str, Any]] = None, + *, + actions: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, + charm_root: Optional["PathLike"] = None, + juju_version: str = DEFAULT_JUJU_VERSION, + capture_deferred_events: bool = False, + capture_framework_events: bool = False, + app_name: Optional[str] = None, + unit_id: Optional[int] = 0, + app_trusted: bool = False, + ): + """Represents a simulated charm's execution context. + + If the charm, say, expects a ``./src/foo/bar.yaml`` file present relative to the + execution cwd, you need to use the ``charm_root`` argument. For example:: + + import tempfile + virtual_root = tempfile.TemporaryDirectory() + local_path = Path(local_path.name) + (local_path / 'foo').mkdir() + (local_path / 'foo' / 'bar.yaml').write_text('foo: bar') + Context(... charm_root=virtual_root).run(...) + + :arg charm_type: the :class:`ops.CharmBase` subclass to handle the event. + :arg meta: charm metadata to use. Needs to be a valid metadata.yaml format (as a dict). + If none is provided, we will search for a ``metadata.yaml`` file in the charm root. + :arg actions: charm actions to use. Needs to be a valid actions.yaml format (as a dict). + If none is provided, we will search for a ``actions.yaml`` file in the charm root. + :arg config: charm config to use. Needs to be a valid config.yaml format (as a dict). + If none is provided, we will search for a ``config.yaml`` file in the charm root. + :arg juju_version: Juju agent version to simulate. + :arg app_name: App name that this charm is deployed as. Defaults to the charm name as + defined in the metadata. + :arg unit_id: Unit ID that this charm is deployed as. + :arg app_trusted: whether the charm has Juju trust (deployed with ``--trust`` or added with + ``juju trust``). + :arg charm_root: virtual charm filesystem root the charm will be executed with. + """ + + if not any((meta, actions, config)): + logger.debug("Autoloading charmspec...") + try: + spec = _CharmSpec.autoload(charm_type) + except MetadataNotFoundError as e: + raise ContextSetupError( + f"Cannot setup scenario with `charm_type`={charm_type}. " + f"Did you forget to pass `meta` to this Context?", + ) from e + + else: + if not meta: + meta = {"name": str(charm_type.__name__)} + spec = _CharmSpec( + charm_type=charm_type, + meta=meta, + actions=actions, + config=config, + ) + + self.charm_spec = spec + self.charm_root = charm_root + self.juju_version = juju_version + if juju_version.split(".")[0] == "2": + logger.warn( + "Juju 2.x is closed and unsupported. You may encounter inconsistencies.", + ) + + self._app_name = app_name + self._unit_id = unit_id + self.app_trusted = app_trusted + self._tmp = tempfile.TemporaryDirectory() + + # config for what events to be captured in emitted_events. + self.capture_deferred_events = capture_deferred_events + self.capture_framework_events = capture_framework_events + + # streaming side effects from running an event + self.juju_log: List["JujuLogLine"] = [] + self.app_status_history: List["_EntityStatus"] = [] + self.unit_status_history: List["_EntityStatus"] = [] + self.workload_version_history: List[str] = [] + self.removed_secret_revisions: List[int] = [] + self.emitted_events: List[ops.EventBase] = [] + self.requested_storages: Dict[str, int] = {} + + # set by Runtime.exec() in self._run() + self._output_state: Optional["State"] = None + + # operations (and embedded tasks) from running actions + self.action_logs: List[str] = [] + self.action_results: Optional[Dict[str, Any]] = None + self._action_failure_message: Optional[str] = None + + self.on = CharmEvents() + + def _set_output_state(self, output_state: "State"): + """Hook for Runtime to set the output state.""" + self._output_state = output_state + + @property + def output_state(self) -> "State": + """The output state obtained by running an event on this context. + + Raises: + RuntimeError: if this ``Context`` hasn't been :meth:`run` yet. + """ + if not self._output_state: + raise RuntimeError( + "No output state available. ``.run()`` this Context first.", + ) + return self._output_state + + def _get_container_root(self, container_name: str): + """Get the path to a tempdir where this container's simulated root will live.""" + return Path(self._tmp.name) / "containers" / container_name + + def _get_storage_root(self, name: str, index: int) -> Path: + """Get the path to a tempdir where this storage's simulated root will live.""" + storage_root = Path(self._tmp.name) / "storages" / f"{name}-{index}" + # in the case of _get_container_root, _MockPebbleClient will ensure the dir exists. + storage_root.mkdir(parents=True, exist_ok=True) + return storage_root + + def _record_status(self, state: "State", is_app: bool): + """Record the previous status before a status change.""" + if is_app: + self.app_status_history.append(state.app_status) + else: + self.unit_status_history.append(state.unit_status) + +
[docs] def __call__(self, event: "_Event", state: "State"): + """Context manager to introspect live charm object before and after the event is emitted. + + Usage:: + + ctx = Context(MyCharm) + with ctx(ctx.on.start(), State()) as manager: + manager.charm._some_private_setup() + manager.run() # this will fire the event + assert manager.charm._some_private_attribute == "bar" # noqa + + Args: + event: the event that the charm will respond to. + state: the :class:`State` instance to use when handling the event. + """ + return Manager(self, event, state)
+ +
[docs] def run(self, event: "_Event", state: "State") -> "State": + """Trigger a charm execution with an event and a State. + + Calling this function will call ``ops.main`` and set up the context according to the + specified :class:`State`, then emit the event on the charm. + + :arg event: the event that the charm will respond to. Use the :attr:`on` attribute to + specify the event; for example: ``ctx.on.start()``. + :arg state: the :class:`State` instance to use as data source for the hook tool calls that + the charm will invoke when handling the event. + """ + if event.action: + # Reset the logs, failure status, and results, in case the context + # is reused. + self.action_logs.clear() + if self.action_results is not None: + self.action_results.clear() + self._action_failure_message = None + with self._run(event=event, state=state) as ops: + ops.emit() + if event.action: + if self._action_failure_message is not None: + raise ActionFailed(self._action_failure_message, self.output_state) + return self.output_state
+ + @contextmanager + def _run(self, event: "_Event", state: "State"): + runtime = Runtime( + charm_spec=self.charm_spec, + juju_version=self.juju_version, + charm_root=self.charm_root, + app_name=self._app_name, + unit_id=self._unit_id, + ) + with runtime.exec( + state=state, + event=event, + context=self, + ) as ops: + yield ops
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/scenario/state.html b/docs/_build/html/_modules/scenario/state.html new file mode 100644 index 00000000..66474839 --- /dev/null +++ b/docs/_build/html/_modules/scenario/state.html @@ -0,0 +1,2317 @@ + + + + + + + + scenario.state - Scenario documentation + + + + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for scenario.state

+#!/usr/bin/env python3
+# Copyright 2023 Canonical Ltd.
+# See LICENSE file for licensing details.
+
+import dataclasses
+import datetime
+import inspect
+import random
+import re
+import string
+from enum import Enum
+from itertools import chain
+from pathlib import Path, PurePosixPath
+from typing import (
+    TYPE_CHECKING,
+    Any,
+    Callable,
+    ClassVar,
+    Dict,
+    Final,
+    FrozenSet,
+    Generic,
+    Iterable,
+    List,
+    Literal,
+    Optional,
+    Set,
+    Tuple,
+    Type,
+    TypeVar,
+    Union,
+    cast,
+)
+from uuid import uuid4
+
+import ops
+import yaml
+from ops import pebble
+from ops.charm import CharmBase, CharmEvents
+from ops.model import CloudCredential as CloudCredential_Ops
+from ops.model import CloudSpec as CloudSpec_Ops
+from ops.model import SecretRotate, StatusBase
+
+from scenario.logger import logger as scenario_logger
+
+if TYPE_CHECKING:  # pragma: no cover
+    from scenario import Context
+
+PathLike = Union[str, Path]
+AnyRelation = Union["Relation", "PeerRelation", "SubordinateRelation"]
+AnyJson = Union[str, bool, dict, int, float, list]
+RawSecretRevisionContents = RawDataBagContents = Dict[str, str]
+UnitID = int
+
+CharmType = TypeVar("CharmType", bound=CharmBase)
+
+logger = scenario_logger.getChild("state")
+
+ATTACH_ALL_STORAGES = "ATTACH_ALL_STORAGES"
+CREATE_ALL_RELATIONS = "CREATE_ALL_RELATIONS"
+BREAK_ALL_RELATIONS = "BREAK_ALL_RELATIONS"
+DETACH_ALL_STORAGES = "DETACH_ALL_STORAGES"
+
+ACTION_EVENT_SUFFIX = "_action"
+# all builtin events except secret events. They're special because they carry secret metadata.
+BUILTIN_EVENTS = {
+    "start",
+    "stop",
+    "install",
+    "install",
+    "start",
+    "stop",
+    "remove",
+    "update_status",
+    "config_changed",
+    "upgrade_charm",
+    "pre_series_upgrade",
+    "post_series_upgrade",
+    "leader_elected",
+    "leader_settings_changed",
+    "collect_metrics",
+}
+FRAMEWORK_EVENTS = {
+    "pre_commit",
+    "commit",
+    "collect_app_status",
+    "collect_unit_status",
+}
+PEBBLE_READY_EVENT_SUFFIX = "_pebble_ready"
+PEBBLE_CUSTOM_NOTICE_EVENT_SUFFIX = "_pebble_custom_notice"
+PEBBLE_CHECK_FAILED_EVENT_SUFFIX = "_pebble_check_failed"
+PEBBLE_CHECK_RECOVERED_EVENT_SUFFIX = "_pebble_check_recovered"
+RELATION_EVENTS_SUFFIX = {
+    "_relation_changed",
+    "_relation_broken",
+    "_relation_joined",
+    "_relation_departed",
+    "_relation_created",
+}
+STORAGE_EVENTS_SUFFIX = {
+    "_storage_detaching",
+    "_storage_attached",
+}
+
+SECRET_EVENTS = {
+    "secret_changed",
+    "secret_removed",
+    "secret_rotate",
+    "secret_expired",
+}
+
+META_EVENTS = {
+    "CREATE_ALL_RELATIONS": "_relation_created",
+    "BREAK_ALL_RELATIONS": "_relation_broken",
+    "DETACH_ALL_STORAGES": "_storage_detaching",
+    "ATTACH_ALL_STORAGES": "_storage_attached",
+}
+
+
+
[docs]class StateValidationError(RuntimeError): + """Raised when individual parts of the State are inconsistent."""
+ + # as opposed to InconsistentScenario error where the + # **combination** of several parts of the State are. + + +
[docs]class MetadataNotFoundError(RuntimeError): + """Raised when Scenario can't find a metadata YAML file in the provided charm root."""
+ + +
[docs]class ActionFailed(Exception): + """Raised at the end of the hook if the charm has called ``event.fail()``.""" + + def __init__(self, message: str, state: "State"): + self.message = message + self.state = state
+ + +# This can be replaced with the KW_ONLY dataclasses functionality in Python 3.10+. +def _max_posargs(n: int): + class _MaxPositionalArgs: + """Raises TypeError when instantiating objects if arguments are not passed as keywords. + + Looks for a `_max_positional_args` class attribute, which should be an int + indicating the maximum number of positional arguments that can be passed to + `__init__` (excluding `self`). + """ + + _max_positional_args = n + + def __new__(cls, *args, **kwargs): + # inspect.signature guarantees the order of parameters is as + # declared, which aligns with dataclasses. Simpler ways of + # getting the arguments (like __annotations__) do not have that + # guarantee, although in practice it is the case. + parameters = inspect.signature(cls).parameters + required_args = [ + name + for name in tuple(parameters) + if parameters[name].default is inspect.Parameter.empty + and name not in kwargs + ] + n_posargs = len(args) + max_n_posargs = cls._max_positional_args + kw_only = { + name + for name in tuple(parameters)[max_n_posargs:] + if not name.startswith("_") + } + if n_posargs > max_n_posargs: + raise TypeError( + f"{cls.__name__} takes {max_n_posargs} positional " + f"argument{'' if max_n_posargs == 1 else 's'} but " + f"{n_posargs} {'was' if n_posargs == 1 else 'were'} " + f"given. The following arguments are keyword-only: " + f"{', '.join(kw_only)}", + ) from None + # Also check if there are just not enough arguments at all, because + # the default TypeError message will incorrectly describe some of + # the arguments as positional. + elif n_posargs < len(required_args): + required_pos = [ + f"'{arg}'" + for arg in required_args[n_posargs:] + if arg not in kw_only + ] + required_kw = { + f"'{arg}'" for arg in required_args[n_posargs:] if arg in kw_only + } + if required_pos and required_kw: + details = f"positional: {', '.join(required_pos)} and keyword: {', '.join(required_kw)} arguments" + elif required_pos: + details = f"positional argument{'' if len(required_pos) == 1 else 's'}: {', '.join(required_pos)}" + else: + details = f"keyword argument{'' if len(required_kw) == 1 else 's'}: {', '.join(required_kw)}" + raise TypeError(f"{cls.__name__} missing required {details}") from None + return super().__new__(cls) + + def __reduce__(self): + # The default __reduce__ doesn't understand that some arguments have + # to be passed as keywords, so using the copy module fails. + attrs = cast(Dict[str, Any], super().__reduce__()[2]) + return (lambda: self.__class__(**attrs), ()) + + return _MaxPositionalArgs + + +
[docs]@dataclasses.dataclass(frozen=True) +class JujuLogLine(_max_posargs(2)): + """An entry in the Juju debug-log.""" + + level: str + """The level of the message, for example ``INFO`` or ``ERROR``.""" + message: str + """The log message."""
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class CloudCredential(_max_posargs(0)): + __doc__ = ops.CloudCredential.__doc__ + + auth_type: str + """Authentication type.""" + + attributes: Dict[str, str] = dataclasses.field(default_factory=dict) + """A dictionary containing cloud credentials. + For example, for AWS, it contains `access-key` and `secret-key`; + for Azure, `application-id`, `application-password` and `subscription-id` + can be found here. + """ + + redacted: List[str] = dataclasses.field(default_factory=list) + """A list of redacted generic cloud API secrets.""" + + def _to_ops(self) -> CloudCredential_Ops: + return CloudCredential_Ops( + auth_type=self.auth_type, + attributes=self.attributes, + redacted=self.redacted, + )
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class CloudSpec(_max_posargs(1)): + __doc__ = ops.CloudSpec.__doc__ + + type: str + """Type of the cloud.""" + + name: str = "localhost" + """Juju cloud name.""" + + region: Optional[str] = None + """Region of the cloud.""" + + endpoint: Optional[str] = None + """Endpoint of the cloud.""" + + identity_endpoint: Optional[str] = None + """Identity endpoint of the cloud.""" + + storage_endpoint: Optional[str] = None + """Storage endpoint of the cloud.""" + + credential: Optional[CloudCredential] = None + """Cloud credentials with key-value attributes.""" + + ca_certificates: List[str] = dataclasses.field(default_factory=list) + """A list of CA certificates.""" + + skip_tls_verify: bool = False + """Whether to skip TLS verfication.""" + + is_controller_cloud: bool = False + """If this is the cloud used by the controller.""" + + def _to_ops(self) -> CloudSpec_Ops: + return CloudSpec_Ops( + type=self.type, + name=self.name, + region=self.region, + endpoint=self.endpoint, + identity_endpoint=self.identity_endpoint, + storage_endpoint=self.storage_endpoint, + credential=self.credential._to_ops() if self.credential else None, + ca_certificates=self.ca_certificates, + skip_tls_verify=self.skip_tls_verify, + is_controller_cloud=self.is_controller_cloud, + )
+ + +def _generate_secret_id(): + # This doesn't account for collisions, but the odds are so low that it + # should not be possible in any realistic test run. + secret_id = "".join( + random.choice(string.ascii_lowercase + string.digits) for _ in range(20) + ) + return f"secret:{secret_id}" + + +
[docs]@dataclasses.dataclass(frozen=True) +class Secret(_max_posargs(1)): + """A Juju secret. + + This class is used for both user and charm secrets. + """ + + tracked_content: "RawSecretRevisionContents" + """The content of the secret that the charm is currently tracking. + + This is the content the charm will receive with a + :meth:`ops.Secret.get_content` call.""" + latest_content: Optional["RawSecretRevisionContents"] = None + """The content of the latest revision of the secret. + + This is the content the charm will receive with a + :meth:`ops.Secret.peek_content` call.""" + + id: str = dataclasses.field(default_factory=_generate_secret_id) + """The Juju ID of the secret. + + This is automatically assigned and should not usually need to be explicitly set. + """ + + owner: Literal["unit", "app", None] = None + """Indicates if the secret is owned by *this* unit, *this* application, or + another application/unit. + + If None, the implication is that read access to the secret has been granted + to this unit. + """ + + remote_grants: Dict[int, Set[str]] = dataclasses.field(default_factory=dict) + """Mapping from relation IDs to remote units and applications to which this + secret has been granted.""" + + label: Optional[str] = None + """A human-readable label the charm can use to retrieve the secret. + + If this is set, it implies that the charm has previously set the label. + """ + description: Optional[str] = None + """A human-readable description of the secret.""" + expire: Optional[datetime.datetime] = None + """The time at which the secret will expire.""" + rotate: Optional[SecretRotate] = None + """The rotation policy for the secret.""" + + # what revision is currently tracked by this charm. Only meaningful if owner=False + _tracked_revision: int = 1 + + # what revision is the latest for this secret. + _latest_revision: int = 1 + + def __hash__(self) -> int: + return hash(self.id) + + def __post_init__(self): + if self.latest_content is None: + # bypass frozen dataclass + object.__setattr__(self, "latest_content", self.tracked_content) + + def _track_latest_revision(self): + """Set the current revision to the tracked revision.""" + # bypass frozen dataclass + object.__setattr__(self, "_tracked_revision", self._latest_revision) + object.__setattr__(self, "tracked_content", self.latest_content) + + def _update_metadata( + self, + content: Optional["RawSecretRevisionContents"] = None, + label: Optional[str] = None, + description: Optional[str] = None, + expire: Optional[datetime.datetime] = None, + rotate: Optional[SecretRotate] = None, + ): + """Update the metadata.""" + # bypass frozen dataclass + object.__setattr__(self, "_latest_revision", self._latest_revision + 1) + # TODO: if this is done twice in the same hook, then Juju ignores the + # first call, it doesn't continue to update like this does. + if content: + object.__setattr__(self, "latest_content", content) + if label: + object.__setattr__(self, "label", label) + if description: + object.__setattr__(self, "description", description) + if expire: + if isinstance(expire, datetime.timedelta): + expire = datetime.datetime.now() + expire + object.__setattr__(self, "expire", expire) + if rotate: + object.__setattr__(self, "rotate", rotate)
+ + +def _normalize_name(s: str): + """Event names, in Scenario, uniformly use underscores instead of dashes.""" + return s.replace("-", "_") + + +
[docs]@dataclasses.dataclass(frozen=True) +class Address(_max_posargs(1)): + """An address in a Juju network space.""" + + value: str + """The IP address in the space.""" + hostname: str = "" + """A host name that maps to the address in :attr:`value`.""" + cidr: str = "" + """The CIDR of the address in :attr:`value`.""" + + @property + def address(self): + """A deprecated alias for :attr:`value`.""" + return self.value + + @address.setter + def address(self, value): + object.__setattr__(self, "value", value)
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class BindAddress(_max_posargs(1)): + """An address bound to a network interface in a Juju space.""" + + addresses: List[Address] + """The addresses in the space.""" + interface_name: str = "" + """The name of the network interface.""" + mac_address: Optional[str] = None + """The MAC address of the interface.""" + + def _hook_tool_output_fmt(self): + # dumps itself to dict in the same format the hook tool would + # todo support for legacy (deprecated) `interfacename` and `macaddress` fields? + dct = { + "interface-name": self.interface_name, + "addresses": [dataclasses.asdict(addr) for addr in self.addresses], + } + if self.mac_address: + dct["mac-address"] = self.mac_address + return dct
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class Network(_max_posargs(2)): + """A Juju network space.""" + + binding_name: str + """The name of the network space.""" + bind_addresses: List[BindAddress] = dataclasses.field( + default_factory=lambda: [BindAddress([Address("192.0.2.0")])], + ) + """Addresses that the charm's application should bind to.""" + ingress_addresses: List[str] = dataclasses.field( + default_factory=lambda: ["192.0.2.0"], + ) + """Addresses other applications should use to connect to the unit.""" + egress_subnets: List[str] = dataclasses.field( + default_factory=lambda: ["192.0.2.0/24"], + ) + """Subnets that other units will see the charm connecting from.""" + + def __hash__(self) -> int: + return hash(self.binding_name) + + def _hook_tool_output_fmt(self): + # dumps itself to dict in the same format the hook tool would + return { + "bind-addresses": [ + ba._hook_tool_output_fmt() for ba in self.bind_addresses + ], + "egress-subnets": self.egress_subnets, + "ingress-addresses": self.ingress_addresses, + }
+ + +_next_relation_id_counter = 1 + + +
[docs]def next_relation_id(*, update=True): + """Get the ID the next relation to be created will get. + + Pass update=False if you're only inspecting it. + Pass update=True if you also want to bump it. + """ + global _next_relation_id_counter + cur = _next_relation_id_counter + if update: + _next_relation_id_counter += 1 + return cur
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class RelationBase(_max_posargs(2)): + endpoint: str + """Relation endpoint name. Must match some endpoint name defined in the metadata.""" + + interface: Optional[str] = None + """Interface name. Must match the interface name attached to this endpoint in the metadata. + If left empty, it will be automatically derived from the metadata.""" + + id: int = dataclasses.field(default_factory=next_relation_id) + """Juju relation ID. Every new Relation instance gets a unique one, + if there's trouble, override.""" + + local_app_data: "RawDataBagContents" = dataclasses.field(default_factory=dict) + """This application's databag for this relation.""" + + local_unit_data: "RawDataBagContents" = dataclasses.field( + default_factory=lambda: DEFAULT_JUJU_DATABAG.copy(), + ) + """This unit's databag for this relation.""" + + @property + def _databags(self): + """Yield all databags in this relation.""" + yield self.local_app_data + yield self.local_unit_data + + @property + def _remote_unit_ids(self) -> Tuple["UnitID", ...]: + """Ids of the units on the other end of this relation.""" + raise NotImplementedError() + + def _get_databag_for_remote( + self, + unit_id: int, # noqa: U100 + ) -> "RawDataBagContents": + """Return the databag for some remote unit ID.""" + raise NotImplementedError() + + def __post_init__(self): + if type(self) is RelationBase: + raise RuntimeError( + "RelationBase cannot be instantiated directly; " + "please use Relation, PeerRelation, or SubordinateRelation", + ) + + for databag in self._databags: + self._validate_databag(databag) + + def __hash__(self) -> int: + return hash(self.id) + + def _validate_databag(self, databag: dict): + if not isinstance(databag, dict): + raise StateValidationError( + f"all databags should be dicts, not {type(databag)}", + ) + for v in databag.values(): + if not isinstance(v, str): + raise StateValidationError( + f"all databags should be Dict[str,str]; " + f"found a value of type {type(v)}", + )
+ + +_DEFAULT_IP = " 192.0.2.0" +DEFAULT_JUJU_DATABAG = { + "egress-subnets": _DEFAULT_IP, + "ingress-address": _DEFAULT_IP, + "private-address": _DEFAULT_IP, +} + + +
[docs]@dataclasses.dataclass(frozen=True) +class Relation(RelationBase): + """An integration between the charm and another application.""" + + remote_app_name: str = "remote" + """The name of the remote application, as in the charm's metadata.""" + + # local limit + limit: int = 1 + """The maximum number of integrations on this endpoint.""" + + remote_app_data: "RawDataBagContents" = dataclasses.field(default_factory=dict) + """The current content of the application databag.""" + remote_units_data: Dict["UnitID", "RawDataBagContents"] = dataclasses.field( + default_factory=lambda: {0: DEFAULT_JUJU_DATABAG.copy()}, # dedup + ) + """The current content of the databag for each unit in the relation.""" + + def __hash__(self) -> int: + return hash(self.id) + + @property + def _remote_app_name(self) -> str: + """Who is on the other end of this relation?""" + return self.remote_app_name + + @property + def _remote_unit_ids(self) -> Tuple["UnitID", ...]: + """Ids of the units on the other end of this relation.""" + return tuple(self.remote_units_data) + + def _get_databag_for_remote(self, unit_id: "UnitID") -> "RawDataBagContents": + """Return the databag for some remote unit ID.""" + return self.remote_units_data[unit_id] + + @property + def _databags(self): + """Yield all databags in this relation.""" + yield self.local_app_data + yield self.local_unit_data + yield self.remote_app_data + yield from self.remote_units_data.values()
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class SubordinateRelation(RelationBase): + """A relation to share data between a subordinate and a principal charm.""" + + remote_app_data: "RawDataBagContents" = dataclasses.field(default_factory=dict) + """The current content of the remote application databag.""" + remote_unit_data: "RawDataBagContents" = dataclasses.field( + default_factory=lambda: DEFAULT_JUJU_DATABAG.copy(), + ) + """The current content of the remote unit databag.""" + + remote_app_name: str = "remote" + """The name of the remote application that *this unit* is attached to.""" + remote_unit_id: int = 0 + """The ID of the remote unit that *this unit* is attached to.""" + + def __hash__(self) -> int: + return hash(self.id) + + @property + def _remote_unit_ids(self) -> Tuple[int]: + """Ids of the units on the other end of this relation.""" + return (self.remote_unit_id,) + + def _get_databag_for_remote(self, unit_id: int) -> "RawDataBagContents": + """Return the databag for some remote unit ID.""" + if unit_id is not self.remote_unit_id: + raise ValueError( + f"invalid unit id ({unit_id}): subordinate relation only has one " + f"remote and that has id {self.remote_unit_id}", + ) + return self.remote_unit_data + + @property + def _databags(self): + """Yield all databags in this relation.""" + yield self.local_app_data + yield self.local_unit_data + yield self.remote_app_data + yield self.remote_unit_data + + @property + def remote_unit_name(self) -> str: + """The full name of the remote unit, in the form ``remote/0``.""" + return f"{self.remote_app_name}/{self.remote_unit_id}"
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class PeerRelation(RelationBase): + """A relation to share data between units of the charm.""" + + peers_data: Dict["UnitID", "RawDataBagContents"] = dataclasses.field( + default_factory=lambda: {0: DEFAULT_JUJU_DATABAG.copy()}, + ) + """Current contents of the peer databags.""" + # Consistency checks will validate that *this unit*'s ID is not in here. + + def __hash__(self) -> int: + return hash(self.id) + + @property + def _databags(self): + """Yield all databags in this relation.""" + yield self.local_app_data + yield self.local_unit_data + yield from self.peers_data.values() + + @property + def _remote_unit_ids(self) -> Tuple["UnitID", ...]: + """Ids of the units on the other end of this relation.""" + return tuple(self.peers_data) + + def _get_databag_for_remote(self, unit_id: "UnitID") -> "RawDataBagContents": + """Return the databag for some remote unit ID.""" + return self.peers_data[unit_id]
+ + +def _random_model_name(): + import random + import string + + space = string.ascii_letters + string.digits + return "".join(random.choice(space) for _ in range(20)) + + +
[docs]@dataclasses.dataclass(frozen=True) +class Model(_max_posargs(1)): + """The Juju model in which the charm is deployed.""" + + name: str = dataclasses.field(default_factory=_random_model_name) + """The name of the model.""" + uuid: str = dataclasses.field(default_factory=lambda: str(uuid4())) + """A unique identifier for the model, typically generated by Juju.""" + + # whatever juju models --format=json | jq '.models[<current-model-index>].type' gives back. + # TODO: make this exhaustive. + type: Literal["kubernetes", "lxd"] = "kubernetes" + """The type of Juju model.""" + + cloud_spec: Optional[CloudSpec] = None + """Cloud specification information (metadata) including credentials."""
+ + +# for now, proc mock allows you to map one command to one mocked output. +# todo extend: one input -> multiple outputs, at different times + + +_CHANGE_IDS = 0 + + +def _generate_new_change_id(): + global _CHANGE_IDS + _CHANGE_IDS += 1 + logger.info( + f"change ID unset; automatically assigning {_CHANGE_IDS}. " + f"If there are problems, pass one manually.", + ) + return _CHANGE_IDS + + +
[docs]@dataclasses.dataclass(frozen=True) +class ExecOutput(_max_posargs(0)): + """Mock data for simulated :meth:`ops.Container.exec` calls.""" + + return_code: int = 0 + """The return code of the process (0 is success).""" + stdout: str = "" + """Any content written to stdout by the process.""" + stderr: str = "" + """Any content written to stderr by the process.""" + + # change ID: used internally to keep track of mocked processes + _change_id: int = dataclasses.field(default_factory=_generate_new_change_id) + + def _run(self) -> int: + return self._change_id
+ + +_ExecMock = Dict[Tuple[str, ...], ExecOutput] + + +
[docs]@dataclasses.dataclass(frozen=True) +class Mount(_max_posargs(0)): + """Maps local files to a :class:`Container` filesystem.""" + + location: Union[str, PurePosixPath] + """The location inside of the container.""" + source: Union[str, Path] + """The content to provide when the charm does :meth:`ops.Container.pull`."""
+ + +def _now_utc(): + return datetime.datetime.now(tz=datetime.timezone.utc) + + +_next_notice_id_counter = 1 + + +
[docs]def next_notice_id(*, update=True): + """Get the ID the next Pebble notice to be created will get. + + Pass update=False if you're only inspecting it. + Pass update=True if you also want to bump it. + """ + global _next_notice_id_counter + cur = _next_notice_id_counter + if update: + _next_notice_id_counter += 1 + return str(cur)
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class Notice(_max_posargs(1)): + """A Pebble notice.""" + + key: str + """The notice key, a string that differentiates notices of this type. + + This is in the format ``domain/path``; for example: + ``canonical.com/postgresql/backup`` or ``example.com/mycharm/notice``. + """ + + id: str = dataclasses.field(default_factory=next_notice_id) + """Unique ID for this notice.""" + + user_id: Optional[int] = None + """UID of the user who may view this notice (None means notice is public).""" + + type: Union[pebble.NoticeType, str] = pebble.NoticeType.CUSTOM + """Type of the notice.""" + + first_occurred: datetime.datetime = dataclasses.field(default_factory=_now_utc) + """The first time one of these notices (type and key combination) occurs.""" + + last_occurred: datetime.datetime = dataclasses.field(default_factory=_now_utc) + """The last time one of these notices occurred.""" + + last_repeated: datetime.datetime = dataclasses.field(default_factory=_now_utc) + """The time this notice was last repeated. + + See Pebble's `Notices documentation <https://github.com/canonical/pebble/#notices>`_ + for an explanation of what "repeated" means. + """ + + occurrences: int = 1 + """The number of times one of these notices has occurred.""" + + last_data: Dict[str, str] = dataclasses.field(default_factory=dict) + """Additional data captured from the last occurrence of one of these notices.""" + + repeat_after: Optional[datetime.timedelta] = None + """Minimum time after one of these was last repeated before Pebble will repeat it again.""" + + expire_after: Optional[datetime.timedelta] = None + """How long since one of these last occurred until Pebble will drop the notice.""" + + def _to_ops(self) -> pebble.Notice: + return pebble.Notice( + id=self.id, + user_id=self.user_id, + type=self.type, + key=self.key, + first_occurred=self.first_occurred, + last_occurred=self.last_occurred, + last_repeated=self.last_repeated, + occurrences=self.occurrences, + last_data=self.last_data, + repeat_after=self.repeat_after, + expire_after=self.expire_after, + )
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class CheckInfo(_max_posargs(1)): + """A health check for a Pebble workload container.""" + + name: str + """Name of the check.""" + + level: Optional[pebble.CheckLevel] = None + """Level of the check.""" + + status: pebble.CheckStatus = pebble.CheckStatus.UP + """Status of the check. + + :attr:`ops.pebble.CheckStatus.UP` means the check is healthy (the number of + failures is fewer than the threshold), :attr:`ops.pebble.CheckStatus.DOWN` + means the check is unhealthy (the number of failures has reached the + threshold). + """ + + failures: int = 0 + """Number of failures since the check last succeeded.""" + + threshold: int = 3 + """Failure threshold. + + This is how many consecutive failures for the check to be considered 'down'. + """ + + def _to_ops(self) -> pebble.CheckInfo: + return pebble.CheckInfo( + name=self.name, + level=self.level, + status=self.status, + failures=self.failures, + threshold=self.threshold, + )
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class Container(_max_posargs(1)): + """A Kubernetes container where a charm's workload runs.""" + + name: str + """Name of the container, as found in the charm metadata.""" + + can_connect: bool = False + """When False, all Pebble operations will fail.""" + + # This is the base plan. On top of it, one can add layers. + # We need to model pebble in this way because it's impossible to retrieve the layers from + # pebble or derive them from the resulting plan (which one CAN get from pebble). + # So if we are instantiating Container by fetching info from a 'live' charm, the 'layers' + # will be unknown. all that we can know is the resulting plan (the 'computed plan'). + _base_plan: dict = dataclasses.field(default_factory=dict) + # We expect most of the user-facing testing to be covered by this 'layers' attribute, + # as it is all that will be known when unit-testing. + layers: Dict[str, pebble.Layer] = dataclasses.field(default_factory=dict) + """All :class:`ops.pebble.Layer` definitions that have already been added to the container.""" + + service_status: Dict[str, pebble.ServiceStatus] = dataclasses.field( + default_factory=dict, + ) + """The current status of each Pebble service running in the container.""" + + # when the charm runs `pebble.pull`, it will return .open() from one of these paths. + # when the charm pushes, it will either overwrite one of those paths (careful!) or it will + # create a tempfile and insert its path in the mock filesystem tree + mounts: Dict[str, Mount] = dataclasses.field(default_factory=dict) + """Provides access to the contents of the simulated container filesystem. + + For example, suppose you want to express that your container has: + + * ``/home/foo/bar.py`` + * ``/bin/bash`` + * ``/bin/baz`` + + this becomes:: + + mounts = { + 'foo': Mount('/home/foo', pathlib.Path('/path/to/local/dir/containing/bar/py/')), + 'bin': Mount('/bin/', pathlib.Path('/path/to/local/dir/containing/bash/and/baz/')), + } + """ + + exec_mock: _ExecMock = dataclasses.field(default_factory=dict) + """Simulate executing commands in the container. + + Specify each command the charm might run in the container and a :class:`ExecOutput` + containing its return code and any stdout/stderr. + + For example:: + + container = Container( + name='foo', + exec_mock={ + ('whoami', ): ExecOutput(return_code=0, stdout='ubuntu') + ('dig', '+short', 'canonical.com'): + ExecOutput(return_code=0, stdout='185.125.190.20\\n185.125.190.21') + } + ) + """ + + notices: List[Notice] = dataclasses.field(default_factory=list) + """Any Pebble notices that already exist in the container.""" + + check_infos: FrozenSet[CheckInfo] = frozenset() + """All Pebble health checks that have been added to the container.""" + + def __hash__(self) -> int: + return hash(self.name) + + def _render_services(self): + # copied over from ops.testing._TestingPebbleClient._render_services() + services = {} # type: Dict[str, pebble.Service] + for key in sorted(self.layers.keys()): + layer = self.layers[key] + for name, service in layer.services.items(): + services[name] = service + return services + + @property + def plan(self) -> pebble.Plan: + """The 'computed' Pebble plan. + + This is the base plan plus the layers that have been added on top. + You should run your assertions on this plan, not so much on the layers, + as those are input data. + """ + + # copied over from ops.testing._TestingPebbleClient.get_plan(). + plan = pebble.Plan(yaml.safe_dump(self._base_plan)) + services = self._render_services() + if not services: + return plan + for name in sorted(services.keys()): + plan.services[name] = services[name] + return plan + + @property + def services(self) -> Dict[str, pebble.ServiceInfo]: + """The Pebble services as rendered in the plan.""" + services = self._render_services() + infos = {} # type: Dict[str, pebble.ServiceInfo] + names = sorted(services.keys()) + for name in names: + try: + service = services[name] + except KeyError: + # in pebble, it just returns "nothing matched" if there are 0 matches, + # but it ignores services it doesn't recognize + continue + status = self.service_status.get(name, pebble.ServiceStatus.INACTIVE) + if service.startup == "": + startup = pebble.ServiceStartup.DISABLED + else: + startup = pebble.ServiceStartup(service.startup) + info = pebble.ServiceInfo( + name, + startup=startup, + current=pebble.ServiceStatus(status), + ) + infos[name] = info + return infos + +
[docs] def get_filesystem(self, ctx: "Context") -> Path: + """Simulated Pebble filesystem in this context. + + Returns: + A temporary filesystem containing any files or directories the + charm pushed to the container. + """ + return ctx._get_container_root(self.name)
+ + +_RawStatusLiteral = Literal[ + "waiting", + "blocked", + "active", + "unknown", + "error", + "maintenance", +] + + +@dataclasses.dataclass(frozen=True) +class _EntityStatus: + """This class represents StatusBase and should not be interacted with directly.""" + + # Why not use StatusBase directly? Because that can't be used with + # dataclasses.asdict to then be JSON-serializable. + + name: _RawStatusLiteral + message: str = "" + + _entity_statuses: ClassVar[Dict[str, Type["_EntityStatus"]]] = {} + + def __eq__(self, other): + if isinstance(other, (StatusBase, _EntityStatus)): + return (self.name, self.message) == (other.name, other.message) + return super().__eq__(other) + + def __repr__(self): + status_type_name = self.name.title() + "Status" + if self.name == "unknown": + return f"{status_type_name}()" + return f"{status_type_name}('{self.message}')" + + @classmethod + def from_status_name( + cls, + name: _RawStatusLiteral, + message: str = "", + ) -> "_EntityStatus": + # Note that this won't work for UnknownStatus. + # All subclasses have a default 'name' attribute, but the type checker can't tell that. + return cls._entity_statuses[name](message=message) # type:ignore + + @classmethod + def from_ops(cls, obj: StatusBase) -> "_EntityStatus": + return cls.from_status_name(cast(_RawStatusLiteral, obj.name), obj.message) + + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class UnknownStatus(_EntityStatus, ops.UnknownStatus): + __doc__ = ops.UnknownStatus.__doc__ + + name: Literal["unknown"] = "unknown" + + def __init__(self): + super().__init__(name=self.name)
+ + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class ErrorStatus(_EntityStatus, ops.ErrorStatus): + __doc__ = ops.ErrorStatus.__doc__ + + name: Literal["error"] = "error" + + def __init__(self, message: str = ""): + super().__init__(name="error", message=message)
+ + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class ActiveStatus(_EntityStatus, ops.ActiveStatus): + __doc__ = ops.ActiveStatus.__doc__ + + name: Literal["active"] = "active" + + def __init__(self, message: str = ""): + super().__init__(name="active", message=message)
+ + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class BlockedStatus(_EntityStatus, ops.BlockedStatus): + __doc__ = ops.BlockedStatus.__doc__ + + name: Literal["blocked"] = "blocked" + + def __init__(self, message: str = ""): + super().__init__(name="blocked", message=message)
+ + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class MaintenanceStatus(_EntityStatus, ops.MaintenanceStatus): + __doc__ = ops.MaintenanceStatus.__doc__ + + name: Literal["maintenance"] = "maintenance" + + def __init__(self, message: str = ""): + super().__init__(name="maintenance", message=message)
+ + +
[docs]@dataclasses.dataclass(frozen=True, eq=False, repr=False) +class WaitingStatus(_EntityStatus, ops.WaitingStatus): + __doc__ = ops.WaitingStatus.__doc__ + + name: Literal["waiting"] = "waiting" + + def __init__(self, message: str = ""): + super().__init__(name="waiting", message=message)
+ + +_EntityStatus._entity_statuses.update( + unknown=UnknownStatus, + error=ErrorStatus, + active=ActiveStatus, + blocked=BlockedStatus, + maintenance=MaintenanceStatus, + waiting=WaitingStatus, +) + + +
[docs]@dataclasses.dataclass(frozen=True) +class StoredState(_max_posargs(1)): + """Represents unit-local state that persists across events.""" + + name: str = "_stored" + """The attribute in the charm class where the state is stored. + + For example, ``_stored`` in this class:: + + class MyCharm(ops.CharmBase): + _stored = ops.StoredState() + + """ + + owner_path: Optional[str] = None + """The path to the owner of this StoredState instance. + + If None, the owner is the Framework. Otherwise, /-separated object names, + for example MyCharm/MyCharmLib. + """ + + # Ideally, the type here would be only marshallable types, rather than Any. + # However, it's complex to describe those types, since it's a recursive + # definition - even in TypeShed the _Marshallable type includes containers + # like list[Any], which seems to defeat the point. + content: Dict[str, Any] = dataclasses.field(default_factory=dict) + """The content of the :class:`ops.StoredState` instance.""" + + _data_type_name: str = "StoredStateData" + + @property + def _handle_path(self): + return f"{self.owner_path or ''}/{self._data_type_name}[{self.name}]" + + def __hash__(self) -> int: + return hash(self._handle_path)
+ + +_RawPortProtocolLiteral = Literal["tcp", "udp", "icmp"] + + +
[docs]@dataclasses.dataclass(frozen=True) +class Port(_max_posargs(1)): + """Represents a port on the charm host. + + Port objects should not be instantiated directly: use :class:`TCPPort`, + :class:`UDPPort`, or :class:`ICMPPort` instead. + """ + + port: Optional[int] = None + """The port to open. Required for TCP and UDP; not allowed for ICMP.""" + protocol: _RawPortProtocolLiteral = "tcp" + """The protocol that data transferred over the port will use.""" + + def __post_init__(self): + if type(self) is Port: + raise RuntimeError( + "Port cannot be instantiated directly; " + "please use TCPPort, UDPPort, or ICMPPort", + ) + + def __eq__(self, other: object) -> bool: + if isinstance(other, (Port, ops.Port)): + return (self.protocol, self.port) == (other.protocol, other.port) + return False
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class TCPPort(Port): + """Represents a TCP port on the charm host.""" + + port: int + """The port to open.""" + protocol: _RawPortProtocolLiteral = "tcp" + """The protocol that data transferred over the port will use. + + :meta private: + """ + + def __post_init__(self): + super().__post_init__() + if not (1 <= self.port <= 65535): + raise StateValidationError( + f"`port` outside bounds [1:65535], got {self.port}", + )
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class UDPPort(Port): + """Represents a UDP port on the charm host.""" + + port: int + """The port to open.""" + protocol: _RawPortProtocolLiteral = "udp" + """The protocol that data transferred over the port will use. + + :meta private: + """ + + def __post_init__(self): + super().__post_init__() + if not (1 <= self.port <= 65535): + raise StateValidationError( + f"`port` outside bounds [1:65535], got {self.port}", + )
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class ICMPPort(Port): + """Represents an ICMP port on the charm host.""" + + protocol: _RawPortProtocolLiteral = "icmp" + """The protocol that data transferred over the port will use. + + :meta private: + """ + + _max_positional_args: Final = 0 + + def __post_init__(self): + super().__post_init__() + if self.port is not None: + raise StateValidationError("`port` cannot be set for `ICMPPort`")
+ + +_port_cls_by_protocol = { + "tcp": TCPPort, + "udp": UDPPort, + "icmp": ICMPPort, +} + + +_next_storage_index_counter = 0 # storage indices start at 0 + + +
[docs]def next_storage_index(*, update=True): + """Get the index (used to be called ID) the next Storage to be created will get. + + Pass update=False if you're only inspecting it. + Pass update=True if you also want to bump it. + """ + global _next_storage_index_counter + cur = _next_storage_index_counter + if update: + _next_storage_index_counter += 1 + return cur
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class Storage(_max_posargs(1)): + """Represents an (attached) storage made available to the charm container.""" + + name: str + """The name of the storage, as found in the charm metadata.""" + + index: int = dataclasses.field(default_factory=next_storage_index) + """The index of this storage instance. + + For Kubernetes charms, this will always be 1. For machine charms, each new + Storage instance gets a new index.""" + + def __eq__(self, other: object) -> bool: + if isinstance(other, (Storage, ops.Storage)): + return (self.name, self.index) == (other.name, other.index) + return False + +
[docs] def get_filesystem(self, ctx: "Context") -> Path: + """Simulated filesystem root in this context.""" + return ctx._get_storage_root(self.name, self.index)
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class Resource(_max_posargs(0)): + """Represents a resource made available to the charm.""" + + name: str + """The name of the resource, as found in the charm metadata.""" + path: "PathLike" + """A local path that will be provided to the charm as the content of the resource."""
+ + +
[docs]@dataclasses.dataclass(frozen=True) +class State(_max_posargs(0)): + """Represents the Juju-owned portion of a unit's state. + + Roughly speaking, it wraps all hook-tool- and pebble-mediated data a charm can access in its + lifecycle. For example, status-get will return data from `State.status`, is-leader will + return data from `State.leader`, and so on. + """ + + config: Dict[str, Union[str, int, float, bool]] = dataclasses.field( + default_factory=dict, + ) + """The present configuration of this charm.""" + relations: Iterable["AnyRelation"] = dataclasses.field(default_factory=frozenset) + """All relations that currently exist for this charm.""" + networks: Iterable[Network] = dataclasses.field(default_factory=frozenset) + """Manual overrides for any relation and extra bindings currently provisioned for this charm. + If a metadata-defined relation endpoint is not explicitly mapped to a Network in this field, + it will be defaulted. + + .. warning:: + `extra-bindings` is a deprecated, regretful feature in Juju/ops. For completeness we + support it, but use at your own risk. If a metadata-defined extra-binding is left empty, + it will be defaulted. + """ + containers: Iterable[Container] = dataclasses.field(default_factory=frozenset) + """All containers (whether they can connect or not) that this charm is aware of.""" + storages: Iterable[Storage] = dataclasses.field(default_factory=frozenset) + """All **attached** storage instances for this charm. + + If a storage is not attached, omit it from this listing.""" + + # we don't use sets to make json serialization easier + opened_ports: Iterable[Port] = dataclasses.field(default_factory=frozenset) + """Ports opened by Juju on this charm.""" + leader: bool = False + """Whether this charm has leadership.""" + model: Model = Model() + """The model this charm lives in.""" + secrets: Iterable[Secret] = dataclasses.field(default_factory=frozenset) + """The secrets this charm has access to (as an owner, or as a grantee). + + The presence of a secret in this list entails that the charm can read it. + Whether it can manage it or not depends on the individual secret's `owner` flag.""" + resources: Iterable[Resource] = dataclasses.field(default_factory=frozenset) + """All resources that this charm can access.""" + planned_units: int = 1 + """Number of non-dying planned units that are expected to be running this application. + + Use with caution.""" + + # Represents the OF's event queue. These events will be emitted before the event being + # dispatched, and represent the events that had been deferred during the previous run. + # If the charm defers any events during "this execution", they will be appended + # to this list. + deferred: List["DeferredEvent"] = dataclasses.field(default_factory=list) + """Events that have been deferred on this charm by some previous execution.""" + stored_states: Iterable["StoredState"] = dataclasses.field( + default_factory=frozenset, + ) + """Contents of a charm's stored state.""" + + # the current statuses. + app_status: _EntityStatus = UnknownStatus() + """Status of the application.""" + unit_status: _EntityStatus = UnknownStatus() + """Status of the unit.""" + workload_version: str = "" + """Workload version.""" + + def __post_init__(self): + # Let people pass in the ops classes, and convert them to the appropriate Scenario classes. + for name in ["app_status", "unit_status"]: + val = getattr(self, name) + if isinstance(val, _EntityStatus): + pass + elif isinstance(val, StatusBase): + object.__setattr__(self, name, _EntityStatus.from_ops(val)) + else: + raise TypeError(f"Invalid status.{name}: {val!r}") + normalised_ports = [ + Port(protocol=port.protocol, port=port.port) + if isinstance(port, ops.Port) + else port + for port in self.opened_ports + ] + if self.opened_ports != normalised_ports: + object.__setattr__(self, "opened_ports", normalised_ports) + normalised_storage = [ + Storage(name=storage.name, index=storage.index) + if isinstance(storage, ops.Storage) + else storage + for storage in self.storages + ] + if self.storages != normalised_storage: + object.__setattr__(self, "storages", normalised_storage) + # ops.Container, ops.Model, ops.Relation, ops.Secret should not be instantiated by charmers. + # ops.Network does not have the relation name, so cannot be converted. + # ops.Resources does not contain the source of the resource, so cannot be converted. + # ops.StoredState is not convenient to initialise with data, so not useful here. + + # It's convenient to pass a set, but we really want the attributes to be + # frozen sets to increase the immutability of State objects. + for name in [ + "relations", + "containers", + "storages", + "networks", + "opened_ports", + "secrets", + "resources", + "stored_states", + ]: + val = getattr(self, name) + # It's ok to pass any iterable (of hashable objects), but you'll get + # a frozenset as the actual attribute. + if not isinstance(val, frozenset): + object.__setattr__(self, name, frozenset(val)) + + def _update_workload_version(self, new_workload_version: str): + """Update the current app version and record the previous one.""" + # We don't keep a full history because we don't expect the app version to change more + # than once per hook. + + # bypass frozen dataclass + object.__setattr__(self, "workload_version", new_workload_version) + + def _update_status( + self, + new_status: _EntityStatus, + is_app: bool = False, + ): + """Update the current app/unit status.""" + name = "app_status" if is_app else "unit_status" + # bypass frozen dataclass + object.__setattr__(self, name, new_status) + + def _update_opened_ports(self, new_ports: FrozenSet[Port]): + """Update the current opened ports.""" + # bypass frozen dataclass + object.__setattr__(self, "opened_ports", new_ports) + + def _update_secrets(self, new_secrets: FrozenSet[Secret]): + """Update the current secrets.""" + # bypass frozen dataclass + object.__setattr__(self, "secrets", new_secrets) + +
[docs] def with_can_connect(self, container_name: str, can_connect: bool) -> "State": + """A copy of the State with the can_connect attribute of a container updated.""" + def replacer(container: Container): + if container.name == container_name: + return dataclasses.replace(container, can_connect=can_connect) + return container + + ctrs = tuple(map(replacer, self.containers)) + return dataclasses.replace(self, containers=ctrs)
+ +
[docs] def with_leadership(self, leader: bool) -> "State": + """A copy of the State with the leadership status updated.""" + return dataclasses.replace(self, leader=leader)
+ +
[docs] def with_unit_status(self, status: StatusBase) -> "State": + """A copy of the State with the unit status updated.""" + return dataclasses.replace( + self, + unit_status=_EntityStatus.from_ops(status), + )
+ +
[docs] def get_container(self, container: str, /) -> Container: + """Get container from this State, based on its name.""" + for state_container in self.containers: + if state_container.name == container: + return state_container + raise KeyError(f"container: {container} not found in the State")
+ +
[docs] def get_network(self, binding_name: str, /) -> Network: + """Get network from this State, based on its binding name.""" + for network in self.networks: + if network.binding_name == binding_name: + return network + raise KeyError(f"network: {binding_name} not found in the State")
+ +
[docs] def get_secret( + self, + *, + id: Optional[str] = None, + label: Optional[str] = None, + ) -> Secret: + """Get secret from this State, based on the secret's id or label.""" + if id is None and label is None: + raise ValueError("An id or label must be provided.") + + for secret in self.secrets: + if ( + (id and label and secret.id == id and secret.label == label) + or (id and label is None and secret.id == id) + or (id is None and label and secret.label == label) + ): + return secret + raise KeyError("secret: not found in the State")
+ +
[docs] def get_stored_state( + self, + stored_state: str, + /, + *, + owner_path: Optional[str] = None, + ) -> StoredState: + """Get stored state from this State, based on the stored state's name and owner_path.""" + for ss in self.stored_states: + if ss.name == stored_state and ss.owner_path == owner_path: + return ss + raise ValueError(f"stored state: {stored_state} not found in the State")
+ +
[docs] def get_storage( + self, + storage: str, + /, + *, + index: Optional[int] = 0, + ) -> Storage: + """Get storage from this State, based on the storage's name and index.""" + for state_storage in self.storages: + if state_storage.name == storage and storage.index == index: + return state_storage + raise ValueError( + f"storage: name={storage}, index={index} not found in the State", + )
+ +
[docs] def get_relation(self, relation: int, /) -> "AnyRelation": + """Get relation from this State, based on the relation's id.""" + for state_relation in self.relations: + if state_relation.id == relation: + return state_relation + raise KeyError(f"relation: id={relation} not found in the State")
+ +
[docs] def get_relations(self, endpoint: str) -> Tuple["AnyRelation", ...]: + """Get all relations on this endpoint from the current state.""" + + # we rather normalize the endpoint than worry about cursed metadata situations such as: + # requires: + # foo-bar: ... + # foo_bar: ... + + normalized_endpoint = _normalize_name(endpoint) + return tuple( + r + for r in self.relations + if _normalize_name(r.endpoint) == normalized_endpoint + )
+ + +def _is_valid_charmcraft_25_metadata(meta: Dict[str, Any]): + # Check whether this dict has the expected mandatory metadata fields according to the + # charmcraft >2.5 charmcraft.yaml schema + if (config_type := meta.get("type")) != "charm": + logger.debug( + f"Not a charm: charmcraft yaml config ``.type`` is {config_type!r}.", + ) + return False + if not all(field in meta for field in {"name", "summary", "description"}): + logger.debug("Not a charm: charmcraft yaml misses some required fields") + return False + return True + + +@dataclasses.dataclass(frozen=True) +class _CharmSpec(Generic[CharmType]): + """Charm spec.""" + + charm_type: Type[CharmBase] + meta: Dict[str, Any] + actions: Optional[Dict[str, Any]] = None + config: Optional[Dict[str, Any]] = None + + # autoloaded means: we are running a 'real' charm class, living in some + # /src/charm.py, and the metadata files are 'real' metadata files. + is_autoloaded: bool = False + + @staticmethod + def _load_metadata_legacy(charm_root: Path): + """Load metadata from charm projects created with Charmcraft < 2.5.""" + # back in the days, we used to have separate metadata.yaml, config.yaml and actions.yaml + # files for charm metadata. + metadata_path = charm_root / "metadata.yaml" + meta = yaml.safe_load(metadata_path.open()) if metadata_path.exists() else {} + + config_path = charm_root / "config.yaml" + config = yaml.safe_load(config_path.open()) if config_path.exists() else None + + actions_path = charm_root / "actions.yaml" + actions = yaml.safe_load(actions_path.open()) if actions_path.exists() else None + return meta, config, actions + + @staticmethod + def _load_metadata(charm_root: Path): + """Load metadata from charm projects created with Charmcraft >= 2.5.""" + metadata_path = charm_root / "charmcraft.yaml" + meta = yaml.safe_load(metadata_path.open()) if metadata_path.exists() else {} + if not _is_valid_charmcraft_25_metadata(meta): + meta = {} + config = meta.pop("config", None) + actions = meta.pop("actions", None) + return meta, config, actions + + @staticmethod + def autoload(charm_type: Type[CharmBase]) -> "_CharmSpec[CharmType]": + """Construct a ``_CharmSpec`` object by looking up the metadata from the charm's repo root. + + Will attempt to load the metadata off the ``charmcraft.yaml`` file + """ + charm_source_path = Path(inspect.getfile(charm_type)) + charm_root = charm_source_path.parent.parent + + # attempt to load metadata from unified charmcraft.yaml + meta, config, actions = _CharmSpec._load_metadata(charm_root) + + if not meta: + # try to load using legacy metadata.yaml/actions.yaml/config.yaml files + meta, config, actions = _CharmSpec._load_metadata_legacy(charm_root) + + if not meta: + # still no metadata? bug out + raise MetadataNotFoundError( + f"invalid charm root {charm_root!r}; " + f"expected to contain at least a `charmcraft.yaml` file " + f"(or a `metadata.yaml` file if it's an old charm).", + ) + + return _CharmSpec( + charm_type=charm_type, + meta=meta, + actions=actions, + config=config, + is_autoloaded=True, + ) + + def get_all_relations(self) -> List[Tuple[str, Dict[str, str]]]: + """A list of all relation endpoints defined in the metadata.""" + return list( + chain( + self.meta.get("requires", {}).items(), + self.meta.get("provides", {}).items(), + self.meta.get("peers", {}).items(), + ), + ) + + +
[docs]@dataclasses.dataclass(frozen=True) +class DeferredEvent: + """An event that has been deferred to run prior to the next Juju event. + + In most cases, the :func:`deferred` function should be used to create a + ``DeferredEvent`` instance.""" + + handle_path: str + owner: str + observer: str + + # needs to be marshal.dumps-able. + snapshot_data: Dict = dataclasses.field(default_factory=dict) + + @property + def name(self): + return self.handle_path.split("/")[-1].split("[")[0]
+ + +class _EventType(str, Enum): + framework = "framework" + builtin = "builtin" + relation = "relation" + action = "action" + secret = "secret" + storage = "storage" + workload = "workload" + custom = "custom" + + +class _EventPath(str): + if TYPE_CHECKING: # pragma: no cover + name: str + owner_path: List[str] + suffix: str + prefix: str + is_custom: bool + type: _EventType + + def __new__(cls, string): + string = _normalize_name(string) + instance = super().__new__(cls, string) + + instance.name = name = string.split(".")[-1] + instance.owner_path = string.split(".")[:-1] or ["on"] + + instance.suffix, instance.type = suffix, _ = _EventPath._get_suffix_and_type( + name, + ) + if suffix: + instance.prefix, _ = string.rsplit(suffix) + else: + instance.prefix = string + + instance.is_custom = suffix == "" + return instance + + @staticmethod + def _get_suffix_and_type(s: str) -> Tuple[str, _EventType]: + for suffix in RELATION_EVENTS_SUFFIX: + if s.endswith(suffix): + return suffix, _EventType.relation + + if s.endswith(ACTION_EVENT_SUFFIX): + return ACTION_EVENT_SUFFIX, _EventType.action + + if s in SECRET_EVENTS: + return s, _EventType.secret + + if s in FRAMEWORK_EVENTS: + return s, _EventType.framework + + # Whether the event name indicates that this is a storage event. + for suffix in STORAGE_EVENTS_SUFFIX: + if s.endswith(suffix): + return suffix, _EventType.storage + + # Whether the event name indicates that this is a workload event. + if s.endswith(PEBBLE_READY_EVENT_SUFFIX): + return PEBBLE_READY_EVENT_SUFFIX, _EventType.workload + if s.endswith(PEBBLE_CUSTOM_NOTICE_EVENT_SUFFIX): + return PEBBLE_CUSTOM_NOTICE_EVENT_SUFFIX, _EventType.workload + if s.endswith(PEBBLE_CHECK_FAILED_EVENT_SUFFIX): + return PEBBLE_CHECK_FAILED_EVENT_SUFFIX, _EventType.workload + if s.endswith(PEBBLE_CHECK_RECOVERED_EVENT_SUFFIX): + return PEBBLE_CHECK_RECOVERED_EVENT_SUFFIX, _EventType.workload + + if s in BUILTIN_EVENTS: + return "", _EventType.builtin + + return "", _EventType.custom + + +@dataclasses.dataclass(frozen=True) +class _Event: + """A Juju, ops, or custom event that can be run against a charm. + + Typically, for simple events, the string name (e.g. ``install``) can be used, + and for more complex events, an ``event`` property will be available on the + related object (e.g. ``relation.joined_event``). + """ + + path: str + args: Tuple[Any, ...] = () + kwargs: Dict[str, Any] = dataclasses.field(default_factory=dict) + + storage: Optional["Storage"] = None + """If this is a storage event, the storage it refers to.""" + relation: Optional["AnyRelation"] = None + """If this is a relation event, the relation it refers to.""" + relation_remote_unit_id: Optional[int] = None + relation_departed_unit_id: Optional[int] = None + """If this is a relation event, the name of the remote unit the event is about.""" + + secret: Optional[Secret] = None + secret_revision: Optional[int] = None + """If this is a secret event, the secret it refers to.""" + + container: Optional[Container] = None + """If this is a workload (container) event, the container it refers to.""" + + notice: Optional[Notice] = None + """If this is a Pebble notice event, the notice it refers to.""" + + check_info: Optional[CheckInfo] = None + """If this is a Pebble check event, the check info it provides.""" + + action: Optional["_Action"] = None + """If this is an action event, the :class:`Action` it refers to.""" + + _owner_path: List[str] = dataclasses.field(default_factory=list) + + def __post_init__(self): + path = _EventPath(self.path) + # bypass frozen dataclass + object.__setattr__(self, "path", path) + + @property + def _path(self) -> _EventPath: + # we converted it in __post_init__, but the type checker doesn't know about that + return cast(_EventPath, self.path) + + @property + def name(self) -> str: + """Full event name. + + Consists of a 'prefix' and a 'suffix'. The suffix denotes the type of the event, the + prefix the name of the entity the event is about. + + "foo-relation-changed": + - "foo"=prefix (name of a relation), + - "-relation-changed"=suffix (relation event) + """ + return self._path.name + + @property + def owner_path(self) -> List[str]: + """Path to the ObjectEvents instance owning this event. + + If this event is defined on the toplevel charm class, it should be ['on']. + """ + return self._path.owner_path + + @property + def _is_relation_event(self) -> bool: + """Whether the event name indicates that this is a relation event.""" + return self._path.type is _EventType.relation + + @property + def _is_action_event(self) -> bool: + """Whether the event name indicates that this is a relation event.""" + return self._path.type is _EventType.action + + @property + def _is_secret_event(self) -> bool: + """Whether the event name indicates that this is a secret event.""" + return self._path.type is _EventType.secret + + @property + def _is_storage_event(self) -> bool: + """Whether the event name indicates that this is a storage event.""" + return self._path.type is _EventType.storage + + @property + def _is_workload_event(self) -> bool: + """Whether the event name indicates that this is a workload event.""" + return self._path.type is _EventType.workload + + # this method is private because _CharmSpec is not quite user-facing; also, + # the user should know. + def _is_builtin_event(self, charm_spec: "_CharmSpec"): + """Determine whether the event is a custom-defined one or a builtin one.""" + event_name = self.name + + # simple case: this is an event type owned by our charm base.on + if hasattr(charm_spec.charm_type.on, event_name): + return hasattr(CharmEvents, event_name) + + # this could be an event defined on some other Object, e.g. a charm lib. + # We don't support (yet) directly emitting those, but they COULD have names that conflict + # with events owned by the base charm. E.g. if the charm has a `foo` relation, the charm + # will get a charm.on.foo_relation_created. Your charm lib is free to define its own + # `foo_relation_created` custom event, because its handle will be + # `charm.lib.on.foo_relation_created` and therefore be unique and the Framework is happy. + # However, our Event data structure ATM has no knowledge of which Object/Handle it is + # owned by. So the only thing we can do right now is: check whether the event name, + # assuming it is owned by the charm, LOOKS LIKE that of a builtin event or not. + return self._path.type is not _EventType.custom + + def deferred(self, handler: Callable, event_id: int = 1) -> DeferredEvent: + """Construct a DeferredEvent from this Event.""" + handler_repr = repr(handler) + handler_re = re.compile(r"<function (.*) at .*>") + match = handler_re.match(handler_repr) + if not match: + raise ValueError( + f"cannot construct DeferredEvent from {handler}; please create one manually.", + ) + owner_name, handler_name = match.groups()[0].split(".")[-2:] + handle_path = f"{owner_name}/on/{self.name}[{event_id}]" + + snapshot_data = {} + + # fixme: at this stage we can't determine if the event is a builtin one or not; if it is + # not, then the coming checks are meaningless: the custom event could be named like a + # relation event but not *be* one. + if self._is_workload_event: + # this is a WorkloadEvent. The snapshot: + container = cast(Container, self.container) + snapshot_data = { + "container_name": container.name, + } + if self.notice: + if hasattr(self.notice.type, "value"): + notice_type = cast(pebble.NoticeType, self.notice.type).value + else: + notice_type = str(self.notice.type) + snapshot_data.update( + { + "notice_id": self.notice.id, + "notice_key": self.notice.key, + "notice_type": notice_type, + }, + ) + elif self.check_info: + snapshot_data["check_name"] = self.check_info.name + + elif self._is_relation_event: + # this is a RelationEvent. + relation = cast("AnyRelation", self.relation) + if isinstance(relation, PeerRelation): + # FIXME: relation.unit for peers should point to <this unit>, but we + # don't have access to the local app name in this context. + remote_app = "local" + else: + remote_app = relation.remote_app_name + + snapshot_data = { + "relation_name": relation.endpoint, + "relation_id": relation.id, + "app_name": remote_app, + "unit_name": f"{remote_app}/{self.relation_remote_unit_id}", + } + + return DeferredEvent( + handle_path, + owner_name, + handler_name, + snapshot_data=snapshot_data, + ) + + +_next_action_id_counter = 1 + + +
[docs]def next_action_id(*, update=True): + """Get the ID the next action to be created will get. + + Pass update=False if you're only inspecting it. + Pass update=True if you also want to bump it. + """ + global _next_action_id_counter + cur = _next_action_id_counter + if update: + _next_action_id_counter += 1 + # Juju currently uses numbers for the ID, but in the past used UUIDs, so + # we need these to be strings. + return str(cur)
+ + +@dataclasses.dataclass(frozen=True) +class _Action(_max_posargs(1)): + """A ``juju run`` command. + + Used to simulate ``juju run``, passing in any parameters. For example:: + + def test_backup_action(): + ctx = scenario.Context(MyCharm) + state = ctx.run( + ctx.on.action('do_backup', params={'filename': 'foo'}), + scenario.State() + ) + assert ctx.action_results == ... + """ + + name: str + """Juju action name, as found in the charm metadata.""" + + params: Dict[str, "AnyJson"] = dataclasses.field(default_factory=dict) + """Parameter values passed to the action.""" + + id: str = dataclasses.field(default_factory=next_action_id) + """Juju action ID. + + Every action invocation is automatically assigned a new one. Override in + the rare cases where a specific ID is required.""" + + +
[docs]def deferred( + event: Union[str, _Event], + handler: Callable, + event_id: int = 1, + relation: Optional["Relation"] = None, + container: Optional["Container"] = None, + notice: Optional["Notice"] = None, + check_info: Optional["CheckInfo"] = None, +): + """Construct a DeferredEvent from an Event or an event name.""" + if isinstance(event, str): + event = _Event( + event, + relation=relation, + container=container, + notice=notice, + check_info=check_info, + ) + return event.deferred(handler=handler, event_id=event_id)
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_sources/capture_events.rst.txt b/docs/_build/html/_sources/capture_events.rst.txt new file mode 100644 index 00000000..ff54eda9 --- /dev/null +++ b/docs/_build/html/_sources/capture_events.rst.txt @@ -0,0 +1,4 @@ +scenario.capture_events +======================= + +.. automodule:: scenario.capture_events diff --git a/docs/_build/html/_sources/consistency_checker.rst.txt b/docs/_build/html/_sources/consistency_checker.rst.txt new file mode 100644 index 00000000..92203a47 --- /dev/null +++ b/docs/_build/html/_sources/consistency_checker.rst.txt @@ -0,0 +1,4 @@ +scenario.consistency_checker +============================ + +.. automodule:: scenario.consistency_checker diff --git a/docs/_build/html/_sources/context.rst.txt b/docs/_build/html/_sources/context.rst.txt new file mode 100644 index 00000000..b51128b8 --- /dev/null +++ b/docs/_build/html/_sources/context.rst.txt @@ -0,0 +1,5 @@ +scenario.Context +================ + +.. automodule:: scenario.context + :members: DEFAULT_JUJU_VERSION, InvalidEventError, ContextSetupError, AlreadyEmittedError diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 00000000..90344659 --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,26 @@ +Scenario API reference +====================== + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + context + state + capture_events + consistency_checker + + +scenario +======== + +.. automodule:: scenario + :special-members: __call__ + + +Indices +======= + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_build/html/_sources/state.rst.txt b/docs/_build/html/_sources/state.rst.txt new file mode 100644 index 00000000..9f675ea9 --- /dev/null +++ b/docs/_build/html/_sources/state.rst.txt @@ -0,0 +1,5 @@ +scenario.State +============== + +.. automodule:: scenario.state + :members: ATTACH_ALL_STORAGES, CREATE_ALL_RELATIONS, BREAK_ALL_RELATIONS, DETACH_ALL_STORAGES, ACTION_EVENT_SUFFIX, BUILTIN_EVENTS, FRAMEWORK_EVENTS, PEBBLE_READY_EVENT_SUFFIX, PEBBLE_CUSTOM_NOTICE_EVENT_SUFFIX, PEBBLE_CHECK_FAILED_EVENT_SUFFIX, PEBBLE_CHECK_RECOVERED_EVENT_SUFFIX, RELATION_EVENTS_SUFFIX, STORAGE_EVENTS_SUFFIX, SECRET_EVENTS, META_EVENTS, DEFAULT_JUJU_DATABAG, AnyJson, AnyRelation, CharmType, JujuLogLine, MetadataNotFoundError, PathLike, Port, RawDataBagContents, RawSecretRevisionContents, RelationBase, UnitID, next_action_id, next_notice_id, next_relation_id, next_storage_index diff --git a/docs/_build/html/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs/_build/html/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000..eb19f698 --- /dev/null +++ b/docs/_build/html/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs/_build/html/_sphinx_design_static/design-tabs.js b/docs/_build/html/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/docs/_build/html/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/_build/html/_static/404.svg b/docs/_build/html/_static/404.svg new file mode 100644 index 00000000..b353cd33 --- /dev/null +++ b/docs/_build/html/_static/404.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js b/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.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": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 00000000..7577acb1 --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +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; +} + +/* -- 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/check-solid.svg b/docs/_build/html/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/docs/_build/html/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/_build/html/_static/clipboard.min.js b/docs/_build/html/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/docs/_build/html/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs/_build/html/_static/copybutton.css b/docs/_build/html/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/docs/_build/html/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs/_build/html/_static/copybutton.js b/docs/_build/html/_static/copybutton.js new file mode 100644 index 00000000..2ea7ff3e --- /dev/null +++ b/docs/_build/html/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/_build/html/_static/copybutton_funcs.js b/docs/_build/html/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/docs/_build/html/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css new file mode 100644 index 00000000..86f5d09f --- /dev/null +++ b/docs/_build/html/_static/custom.css @@ -0,0 +1,361 @@ +/** + Ubuntu variable font definitions. + Based on https://github.com/canonical/vanilla-framework/blob/main/scss/_base_fontfaces.scss + + When font files are updated in Vanilla, the links to font files will need to be updated here as well. +*/ + +/* default font set */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/f1ea362b-Ubuntu%5Bwdth,wght%5D-latin-v0.896a.woff2') format('woff2-variations'); +} + +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: italic; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/90b59210-Ubuntu-Italic%5Bwdth,wght%5D-latin-v0.896a.woff2') format('woff2-variations'); +} + +@font-face { + font-family: 'Ubuntu Mono variable'; + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/d5fc1819-UbuntuMono%5Bwght%5D-latin-v0.869.woff2') format('woff2-variations'); +} + +/* cyrillic-ext */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/77cd6650-Ubuntu%5Bwdth,wght%5D-cyrillic-extended-v0.896a.woff2') format('woff2-variations'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} + +/* cyrillic */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/2702fce5-Ubuntu%5Bwdth,wght%5D-cyrillic-v0.896a.woff2') format('woff2-variations'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/5c108b7d-Ubuntu%5Bwdth,wght%5D-greek-extended-v0.896a.woff2') format('woff2-variations'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/0a14c405-Ubuntu%5Bwdth,wght%5D-greek-v0.896a.woff2') format('woff2-variations'); + unicode-range: U+0370-03FF; +} + +/* latin-ext */ +@font-face { + font-family: 'Ubuntu variable'; + font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ + font-style: normal; + font-weight: 100 800; /* min and max value for the weight axis */ + src: url('https://assets.ubuntu.com/v1/19f68eeb-Ubuntu%5Bwdth,wght%5D-latin-extended-v0.896a.woff2') format('woff2-variations'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} + + +/** Define font-weights as per Vanilla + Based on: https://github.com/canonical/vanilla-framework/blob/main/scss/_base_typography-definitions.scss + + regular text: 400, + bold: 550, + thin: 300, + + h1: bold, + h2: 180; + h3: bold, + h4: 275, + h5: bold, + h6: regular +*/ + +/* default regular text */ +html { + font-weight: 400; +} + +/* heading specific definitions */ +h1, h3, h5 { font-weight: 550; } +h2 { font-weight: 180; } +h4 { font-weight: 275; } + +/* bold */ +.toc-tree li.scroll-current>.reference, +dl.glossary dt, +dl.simple dt, +dl:not([class]) dt { + font-weight: 550; +} + + +/** Table styling **/ + +th.head { + text-transform: uppercase; + font-size: var(--font-size--small); + text-align: initial; +} + +table.align-center th.head { + text-align: center +} + +table.docutils { + border: 0; + box-shadow: none; + width:100%; +} + +table.docutils td, table.docutils th, table.docutils td:last-child, table.docutils th:last-child, table.docutils td:first-child, table.docutils th:first-child { + border-right: none; + border-left: none; +} + +/* Allow to centre text horizontally in table data cells */ +table.align-center { + text-align: center !important; +} + +/** No rounded corners **/ + +.admonition, code.literal, .sphinx-tabs-tab, .sphinx-tabs-panel, .highlight { + border-radius: 0; +} + +/** Admonition styling **/ + +.admonition { + border-top: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid #d9d9d9; +} + +/** Color for the "copy link" symbol next to headings **/ + +a.headerlink { + color: var(--color-brand-primary); +} + +/** Line to the left of the current navigation entry **/ + +.sidebar-tree li.current-page { + border-left: 2px solid var(--color-brand-primary); +} + +/** Some tweaks for Sphinx tabs **/ + +[role="tablist"] { + border-bottom: 1px solid var(--color-sidebar-item-background--hover); +} + +.sphinx-tabs-tab[aria-selected="true"], .sd-tab-set>input:checked+label{ + border: 0; + border-bottom: 2px solid var(--color-brand-primary); + font-weight: 400; + font-size: 1rem; + color: var(--color-brand-primary); +} + +body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] { + background: var(--color-background-primary); + border-bottom: 2px solid var(--color-brand-primary); +} + +button.sphinx-tabs-tab[aria-selected="false"]:hover, .sd-tab-set>input:not(:checked)+label:hover { + border-bottom: 2px solid var(--color-foreground-border); +} + +button.sphinx-tabs-tab[aria-selected="false"]{ + border-bottom: 2px solid var(--color-background-primary); +} + +body[data-theme="dark"] .sphinx-tabs-tab { + background: var(--color-background-primary); +} + +.sphinx-tabs-tab, .sd-tab-set>label{ + color: var(--color-brand-primary); + font-family: var(--font-stack); + font-weight: 400; + font-size: 1rem; + padding: 1em 1.25em .5em +} + +.sphinx-tabs-panel { + border: 0; + border-bottom: 1px solid var(--color-sidebar-item-background--hover); + background: var(--color-background-primary); + padding: 0.75rem 0 0.75rem 0; +} + +body[data-theme="dark"] .sphinx-tabs-panel { + background: var(--color-background-primary); +} + +/** A tweak for issue #190 **/ + +.highlight .hll { + background-color: var(--color-highlighted-background); +} + + +/** Custom classes to fix scrolling in tables by decreasing the + font size or breaking certain columns. + Specify the classes in the Markdown file with, for example: + ```{rst-class} break-col-4 min-width-4-8 + ``` +**/ + +table.dec-font-size { + font-size: smaller; +} +table.break-col-1 td.text-left:first-child { + word-break: break-word; +} +table.break-col-4 td.text-left:nth-child(4) { + word-break: break-word; +} +table.min-width-1-15 td.text-left:first-child { + min-width: 15em; +} +table.min-width-4-8 td.text-left:nth-child(4) { + min-width: 8em; +} + +/** Underline for abbreviations **/ + +abbr[title] { + text-decoration: underline solid #cdcdcd; +} + +/** Use the same style for right-details as for left-details **/ +.bottom-of-page .right-details { + font-size: var(--font-size--small); + display: block; +} + +/** Version switcher */ +button.version_select { + color: var(--color-foreground-primary); + background-color: var(--color-toc-background); + padding: 5px 10px; + border: none; +} + +.version_select:hover, .version_select:focus { + background-color: var(--color-sidebar-item-background--hover); +} + +.version_dropdown { + position: relative; + display: inline-block; + text-align: right; + font-size: var(--sidebar-item-font-size); +} + +.available_versions { + display: none; + position: absolute; + right: 0px; + background-color: var(--color-toc-background); + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + z-index: 11; +} + +.available_versions a { + color: var(--color-foreground-primary); + padding: 12px 16px; + text-decoration: none; + display: block; +} + +.available_versions a:hover {background-color: var(--color-sidebar-item-background--current)} + +.show {display:block;} + +/** Fix for nested numbered list - the nested list is lettered **/ +ol.arabic ol.arabic { + list-style: lower-alpha; +} + +/** Make expandable sections look like links **/ +details summary { + color: var(--color-link); +} + +/** Fix the styling of the version box for readthedocs **/ + +#furo-readthedocs-versions .rst-versions, #furo-readthedocs-versions .rst-current-version, #furo-readthedocs-versions:focus-within .rst-current-version, #furo-readthedocs-versions:hover .rst-current-version { + background: var(--color-sidebar-item-background--hover); +} + +.rst-versions .rst-other-versions dd a { + color: var(--color-link); +} + +#furo-readthedocs-versions:focus-within .rst-current-version .fa-book, #furo-readthedocs-versions:hover .rst-current-version .fa-book, .rst-versions .rst-other-versions { + color: var(--color-sidebar-link-text); +} + +.rst-versions .rst-current-version { + color: var(--color-version-popup); + font-weight: bolder; +} + +/* Code-block copybutton invisible by default + (overriding Furo config to achieve default copybutton setting). */ +.highlight button.copybtn { + opacity: 0; +} + +/* Mimicking the 'Give feedback' button for UX consistency */ +.sidebar-search-container input[type=submit] { + color: #FFFFFF; + border: 2px solid #D6410D; + padding: var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal); + background: #D6410D; + font-weight: bold; + font-size: var(--font-size--small); + cursor: pointer; +} + +.sidebar-search-container input[type=submit]:hover { + text-decoration: underline; +} + +/* Make inline code the same size as code blocks */ +p code.literal { + border: 0; + font-size: var(--code-font-size); +} + +/* Use the general admonition font size for inline code */ +.admonition p code.literal { + font-size: var(--admonition-font-size); +} diff --git a/docs/_build/html/_static/debug.css b/docs/_build/html/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/docs/_build/html/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/docs/_build/html/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs/_build/html/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000..eb19f698 --- /dev/null +++ b/docs/_build/html/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs/_build/html/_static/design-tabs.js b/docs/_build/html/_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/docs/_build/html/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 00000000..b57ae3b8 --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_build/html/_static/favicon.png b/docs/_build/html/_static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f175e4617695f752022d2671a0f97fa95bfd895 GIT binary patch literal 2258 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 literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/furo_colors.css b/docs/_build/html/_static/furo_colors.css new file mode 100644 index 00000000..3cdbb48f --- /dev/null +++ b/docs/_build/html/_static/furo_colors.css @@ -0,0 +1,89 @@ +body { + --color-code-background: #f8f8f8; + --color-code-foreground: black; + --code-font-size: 1rem; + --font-stack: Ubuntu variable, Ubuntu, -apple-system, Segoe UI, Roboto, Oxygen, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + --font-stack--monospace: Ubuntu Mono variable, Ubuntu Mono, Consolas, Monaco, Courier, monospace; + --color-foreground-primary: #111; + --color-foreground-secondary: var(--color-foreground-primary); + --color-foreground-muted: #333; + --color-background-secondary: #FFF; + --color-background-hover: #f2f2f2; + --color-brand-primary: #111; + --color-brand-content: #06C; + --color-api-background: #cdcdcd; + --color-inline-code-background: rgba(0,0,0,.03); + --color-sidebar-link-text: #111; + --color-sidebar-item-background--current: #ebebeb; + --color-sidebar-item-background--hover: #f2f2f2; + --toc-font-size: var(--font-size--small); + --color-admonition-title-background--note: var(--color-background-primary); + --color-admonition-title-background--tip: var(--color-background-primary); + --color-admonition-title-background--important: var(--color-background-primary); + --color-admonition-title-background--caution: var(--color-background-primary); + --color-admonition-title--note: #24598F; + --color-admonition-title--tip: #24598F; + --color-admonition-title--important: #C7162B; + --color-admonition-title--caution: #F99B11; + --color-highlighted-background: #EBEBEB; + --color-link-underline: var(--color-background-primary); + --color-link-underline--hover: var(--color-background-primary); + --color-version-popup: #772953; +} + +@media not print { + body[data-theme="dark"] { + --color-code-background: #202020; + --color-code-foreground: #d0d0d0; + --color-foreground-secondary: var(--color-foreground-primary); + --color-foreground-muted: #CDCDCD; + --color-background-secondary: var(--color-background-primary); + --color-background-hover: #666; + --color-brand-primary: #fff; + --color-brand-content: #06C; + --color-sidebar-link-text: #f7f7f7; + --color-sidebar-item-background--current: #666; + --color-sidebar-item-background--hover: #333; + --color-admonition-background: transparent; + --color-admonition-title-background--note: var(--color-background-primary); + --color-admonition-title-background--tip: var(--color-background-primary); + --color-admonition-title-background--important: var(--color-background-primary); + --color-admonition-title-background--caution: var(--color-background-primary); + --color-admonition-title--note: #24598F; + --color-admonition-title--tip: #24598F; + --color-admonition-title--important: #C7162B; + --color-admonition-title--caution: #F99B11; + --color-highlighted-background: #666; + --color-link-underline: var(--color-background-primary); + --color-link-underline--hover: var(--color-background-primary); + --color-version-popup: #F29879; + } + @media (prefers-color-scheme: dark) { + body:not([data-theme="light"]) { + --color-code-background: #202020; + --color-code-foreground: #d0d0d0; + --color-foreground-secondary: var(--color-foreground-primary); + --color-foreground-muted: #CDCDCD; + --color-background-secondary: var(--color-background-primary); + --color-background-hover: #666; + --color-brand-primary: #fff; + --color-brand-content: #06C; + --color-sidebar-link-text: #f7f7f7; + --color-sidebar-item-background--current: #666; + --color-sidebar-item-background--hover: #333; + --color-admonition-background: transparent; + --color-admonition-title-background--note: var(--color-background-primary); + --color-admonition-title-background--tip: var(--color-background-primary); + --color-admonition-title-background--important: var(--color-background-primary); + --color-admonition-title-background--caution: var(--color-background-primary); + --color-admonition-title--note: #24598F; + --color-admonition-title--tip: #24598F; + --color-admonition-title--important: #C7162B; + --color-admonition-title--caution: #F99B11; + --color-highlighted-background: #666; + --color-link-underline: var(--color-background-primary); + --color-link-underline--hover: var(--color-background-primary); + --color-version-popup: #F29879; + } + } +} diff --git a/docs/_build/html/_static/github_issue_links.css b/docs/_build/html/_static/github_issue_links.css new file mode 100644 index 00000000..db166ed9 --- /dev/null +++ b/docs/_build/html/_static/github_issue_links.css @@ -0,0 +1,24 @@ +.github-issue-link-container { + padding-right: 0.5rem; +} +.github-issue-link { + font-size: var(--font-size--small); + font-weight: bold; + background-color: #D6410D; + padding: 13px 23px; + text-decoration: none; +} +.github-issue-link:link { + color: #FFFFFF; +} +.github-issue-link:visited { + color: #FFFFFF +} +.muted-link.github-issue-link:hover { + color: #FFFFFF; + text-decoration: underline; +} +.github-issue-link:active { + color: #FFFFFF; + text-decoration: underline; +} diff --git a/docs/_build/html/_static/github_issue_links.js b/docs/_build/html/_static/github_issue_links.js new file mode 100644 index 00000000..f0706038 --- /dev/null +++ b/docs/_build/html/_static/github_issue_links.js @@ -0,0 +1,34 @@ +// if we already have an onload function, save that one +var prev_handler = window.onload; + +window.onload = function() { + // call the previous onload function + if (prev_handler) { + prev_handler(); + } + + const link = document.createElement("a"); + link.classList.add("muted-link"); + link.classList.add("github-issue-link"); + link.text = "Give feedback"; + link.href = ( + github_url + + "/issues/new?" + + "title=docs%3A+TYPE+YOUR+QUESTION+HERE" + + "&body=*Please describe the question or issue you're facing with " + + `"${document.title}"` + + ".*" + + "%0A%0A%0A%0A%0A" + + "---" + + "%0A" + + `*Reported+from%3A+${location.href}*` + ); + link.target = "_blank"; + + const div = document.createElement("div"); + div.classList.add("github-issue-link-container"); + div.append(link) + + const container = document.querySelector(".article-container > .content-icon-container"); + container.prepend(div); +}; diff --git a/docs/_build/html/_static/header-nav.js b/docs/_build/html/_static/header-nav.js new file mode 100644 index 00000000..3608576e --- /dev/null +++ b/docs/_build/html/_static/header-nav.js @@ -0,0 +1,10 @@ +$(document).ready(function() { + $(document).on("click", function () { + $(".more-links-dropdown").hide(); + }); + + $('.nav-more-links').click(function(event) { + $('.more-links-dropdown').toggle(); + event.stopPropagation(); + }); +}) diff --git a/docs/_build/html/_static/header.css b/docs/_build/html/_static/header.css new file mode 100644 index 00000000..0b944090 --- /dev/null +++ b/docs/_build/html/_static/header.css @@ -0,0 +1,167 @@ +.p-navigation { + border-bottom: 1px solid var(--color-sidebar-background-border); +} + +.p-navigation__nav { + background: #333333; + display: flex; +} + +.p-logo { + display: flex !important; + padding-top: 0 !important; + text-decoration: none; +} + +.p-logo-image { + height: 44px; + padding-right: 10px; +} + +.p-logo-text { + margin-top: 18px; + color: white; + text-decoration: none; +} + +ul.p-navigation__links { + display: flex; + list-style: none; + margin-left: 0; + margin-top: auto; + margin-bottom: auto; + max-width: 800px; + width: 100%; +} + +ul.p-navigation__links li { + margin: 0 auto; + text-align: center; + width: 100%; +} + +ul.p-navigation__links li a { + background-color: rgba(0, 0, 0, 0); + border: none; + border-radius: 0; + color: var(--color-sidebar-link-text); + display: block; + font-weight: 400; + line-height: 1.5rem; + margin: 0; + overflow: hidden; + padding: 1rem 0; + position: relative; + text-align: left; + text-overflow: ellipsis; + transition-duration: .1s; + transition-property: background-color, color, opacity; + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + white-space: nowrap; + width: 100%; +} + +ul.p-navigation__links .p-navigation__link { + color: #ffffff; + font-weight: 300; + text-align: center; + text-decoration: none; +} + +ul.p-navigation__links .p-navigation__link:hover { + background-color: #2b2b2b; +} + +ul.p-navigation__links .p-dropdown__link:hover { + background-color: var(--color-sidebar-item-background--hover); +} + +ul.p-navigation__links .p-navigation__sub-link { + background: var(--color-background-primary); + padding: .5rem 0 .5rem .5rem; + font-weight: 300; +} + +ul.p-navigation__links .more-links-dropdown li a { + border-left: 1px solid var(--color-sidebar-background-border); + border-right: 1px solid var(--color-sidebar-background-border); +} + +ul.p-navigation__links .more-links-dropdown li:first-child a { + border-top: 1px solid var(--color-sidebar-background-border); +} + +ul.p-navigation__links .more-links-dropdown li:last-child a { + border-bottom: 1px solid var(--color-sidebar-background-border); +} + +ul.p-navigation__links .p-navigation__logo { + padding: 0.5rem; +} + +ul.p-navigation__links .p-navigation__logo img { + width: 40px; +} + +ul.more-links-dropdown { + display: none; + overflow-x: visible; + height: 0; + z-index: 55; + padding: 0; + position: relative; + list-style: none; + margin-bottom: 0; + margin-top: 0; +} + +.nav-more-links::after { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath fill='%23111' d='M8.187 11.748l6.187-6.187-1.06-1.061-5.127 5.127L3.061 4.5 2 5.561z'/%3E%3C/svg%3E"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ""; + display: block; + filter: invert(100%); + height: 1rem; + pointer-events: none; + position: absolute; + right: 1rem; + text-indent: calc(100% + 10rem); + top: calc(1rem + 0.25rem); + width: 1rem; +} + +.nav-ubuntu-com { + display: none; +} + +@media only screen and (min-width: 480px) { + ul.p-navigation__links li { + width: 100%; + } + + .nav-ubuntu-com { + display: inherit; + } +} + +@media only screen and (max-width: 800px) { + .nav-more-links { + margin-left: auto !important; + padding-right: 2rem !important; + width: 8rem !important; + } +} + +@media only screen and (min-width: 800px) { + ul.p-navigation__links li { + width: 100% !important; + } +} + +@media only screen and (min-width: 1310px) { + ul.p-navigation__links { + margin-left: calc(50% - 41em); + } +} diff --git a/docs/_build/html/_static/jquery.js b/docs/_build/html/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/docs/_build/html/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 00 + 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 new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 00000000..c2e07c71 --- /dev/null +++ b/docs/_build/html/_static/pygments.css @@ -0,0 +1,258 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #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/related-links.css b/docs/_build/html/_static/related-links.css new file mode 100644 index 00000000..86adbe24 --- /dev/null +++ b/docs/_build/html/_static/related-links.css @@ -0,0 +1,39 @@ +/** Related links **/ + +.relatedlinks-title { + color: var(--color-toc-title-text); + font-size: var(--toc-title-font-size); + padding-left: var(--toc-spacing-horizontal); + text-transform: uppercase; +} + +.relatedlinks { + font-size: var(--font-size--small--2); + padding-left: calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal)); + padding-bottom: 1em; +} + +.relatedlinks ul { + list-style-type: none; + margin-bottom: 0; + margin-top: 0; + padding-left: var(--toc-item-spacing-horizontal); +} + +.relatedlinks li { + padding-top: var(--toc-item-spacing-vertical); +} + +.relatedlinks a { + overflow-wrap: anywhere; + text-decoration: none; +} + +.relatedlinks a::before { + 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-right: 0.25rem; +} + +.relatedlinks-title-container { + padding-top: 2em; +} diff --git a/docs/_build/html/_static/scripts/furo-extensions.js b/docs/_build/html/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/docs/_build/html/_static/scripts/furo.js b/docs/_build/html/_static/scripts/furo.js new file mode 100644 index 00000000..32e7c05b --- /dev/null +++ b/docs/_build/html/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/_build/html/_static/scripts/furo.js.LICENSE.txt b/docs/_build/html/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/docs/_build/html/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/docs/_build/html/_static/scripts/furo.js.map b/docs/_build/html/_static/scripts/furo.js.map new file mode 100644 index 00000000..47053022 --- /dev/null +++ b/docs/_build/html/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 00000000..97d56a74 --- /dev/null +++ b/docs/_build/html/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_build/html/_static/skeleton.css b/docs/_build/html/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/docs/_build/html/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js new file mode 100644 index 00000000..aae669d7 --- /dev/null +++ b/docs/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/docs/_build/html/_static/styles/furo-extensions.css b/docs/_build/html/_static/styles/furo-extensions.css new file mode 100644 index 00000000..bc447f22 --- /dev/null +++ b/docs/_build/html/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo-extensions.css.map b/docs/_build/html/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..9ba5637f --- /dev/null +++ b/docs/_build/html/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo.css b/docs/_build/html/_static/styles/furo.css new file mode 100644 index 00000000..3d29a218 --- /dev/null +++ b/docs/_build/html/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/_build/html/_static/styles/furo.css.map b/docs/_build/html/_static/styles/furo.css.map new file mode 100644 index 00000000..1924b333 --- /dev/null +++ b/docs/_build/html/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"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

BVI6Yes9-zSR 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