From 3b58ad7a2e48b3c899a571193d5c2f11e79c7862 Mon Sep 17 00:00:00 2001 From: mdp0023 Date: Wed, 17 Apr 2024 20:17:06 +0000 Subject: [PATCH] deploy: 33e04c5554e6b82a736a4bb1eacfbc560734f1e1 --- .buildinfo | 4 + .../Acknowledgements/acknowledgements.doctree | Bin 0 -> 4501 bytes .doctrees/Background/background.doctree | Bin 0 -> 87550 bytes .doctrees/Background/paper.doctree | Bin 0 -> 2804 bytes .doctrees/Background/understanding.doctree | Bin 0 -> 21644 bytes .doctrees/Examples/examples.doctree | Bin 0 -> 2581 bytes .doctrees/Getting_Started/install.doctree | Bin 0 -> 3904 bytes .doctrees/Getting_Started/quickstart.doctree | Bin 0 -> 14286 bytes .doctrees/User_Guide/userguide.doctree | Bin 0 -> 2596 bytes .doctrees/apiref/apiref.doctree | Bin 0 -> 2428 bytes .doctrees/apiref/license.doctree | Bin 0 -> 3102 bytes .doctrees/environment.pickle | Bin 0 -> 199861 bytes .doctrees/index.doctree | Bin 0 -> 9236 bytes .nojekyll | 0 Acknowledgements/acknowledgements.html | 271 +++++ Background/background.html | 609 ++++++++++++ Background/paper.html | 273 ++++++ Background/understanding.html | 360 +++++++ Examples/examples.html | 273 ++++++ Getting_Started/install.html | 306 ++++++ Getting_Started/quickstart.html | 337 +++++++ User_Guide/userguide.html | 273 ++++++ _images/all_refac_.pdf | Bin 0 -> 37199 bytes _images/final_fac_.pdf | Bin 0 -> 33230 bytes _images/loading_fac_.pdf | Bin 0 -> 56245 bytes _images/sig_comp_.pdf | Bin 0 -> 29904 bytes .../Acknowledgements/acknowledgements.rst.txt | 12 + _sources/Background/background.rst.txt | 175 ++++ _sources/Background/paper.rst.txt | 4 + _sources/Background/understanding.rst.txt | 76 ++ _sources/Examples/examples.rst.txt | 4 + _sources/Getting_Started/install.rst.txt | 21 + _sources/Getting_Started/quickstart.rst.txt | 57 ++ _sources/User_Guide/userguide.rst.txt | 4 + _sources/apiref/apiref.rst.txt | 7 + _sources/apiref/license.rst.txt | 6 + _sources/index.rst.txt | 72 ++ .../_sphinx_javascript_frameworks_compat.js | 123 +++ _static/basic.css | 925 ++++++++++++++++++ _static/debug.css | 69 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/jquery.js | 2 + _static/language_data.js | 199 ++++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 258 +++++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 619 ++++++++++++ _static/skeleton.css | 296 ++++++ _static/sphinx_highlight.js | 154 +++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + apiref/apiref.html | 272 +++++ apiref/license.html | 273 ++++++ genindex.html | 253 +++++ index.html | 359 +++++++ objects.inv | Bin 0 -> 443 bytes search.html | 261 +++++ searchindex.js | 1 + 66 files changed, 7394 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/Acknowledgements/acknowledgements.doctree create mode 100644 .doctrees/Background/background.doctree create mode 100644 .doctrees/Background/paper.doctree create mode 100644 .doctrees/Background/understanding.doctree create mode 100644 .doctrees/Examples/examples.doctree create mode 100644 .doctrees/Getting_Started/install.doctree create mode 100644 .doctrees/Getting_Started/quickstart.doctree create mode 100644 .doctrees/User_Guide/userguide.doctree create mode 100644 .doctrees/apiref/apiref.doctree create mode 100644 .doctrees/apiref/license.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .nojekyll create mode 100644 Acknowledgements/acknowledgements.html create mode 100644 Background/background.html create mode 100644 Background/paper.html create mode 100644 Background/understanding.html create mode 100644 Examples/examples.html create mode 100644 Getting_Started/install.html create mode 100644 Getting_Started/quickstart.html create mode 100644 User_Guide/userguide.html create mode 100644 _images/all_refac_.pdf create mode 100644 _images/final_fac_.pdf create mode 100644 _images/loading_fac_.pdf create mode 100644 _images/sig_comp_.pdf create mode 100644 _sources/Acknowledgements/acknowledgements.rst.txt create mode 100644 _sources/Background/background.rst.txt create mode 100644 _sources/Background/paper.rst.txt create mode 100644 _sources/Background/understanding.rst.txt create mode 100644 _sources/Examples/examples.rst.txt create mode 100644 _sources/Getting_Started/install.rst.txt create mode 100644 _sources/Getting_Started/quickstart.rst.txt create mode 100644 _sources/User_Guide/userguide.rst.txt create mode 100644 _sources/apiref/apiref.rst.txt create mode 100644 _sources/apiref/license.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _static/_sphinx_javascript_frameworks_compat.js create mode 100644 _static/basic.css create mode 100644 _static/debug.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/jquery.js create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 apiref/apiref.html create mode 100644 apiref/license.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..9106d2b --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 64f10b42db6ce57fd9281ec7c8fcff6f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/Acknowledgements/acknowledgements.doctree b/.doctrees/Acknowledgements/acknowledgements.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e7652f4ce7f01ac5ebde05a1a8a4527b958e61e4 GIT binary patch literal 4501 zcmdT|U2hz>6}2tzO1t`YVxvH;bb=y@jYzw);uuAMqEKupG2Ctpubh{{7;tB}OF}c` zl;lXe4+heQ09C<0g?;F62#}Wo{V#p(FX`cY?5?&63N=W87+7d{c}d=Tc<$xB{<876 zzieMC{@G2PF)qd(630TuR6Dy8%P3E&Fz#!2|4;68WH13tf+9W zoZay1h9|mHtzXtOGF*!3a@Jr?w*1Q7V=db-+$3~v%5EJ-r$U}5G#*iZs&-x%sy9#Q z*xT?O8eh56u4YDHg>h`#w!*2|Y{@n&YkT%)!Uc7`d_ZiQ7^CWAng$bi%j}{5b(5Iv7wY z0-a}>REEaEU=kQcgP}|kdCtWszbDj+?0uy=I$ z;^Z^@-9LEr@V{VvRl)ibTQS2tygKH~fb$PO2=o5)ga~SY;21G_u>aBiZa@N6v(qy& z4kAVn31UP8Vv4AJDfk&xnwv==ht*n49p<<;(OD#{sgV6q&YIzOc6Iz#fS>w7`2F)` zr;l)@$biPb4jzvqqbVQFWUSp4sO6gHF5UVP)Z}Dp>vbZuG@8Avx+T9tup=T8E-LP$>`RTA>x9OMzHA76UYo&&5 z#B`94;K2s+ivViSP?V&Qv;coZy;JVbc7qFG6ruophg4&fdK|8B(RB z3K>#jLKP7Arbfou%@XOkT^hwM&h9MCENsF4WjD%AX9mT*n1sYz@x%7rY2EY`R{lg+rc{O~)Pog+nw|zR1PJ_}yaM z_bOVj=@9(f_Q3_(h!I$r@RS?(`>prwMn?PakmSx z?qn0gr07UB>NoK^F70CDA-G2x?H`Fj%*xpNK+rL+Dk4Pn+ucuUX zI5orK4Bz`OlO{NfE-mbc4kTn^WIqkwOQE}#bSG!W?5(F=($VJQ%940hGjVKys^sU=43e+;_#6g?b zcdDgg|8j^_Cm9F@b??GrtSLt zWfiN}BaSQg$79D*;$yPbE6tpjlzK28mzxe`GQIyo_00w0RJ(O)$5wr6vFO&N{gGRh z@yY!5;$GDZo-|~P2>l~y;p}RJZW+MB2Rs?ek1P4taQ-Xz0_;Z>ia5f55NO?tzxx7Ch)ZmZIOf35RD=Rcl~rU?K5 literal 0 HcmV?d00001 diff --git a/.doctrees/Background/background.doctree b/.doctrees/Background/background.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fa939f2271c19812c40318173ad45c1cd7dc50ce GIT binary patch literal 87550 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 VQ3fwX+lr*&gfbwrt+6!v{{dpSwU__^ literal 0 HcmV?d00001 diff --git a/.doctrees/Background/paper.doctree b/.doctrees/Background/paper.doctree new file mode 100644 index 0000000000000000000000000000000000000000..57753200532891ae298d8458741d60457eab04fd GIT binary patch literal 2804 zcmd5;O>Z1E7;cm9Cc8;CNxy{DrYu6Gt!Q>Ra6lZWC?|+W5kNZg6E%J}u`_w#vP`;Xq={|s+5e_`KMLh8kYGNujVE{1Jp z^19^O$B*&ZpYeTs8U~i0IaAx5$8ZB0xsZxkuH)MnMoHaEm8r>ZiJ<%6i zZ{t%j2t6;o;%i%>_Y1AKjY$Ffw|?V` zkEeA;!;pG!WmbFSlj7f$%%xbjaz&kk5Z^sb%l2!V)z#%9qxszOBI(p&%hOrfieg_p z5WC``*c36{HUFr3BUG*FsCnJZDvia*|bV|POL)`k4`q~ z4A~Bl6`fgHiS>$v@5hbqnC7`DE2__>o{hbbZtP6q&rk^{G<5v~ebGqh5CDUQXFc#hiNTD7vycy}Q5nwm$tI(aEr zGcm-`&DLXM3T^yvpB*;E^KjQ&s-2>V7^JdhX1Qyz+4IIz6;E!2;Yx=yEbA2V%`nPq zn~+aBobRqAE#AYn#TyAZlU|S&U*U0iU`gQ9uxoi`tS5@U<0#)o7z(Po zWiK4^g+$dn^|f0m^+J#Fte(N$2sF~D8Z<1YB_sosKj$f__*WQ7jT#ZIbHkt&!=U!X z@i)idcnlA(ZW3;-u|!bK6ebzkj@)t|!+u-oH7mWwN(@KWcCMKaWf-+aF9TQ|eRy@_ z+R1Q`5&+PgKz$SvieXPtJ*zP-P;Q3x1_pPyV|i{YBaCA@Fu0Mx$Z6>3MiTA?q-ii{a%CA4u!hYtlK3~Ca25N9_0deS&qiHWJ8sk65{l{uHYiQ6Pn9^ zIRq|%9+OL500XP3a68QjS7+DsWSPLL3~i~HF8X-{X3C5+@b?@c2+lp6+{>XgC%mLm z5j<(qlx@O3Ts}$wR#mh!?ILV){VqKi!gf1LKwdymY9>JrPdv3Vj@g9A!XbhJv^*X< znBOct58h+iU6Hm=2#8^==obA%A-p~y-%7&vTf7u6To@#QKd%ts`zT&sIPn?&zYx1F z?5#JeIlY%lv^=?o#a5CyxzcOHT$i+Z2p-KXGo!lxH>!892|Mk<6^nzF*XGdeEA}y4 ztxv=J-gR5c9b9Rc7&%@)fJF>Dxlsy*MGm+!wtiU3KO*@L@mHW9uOaXVuQG>zw+_3( haYek-iJO+~NS&*iC5X&Yw}vduw&fT|w{@LO{spPcRL=ka literal 0 HcmV?d00001 diff --git a/.doctrees/Background/understanding.doctree b/.doctrees/Background/understanding.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a170d9c204824f03d0e28f7960a3aceebce36a38 GIT binary patch literal 21644 zcmeHPTWlT2c_t;16sfx%5q4!c>%@vFg*=C(E>>B`j;xC5Z( z581=^$jjM;J(>>1PV5QoQ(FI=-x6UITYk&&JI3i)gjVca5ymO283&e zB1*hC%BU;!wCP2$NFc7igV!=StKpu7ImDU0D;+h9N!uIK;e4*=(oLS@i|ky|u+lLr zjzg!B#J~~ZWTVrHX#OKj&x#@x;`fkmb>*+kt)y4JG_2-)DB4sfNk?LUPi-^)T^$5!M%iaK3)w;%Pr}I(Dr60+{tD(OV}B62Dc){}OjKU@@~F zJhLHb06(Lcoz)4go~>j1ub%UT5wwli#-AkaC2^!)F`Pl;w!L7%0KP5X5Q|OW8EwZC zMlW zv#Yg5FIv2Od9064>G3(lxjHiPMT|gE$D#V zp4P!yX*~im&aa==D>G6$EX6uY2d7y0Ka&eTaTQx0a7rP3m#z*D44kx@wh>zmWfi0e zh-@KZWdkCkC&Czp(T}0I+dw4eiIPU{ zF+@hoiJA#nQ)9uls=dQ-MDPa$TMI!@N}$LtM0T(c!CG0}o`<&WFzAx`B8vutY9x`e zPV8n_AzENMFoUy?8dt2)u^QBDA`-%wgLRv`Oa@z;SmUu;O}Dt^m&Y%|G=)YNFzIO6 z&!sPh))hc}9AXtOO&ai3V7g%DW~XN!H83;6Py@Av$@TzpBKe-tX`@lp>? z`bKWJ1@B_9=Q&L$&aU(41uOLNliI~r*byraLkOnbKujl#x)5%T860j$d#(zSDM^7Sz`9pxX;bf#u7I@fAOpp#5NFs`nF@ z9Q*If>g;Q6tEk!b#(@ELgrx$L%8T_~vjEG$(!_xCuORl8So`tc3q8lAz+>|F7syb=HuPKvro|4SWqI|&i-SH;jfpRa zFqo1+NQh~=VFCrczh)dOAcn5?C()Y#o(NZm^GUOoEisX=J5Fn63R7FK9oUaj^V8x+ zuI-FC$iL=*0sbTs?Zl&*Dl`#DpTHnk?0tfzfd^zW2QwmSo!TU3ZFw=x7quphC}=t$ zO#kXA|0?2U4YNB1e?d*Z?7wP<o_b0RJp;MZ(jTQso9&?-q8B_N4=k_Y3o;Ve-9=1L$U~$erdzNz=uTYZ(e&- zvgXZezw(jfzlSBiwA&TYSer|+UDS)zQDC*K0NCXR1Fp zXH-2am~)dXyjknD+GB=c%)vs;886c6gN&?Z?xEO}gTh?K%Z6pw6i@OZ;wfH4(0WHe zfnq%-@)i3^k)U)V#?I1I3x$v9YZU7k2^wtII?xS2$(y>Ep!Ks0w%>WIK6a0Vr6E|xKMgvKR!tg zNX7dP$|ZFlAwVdaJ+26Gr-v*xyStwT<5=@rqJ&WH?mo0wZH1yc;rEsjQ;JwRuCeq~ z$*8ir9r3t5h#^E^&oxYMh6`a8}BG7ND_dSuGp-BMoY2=}RVAqVcgd!lH; zAl;{P(4}9)$0v19sq|WMH$}Q}znmxEt8ZtOfN9|zt$tAvV6&hCvK zi-8x3s5~O@JVM2BrJ)xD?JFQsLasc;QWSt?Nk005EqtsJyk-J7i&q}(fEJMF%YiE* zTry-35kKIE(I}-S#{MA>#ua7X?7o*H1LQ6?cpQXqunLi$Za*q0){}I*rMtHb79s=D zAn7N|z*7V-5#b&37nK7K&ot+Xk7)INpj9cUpDW~UEow|{cHFN?Y|?Ot(TUQ+(w4hh zw4(G&D;x2gBTcaIN_M=;v{K0KmH~gRFyMD)RAssMXfdb$DQE6a09jWv_W}HIBRnE^ zFP`axRa<>aJI!1-QGZ?Lx=-O&E%pn!#h#rr&Q_G?J4OC2ruydyUTLaxl;5$jG#h=5 zMp>7Q{#mqGtBroJA_SV5-jP#kO6uiEv(M_2imt3~n8^yRVwlH|A(n7nXH8 z{J$KrD}647|5w+AA2QS5C|aPwDgP}q7Q zD%6HgAaRDZI-)%nR9)Jo?_dpv*d4k;ByWbC0~BH#AEBptA$qXb1iEk)S5XZ9%|W{0S6 zKn_3pV!;4MCQYEU|_;4u;Q~y zI7q%0WCYR+h_*l@F?^*AC=YmA>@XsFi@3A^Y~ZGlLYxtTqoJI;;(#dMU?W=pFvsWfy$5ck>cTkzu(XLNVD9#bMxg^iXZ`|DwT^C4S{y z*Pa@Jey0yXt45*S?@{eNE@2h6eLVf^4}%ugu+`5_?r#GVYHgD?-vxcGn8v)zmO-2J zAOBb^@=qT=3sbt#{rplc15`{-kG!e%^TV1et-H|ao2O`BFMzK{!5&9o%T7c+L7Sa0 zn&e#sNaqa@6O!paR6!bFIFzCnbL<<2Ja_VzF^>jfVw5I?KS!qb<*p)9WfA74pbme; z^DwOU=Vx9vjnB{0;~*Y|VNKKb5|kPr|79N^!xr4r4uTk)q{5`+4df>y=ekTxNjK3P zmBbCsXnp-%Utgu#q*UdZa!se`n+{*-h*6D9kcY9odFx`ys zS>Rm}t?bMoE7?IUIftw0i&pn<(WcNqn}{9-z_S{_gV;6H+f@Ocy%k{hKM5E>dpL9d zo51S_)cp}k`$5bn5jFbZ0*e%I9n|33y((M>SApxu8sORhwk)Nwp8?h;jRz{yc-v^! zS5}T@K}w0wR*q%SVk2K86^@v;Ag1N+-3o2}OcC0;D?q47*Zo?gtBQ_loa+g&MIPsR zpc?1uYo$fG>cmRx*_7&wS5%{1?L5kLa85fVamR^sOX%wvnuH8}wIoUIE&!T%oLx~A zmorwhXZ18%tTi51uZU48dg(YQI>llE%QdC=UJr{=4J--!kWV#M*|wtK(<;%i9j9p5 zvsg|RVX<4vOZDNd3qKSO>l7_G9(Jf=%-hG1Khp@s6&d0}tbtbkv=BSCY~T)QO^7(q zrVytKanOqAAk8`{hq9~;h$*f6ZVgxBYq6O9dNvOZYj|73=E0jQt6R>_TW#w=vOvyO zMZ&b=Ks^+BH#M(QXx_UG&vHt*ilnL%{u&6lyb|tfr77WGAfm5J30H-rs)XlrC46Yk zxZB9NMH7FEW+F9lPNH`K3QZkiC;zu~v0FR}nK!9q(Y;E~|&-ry}rs8wE_- zZWRT*`?TNmk`^M1l=ygZQNAc`wZhj@x%}a}utUoD_lp*+jGxez@uhM2vXqyK(6-!~ zpaWQ(GRvvLtP}XyLf4v?QFlg@%qQR(^k=!!1~`s$$SLOGcuL3Ak~FYpqcQa~W6JF; zf~pjSMw~g%8qO1ANfotl$c0V`+M+oxvjp-(4xHXVdlE?N#K`om1brz;uvbC(t)4S4 z266z(VBvc zOetp}_%}rhmcWw$1i7DLO^burxKTF9jEDNzPPGDQ4IO<$8&S4AY8T2BS=CF51soza8^)#H$+8FC2 zK1%IbI6$SthSfkIdY>_WJCjhiir%$Gy3FePLmt=F(ZeS`c>X zh&I5o)DKP19{kCpM`v^XcmGG9)Znb*3j8YRv2Q)}P>lZ&8dVto58me(%N53W`i=MS zL^P@$?4ueqG96dDH5U5tTKGjV#@Z^Eyz`kpD9Y$$zbx}XJ<3&fpCHyj?DVIo?H-pV zq8rcthNxPc#y^evlJhhruoFD4DFF(J=2q0*LZ6mb0@T%Ql)%3nYh8gwVQF4bYz1;v zE}wP$dE+q+(E*NLPEqVWifWB!QnQ-1WWIi6`q3lxnYw90TH9?i!X*$Q!V7}`9kFkA z`tbC0w_%=j8le>~nWs<8%*-A+a@4$lJdg;V37iO<1SaerUa44S+~DOUTuFg2LoYIC zj%u(<4Wkr{x#E{Ylx+X_WpjDGaZs_xpdJB!dCjyZYUc*?rqe_>f$vnu)c} zU6cFyKCHWsp`fr^fAYa$Ma6TQNVqfvM12TYMdfVbotjkkP$;1Et@pd2@`;XIeG)&g zKR%qFRMxh^{^$dslO!9c13G-w(7d*gqN|7KJ=gdJk=-v5UZ8hg!{2nQu#B`h2hA_B zRvMAjjLsR<~LI<()VjLyebHagVREk>v8RfAIxqnFU%CUS#?nbujoa_!Mn zannSezlx=)%*I3vUtSqi8qsP~Y(=Zvrut*9Wz)We>qhC}^Li0CEv+J?>KZ9~GW}Q_ z;!HGU1_r)~>@Z|)M)De|p%}@KUUmkgRCQ>dbs!<{U@+a@OmM>0kImvrs;#Po?<_c% zZpKv>CtI8x@asymwRN1@NirjB_`!Rn(AsTjF>mb@7g+-ZVd(HADVn| zMs{XHI%eZUn|d8ecZo#@Sc4~#L}lqvOEi)WhTBdTApmQrfvnOlN=AYHrXaX+Kf-p$ z$JJOScHaXES>d9EByLX~okFNAOCP9yG({K&p^5z4mM21BoIq{jaNQ1xX|0zb?j=k2 z_I>H=!u@j+?d`JP5(d@!f$E38#_3L)19&aMNqc0I(w%MFJj?GSaK(V}7T!1D>bCS= zN}dc`W=qg*8W;xI8^FUb0)RNcNEmTi;8o-ZEN1p_y4_0Rz$}Z>4U{{ut(D+FW5I$z zEEnJ~w+JDH)Zq>;Vdf_CmqoouB(1<)>=H}u6pKA%Vw!qO=8|S?!Z~y#i|#OSLY&rv zm`D!gh!PEm*;Y)34v@2)q0?=7HNMM;Z)h8*tA;R0L^s$#7KKl}wLtPMxZ|#P1&i(? z`2y$o9WbKjbe%YRcIPAM_MYgKsTnjGTt?D^FaUNEj`TjV!4a0RD2{5qrPvO9UdU$Y zZmP)upr(n0T#zRQIX0twYTxuB;B$M}ZuWIgC1v-YQr%M`EwSvp2y2dr+dKvoK;4eJ zUL72Zbu*->72DaF&FNn7WY<)It#Sl2>Jf+BNOwj{h&3;ol)CNF;jj!AiINi2tx?y4 zpuLhHDJ24;?&Wv+YSP7D$bP2F@Aej#8%TKrmKlX;J)iV21l<(K*Z<{u;0Cw{>GZgo zp;Qd_kg7l?cwap}W{bi2TpvM3S_wRZ8!cK8;U$1THxyxz-AL%Q=1qYde$T|EhNNg2 z>|OaKLts{~E!EnMbffUE(Dio^XE) zs=)m&J&vIR_i=iBogQDMM+=Qziyps6kKd)oO?vzVJ-$QDew`i<(t~13?nU}V3rqK# z^oy*$`^)s}7x75aQ5u`>kYVe@qu=0>Z}6x$c*Gk#+6^A*29I)sN4U;qzA$;*z49fe&opNB{r; literal 0 HcmV?d00001 diff --git a/.doctrees/Examples/examples.doctree b/.doctrees/Examples/examples.doctree new file mode 100644 index 0000000000000000000000000000000000000000..06ad9ec4c7bdb55fc9231fb7c1f545185a35d291 GIT binary patch literal 2581 zcmZ`*OK%%D5Kin!vSdlN^Fo2dX@Vk6g2qx0JrunJNYO)K)Q7gnEg+~}N+iT3w|vC% zAwYWwPy@V${lERVFUtlZV4ZiJXbnrHio@iXTD&{ z#n188Kk;LH8HR?QTkTE8Vz>o~j0>3?rsDe;rb*lhX=ly-fn}K!T6NcXkN5fDeSFD> zq348?Z0jiO{j#A&DPcLuK;+J!Y?EwnoqUS5AN`WTs*C(63`yrE-wpl7yR&dd3dQ1? zU(hh3&Ka@r4!TnmyCS#A<3T2=wP51Cr)W{X?d86_A{I1T8@5a`J`5aPrK89X_#-~% zkNGY?4sYgM7i@04Qq0WHwOP;qc=xNaV#VFo8{C|?A&#e0@#J*JFA(t%VbPVL zCErfW!}iwGb0Ou^m43>ZVY50-55t#^n_R)sdF|*Kf0EL{zeW!DGo<(%JkRmG!1D_6 z@$dKvKjyFD&z&|tzhK>ku-CdBX?yt^Z%fe#3U+I|l|lsgWy@XJ`0H@r8LF(L2|1)R zdS#fc%hq$+Q5jEfg;6WRa*#ebemhJvZxSd-2Z3?Rsi6?|EOSn%6|jBOfpuxLa!lnh z^xskGfq@R~eeGT8T|DClXJNQvC@*!|L=ZUzm>lp5V!t*>U}X(*)R5jtP!p#!l0cMB zVYmkm%|#4%ms&fe9osrQy&Wd0XOu6;3&%+d zWms%3G}t~1W5Y^q9Fgn;L;7~Yh*Q~-y>P@f0$Fp^dD{y0LN8|vzk<2xIW-DdgM?wU z0B4BwXDkI3{|!^2kR!rWrgKQeF!XMD^5Y5MAH(D8hlClU4dGPfk{M(?xth5c4(d#A zY3Ws3VmQ8Wazh0#!n9U;`tc-8twTOtx^( zuuPkr{2NkD6cB=gqtF+ALnrw=Mr$e?WwPj@cW(ASVkq^R(8lMLw7nUw$3Z(IJ(Dns- zY>Z$mI-zPZD4jH7WGT}8#W;MJ-eANsQ#B$}Nn4J3?_&j^PBjU99;N02Y}5)Ul%fzW z{&x5xOiNZ0Bn6X7WmUq)iL;>aJ#|L-iaS@@pXPJ0?X0|TT&tNjt9c9$l4RuoB#C3# z3TQX%0q{?rfBysWIW^1dhWf<0QvYqM9-T@PUf0ab1ar&EMw-Rk6%xjVjxNwbx#RJ4 zFB}7q1?hUT3xL=%A>=X~+6(3AhHy-GnI?S1rqK!aV_Q&k*Wnt2 zJmtmKw4{4W%y?U0Q zc>zVCa)IV>#8I zTmHs|VPd$85*~hx{OzUX&+z|-k8PN27puBG$plKC%tK?%Nj=%h)oyNcYB@NM;uZ@n zyZTq6_ir#e>EShv!`5nb>FzcCn61X8VgBHzuI2D;m CZv%Y* literal 0 HcmV?d00001 diff --git a/.doctrees/Getting_Started/install.doctree b/.doctrees/Getting_Started/install.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d950797484ff211d0198c5db3d8c8ee62c0579fb GIT binary patch literal 3904 zcmb7HTW=gS6mFYtb~l$z(n|o*z*gK!X|jC)3HpikDR%zGv2obV}}7 zsx6C0qI7si8~F0U-3$4cFPDLyMQXh!xXmg)G{khcFX-@QCbFAFxNh)GxAEG(uL1^Z zZbMj8h{_I|H4WK*(Ew^p=D>Z3&crh*0wDNYqF8e}eyK_^TP$C3?= zQt6!%J)7=rj?BXJ^P4-l%eM-eQv-3QyHL2sGf%U z2>JW9a;-meZI(-SrH*;P;Wlu%9e_e>Ak6OE09k_Is(zZ>pMm^$Uqkjyco5S! z#QxKEQu#McL3P_w0QgQJv<3M;+6PY$eGU1iZvy!zEyxc5nV%YSZv8LF3!6@d`P&_u z0sZeccdZ8cI+9jc535OI^?M%==S+MZ*k^Dw(EjHvX!DdSo*nZ?GvIPFkJQUE+geE7 zd=05(hG$rv<0!CNbDV)zq^+f-TPbN(K#O!j%t9;sxb9EKRMX1%EqBFgni^T$`y|t9 zisCL?S;s1LOn>*BTdH|jjAb4mdEO18T!%(Unzp!7Q_A+}dZuhi==K{;`<`f(T9(G% zEk2+!M_+9E|DwummRrBe*LGch%FyztRoY__Q#4phlMIXHQXzqsJuH{1Wv(Swt5!uM zG}f>S#T{6vkG#7yQOc&uvexF^^KLav5ow-~L)>JE2W4Q;&odIKBn&48BHu45OtOMP z4us{TZtu`o9jN;Ku3OP8Q`!>A_8G!=!7Xtrn`OssutR~US!#1rGj&`iX5)Mcb%O({ z)6mEvm(c{2KEfZd;FSNv4Md6<5tc?O2A6mJ+)lQ?-o{Aa-L?5m!n9VJaGJ)FX+%7j z8d>kw%1F1QbP6fnZJpRTA%g$w2BpxM0rk;q^BX5ly7k}yfMz)2Ba2S5T6YbEJ4VB} zfLYI7)+|ywCNawZ6Q~iu$gW#N?M&b!!XaV+l}*H<=ZkJYbF0XVwjGT%ndS@5d?*yB%>l=D}gemusu|UdzV|AnLDEq$Yv)yvRtJ*N>4}LT@9Rt z0pKJS!yB#xq@xG=_9wT$L_7z25}gnqC^PY&*5XmAG~jiQ=^erBq|g!OQ*ILpWqnJ> zD52PLf4Aqh0LX+iwb?j8%30&st(&9N(nHdW5+2jH3b&^`5fWb(8=_o<5U2O@46{pkS`_bv>Jm5xdQ>FR2{2IK3YWq?Ve;__K9OML zfihZ_Vt5zqd0-|Pvl#Vz1QR%87D}#0;MyZBp+XY8g2F9Zn7vWGV*pk;Detsnx4_c< z@V;=p@-9K~0*WGy1&YHGO!!lVy9vPAfKh;!#oGw5iNkB+32wVNYWd;-8PX=rVlk8u z9xI@C1F`(R!C�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 literal 0 HcmV?d00001 diff --git a/.doctrees/User_Guide/userguide.doctree b/.doctrees/User_Guide/userguide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5d64ebbc62f896304d8fa9906814e2e8e6a12aae GIT binary patch literal 2596 zcmZ`*%WfMt6iw_%vSeAd^FoTmse>X-g2qx8T@>8}NEbz6REs{cD+p?a8WQG^Q$AvO z5ujZJr~&T6{%;RwMq}AP3^}IcvyZXyrC(84c99>3A?aM@+o9ijI1hKE zP%O^B!>2pzF#Upc7s4p{eo}iA>H2zu9@8FxynH=d`0Tp56+hwG7L#^~w3$VUl^1_(3{0jMqrRim+pu zb3zrM`eDc2rP0bUmB-M3N2LcHI`a3mca?W>&iChGSTIzYI&C60IR&pAEh}tx8-oN^ z&afS|TW=(GdroI0@hP3ca1S1uix}=MwRTE7wsClRJM5(vQobasr8Z>*GO?g>MKWEc z&a_bZxIvg?HA2pX<7CZhSZpt}G@pmDVU;$HNcNr~eOqC~sqD7BaL85yS##8RyB6w& zUd|T2fVs&zH40gSgkiJD5|dIJ$9iLj^Cxq)~e1!20Tw>jyV(hJzFUh-NwRBN0#x zdy=Zc(}E%07)oIagD%`NEYl_@IjcYum=WN}JoGcImWUDQ5IKm-mSPooKTN21np{C) zOMqK@xi2fy@ef(80Rie6MP*XBUn4cMQ|+&y$}*p8vMLjw4%n*FmXXbyHAON<-U}-l ze(sZ8Sh|oYkk-q=x-ZaUV+3Q-33Zb}>0T>FmO?i3@L^iP2ztJ5M5dCq9QEGCi-0;c zTk!KRH5X{33b0U$Qn>ib!HY1dSVfQ&%qx}E2^%M5LE(GqjPQs%SJ@wCGr)FQT{y1Q zRGVTJ!-FJQI{-=ISc&pDlw$|@$@6c&Lp~>FncYyIkSq0HuhpYdY2xb{GgHCbvbK@N zGIynfv7w_2v{3GNJlzRLAY@6p-s}P(wn_}S3CtvZBu)caZLLRg>RY-S*}xv+h@LliS(}4k7YXqF2Nq13AF?V)>Gkb zniJM9Zpeu;kymQkv|@S=&muTeE?AEKy?_gxF$W_LGDw{fR#G7eJ^|8{t=&FsA90XX zE}NNl8Mc{vpPtpQ)65byFQ_O~F3=o~IBE)p*@P$c5Ke(w4j%@X-+6jOKVaHjLz{;d zFtjbZO+U2|-e};11U75_mcOxKm;iTC!NU)czrD2l8UDZFV;lB1i&fv=%LGcE%tK>? zq@G;MHEwPqjU1duam$64UHxm(`!~Q&dU#FaaBa1|boZKm%vR&lFn@4US9^jd4HF~N zKFxy|b~7y{5{nq{WDI_6@lOc;WBe8D$M*vI2;VLi^==GygX0>!+rf3oc7@8M&l5$8 SRIO2-W?MT3(rfJ()BgcWdI#44 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/apiref.doctree b/.doctrees/apiref/apiref.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5afffa947dbb12f5118929ea45cab3e2b177f90d GIT binary patch literal 2428 zcmZ8jO>Y}F5KZhzvTRAV^HCH?+#)E_G-x6fK@UZH?5Qy7LtEq)5Y&e9{k1EIrjF^r_?0UuPDO8^fV4hm#5f|{WiUe_&`a`(?yum zcu2jsavnUMm7lRMnae2;3PqiR65l;d%jWBVh3ZzA(_&@$BHM&G@N}7vk~kJm#Yj98 z`{FGAG83lcGaIz#c6Md#YSukw>kDblXeHsS{WrA^FZk+w4>^jjk(hXnM27BCwm?wv z4bXbAt9%LNE2Ja77l%k=zez*9-gULPE!qnmIO27D>@C$!(Oe)>S+lgVr zd+~5%!x_Yo3|+>G!5YKz;W-TUV=iW9VZsnXwNlEvHy;$0Hixo^-b_q z@aaMvU&P^(14QbLO%NDG$viD92uDpof+#D9hpiZ_f;9G~Ah}fe6oGrl&|atbaAAzs z#`CSi^ZRj}si{Lr)(d0H1kJ>OAr&c1nHlfk@@b>tiq{%)CA}aU!XRRMp=HoT99do& z>xtr*9PsVMLqSz1_TnjDOQ7bd4{l@Bi#^8YVTo{)D{3`RgN5a^gk}i%3!Wd9{*4o< zff3=lFbr0pN$`s|KfOW6r1q~e#fW$|Z7sfKecmjE$Y;W;OA*>F3?6V!9pcV>C^8gFXN=*6#*z5Em_on zjk0D=k$dip_@(f^azD>zP`hb$?S;`(W0$iOpJdBA0ay~xOO(f>90$<9dGW)Kz;j|3 z#g6-|xpn{T#yvWfX1=btol5Q(b&NdmgfA6>4LzNsg_sxV{2-ozkR|DQvwHw>Rc6Rd zJaO0B(=`!T2&!HRnCB+*e&kAuF8dJB)DA#Bs^vx`$`rJP_N)*T`JnJkvjOEALfl@3 z3L)~os<%)(1a80{Q%Jo42R2jTVV)B%%y;Z$naQgRZCWvJnpFa4$~kA~-)p2GIQIzh zq=40m@RCYJuv+t!t8_{G41YXn;ixa3> z{?Ek7#qoBr>f7T&qU1R|JT{u#lN-Ax&23F%hvZS*a&A;t|JwBNjf lHvzlBaYudBsq2y*NnNPGGDViTT8Avpwss8UZ5`&*{{cov&A0#n literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/license.doctree b/.doctrees/apiref/license.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cb927f6ab209d8cd857ca541e6862d600a037fbf GIT binary patch literal 3102 zcmbVONpBlB6!s>`@*>+=i~@;M6+s#YiKQM2v?+pKdP?2+&;+>!6KaMM8FR=f7h66A zXb%BmfVVLJw;yMbWCJbI3J@@Se0=NoKJw4j=bKwg<tIso@(X8)eMs?pZ+JF1v`Kx|iyZ$p~ZDD>I4pXL-p``JZ zs=V=QhB>#xpWh~fveJia-{1cNH=(XRQXf{SpRjuY$vRPNH_%>p7ng@UQrIiYfJ!U_|w991M zmgotc&jd1k{2$6*<<`XPH_?lux=DdFDU{;=T-;>T1kZkrF&+DjS>dyAyj+L4@0SM) z)wK-)M9wQeJY=-?HzePDe&aX7j(*NGcxi>xNp(b&6gaZLI@bzuwY~gG;VLK8GuU1d>UBW_lUD9nTz}i z2e!5|mlw$lf2e9H;DDZ%L_~u-rKCi5?EPF+80s>WO!J7RT{B-{B5+bQh&bZ+f zK6jFg8!{3xkvhswGZ&b#EhJ+w3FVN%=yt7^jJc?8!2S3ICx+^B5UGsTGW2^Bw?Fz+ zErHLyI9z~@oB)M_gUZ5--G{zc&?1>JQ%q(nN=5{+$I0+tHPj2S859?mDLGJjG7SE9 z)GPylW@2fM_E@xI9rB|G-+hmI_VhTtWnYU(PVKn#5ieq9a{*^v zOGX%>%(8I2?hgRSJekerEP=!n5h0g;*IYl$D@Le@`z@0bOxYg}Lv2u~ zo8`J%CPJm8F6}|eaLcD?d^K#Sa#=#0K6M3L#5Yv=Fse!566jGWmt$a{VTBu!CyX0i z)8lyruTZ2K#rOa^4Zuu3q8aA*0wFMpd+XBQPN8+0(426Q;JFuBwhVi(ey{qNLKp(*do{M@r1lP^#X#CY)(^uUPChUdux_uGk0DY8$Ej_H|qJ z4lX$GN2*+8hu}9;B?QWh9B_ejeyQc3P=ycScgzA_jhHIDT@AWlIh@hR74hawTsCl% Z%T%~50%j5)z#Ca)x|$T?-R(w$zX2Xw!wvud literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..73ba2f734f0b835147ae03b1654bb23674ef430b GIT binary patch literal 199861 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 + + + + + + + + Acknowledgements - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Acknowledgements

+

This work has been supported by the following grants:

+
    +
  • National Science Foundation Graduate Research Fellowship (grant no. DGE-1610403)

  • +
  • Future Investigators in NASA Earth and Space Science and Technology (NASA FINESST, grant no. 21-EARTH21-0264)

  • +
  • Planet Texas 2050, a research grand challenge at the University of Texas at Austin.

  • +
  • U.S. Department of Energy, Office of Science, Biological and Environmental Research Program’s South-East Texas Urban Integrated Field Laboratory under Award Number DE-SC0023216.

  • +
+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Background/background.html b/Background/background.html new file mode 100644 index 0000000..45198d9 --- /dev/null +++ b/Background/background.html @@ -0,0 +1,609 @@ + + + + + + + + + Background - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Background

+
+

Motivation

+

SVInsight was developed to provide an open-source tool for creating social vulnerability indices or SVIs based on user defined study areas and input variables. SVInsight uses two methodologies to create indices based on existing scholarly research: (1) a factor analysis method and (2) a rank method. This tool’s purpose is to provide researchers with the ability to quickly create exploratory estimates of vulnerability based on existing and known relationships between socio-demographic variables and a community’s sensativity (a proxy for vulnerability).

+

While SVInsight is capable of rapidly producing tailor made estimates of relative vulnerability of a given region for researchers and/or practicitioners, it does not replace the in-depth investigation required to definitively define what makes someone more or less vulnerable. Indices created with SVInsight can be used as a starting point for understanding the complex relationship between socio-demographic variables and community characteristics including vulnerability, sensativity, and adaptive capacity by highlighting prominant geographic disparities. It is further important to note that vulnerability estimates are relative, and calculated scores should be taken in the context of the study area being examined.

+

This package was specifically written in conjunction with past and ongoing projects at the Univeristy of Texas at Austin [2] [3] [4]. More detailed infomration regarding funding sources can be found in the Acknolwedgements section.

+
+
+

Methodology

+
+

Data Source

+

All data comes from the American Community Survey 5-Year Estimates because they contain data at the Census block group and tract level. More information on data quality can be found on their website.

+
+
+

Iterative Factor Analysis

+

This methodology is heavily influenced by the original SoVI® [1] developed by Dr. Susan Cutter. By utilizing a data reduction methodology, a large subset of American Community Survey 5-Year Estimate variables can be dimensionally reduced and combined into a single index. Both principal component analyses and factor analyses are data reduction techniques that have been utilized to create vulnerability indices. A principal component analysis (PCA) reduces data by creating one or more index variables, or ‘components,’ by using a linear combination (i.e., a weighted average) from a larger set of measured variables. The purpose of a PCA is to determine the optimal number of components, the optimal choice of measured variables for each component, and the optimal weights. A factor analysis (FA) is a model of latent variables. A ‘latent variable’ cannot be directly measured with a single variable. A common example used to describe this is we cannot directly measure something like social anxiety, but we can measure whether someone has a high or low social anxiety based on a set of questions like “I am uncomfortable in large groups” or “ I get nervous talking to strangers.” We utilize a factor analysis approach because it is the data reduction methodology most often associated with creating composite indices, which is our end goal.

+

The follow are the steps in the iterative factor analysis approach:

+
    +
  1. +
    Scale the data
      +
    • We standardize the data to a range of 0-1. Since all of the variable have a different scale, this makes each variable have an equal weight going into the analysis.

    • +
    +
    +
    +
  2. +
  3. +
    Conduct Initial Factor Analysis
      +
    • Inputs for a factor analysis include the number of factors we are attempting to reduce the data down to, the rotation method, and the fitting method. For this first factor analysis, we set the number of factors to the number of variables under investigation (the maximum number of possible factors) in order to determine if there are any variables at the start we can eliminate for having too low of an influence. The rotation method used is varimax, or orthogonal rotation, which maximizes the sum of the variances of the squared loadings. In simpler terms, ‘loadings’ refer to the correlations between variables and factors. With varimax rotation, the resultant factors are uncorrelated with each other. The fitting method we use is minimum residual (‘minres’).

    • +
    +
    +
    +
  4. +
  5. +
    Calculate Eigenvalues

    -With our initial factors, we need to determine which ones are significant and which can be removed. If we stopped here, we would have reduced X variables to X factors, (i.e., we wouldn’t have reduced anything). Our goal is to find the weakest factors to eliminate so that while we are eliminating data, we maintain the highest level of reported variance in our final factors. +-The first step in doing this is calculating the eigenvalues, which is defined as a measure of how much of the common variance of the observed variables a factor explains. A factor with an eigenvalue greater than or equal to 1 explains more variance than a single observed variable and is therefore beneficial. This is known as the Kaiser Criterion. The number of factors whose eigenvalues is greater than 1 now becomes our new number of factors.

    +
    +
    +
  6. +
  7. +
    Recompute Factor Analysis based on Kaiser Criterion
      +
    • Similar to step 2, we run the factor analysis again with the new optimized number of factors.

    • +
    +
    +
    +
  8. +
  9. +
    Calculate Loading Factors
      +
    • The loading factor is the correlation coefficient for the variable and factor. It shows the variance explained by the variable on that particular factor. This will become the weight of the variable on that factor. Various standards exist on what makes a significant loading factor. For the sake of this research, we identify any loading factor that is greater than 0.5 or less than -0.5 is significant.

    • +
    +
    +
    +
  10. +
  11. +
    Calculate Variance Statistics
    +
    -The variance statistics for each factor that we are interested in tracking are the SS Loadings, Proportion Variance, Cumulative Variance, and Ratio of Variance.
      +
    • SS Loadings: The sum of the squared loadings for the factor. If a factor’s SS loading is greater than 1 it is worth keeping.

    • +
    • Proportion Variance: The proportion of the variance that a factor accounts for. The first factor will have the highest proportion, due to our rotation earlier, and subsequent factors will have a decreasing proportion of explained variance.

    • +
    • Cumulative Variance: The cumulative sum of the variance that is explained with each factor. The overall cumulative variance is how much of the original system’s variables are explained with this new reduced dimensionality. This is incredibly important because it shows us how much of the original data’s variance we are losing. If we are losing too much, then we need to reconsider how many factors we have reduced down to. If it is too close to 100% then we can theoretically reduce down more.

    • +
    • Ratio of Variance: Ratio of proportion of variance to cumulative variance.

    • +
    +
    +
    +
    +
    +
  12. +
  13. +
    Determine Significant Variables

    -Any variable whose loading factor is greater than 0.5 or less than -0.5 at any point is significant and therefore needs to be included in the analysis. Any variable that is not significant in any factor can be eliminated. With the new dataset we can again re-run the factor analysis until only the variables that are significantly contributing to at least one factor are included.

    +
    +
    +
  14. +
  15. +
    Begin Iterative Loop
      +
    • With the newly created list of variables that have a significant contribution to at least a single factor, we can eliminate those that are not contributing and re-run the factor analysis without it. This process is repeated until every variable is significantly contributing to at least one factor.

    • +
    +
    +
    +
  16. +
  17. +
    Compose the Final Index

    -We first recalculate the final loadings and then for each factor, multiply the loading by the ratio of variance to scale the data. Therefore, factor 1 is rated higher than factor 2, factor 2 is rated higher than 3, and so on. From this, we can examine each factor to see which is the largest source of ‘vulnerability’ within the composite index (i.e., what is contributing the most). We create the composite index by adding each factor value together to calculate the unscaled composite index. The final composite index is minmax scaled so that the most vulnerable block group has a composite index of 1 and the least as a composite index of 0.

    +
    +
    +
  18. +
+

The purpose of the factor analysis and composite score index in the scope of social vulnerability is to determine which variables are most distinguishable across the study area. The variables with the highest variability are likely to influence the index the most and therefore they must be taken into context of the study area. For example, in Austin, TX a variable that is highly variant across the city is the percent of population that identifies as Hispanic. If this trait contributes to social vulnerability, then our index is working properly to identify areas of higher vulnerability. However, if we discovered that this trait does not contribute to social vulnerability, we cannot include it in this workflow because we are unintentionally weighting the index incorrectly. That is why it is imperative that indices are developed through collaborations with local experts to identify which variables are likely contributing to vulnerability.

+
+
+

Rank Method

+

Another commonly employed method to estimate social vulnerability is a ranking method, which was popularized by the Center for Disease Control’s Social Vulnerability Index [5]. This method is a more simplified way to produce an index for a given area. Each variable of interest is sorted from high to low and ranked. For each location within the study area, the ranks are summed so that locations with a higher overall rank have a greater vulnerability score. In our method, the final summed ranks are also minmax scaled so that the most vulnerable block group has a composite index of 1 and the least as a composite index of 0.

+
+
+
+

Variables

+

SVInsight comes with a standard set of 27 variables which come from the original principal component analysis method, SoVI®. We omit two variables from the original list of 29 due to data availability issues for all of the years and geographic boundaries of interest (the percentage of the population living in nursing facilities, and the number of hosptials per capita). It is important to note that the CDC SVI uses a list of 16 variables that are similar to those from the SoVI® method. Determining which or how many variables to use depends completely on the study area and objectives of the researcher/practitioner and can greatly influence the estimates. Special consideration must be taken to determine the most appropriate set of variables to use.

+

The variables, there definitions, and the American Community Survey 5-Year Estimate sources can be found below:

+
    +
  • +
    QAGDDEP: Percent of population under the age of 5 or over the age of 65
      +
    • [‘B01001_001E’, ‘B01001_026E’, ‘B01001_003E’, ‘B01001_020E’, ‘B01001_021E’, ‘B01001_022E’, ‘B01001_023E’, ‘B01001_024E’, ‘B01001_025E’, ‘B01001_027E’, ‘B01001_044E’, ‘B01001_045E’, ‘B01001_046E’, ‘B01001_047E’, ‘B01001_048E’, ‘B01001_049E’]

    • +
    +
    +
    +
  • +
  • +
    QFEMALE: Percent of population that is female
      +
    • [‘B01001_001E’, ‘B01001_026E’]

    • +
    +
    +
    +
  • +
  • +
    MEDAGE: Median age
      +
    • [‘B01002_001E’]

    • +
    +
    +
    +
  • +
  • +
    QBLACK: Percent of population that is non-Hispanic Black/African-American
      +
    • [‘B03002_001E’, ‘B03002_004E’]

    • +
    +
    +
    +
  • +
  • +
    QNATIVE: Percent of population that is non-Hispanic Native American
      +
    • [‘B03002_001E’, ‘B03002_005E’]

    • +
    +
    +
    +
  • +
  • +
    QASIAN: Percent of population that is non-Hispanic Asian
      +
    • [‘B03002_001E’, ‘B03002_006E’]

    • +
    +
    +
    +
  • +
  • +
    QHISPC: Percent of population that is Hispanic
      +
    • [‘B03002_001E’, ‘B03002_012E’]

    • +
    +
    +
    +
  • +
  • +
    QFAM: Percent of families where only one spouse is present in the household
      +
    • [‘B11005_003E’, ‘B11005_005E’]

    • +
    +
    +
    +
  • +
  • +
    PPUNIT: People per unit, or average household size
      +
    • [‘B25010_001E’]

    • +
    +
    +
    +
  • +
  • +
    QFHH: Percent of households with Female householder and no spouse present
      +
    • [‘B11001_001E’, ‘B11001_006E’]

    • +
    +
    +
    +
  • +
  • +
    QEDLESHI: Percent of population over the age of 25 with less than a high school diploma (or equivalent)
      +
    • [‘B15003_001E’, ‘B15003_002E’, ‘B15003_003E’, ‘B15003_004E’, ‘B15003_005E’, ‘B15003_006E’, ‘B15003_007E’, ‘B15003_008E’, ‘B15003_009E’, ‘B15003_010E’, ‘B15003_011E’, ‘B15003_012E’, ‘B15003_013E’, ‘B15003_014E’, ‘B15003_015E’, ‘B15003_016E’]

    • +
    +
    +
    +
  • +
  • +
    QCVLUN: Percent of civilian population over the age of 15 that is unemployed
      +
    • [‘B23025_003E’, ‘B23025_005E’]

    • +
    +
    +
    +
  • +
  • +
    QRICH: Percent of households earning over $200,000 annually (inversely related to vulnerability)
      +
    • [‘B19001_001E’, ‘B19001_017E’]

    • +
    +
    +
    +
  • +
  • +
    QSSBEN: Percent of houseolds with social security income
      +
    • [‘B19055_001E’, ‘B19055_002E’]

    • +
    +
    +
    +
  • +
  • +
    PERCAP: Per capita income in the past 12 months (inversely related to vulnerability)
      +
    • [‘B19301_001E’]

    • +
    +
    +
    +
  • +
  • +
    QRENTER: Percent of households that are renters
      +
    • [‘B25003_001E’, ‘B25003_003E’]

    • +
    +
    +
    +
  • +
  • +
    QUNOCCHU: Percent of housing units that are unoccupied
      +
    • [‘B25002_001E’, ‘B25002_003E’]

    • +
    +
    +
    +
  • +
  • +
    QMOHO: Percent of housing unts that are mobile homes
      +
    • [‘B25024_001E’, ‘B25024_010E’]

    • +
    +
    +
    +
  • +
  • +
    MDHSEVAL: Median housing value (inversely related to vulnerability)
      +
    • [‘B25077_001E’]

    • +
    +
    +
    +
  • +
  • +
    MDGRENT: Median gross rent
      +
    • [‘B25064_001E’]

    • +
    +
    +
    +
  • +
  • +
    QPOVTY: Percent of population whose income in the past 12 months was below the poverty level
      +
    • [‘B17021_001E’, ‘B17021_002E’]

    • +
    +
    +
    +
  • +
  • +
    QNOAUTO: Percent of households without access to a car
      +
    • [‘B25044_001E’, ‘B25044_003E’, ‘B25044_010E’]

    • +
    +
    +
    +
  • +
  • +
    QNOHLTH: Percent of population without health insurance
      +
    • [‘B27001_001E’, ‘B27001_005E’, ‘B27001_008E’, ‘B27001_011E’, ‘B27001_014E’, ‘B27001_017E’, ‘B27001_020E’, ‘B27001_023E’, ‘B27001_026E’, ‘B27001_029E’, ‘B27001_033E’, ‘B27001_036E’, ‘B27001_039E’, ‘B27001_042E’, ‘B27001_045E’, ‘B27001_048E’, ‘B27001_051E’, ‘B27001_054E’, ‘B27001_057E’]

    • +
    +
    +
    +
  • +
  • +
    QESL: Percent of population who speaks English “not well” or “not at all”
      +
    • [‘B16004_001E’, ‘B16004_007E’, ‘B16004_008E’, ‘B16004_012E’, ‘B16004_013E’, ‘B16004_017E’, ‘B16004_018E’, ‘B16004_022E’, ‘B16004_023E’, ‘B16004_029E’, ‘B16004_030E’, ‘B16004_034E’, ‘B16004_035E’, ‘B16004_039E’, ‘B16004_040E’, ‘B16004_044E’, ‘B16004_045E’, ‘B16004_051E’, ‘B16004_052E’, ‘B16004_056E’, ‘B16004_057E’, ‘B16004_061E’, ‘B16004_062E’, ‘B16004_066E’, ‘B16004_067E’]

    • +
    +
    +
    +
  • +
  • +
    QFEMLBR: Percent of the civilian employed population over the age of 16 that is female
      +
    • [‘C24010_001E’, ‘C24010_038E’]

    • +
    +
    +
    +
  • +
  • +
    QSERV: Percent of the civilian employed population that has a service occupation
      +
    • [‘C24010_001E’, ‘C24010_019E’, ‘C24010_055E’]

    • +
    +
    +
    +
  • +
  • +
    QEXTRCT: Percent of the civilian employed population that has a construction and extraction occupation
      +
    • [‘C24010_001E’, ‘C24010_032E’, ‘C24010_068E’]

    • +
    +
    +
    +
  • +
+
+
+

References

+ +
+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Background/paper.html b/Background/paper.html new file mode 100644 index 0000000..6e0d059 --- /dev/null +++ b/Background/paper.html @@ -0,0 +1,273 @@ + + + + + + + + + Paper - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Paper

+

A paper accompanying this software package will be published in the Journal of Open Source Software. Once published, it will be linked here.

+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Background/understanding.html b/Background/understanding.html new file mode 100644 index 0000000..8679bcb --- /dev/null +++ b/Background/understanding.html @@ -0,0 +1,360 @@ + + + + + + + + + Understanding Iterative Factor Analysis Results - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Understanding Iterative Factor Analysis Results

+

One of the outputs of the SVI workflow is an excel file containing documentation describing the characteristics of the index. This file can be found in the Documentation project folder and has the following naming convention:

+
    +
  • folder location: {file_path}/{project_name}/{Documentation}/

  • +
  • file name: {project_name}_{year}_{boundadry}_{config_file}.xlsx

  • +
+

Each tab of the excel sheet contains pertinent information regrading the iterative factor analysis SVI. The below subsections discusses what information is stored in each sheet and shows examples from an SVI run using the standard set of 27 variables (see background for more information) for Travis County, Texas in 2017 at the block group level.

+
+

Significant Components

+

This sheet shows what components are significantly contributing to each factor from the final factor analysis. The number of iterations can be determined based on the name of each factor. For example, in this run ‘F2’ means that this went through three rounds of factor analysis (zero-based numbering rules). As can be seen, there are 5 factors in the final index. Information on which variables contribute to which factor is useful in determining “themes” for the factors (e.g., wealth theme, social characteristics theme, etc.). In this example, one could identify the first factor as Social Status, and the second factor as Economic Status. These are for description only and will be unique based on the study area and year being analyzed. They may or may not be easily definiable into distinct themes, but do show what variables are correlated within a study area.

+
+Table of significant components for 2017 Travis County, Texas Block Group SVI estimate +
+

Table 1: Significant components for 2017 Travis County, Texas Block Group SVI estimate

+
+
+

Loading Factors

+

Based on the variables within the final index, each has a loading factor associated with it for each factor. This information is critical in determining the weights for each variable for each factor when calculating the final index. For every boundary in the study area and for every factor, the variable is multipled by the loading factor and summed within each factor. This is how the factor scores are determined.

+
+Table of loading factors for 2017 Travis County, Texas Block Group SVI estimate +
+

Table 2: Loading factors for 2017 Travis County, Texas Block Group SVI estimate

+
+
+

All Refactor Variances

+

This shows the four main variance statistics associated with a factor analysis for each iteration. +- SS Loadings: The sum of the squared loadings for the factor. If a factor’s SS loading is greater than 1 it is worth keeping. +- Proportion Variance: The proportion of the variance that a factor accounts for. The first factor will have the highest proportion, due to our rotation earlier, and subsequent factors will have a decreasing proportion of explained variance. When calculating the final index, each factor is multipled by its proportion of variance to weight the variables. +- Cumulative Variance: The cumulative sum of the variance that is explained with each factor. The overall cumulative variance is how much of the original system’s variables are explained with this new reduced dimensionality. This is important because it shows us how much of the original data’s variance we are losing. If we are losing too much, then we need to reconsider how many factors we have reduced down to. If it is too close to 100% then we can theoretically reduce down more. +- Ratio Variance: Ratio of proportion of variance to cumulative variance.

+

For most studies, especially exploratory analyses, it is acceptable to have a cumulative variance as low as 60%, and sometimes as lowas 50% [1] [2] [3] .

+
+Table of all factor variance statistics for 2017 Travis County, Texas Block Group SVI estimate +
+

Table 3: Iterative factor variance statistics for 2017 Travis County, Texas Block Group SVI estimate

+
+
+

Final Variances

+

An abreviated version of All Refactor Variances, showing only the final table for the final iteration.

+
+Table of Final factor analysis variance statistics for 2017 Travis County, Texas Block Group SVI estimate +
+

Table 4: Final factor analysis variance statistics for 2017 Travis County, Texas Block Group SVI estimate

+
+
+

Included and Excluded

+

contains the lists of what variables make the final index and which variables are excluded due to not significantly contributing to a any factors. This can be useful for double checking that the index is including variables you would likely expect to find given your study area.

+
+
+

References

+ +
+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Examples/examples.html b/Examples/examples.html new file mode 100644 index 0000000..f7a5b40 --- /dev/null +++ b/Examples/examples.html @@ -0,0 +1,273 @@ + + + + + + + + + Examples - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Examples

+

Examples will go here.

+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Getting_Started/install.html b/Getting_Started/install.html new file mode 100644 index 0000000..81abeb8 --- /dev/null +++ b/Getting_Started/install.html @@ -0,0 +1,306 @@ + + + + + + + + + Install - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Install

+
+

Installation via pip

+

This package will be pip installable soon:

+
$ pip install SVInsight
+
+
+
+
+

Installation via conda

+

This package will be conda installable soon:

+
$ conda install SVInsight
+
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Getting_Started/quickstart.html b/Getting_Started/quickstart.html new file mode 100644 index 0000000..eb70e2c --- /dev/null +++ b/Getting_Started/quickstart.html @@ -0,0 +1,337 @@ + + + + + + + + + Getting Started - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Getting Started

+
+

Quickstart

+

This is a quick guide to using SVInsight. In this demonstration, we show how to load and create the SVInsight object, determine an area of interest, set a boundary level (e.g., tract or block groups), download the necessary boundary and raw data, calculate input variables, and compute the social vulnerability estimate.

+

First we load the SVInsight package, set the necessary variables, and create the SVInsight object.

+
>>> from SVInsight import SVInsight as svi
+>>> project_name = 'YOUR PROJECT NAME HERE'
+>>> file_path = "YOUR PARENT FOLDER HERE"
+>>> api_key = 'YOUR CENSUS API KEY HERE'
+>>> geoids = ['48453']
+>>> project = svi(project_name, file_path, api_key, geoids)
+
+
+

These variables create the instance of a project. Each have the following purpose:

+
    +
  • project_name: This is the name of your project. In this case, it’s ‘Travis_County_SVI’. The project name is used when saving files throughout the project.

  • +
  • file_path: This is the path to the parent folder where your project files will be stored. Replace “YOUR PARENT FOLDER HERE” with the actual path. Creating the SVInsight object automatically creates the necessary file structure needed for your project based on the file_path and project_name.

  • +
  • api_key: This is your Census API key. Replace ‘YOUR CENSUS API KEY HERE’ with your actual API key. You can obtain an API key from the Census Bureau’s developer page.

  • +
  • geoids: This is a list of geographic identifiers for the areas you’re interested in. In this case, it’s [‘48453’], which represents Travis County, Texas. The necessary geographic identifiers for your state or county of interest can be obtained from this FCC page.

  • +
+

Each instance of SVInsight can be seen as a standalone project for a constant study area. Within each project, the user can explore different vulnerability estimates based on different years or boundaries (e.g., block group versus tract).

+

In this quickstart, we will examine a vulnerability estimate for Travis County using 2019 data at the block group level.

+
>>> boundary = 'bg'
+>>> year = 2019
+>>> config_file = 'config_file'
+
+
+

The simplest workflow is as follows:

+
    +
  1. Extract boundaries

  2. +
  3. Extract Census data

  4. +
  5. Configure variables

  6. +
  7. Calculate vulnerability estimate

  8. +
+
>>> project.boundaries_data(boundary, year)
+>>> project.census_data(boundary, year)
+>>> project.configure_variables(config_file)
+>>> project.calculate_svi(config_file, boundary, year)
+
+
+

The output SVI .csv and .gpkg files built will be saved with the following file format:

+
    +
  • folder location: {file_path}/{project_name}/{SVIs}/

  • +
  • file name: {project_name}_{year}_{boundadry}_{config_file}_svi

  • +
+

More detailed examples of the complete functionality of SVInsight can be found under Examples.

+
+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/User_Guide/userguide.html b/User_Guide/userguide.html new file mode 100644 index 0000000..bec50b3 --- /dev/null +++ b/User_Guide/userguide.html @@ -0,0 +1,273 @@ + + + + + + + + + User Guide - SVInsight documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

User Guide

+

User guide will go here.

+
+ +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_images/all_refac_.pdf b/_images/all_refac_.pdf new file mode 100644 index 0000000000000000000000000000000000000000..76e88bc1fc5a5f676504a04ef5a120b9c23e2784 GIT binary patch literal 37199 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. + + +Methodology +----------- + +Data Source +^^^^^^^^^^^ +All data comes from the American Community Survey 5-Year Estimates because they contain data at the Census block group and tract level. More information on data quality can be found on their `website `_. + +Iterative Factor Analysis +^^^^^^^^^^^^^^^^^^^^^^^^^ + +This methodology is heavily influenced by the original SoVI® [1]_ developed by Dr. Susan Cutter. By utilizing a data reduction methodology, a large subset of American Community Survey 5-Year Estimate variables can be dimensionally reduced and combined into a single index. Both principal component analyses and factor analyses are data reduction techniques that have been utilized to create vulnerability indices. A principal component analysis (PCA) reduces data by creating one or more index variables, or ‘components,’ by using a linear combination (i.e., a weighted average) from a larger set of measured variables. The purpose of a PCA is to determine the optimal number of components, the optimal choice of measured variables for each component, and the optimal weights. A factor analysis (FA) is a model of latent variables. A ‘latent variable’ cannot be directly measured with a single variable. A common example used to describe this is we cannot directly measure something like social anxiety, but we can measure whether someone has a high or low social anxiety based on a set of questions like “I am uncomfortable in large groups” or “ I get nervous talking to strangers.” We utilize a factor analysis approach because it is the data reduction methodology most often associated with creating composite indices, which is our end goal. + +The follow are the steps in the iterative factor analysis approach: + + +1. **Scale the data** + - We standardize the data to a range of 0-1. Since all of the variable have a different scale, this makes each variable have an equal weight going into the analysis. + +2. **Conduct Initial Factor Analysis** + - Inputs for a factor analysis include the number of factors we are attempting to reduce the data down to, the rotation method, and the fitting method. For this first factor analysis, we set the number of factors to the number of variables under investigation (the maximum number of possible factors) in order to determine if there are any variables at the start we can eliminate for having too low of an influence. The rotation method used is varimax, or orthogonal rotation, which maximizes the sum of the variances of the squared loadings. In simpler terms, ‘loadings’ refer to the correlations between variables and factors. With varimax rotation, the resultant factors are uncorrelated with each other. The fitting method we use is minimum residual (‘minres’). + +3. **Calculate Eigenvalues** + -With our initial factors, we need to determine which ones are significant and which can be removed. If we stopped here, we would have reduced X variables to X factors, (i.e., we wouldn’t have reduced anything). Our goal is to find the weakest factors to eliminate so that while we are eliminating data, we maintain the highest level of reported variance in our final factors. + -The first step in doing this is calculating the eigenvalues, which is defined as a measure of how much of the common variance of the observed variables a factor explains. A factor with an eigenvalue greater than or equal to 1 explains more variance than a single observed variable and is therefore beneficial. This is known as the Kaiser Criterion. The number of factors whose eigenvalues is greater than 1 now becomes our new number of factors. + +4. **Recompute Factor Analysis based on Kaiser Criterion** + - Similar to step 2, we run the factor analysis again with the new optimized number of factors. + +5. **Calculate Loading Factors** + - The loading factor is the correlation coefficient for the variable and factor. It shows the variance explained by the variable on that particular factor. This will become the weight of the variable on that factor. Various standards exist on what makes a significant loading factor. For the sake of this research, we identify any loading factor that is greater than 0.5 or less than -0.5 is significant. + +6. **Calculate Variance Statistics** + -The variance statistics for each factor that we are interested in tracking are the SS Loadings, Proportion Variance, Cumulative Variance, and Ratio of Variance. + + *SS Loadings:* The sum of the squared loadings for the factor. If a factor’s SS loading is greater than 1 it is worth keeping. + + *Proportion Variance:* The proportion of the variance that a factor accounts for. The first factor will have the highest proportion, due to our rotation earlier, and subsequent factors will have a decreasing proportion of explained variance. + + *Cumulative Variance:* The cumulative sum of the variance that is explained with each factor. The overall cumulative variance is how much of the original system’s variables are explained with this new reduced dimensionality. This is incredibly important because it shows us how much of the original data’s variance we are losing. If we are losing too much, then we need to reconsider how many factors we have reduced down to. If it is too close to 100% then we can theoretically reduce down more. + + *Ratio of Variance:* Ratio of proportion of variance to cumulative variance. + +7. **Determine Significant Variables** + -Any variable whose loading factor is greater than 0.5 or less than -0.5 at any point is significant and therefore needs to be included in the analysis. Any variable that is not significant in any factor can be eliminated. With the new dataset we can again re-run the factor analysis until only the variables that are significantly contributing to at least one factor are included. + +8. **Begin Iterative Loop** + - With the newly created list of variables that have a significant contribution to at least a single factor, we can eliminate those that are not contributing and re-run the factor analysis without it. This process is repeated until every variable is significantly contributing to at least one factor. + +9. **Compose the Final Index** + -We first recalculate the final loadings and then for each factor, multiply the loading by the ratio of variance to scale the data. Therefore, factor 1 is rated higher than factor 2, factor 2 is rated higher than 3, and so on. From this, we can examine each factor to see which is the largest source of ‘vulnerability’ within the composite index (i.e., what is contributing the most). We create the composite index by adding each factor value together to calculate the unscaled composite index. The final composite index is minmax scaled so that the most vulnerable block group has a composite index of 1 and the least as a composite index of 0. + +The purpose of the factor analysis and composite score index in the scope of social vulnerability is to determine which variables are most distinguishable across the study area. The variables with the highest variability are likely to influence the index the most and therefore they must be taken into context of the study area. For example, in Austin, TX a variable that is highly variant across the city is the percent of population that identifies as Hispanic. If this trait contributes to social vulnerability, then our index is working properly to identify areas of higher vulnerability. However, if we discovered that this trait does not contribute to social vulnerability, we cannot include it in this workflow because we are unintentionally weighting the index incorrectly. That is why it is *imperative that indices are developed through collaborations with local experts* to identify which variables are likely contributing to vulnerability. + + + +Rank Method +^^^^^^^^^^^ +Another commonly employed method to estimate social vulnerability is a ranking method, which was popularized by the `Center for Disease Control's Social Vulnerability Index `_ [5]_. This method is a more simplified way to produce an index for a given area. Each variable of interest is sorted from high to low and ranked. For each location within the study area, the ranks are summed so that locations with a higher overall rank have a greater vulnerability score. In our method, the final summed ranks are also minmax scaled so that the most vulnerable block group has a composite index of 1 and the least as a composite index of 0. + + + +Variables +--------- +SVInsight comes with a standard set of 27 variables which come from the original principal component analysis method, SoVI®. We omit two variables from the original list of 29 due to data availability issues for all of the years and geographic boundaries of interest (the percentage of the population living in nursing facilities, and the number of hosptials per capita). It is important to note that the CDC SVI uses a list of 16 variables that are similar to those from the SoVI® method. Determining which or how many variables to use depends completely on the study area and objectives of the researcher/practitioner and can greatly influence the estimates. Special consideration must be taken to determine the most appropriate set of variables to use. + +The variables, there definitions, and the American Community Survey 5-Year Estimate sources can be found below: + + ++ QAGDDEP: Percent of population under the age of 5 or over the age of 65 + - ['B01001_001E', 'B01001_026E', 'B01001_003E', 'B01001_020E', 'B01001_021E', 'B01001_022E', 'B01001_023E', 'B01001_024E', 'B01001_025E', 'B01001_027E', 'B01001_044E', 'B01001_045E', 'B01001_046E', 'B01001_047E', 'B01001_048E', 'B01001_049E'] + ++ QFEMALE: Percent of population that is female + - ['B01001_001E', 'B01001_026E'] + ++ MEDAGE: Median age + - ['B01002_001E'] + ++ QBLACK: Percent of population that is non-Hispanic Black/African-American + - ['B03002_001E', 'B03002_004E'] + ++ QNATIVE: Percent of population that is non-Hispanic Native American + - ['B03002_001E', 'B03002_005E'] + ++ QASIAN: Percent of population that is non-Hispanic Asian + - ['B03002_001E', 'B03002_006E'] + ++ QHISPC: Percent of population that is Hispanic + - ['B03002_001E', 'B03002_012E'] + ++ QFAM: Percent of families where only one spouse is present in the household + - ['B11005_003E', 'B11005_005E'] + ++ PPUNIT: People per unit, or average household size + - ['B25010_001E'] + ++ QFHH: Percent of households with Female householder and no spouse present + - ['B11001_001E', 'B11001_006E'] + ++ QEDLESHI: Percent of population over the age of 25 with less than a high school diploma (or equivalent) + - ['B15003_001E', 'B15003_002E', 'B15003_003E', 'B15003_004E', 'B15003_005E', 'B15003_006E', 'B15003_007E', 'B15003_008E', 'B15003_009E', 'B15003_010E', 'B15003_011E', 'B15003_012E', 'B15003_013E', 'B15003_014E', 'B15003_015E', 'B15003_016E'] + ++ QCVLUN: Percent of civilian population over the age of 15 that is unemployed + - ['B23025_003E', 'B23025_005E'] + ++ QRICH: Percent of households earning over $200,000 annually (inversely related to vulnerability) + - ['B19001_001E', 'B19001_017E'] + ++ QSSBEN: Percent of houseolds with social security income + - ['B19055_001E', 'B19055_002E'] + ++ PERCAP: Per capita income in the past 12 months (inversely related to vulnerability) + - ['B19301_001E'] + ++ QRENTER: Percent of households that are renters + - ['B25003_001E', 'B25003_003E'] + ++ QUNOCCHU: Percent of housing units that are unoccupied + - ['B25002_001E', 'B25002_003E'] + ++ QMOHO: Percent of housing unts that are mobile homes + - ['B25024_001E', 'B25024_010E'] + ++ MDHSEVAL: Median housing value (inversely related to vulnerability) + - ['B25077_001E'] + ++ MDGRENT: Median gross rent + - ['B25064_001E'] + ++ QPOVTY: Percent of population whose income in the past 12 months was below the poverty level + - ['B17021_001E', 'B17021_002E'] + ++ QNOAUTO: Percent of households without access to a car + - ['B25044_001E', 'B25044_003E', 'B25044_010E'] + ++ QNOHLTH: Percent of population without health insurance + - ['B27001_001E', 'B27001_005E', 'B27001_008E', 'B27001_011E', 'B27001_014E', 'B27001_017E', 'B27001_020E', 'B27001_023E', 'B27001_026E', 'B27001_029E', 'B27001_033E', 'B27001_036E', 'B27001_039E', 'B27001_042E', 'B27001_045E', 'B27001_048E', 'B27001_051E', 'B27001_054E', 'B27001_057E'] + ++ QESL: Percent of population who speaks English "not well" or "not at all" + - ['B16004_001E', 'B16004_007E', 'B16004_008E', 'B16004_012E', 'B16004_013E', 'B16004_017E', 'B16004_018E', 'B16004_022E', 'B16004_023E', 'B16004_029E', 'B16004_030E', 'B16004_034E', 'B16004_035E', 'B16004_039E', 'B16004_040E', 'B16004_044E', 'B16004_045E', 'B16004_051E', 'B16004_052E', 'B16004_056E', 'B16004_057E', 'B16004_061E', 'B16004_062E', 'B16004_066E', 'B16004_067E'] + ++ QFEMLBR: Percent of the civilian employed population over the age of 16 that is female + - ['C24010_001E', 'C24010_038E'] + ++ QSERV: Percent of the civilian employed population that has a service occupation + - ['C24010_001E', 'C24010_019E', 'C24010_055E'] + ++ QEXTRCT: Percent of the civilian employed population that has a construction and extraction occupation + - ['C24010_001E', 'C24010_032E', 'C24010_068E'] + + + + + + +References +---------- + +.. [1] Cutter, S. L., Boruff, B. J., & Shirley, W. L. (2012). Social vulnerability to environmental hazards. In Hazards vulnerability and environmental justice (pp. 143-160). Routledge. + +.. [2] Bixler, R. P., Yang, E., Richter, S. M., & Coudert, M. (2021). Boundary crossing for urban community resilience: A social vulnerability and multi-hazard approach in Austin, Texas, USA. International Journal of Disaster Risk Reduction, 66, 102613. + +.. [3] Preisser, M., Passalacqua, P., Bixler, R. P., & Hofmann, J. (2022). Intersecting near-real time fluvial and pluvial inundation estimates with sociodemographic vulnerability to quantify a household flood impact index. Hydrology and Earth System Sciences, 26(15), 3941-3964. + +.. [4] Preisser, M., Passalacqua, P., Bixler, R. P., & Boyles, S. (2023). A network-based analysis of critical resource accessibility during floods. Frontiers in Water, 5, 1278205. + +.. [5] Flanagan, B. E., Gregory, E. W., Hallisey, E. J., Heitgerd, J. L., & Lewis, B. (2011). A social vulnerability index for disaster management. Journal of homeland security and emergency management, 8(1), 0000102202154773551792. \ No newline at end of file diff --git a/_sources/Background/paper.rst.txt b/_sources/Background/paper.rst.txt new file mode 100644 index 0000000..035061d --- /dev/null +++ b/_sources/Background/paper.rst.txt @@ -0,0 +1,4 @@ +Paper +===== + +A paper accompanying this software package will be published in the Journal of Open Source Software. Once published, it will be linked here. \ No newline at end of file diff --git a/_sources/Background/understanding.rst.txt b/_sources/Background/understanding.rst.txt new file mode 100644 index 0000000..1645af8 --- /dev/null +++ b/_sources/Background/understanding.rst.txt @@ -0,0 +1,76 @@ +Understanding Iterative Factor Analysis Results +=============================================== + +One of the outputs of the SVI workflow is an excel file containing documentation describing the characteristics of the index. This file can be found in the Documentation project folder and has the following naming convention: + +- folder location: ``{file_path}/{project_name}/{Documentation}/`` +- file name: ``{project_name}_{year}_{boundadry}_{config_file}.xlsx`` + +Each tab of the excel sheet contains pertinent information regrading the iterative factor analysis SVI. The below subsections discusses what information is stored in each sheet and shows examples from an SVI run using the standard set of 27 variables (see :doc:`background <../Background/background>` for more information) for Travis County, Texas in 2017 at the block group level. + + +Significant Components +---------------------- +This sheet shows what components are significantly contributing to each factor from the final factor analysis. The number of iterations can be determined based on the name of each factor. For example, in this run *'F2'* means that this went through three rounds of factor analysis (zero-based numbering rules). As can be seen, there are 5 factors in the final index. Information on which variables contribute to which factor is useful in determining "themes" for the factors (e.g., wealth theme, social characteristics theme, etc.). In this example, one could identify the first factor as Social Status, and the second factor as Economic Status. These are for description only and will be unique based on the study area and year being analyzed. They may or may not be easily definiable into distinct themes, but do show what variables are correlated within a study area. + +.. figure:: ../Background/sig_comp_.pdf + :alt: Table of significant components for 2017 Travis County, Texas Block Group SVI estimate + +*Table 1: Significant components for 2017 Travis County, Texas Block Group SVI estimate* + + + +Loading Factors +--------------- +Based on the variables within the final index, each has a loading factor associated with it for each factor. This information is critical in determining the weights for each variable for each factor when calculating the final index. For every boundary in the study area and for every factor, the variable is multipled by the loading factor and summed within each factor. This is how the factor scores are determined. + +.. figure:: ../Background/loading_fac_.pdf + :alt: Table of loading factors for 2017 Travis County, Texas Block Group SVI estimate + +*Table 2: Loading factors for 2017 Travis County, Texas Block Group SVI estimate* + + + +All Refactor Variances +---------------------- +This shows the four main variance statistics associated with a factor analysis for each iteration. +- SS Loadings: The sum of the squared loadings for the factor. If a factor’s SS loading is greater than 1 it is worth keeping. +- Proportion Variance: The proportion of the variance that a factor accounts for. The first factor will have the highest proportion, due to our rotation earlier, and subsequent factors will have a decreasing proportion of explained variance. **When calculating the final index, each factor is multipled by its proportion of variance to weight the variables.** +- Cumulative Variance: The cumulative sum of the variance that is explained with each factor. The overall cumulative variance is how much of the original system’s variables are explained with this new reduced dimensionality. **This is important because it shows us how much of the original data’s variance we are losing.** If we are losing too much, then we need to reconsider how many factors we have reduced down to. If it is too close to 100% then we can theoretically reduce down more. +- Ratio Variance: Ratio of proportion of variance to cumulative variance. + +For most studies, especially exploratory analyses, it is acceptable to have a cumulative variance as low as 60%, and sometimes as lowas 50% [1]_ [2]_ [3]_ . + +.. figure:: ../Background/all_refac_.pdf + :alt: Table of all factor variance statistics for 2017 Travis County, Texas Block Group SVI estimate + +*Table 3: Iterative factor variance statistics for 2017 Travis County, Texas Block Group SVI estimate* + + + +Final Variances +--------------- +An abreviated version of All Refactor Variances, showing only the final table for the final iteration. + +.. figure:: ../Background/final_fac_.pdf + :alt: Table of Final factor analysis variance statistics for 2017 Travis County, Texas Block Group SVI estimate + +*Table 4: Final factor analysis variance statistics for 2017 Travis County, Texas Block Group SVI estimate* + + + +Included and Excluded +--------------------- +contains the lists of what variables make the final index and which variables are excluded due to not significantly contributing to a any factors. This can be useful for double checking that the index is including variables you would likely expect to find given your study area. + + + +References +---------- + +.. [1] Hair, J. S., Black, W. C., Babin, B. J., Anderson, R. E. & Tatham, R. L. (2006). Multivariate Data Analysis. New Jersey: Prentice-Hall. + +.. [2] Peterson, R. A. (2000). A Meta-Analysis of Variance Accounted for and Factor Loadings in Exploratory Factor Analysis. Marketing Letters, 11(3), 261–275. http://www.jstor.org/stable/40239882 + +.. [3] Advice for Exploratory Factor Analyses: `Link `_ + diff --git a/_sources/Examples/examples.rst.txt b/_sources/Examples/examples.rst.txt new file mode 100644 index 0000000..94ee91e --- /dev/null +++ b/_sources/Examples/examples.rst.txt @@ -0,0 +1,4 @@ +Examples +======== + +Examples will go here. \ No newline at end of file diff --git a/_sources/Getting_Started/install.rst.txt b/_sources/Getting_Started/install.rst.txt new file mode 100644 index 0000000..26595f4 --- /dev/null +++ b/_sources/Getting_Started/install.rst.txt @@ -0,0 +1,21 @@ +Install +======= + +Installation via *pip* +---------------------- + +This package will be pip installable soon: + +.. code-block:: console + + $ pip install SVInsight + +Installation via *conda* +------------------------ + +This package will be conda installable soon: + + +.. code-block:: console + + $ conda install SVInsight \ No newline at end of file diff --git a/_sources/Getting_Started/quickstart.rst.txt b/_sources/Getting_Started/quickstart.rst.txt new file mode 100644 index 0000000..c044038 --- /dev/null +++ b/_sources/Getting_Started/quickstart.rst.txt @@ -0,0 +1,57 @@ +Getting Started +=============== + +Quickstart +---------- + +This is a quick guide to using SVInsight. In this demonstration, we show how to load and create the SVInsight object, determine an area of interest, set a boundary level (e.g., tract or block groups), download the necessary boundary and raw data, calculate input variables, and compute the social vulnerability estimate. + +First we load the SVInsight package, set the necessary variables, and create the SVInsight object. + +.. doctest:: + + >>> from SVInsight import SVInsight as svi + >>> project_name = 'YOUR PROJECT NAME HERE' + >>> file_path = "YOUR PARENT FOLDER HERE" + >>> api_key = 'YOUR CENSUS API KEY HERE' + >>> geoids = ['48453'] + >>> project = svi(project_name, file_path, api_key, geoids) + +These variables create the instance of a project. Each have the following purpose: + +- ``project_name``: This is the name of your project. In this case, it's 'Travis_County_SVI'. The project name is used when saving files throughout the project. +- ``file_path``: This is the path to the parent folder where your project files will be stored. Replace "YOUR PARENT FOLDER HERE" with the actual path. Creating the SVInsight object automatically creates the necessary file structure needed for your project based on the ``file_path`` and ``project_name``. +- ``api_key``: This is your Census API key. Replace 'YOUR CENSUS API KEY HERE' with your actual API key. You can obtain an API key from the `Census Bureau's developer page `_. +- ``geoids``: This is a list of geographic identifiers for the areas you're interested in. In this case, it's ['48453'], which represents Travis County, Texas. The necessary geographic identifiers for your state or county of interest can be obtained from this `FCC page `_. + + +Each instance of SVInsight can be seen as a standalone project for a constant study area. Within each project, the user can explore different vulnerability estimates based on different years or boundaries (e.g., block group versus tract). + +In this quickstart, we will examine a vulnerability estimate for Travis County using 2019 data at the block group level. + +.. doctest:: + + >>> boundary = 'bg' + >>> year = 2019 + >>> config_file = 'config_file' + +The simplest workflow is as follows: + +(1) Extract boundaries +(2) Extract Census data +(3) Configure variables +(4) Calculate vulnerability estimate + +.. doctest:: + + >>> project.boundaries_data(boundary, year) + >>> project.census_data(boundary, year) + >>> project.configure_variables(config_file) + >>> project.calculate_svi(config_file, boundary, year) + +The output SVI .csv and .gpkg files built will be saved with the following file format: + +- folder location: ``{file_path}/{project_name}/{SVIs}/`` +- file name: ``{project_name}_{year}_{boundadry}_{config_file}_svi`` + +More detailed examples of the complete functionality of SVInsight can be found under :doc:`Examples <../Examples/examples>`. \ No newline at end of file diff --git a/_sources/User_Guide/userguide.rst.txt b/_sources/User_Guide/userguide.rst.txt new file mode 100644 index 0000000..85cf9ad --- /dev/null +++ b/_sources/User_Guide/userguide.rst.txt @@ -0,0 +1,4 @@ +User Guide +========== + +User guide will go here. \ No newline at end of file diff --git a/_sources/apiref/apiref.rst.txt b/_sources/apiref/apiref.rst.txt new file mode 100644 index 0000000..dc345c8 --- /dev/null +++ b/_sources/apiref/apiref.rst.txt @@ -0,0 +1,7 @@ +SVInsight +========= + + +.. automodule:: SVInsight.svi + :members: + :special-members: \ No newline at end of file diff --git a/_sources/apiref/license.rst.txt b/_sources/apiref/license.rst.txt new file mode 100644 index 0000000..a1c9299 --- /dev/null +++ b/_sources/apiref/license.rst.txt @@ -0,0 +1,6 @@ +License +======= + +This project is provided under the `MIT License `_. + + diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..e11ebed --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,72 @@ +.. SVInsight documentation master file, created by + sphinx-quickstart on Wed Apr 10 16:47:20 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +SVInsight +========= + +**SVInsight** is a python package for calculating an exploratory social vulnerability index. This package calculates SVI using two methods: (1) an iterative factor analysis method and (2) a rank method, both of which have been heavily utilized in scholarly research. This package automates the creation and comparions of indices using U.S. American Community Survey 5-Year Data (ACS5) at the block group or tract level. + +.. note:: + + This project is under active development and this website is currently being developed. Please pardon our progress as we finish updating the documentation in the coming weeks (as of April 16th, 2024). + +Getting Started +############### +.. toctree:: + :maxdepth: 2 + + Getting_Started/install + Getting_Started/quickstart + + +Background +########## +.. toctree:: + :maxdepth: 1 + + Background/background + Background/understanding + Background/paper + + +User Guide +########## +.. toctree:: + :maxdepth: 2 + + User_Guide/userguide + +API Reference +############# +.. toctree:: + :maxdepth: 1 + + apiref/apiref + apiref/license + + +Examples +######## +.. toctree:: + :maxdepth: 2 + + Examples/examples + + +Acknowledgements +################ +.. toctree:: + :maxdepth: 2 + + Acknowledgements/acknowledgements + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/_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/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 0000000..74d4aec --- /dev/null +++ b/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..7e4c114 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/_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/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..c2e07c7 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,258 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #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/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 0000000..e69de29 diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 0000000..32e7c05 --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 0000000..1632189 --- /dev/null +++ b/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 0000000..4705302 --- /dev/null +++ b/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":";iCAAA,MAQWA,SAWS,IAAX,EAAAC,EACH,EAAAA,EACkB,oBAAXC,OACLA,OACAC,KAbO,EAAF,WACP,OAaJ,SAAUD,GACR,aAMA,IAAIE,EAAW,CAEbC,SAAU,SACVC,aAAc,SAGdC,QAAQ,EACRC,YAAa,SAGbC,OAAQ,EACRC,QAAQ,EAGRC,QAAQ,GA6BNC,EAAY,SAAUC,EAAMC,EAAMC,GAEpC,GAAKA,EAAOC,SAASL,OAArB,CAGA,IAAIM,EAAQ,IAAIC,YAAYL,EAAM,CAChCM,SAAS,EACTC,YAAY,EACZL,OAAQA,IAIVD,EAAKO,cAAcJ,EAVgB,CAWrC,EAOIK,EAAe,SAAUR,GAC3B,IAAIS,EAAW,EACf,GAAIT,EAAKU,aACP,KAAOV,GACLS,GAAYT,EAAKW,UACjBX,EAAOA,EAAKU,aAGhB,OAAOD,GAAY,EAAIA,EAAW,CACpC,EAMIG,EAAe,SAAUC,GACvBA,GACFA,EAASC,MAAK,SAAUC,EAAOC,GAG7B,OAFcR,EAAaO,EAAME,SACnBT,EAAaQ,EAAMC,UACF,EACxB,CACT,GAEJ,EAwCIC,EAAW,SAAUlB,EAAME,EAAUiB,GACvC,IAAIC,EAASpB,EAAKqB,wBACd1B,EAnCU,SAAUO,GAExB,MAA+B,mBAApBA,EAASP,OACX2B,WAAWpB,EAASP,UAItB2B,WAAWpB,EAASP,OAC7B,CA2Be4B,CAAUrB,GACvB,OAAIiB,EAEAK,SAASJ,EAAOD,OAAQ,KACvB/B,EAAOqC,aAAeC,SAASC,gBAAgBC,cAG7CJ,SAASJ,EAAOS,IAAK,KAAOlC,CACrC,EAMImC,EAAa,WACf,OACEC,KAAKC,KAAK5C,EAAOqC,YAAcrC,EAAO6C,cAnCjCF,KAAKG,IACVR,SAASS,KAAKC,aACdV,SAASC,gBAAgBS,aACzBV,SAASS,KAAKE,aACdX,SAASC,gBAAgBU,aACzBX,SAASS,KAAKP,aACdF,SAASC,gBAAgBC,aAkC7B,EAmBIU,EAAY,SAAUzB,EAAUX,GAClC,IAAIqC,EAAO1B,EAASA,EAAS2B,OAAS,GACtC,GAbgB,SAAUC,EAAMvC,GAChC,SAAI4B,MAAgBZ,EAASuB,EAAKxB,QAASf,GAAU,GAEvD,CAUMwC,CAAYH,EAAMrC,GAAW,OAAOqC,EACxC,IAAK,IAAII,EAAI9B,EAAS2B,OAAS,EAAGG,GAAK,EAAGA,IACxC,GAAIzB,EAASL,EAAS8B,GAAG1B,QAASf,GAAW,OAAOW,EAAS8B,EAEjE,EAOIC,EAAmB,SAAUC,EAAK3C,GAEpC,GAAKA,EAAST,QAAWoD,EAAIC,WAA7B,CAGA,IAAIC,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASR,aAG7BkD,EAAiBG,EAAI7C,GAV0B,CAWjD,EAOIiD,EAAa,SAAUC,EAAOlD,GAEhC,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASX,UAC7B6D,EAAMnC,QAAQgC,UAAUC,OAAOhD,EAASV,cAGxCoD,EAAiBG,EAAI7C,GAGrBJ,EAAU,oBAAqBiD,EAAI,CACjCM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,EAOIoD,EAAiB,SAAUT,EAAK3C,GAElC,GAAKA,EAAST,OAAd,CAGA,IAAIsD,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASR,aAG1B4D,EAAeP,EAAI7C,GAVS,CAW9B,EA6LA,OA1JkB,SAAUsD,EAAUC,GAKpC,IACIC,EAAU7C,EAAU8C,EAASC,EAAS1D,EADtC2D,EAAa,CAUjBA,MAAmB,WAEjBH,EAAWhC,SAASoC,iBAAiBN,GAGrC3C,EAAW,GAGXkD,MAAMC,UAAUC,QAAQC,KAAKR,GAAU,SAAUjB,GAE/C,IAAIxB,EAAUS,SAASyC,eACrBC,mBAAmB3B,EAAK4B,KAAKC,OAAO,KAEjCrD,GAGLJ,EAAS0D,KAAK,CACZ1B,IAAKJ,EACLxB,QAASA,GAEb,IAGAL,EAAaC,EACf,EAKAgD,OAAoB,WAElB,IAAIW,EAASlC,EAAUzB,EAAUX,GAG5BsE,EASDb,GAAWa,EAAOvD,UAAY0C,EAAQ1C,UAG1CkC,EAAWQ,EAASzD,GAzFT,SAAUkD,EAAOlD,GAE9B,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASX,UAC1B6D,EAAMnC,QAAQgC,UAAUM,IAAIrD,EAASV,cAGrC8D,EAAeP,EAAI7C,GAGnBJ,EAAU,kBAAmBiD,EAAI,CAC/BM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,CAqEIuE,CAASD,EAAQtE,GAGjByD,EAAUa,GAfJb,IACFR,EAAWQ,EAASzD,GACpByD,EAAU,KAchB,GAMIe,EAAgB,SAAUvE,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,sBAAsBf,EAAWgB,OACpD,EAMIC,EAAgB,SAAU3E,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,uBAAsB,WACrChE,EAAaC,GACbgD,EAAWgB,QACb,GACF,EAkDA,OA7CAhB,EAAWkB,QAAU,WAEfpB,GACFR,EAAWQ,EAASzD,GAItBd,EAAO4F,oBAAoB,SAAUN,GAAe,GAChDxE,EAASN,QACXR,EAAO4F,oBAAoB,SAAUF,GAAe,GAItDjE,EAAW,KACX6C,EAAW,KACXC,EAAU,KACVC,EAAU,KACV1D,EAAW,IACb,EAOEA,EA3XS,WACX,IAAI+E,EAAS,CAAC,EAOd,OANAlB,MAAMC,UAAUC,QAAQC,KAAKgB,WAAW,SAAUC,GAChD,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAKA,EAAIE,eAAeD,GAAM,OAC9BH,EAAOG,GAAOD,EAAIC,EACpB,CACF,IACOH,CACT,CAkXeK,CAAOhG,EAAUmE,GAAW,CAAC,GAGxCI,EAAW0B,QAGX1B,EAAWgB,SAGXzF,EAAOoG,iBAAiB,SAAUd,GAAe,GAC7CxE,EAASN,QACXR,EAAOoG,iBAAiB,SAAUV,GAAe,GAS9CjB,CACT,CAOF,CArcW4B,CAAQvG,EAChB,UAFM,SAEN,uBCXDwG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU1B,KAAK8B,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CCrBAJ,EAAoBO,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAOJ,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoBU,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdR,EAAoBU,EAAI,CAACN,EAASQ,KACjC,IAAI,IAAInB,KAAOmB,EACXZ,EAAoBa,EAAED,EAAYnB,KAASO,EAAoBa,EAAET,EAASX,IAC5EqB,OAAOC,eAAeX,EAASX,EAAK,CAAEuB,YAAY,EAAMC,IAAKL,EAAWnB,IAE1E,ECNDO,EAAoBxG,EAAI,WACvB,GAA0B,iBAAf0H,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAX3H,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBuG,EAAoBa,EAAI,CAACrB,EAAK6B,IAAUP,OAAOzC,UAAUqB,eAAenB,KAAKiB,EAAK6B,4CCK9EC,EAAY,KACZC,EAAS,KACTC,EAAgB/H,OAAO6C,aAAeP,SAASC,gBAAgByF,UACnE,MAAMC,EAAmB,GA2EzB,SAASC,IACP,MAAMC,EAAeC,aAAaC,QAAQ,UAAY,OAZxD,IAAkBC,EACH,WADGA,EAaItI,OAAOuI,WAAW,gCAAgCC,QAI/C,SAAjBL,EACO,QACgB,SAAhBA,EACA,OAEA,OAIU,SAAjBA,EACO,OACgB,QAAhBA,EACA,QAEA,SA9BoB,SAATG,GAA4B,SAATA,IACzCG,QAAQC,MAAM,2BAA2BJ,yBACzCA,EAAO,QAGThG,SAASS,KAAK4F,QAAQC,MAAQN,EAC9BF,aAAaS,QAAQ,QAASP,GAC9BG,QAAQK,IAAI,cAAcR,UA0B5B,CAkDA,SAASnC,KART,WAEE,MAAM4C,EAAUzG,SAAS0G,uBAAuB,gBAChDrE,MAAMsE,KAAKF,GAASlE,SAASqE,IAC3BA,EAAI9C,iBAAiB,QAAS8B,EAAe,GAEjD,CAGEiB,GA9CF,WAEE,IAAIC,EAA6B,EAC7BC,GAAU,EAEdrJ,OAAOoG,iBAAiB,UAAU,SAAUuB,GAC1CyB,EAA6BpJ,OAAOsJ,QAE/BD,IACHrJ,OAAOwF,uBAAsB,WAzDnC,IAAuB+D,IA0DDH,EA9GkC,GAAlDzG,KAAK6G,MAAM1B,EAAO7F,wBAAwBQ,KAC5CqF,EAAOjE,UAAUM,IAAI,YAErB2D,EAAOjE,UAAUC,OAAO,YAI5B,SAAmCyF,GAC7BA,EAAYtB,EACd3F,SAASC,gBAAgBsB,UAAUC,OAAO,oBAEtCyF,EAAYxB,EACdzF,SAASC,gBAAgBsB,UAAUM,IAAI,oBAC9BoF,EAAYxB,GACrBzF,SAASC,gBAAgBsB,UAAUC,OAAO,oBAG9CiE,EAAgBwB,CAClB,CAoCEE,CAA0BF,GAlC5B,SAA6BA,GACT,OAAd1B,IAKa,GAAb0B,EACF1B,EAAU6B,SAAS,EAAG,GAGtB/G,KAAKC,KAAK2G,IACV5G,KAAK6G,MAAMlH,SAASC,gBAAgBS,aAAehD,OAAOqC,aAE1DwF,EAAU6B,SAAS,EAAG7B,EAAU7E,cAGhBV,SAASqH,cAAc,mBAc3C,CAKEC,CAAoBL,GAwDdF,GAAU,CACZ,IAEAA,GAAU,EAEd,IACArJ,OAAO6J,QACT,CA6BEC,GA1BkB,OAAdjC,GAKJ,IAAI,IAAJ,CAAY,cAAe,CACzBrH,QAAQ,EACRuJ,WAAW,EACX5J,SAAU,iBACVI,OAAQ,KACN,IAAIyJ,EAAM9H,WAAW+H,iBAAiB3H,SAASC,iBAAiB2H,UAChE,OAAOpC,EAAO7F,wBAAwBkI,OAAS,GAAMH,EAAM,CAAC,GAiBlE,CAcA1H,SAAS8D,iBAAiB,oBAT1B,WACE9D,SAASS,KAAKW,WAAWG,UAAUC,OAAO,SAE1CgE,EAASxF,SAASqH,cAAc,UAChC9B,EAAYvF,SAASqH,cAAc,eAEnCxD,GACF","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..92da3f8 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 0000000..467c878 --- /dev/null +++ b/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 0000000..bc447f2 --- /dev/null +++ b/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 0000000..9ba5637 --- /dev/null +++ b/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 0000000..3d29a21 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 0000000..1924b33 --- /dev/null +++ b/_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