From 39604e8ffde1b0f750cc1070245d62dc6b437ec7 Mon Sep 17 00:00:00 2001 From: Ravishankar Chavare Date: Wed, 5 Jul 2023 00:25:38 +0530 Subject: [PATCH] removed docs --- doc/_build/doctrees/environment.pickle | Bin 342689 -> 0 bytes doc/_build/doctrees/index.doctree | Bin 4896 -> 0 bytes doc/_build/doctrees/modules.doctree | Bin 2496 -> 0 bytes .../doctrees/newsletters/2022/WEEK_1.doctree | Bin 13405 -> 0 bytes .../doctrees/newsletters/2023/WEEK_25.doctree | Bin 96341 -> 0 bytes .../doctrees/newsletters/2023/WEEK_26.doctree | Bin 134819 -> 0 bytes .../doctrees/newsletters/index.2022.doctree | Bin 2745 -> 0 bytes .../doctrees/newsletters/index.2023.doctree | Bin 2807 -> 0 bytes docs/.buildinfo | 4 - docs/.doctrees/environment.pickle | Bin 329296 -> 0 bytes docs/.doctrees/index.doctree | Bin 3304 -> 0 bytes docs/.doctrees/modules.doctree | Bin 2519 -> 0 bytes .../.doctrees/newsletters/2022/WEEK_1.doctree | Bin 13326 -> 0 bytes .../newsletters/2023/WEEK_25.doctree | Bin 96265 -> 0 bytes .../newsletters/2023/WEEK_26.doctree | Bin 126809 -> 0 bytes docs/.doctrees/newsletters/index.2022.doctree | Bin 2768 -> 0 bytes docs/.doctrees/newsletters/index.2023.doctree | Bin 2830 -> 0 bytes docs/.nojekyll | 1 - docs/_sources/index.rst.txt | 12 - docs/_sources/modules.rst.txt | 6 - docs/_sources/newsletters/2022/WEEK_1.rst.txt | 66 -- .../_sources/newsletters/2023/WEEK_25.rst.txt | 781 -------------- .../_sources/newsletters/2023/WEEK_26.rst.txt | 792 -------------- docs/_sources/newsletters/index.2022.rst.txt | 6 - docs/_sources/newsletters/index.2023.rst.txt | 8 - docs/_static/basic.css | 903 ---------------- docs/_static/check-solid.svg | 4 - docs/_static/clipboard.min.js | 7 - docs/_static/copy-button.svg | 5 - docs/_static/copybutton.css | 94 -- docs/_static/copybutton.js | 248 ----- docs/_static/copybutton_funcs.js | 73 -- docs/_static/debug.css | 69 -- docs/_static/doctools.js | 156 --- docs/_static/documentation_options.js | 14 - docs/_static/file.png | Bin 286 -> 0 bytes docs/_static/language_data.js | 199 ---- docs/_static/minus.png | Bin 90 -> 0 bytes docs/_static/plus.png | Bin 90 -> 0 bytes docs/_static/pygments.css | 255 ----- docs/_static/scripts/furo-extensions.js | 0 docs/_static/scripts/furo.js | 3 - docs/_static/scripts/furo.js.LICENSE.txt | 7 - docs/_static/scripts/furo.js.map | 1 - docs/_static/searchtools.js | 566 ---------- docs/_static/skeleton.css | 296 ------ docs/_static/sphinx_highlight.js | 144 --- docs/_static/styles/furo-extensions.css | 2 - docs/_static/styles/furo-extensions.css.map | 1 - docs/_static/styles/furo.css | 2 - docs/_static/styles/furo.css.map | 1 - docs/genindex.html | 243 ----- docs/index.html | 265 ----- docs/modules.html | 319 ------ docs/newsletters/2022/WEEK_1.html | 328 ------ docs/newsletters/2023/WEEK_25.html | 969 ------------------ docs/newsletters/2023/WEEK_26.html | 882 ---------------- docs/newsletters/index.2022.html | 274 ----- docs/newsletters/index.2023.html | 308 ------ docs/objects.inv | 9 - docs/search.html | 251 ----- docs/searchindex.js | 1 - 62 files changed, 8575 deletions(-) delete mode 100644 doc/_build/doctrees/environment.pickle delete mode 100644 doc/_build/doctrees/index.doctree delete mode 100644 doc/_build/doctrees/modules.doctree delete mode 100644 doc/_build/doctrees/newsletters/2022/WEEK_1.doctree delete mode 100644 doc/_build/doctrees/newsletters/2023/WEEK_25.doctree delete mode 100644 doc/_build/doctrees/newsletters/2023/WEEK_26.doctree delete mode 100644 doc/_build/doctrees/newsletters/index.2022.doctree delete mode 100644 doc/_build/doctrees/newsletters/index.2023.doctree delete mode 100644 docs/.buildinfo delete mode 100644 docs/.doctrees/environment.pickle delete mode 100644 docs/.doctrees/index.doctree delete mode 100644 docs/.doctrees/modules.doctree delete mode 100644 docs/.doctrees/newsletters/2022/WEEK_1.doctree delete mode 100644 docs/.doctrees/newsletters/2023/WEEK_25.doctree delete mode 100644 docs/.doctrees/newsletters/2023/WEEK_26.doctree delete mode 100644 docs/.doctrees/newsletters/index.2022.doctree delete mode 100644 docs/.doctrees/newsletters/index.2023.doctree delete mode 100644 docs/.nojekyll delete mode 100644 docs/_sources/index.rst.txt delete mode 100644 docs/_sources/modules.rst.txt delete mode 100644 docs/_sources/newsletters/2022/WEEK_1.rst.txt delete mode 100644 docs/_sources/newsletters/2023/WEEK_25.rst.txt delete mode 100644 docs/_sources/newsletters/2023/WEEK_26.rst.txt delete mode 100644 docs/_sources/newsletters/index.2022.rst.txt delete mode 100644 docs/_sources/newsletters/index.2023.rst.txt delete mode 100644 docs/_static/basic.css delete mode 100644 docs/_static/check-solid.svg delete mode 100644 docs/_static/clipboard.min.js delete mode 100644 docs/_static/copy-button.svg delete mode 100644 docs/_static/copybutton.css delete mode 100644 docs/_static/copybutton.js delete mode 100644 docs/_static/copybutton_funcs.js delete mode 100644 docs/_static/debug.css delete mode 100644 docs/_static/doctools.js delete mode 100644 docs/_static/documentation_options.js delete mode 100644 docs/_static/file.png delete mode 100644 docs/_static/language_data.js delete mode 100644 docs/_static/minus.png delete mode 100644 docs/_static/plus.png delete mode 100644 docs/_static/pygments.css delete mode 100644 docs/_static/scripts/furo-extensions.js delete mode 100644 docs/_static/scripts/furo.js delete mode 100644 docs/_static/scripts/furo.js.LICENSE.txt delete mode 100644 docs/_static/scripts/furo.js.map delete mode 100644 docs/_static/searchtools.js delete mode 100644 docs/_static/skeleton.css delete mode 100644 docs/_static/sphinx_highlight.js delete mode 100644 docs/_static/styles/furo-extensions.css delete mode 100644 docs/_static/styles/furo-extensions.css.map delete mode 100644 docs/_static/styles/furo.css delete mode 100644 docs/_static/styles/furo.css.map delete mode 100644 docs/genindex.html delete mode 100644 docs/index.html delete mode 100644 docs/modules.html delete mode 100644 docs/newsletters/2022/WEEK_1.html delete mode 100644 docs/newsletters/2023/WEEK_25.html delete mode 100644 docs/newsletters/2023/WEEK_26.html delete mode 100644 docs/newsletters/index.2022.html delete mode 100644 docs/newsletters/index.2023.html delete mode 100644 docs/objects.inv delete mode 100644 docs/search.html delete mode 100644 docs/searchindex.js diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle deleted file mode 100644 index 14a11c58aeb143ef5231c2b6f75bd975949d7102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342689 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 diff --git a/doc/_build/doctrees/newsletters/2022/WEEK_1.doctree b/doc/_build/doctrees/newsletters/2022/WEEK_1.doctree deleted file mode 100644 index 425dc9d84dcdbef220deea3ad4fdde9e4d6838f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13405 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 M^S2S5x>Mu-KjvE9M*si- diff --git a/doc/_build/doctrees/newsletters/index.2022.doctree b/doc/_build/doctrees/newsletters/index.2022.doctree deleted file mode 100644 index 51fc1cae4fd4ab521e001112e7ca012610f9b5fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2745 zcmZ8j-)mbp6mF9^u^rp_(X|`2*-}Q=mNj-8_AvIeF$QB{VT`drp$Pe2+0v{l-ATHQ z^HAs>IvNmrsrGN|Z``MQudnR{Osar_2W5 zPIXdbOu6tOJpC)Y2~T{-&`YZeld#}#K_lTpriQ8TD)>QEcS71>eSXKX#0jmMKDM`hWAo^@mc9#>|LvT@n+yEFcSsW+-}KvcROfz6 z3dO>CF{Zvtoik!wIAjx}-xR5hk?tgtS_>h*TZ(4YS3528_lXFyprng-)DdtDx0;pCLQ`5Wszo-y{4U;1UHtIF8F>-@4%GLAN@S6;iIAlU z{vGx0jLuV*J08xqfHBR>;-ex{smI~kZ*!5R;L5e{*QXmnTNT-u8J32#TfSRT!)hh3 zpxXuImZ9=*X~Dnbr~HUN18SQn#|Wk7s|fhL8mN;?L-U-OKvzMD=TDYpjCQ~l)|iMi zd4VG}mNf(E0@HZBi{qOW3(7E1y!8-P{WaX=&*ItJevlLmMwq4<^otb>I%D1YWY^m#>Euw2A9+* zU#)@);9?=MjOJZN+no>!XdZB z1;3{Yw{E3XS_%H>#?B2B{H-5UMwbCBjy_o5xN*|&#{?`;;=o5Dq2T+Hs%b%|3~;Ad zZ=jj{9m5iBQi9F{Ip8Mt^ts zYAFyPoKaLpgL|a}&?*~izZB(`6{#lkEb?ie&2w!TSv^@&Byr@mu%hDU9!Z6zV;K{v zqug0^1ApdwNXCNyv>qV+T8%8GjlUPa;KVW$bx_`DEk(U|F)o@V_<0ap3bavEuuzIj zxbXA-V?W4QP5=sKj!H_vdQmc_h&^_O|Aaf2+iylAi0v@Ha$KvSHq%k?ccW$*05pkX z8Oq~OjyB{ckDh-8JO^fy+%O*{OY>hW%%f9jmh(~4vA0`a9}YN4&$7##rTGv$Rc^Ard2D( zt9ll|8O;6^{d Iw-^uq2V!46c>n+a diff --git a/doc/_build/doctrees/newsletters/index.2023.doctree b/doc/_build/doctrees/newsletters/index.2023.doctree deleted file mode 100644 index 8afba6df94931a364fff0b5e525043b8e91a7ba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2807 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ⅆFP5Q3v|Z*v2queRsj^Y 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 diff --git a/docs/.doctrees/modules.doctree b/docs/.doctrees/modules.doctree deleted file mode 100644 index 0a411c84a7d63df0d8f18adb13e5c6e533fcc838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2519 zcmZ`*O>Y}F5Ov~6mSju*NMZzSQuNTK>A`Z4kD|z-m-J@T4GOd;83eVYMAlq#OLA@L z5THG@hymWh{;U3|KJKp8wu%Z6z!?r_I5Te^_xH}<|MWMiU)Xhpka{tujA_HTi=oF% zR_0v$_%VL{M|>Zjg}$Yi&XhLeF>Jsh6H+nDbv%n=5nZu$ z7R5%`@+R|^^Z)FH0rlR>Y3Xr?6mwHDm;7&KiaG}+)*VgrdeviPaV<<~c5eBsvgsBS zH}g1{8&;~6(H3MYtAo!@!=dJvPI2$Kb;nXOz8JrF{^Di)EB@c!3+(Z*BXy=q#%D4) zJ&Vu87vd=oy__x>FT98+_i$NScxg0T-J2^jjaQ*7Bx5MmRTwr7T18Kn`IKAE;>kuB zcZm}G)p(8-UQe{balpM1~Vxi`h+ zoi)Gm%)80Er58pYT^g&{!yQie)@#L=fT zNSaJf!_G=m-S0H?92zL~9Npb-0XVZpdk)}*?k`l8=u(T|PE}pBr9bDITk4HX0;7PN zr+EQkyADPW;T+#&9q*#%tsGjm?ugVdzkHbeAk<#^w>4 zkplz^g4sx;<>2zuTEi8uG~`lxK~`W##O6SQew4uS!dOofzu*cj3Ijn^D|W&@Ur1EU zQ(wB3Q73d5pO$lk8(mVXQ88FpPIGAb-qMVxq~eD#lDa58;W{%6Rx$KTKRf#N$Vsdp z-`*tLT4RZznkk?F?L%%E(6ehwf7?r^@)E<7wVgE=A`7G1>GcIxM<3tbSUVZ^QUVTD z5~z#)$@|hIm*o--^KWa`<7?MGJ;tJL=Yws!fEJcM$eEV${`skz#?)HMK_FS z=?%G7g}V~C8nQAkNQ*sGwNgmH&T6WX!`(`Q(rTA_f2}GUFPR~WJmG1NFAC#0xp}gJ zNao3fbh5_hE@9HqsY;17x7=FIgm@ixkc`6=(1vn`jTu={R5(m41OZ7T8?-lhW9aub z2&NT*&;2x5fQ_C5g-Yhq#~=2-3ZsG-1VsT$>8vW)PSQ*%?w%$iJQCg)?#=Nr)NWi< zJTo?SejLNYWLaGRmc;WM?eSuF{w1+^_<(Wl*wAy;9~Ew!f$BIH~s{444+3HLiLrI5tzYi!7#r|TtRT|5#(V8t8>D0Diy&SZh7@qehB-?b85Nc zYF2aFRoLYEB7%xTujUdAFQAAwP+~Yd@zl;axCvChk4phs9xpq5;L%HuayYo9t>0g$ z;ceCm-84dYx}o1n%4Xe9YriZ|)AvyvVt076J(c}1lW1}Z2p_d3P2tL}zSvDoZFh#! zxMe;ys_l4X`e04jTK8{x?60C$hYoJ}2b)@-==kI4DY_!IDsj}uG|K4Kg?TnB8a;+A^5RaZ^gZoVA=ih1hKfF(9-248$9Hp}Vw EUrXin`~Uy| diff --git a/docs/.doctrees/newsletters/2022/WEEK_1.doctree b/docs/.doctrees/newsletters/2022/WEEK_1.doctree deleted file mode 100644 index 2f97054140dfa1c0d259622ed638592c07ec6ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13326 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 diff --git a/docs/.doctrees/newsletters/2023/WEEK_26.doctree b/docs/.doctrees/newsletters/2023/WEEK_26.doctree deleted file mode 100644 index b06dbf34da6a806bfe737105a09d1dd1fe44630c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126809 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 C4qYSw diff --git a/docs/.doctrees/newsletters/index.2022.doctree b/docs/.doctrees/newsletters/index.2022.doctree deleted file mode 100644 index 29518197f49917054d8bbf218d52caf49fbf463a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2768 zcmZ8jO>Y}F5OrcpmSjo(NRt*w+&U=IBxo!rMh`_!Es|Vn)Gdm(1_A{OYL^mOamg*o zwdF&A^pGM3h+e|}r2ely?ygpn4G3Ni=ZkON4Ee6{?|+@O;?HfHjBz;|kR*{Rp~kyb zqT)QI()y47@n8O}f8^SlTo{$>n0mJcjhJzfXe#|1@A^UAa$yFQ{idO@HxYyhw3B_ewVA(ew4h&(tvIHPoW@XWhUmo3Bo z(b=n4C($$iw<<^!4Sql(TDu7Bc?OdT%Ziv}j%hIOz;Grl4@d=_E;nY ztzb!-VX;+)iQs#RWv5!^T42=!R8eSwu#0ew0QIGJdt;@nRF*Dnp4@P~(CMgEG#e|O zdPw>PEXpGAHVhC0mv>7E6||5<7u>RF-iU};8C0El>bja{O4~@#b1MAFP1j*W)XRq3 zr85q!EU~$nD>Ymrp`(0)aQzFSC9r~qrX+==Z8eE$IF$e3`dntYji`)O0xj>_xg8&V zduTYm@2ze|RBNRpMr0zu8Wav^i>-ItDz~d%8ig0{_OI<+bHU!Ze(7|Pz})oS>c%xo zw-XLvfD!{f0tfQ0Cy1QnWI_RVg7r-_le?v9taK8g^FR)S2|a!4nz52&oDp#FB+4-1 z_{_7W>yzB7Xd!YpIT+PT@-&NT)&bQ*z(F`Ii3kq23kjf=Ce(f*$_&jD70uGXryV-W zl%dhGWkHeHM(5n{lAqgA!VMXTaF8m?&3QMlC$5Xb81SD|1Eg1}Me}Ln?u0J{!B7r5 zC~xqVpx#>;7xfbS+zl-S+Qt{5J019S~j0?cJK{6u9J#>cqj9HtR z=SN2nn?Y90^?}lpBkyhp%_0G4MwX^1k3~6JkRLvH`VH{x>v4R|eUL2Ne>HcHP9=e_ zQ>q7?+HnyBJ%7Y(DiEw~$p|f!gsIwc`ygZ*)xB9CATn8C$d%hMm(r41#Q1~>{6O9f zp#tx_CMD>yKXWv-0Z_M!b-9d$ib*-h-9GL(D%Zdx;bnr4~VM$IzNaG$mX_c&TVw z+~XhIZuQmxS;e@VX;*HY%Jc9NaIJEdpm{+>+;$wzVIxcQgkm<~6|jq>KrM^+3uuG; zD?Aw7-iow*8$b+i<9g8yEre$Un#_n zucoE=x*1B#+{zBPHtk7pk9J6V}@86_4$C)WT?Q#Xn}Nwqcmx zzV55q!JUkW5#wP3T6nh=D$qn<~|AH343l7bMHnS_#ck}%+^Sr9JWd^GqU`2a_{ diff --git a/docs/.doctrees/newsletters/index.2023.doctree b/docs/.doctrees/newsletters/index.2023.doctree deleted file mode 100644 index bb3468dd39f0062d109e47893564d72ab95c7d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2830 zcmZ`*?Qa`381LF9P1-bl*^4G^g-&Q}6KgsOLuj8s+rCgyCIn2HQk|STCpPifhwW?A z50gM>XqEg0&HTUoe0RAd6;z6Pe*C=o_xzs6{=MOx)5k#||?YMSSr^i-Yv&!nktqLxw zKgkEgtrKfCALJIN3E8jk#Dq-OVnK|75Z?_+((ly%Y;sP0f(M8IORvj%lQCkv|^QJDwoL|UL}-l3CXG0YC4Z)wf8X& z&F%ruPw=~s-vj&};djT~nq^@QXJLU2;MKf9q{1`d#7&Ip;ppT5X&`xAtDF( z(_Uv=C$2rBl4@d=_E;nYjburhVX;w$iQs#T<$ATuwZLi%;glaCxVcP(cexbj~e{rfrOfl|j|lC$6Ju zrnHR&J)^=OFS~U{M7?ad9XjE_$`YHKsZzr=5<1972-iI)S^_I*Xi8E@+E$a8hC})H zuFGYX+lb0oCD8J&o!jBT*9V5<`|jdqM735rVnikatU=*$w%B^NrE9)fG3{YagN8mu-Z3-esIT=yFonXC;esb3}jg?L!G#|); zFkvE`xMr;65N8A&Jc%;QM?Uea>AEDhDw>JhG6$nJlRV9$nsq?65O5GqOCo~9twI85 zr3tm4i84d;L`9P{@M)V)GG%BqZ&^?zw$T|kyyWLrlyE}^A{?a3a&6iT?6K?MFb4c5 z)ePCJ)S~Ikaks)3f?%Wv9h5hCOHl6(OpJO7e(r>p0&V07EEGKD)_=eKz;!d4MF0h3 zN5%zUogf(yl*ghREyxe5?T+5o8Q#kyQZLdB#U=WY)-B=SMw%Vq=0 z1%$93=NUqT$3rost091i4hfe-a9}zWcEg-7`QVBkPXl>{B4sOv`+w}g8I1n~{d<8F z7^N0LZpP3WM>Hi|M0n?DTD$_@yPfK#0InyrP3YBN!9pPH#EJ5>vinuE|n!`qx z=n=(i!W&`-Nr74xuOH9`w^(>?xZMS5`Lci*-iGy}8CnRB63Ewru>5AH?2U2lAg~u1 zfPL%P>7`-!@c#|#7`HiJtipOT<|ugx509lJ^yE~pOmkjR>LGa)HytQZ*S}D`aYa~b zw--FNr%?-|-39-ct=fiRe)FoYY6sUcCPs{B4QS!rMy!MYus8#*jJ4;L{6jeW-^bU? wJO3kE0PjCE6JBfvMK7b)(_=xrQHzVZZB*|A@MIK9ww{CmSIvTO>E?spzxzpAO#lD@ diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index 8b13789..0000000 --- a/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt deleted file mode 100644 index fcccbfb..0000000 --- a/docs/_sources/index.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -.. Python-world documentation master file, created by - sphinx-quickstart on Sat Jun 24 16:06:21 2023. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Python-world Newsletter -======================================== - -.. toctree:: - :maxdepth: 2 - - modules \ No newline at end of file diff --git a/docs/_sources/modules.rst.txt b/docs/_sources/modules.rst.txt deleted file mode 100644 index a1e8653..0000000 --- a/docs/_sources/modules.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ - -.. toctree:: - :maxdepth: 4 - - newsletters/index.2023 - newsletters/index.2022 \ No newline at end of file diff --git a/docs/_sources/newsletters/2022/WEEK_1.rst.txt b/docs/_sources/newsletters/2022/WEEK_1.rst.txt deleted file mode 100644 index f502ff1..0000000 --- a/docs/_sources/newsletters/2022/WEEK_1.rst.txt +++ /dev/null @@ -1,66 +0,0 @@ -Week 1 - Jan 2022 -################# - -Introduction and Highlights ---------------------------- - -Welcome to the latest edition of the Python-World Newsletter! We bring -you the most exciting updates and insightful content from the Python -community. In this week’s edition, we have some incredible code -snippets, community spotlights, upcoming events, useful resources, and -more. Let’s dive in! - -Introduction -------------- - -Welcome to the Python-World Newsletter, your ultimate source for the latest updates, insights, and code snippets from the Python programming universe! 🌍✨ - -At Python-World, we are passionate about promoting knowledge sharing, collaboration, and continuous learning within the Python community. Our newsletter aims to provide you with valuable content, including Python code examples, insightful articles, and industry news that will keep you at the forefront of Python development. - -🔬 Each edition of our newsletter features carefully curated Python code snippets, showcasing the versatility and power of this beloved programming language. From beginner-friendly scripts to advanced algorithms, our code examples cover a wide range of topics, including data analysis, web development, machine learning, and much more. Whether you're an aspiring Pythonista or a seasoned developer, you'll find something valuable in every edition. - -📚 In addition to code snippets, we bring you engaging articles written by Python experts and enthusiasts. Explore tutorials that delve into specific Python libraries or frameworks, discover best practices for efficient coding, and stay updated with the latest trends and developments in the Python ecosystem. Our goal is to provide you with practical knowledge and actionable insights that you can apply in your own Python projects. - -🌟 Python-World Newsletter is more than just a one-way communication channel. We encourage active participation from our readers! Share your own Python code snippets, tips, and tricks, or suggest topics you would like us to cover. Join our vibrant community and engage in discussions with fellow Python enthusiasts on our dedicated GitHub repository, where you can collaborate, provide feedback, and contribute to the newsletter's growth. - - - -Useful Resources ----------------- - -Here are some valuable resources to enhance your Python programming -skills and stay updated with the latest trends: - - -- **Discussions**:join the discussion on our - `GitHub Discussions board `__. - -- **Website**: `Python - World `__. - Engage with fellow developers, share knowledge, and contribute to the - Python ecosystem. - -Stay curious, keep learning, and make the most of these resources to -enhance your Python journey! - -Contact -------- - -If you have any questions or need further assistance, feel free to reach -out to us at [pythonworldhelp@gmail.com] or join the discussion on our -`GitHub -Discussions `__ -board. - -Contributors ------------- - -We would like to express our sincere gratitude to the following -contributors who have made valuable contributions to this edition of the -Python-World Newsletter: - -- `Ravishankar Chavare `__ - -Thank you for your dedication and for enriching the Python community -with your valuable insights, code snippets, and contributions! Happy -coding! 🐍✨ diff --git a/docs/_sources/newsletters/2023/WEEK_25.rst.txt b/docs/_sources/newsletters/2023/WEEK_25.rst.txt deleted file mode 100644 index e71b58a..0000000 --- a/docs/_sources/newsletters/2023/WEEK_25.rst.txt +++ /dev/null @@ -1,781 +0,0 @@ -Week 25 - June 2023 -################### - -Introduction and Highlights ---------------------------- - -Welcome to the latest edition of the Python-World Newsletter! We bring -you the most exciting updates and insightful content from the Python -community. In this week’s edition, we have some incredible code -snippets, community spotlights, upcoming events, useful resources, and -more. Let’s dive in! - -Code Snippets -------------- - -1. 🐍 Power of the “repr” function in python. -********************************************* - -🐍 Python developers, let’s dive into the fascinating world of the -“repr” function! 🎉 - -⚡️ Have you ever encountered a situation where “print” gives you a -different result than “repr”? Let me show you the magic of “repr” in -such scenarios. - -🔍 Imagine you have a complex object with intricate internal state. When -you use “print” to display it, you might get an output that doesn’t -reveal the full picture. But fear not! “repr” comes to the rescue. - -💡 The “repr” function provides a detailed and unambiguous string -representation of an object, perfect for debugging and understanding its -internals. - -🌟 Let’s consider a complex example: - -.. code:: python - - import datetime - - now = datetime.datetime.now() - - print("Printing using print:") - print(now) # Output: 2023-06-22 15:30:45.123456 - - print("\nPrinting using repr:") - print(repr(now)) # Output: datetime.datetime(2023, 6, 22, 15, 30, 45, 123456) - -🔎 Notice the difference? While “print” gives us a more human-readable -representation, “repr” provides an exact and detailed view of the -object. - -🎯 “repr” is a valuable tool when debugging complex data structures or -objects with custom implementations. It helps us uncover hidden details -and understand the inner workings of our code. - -💡 So, remember to leverage the power of “repr” whenever you encounter -complex objects that need thorough inspection! - -✨ Let’s embrace “repr” and unlock new levels of debugging and -understanding in our Python projects. Happy coding, everyone! 💻 - - -2. 🌈 Enhancing console output with ANSI color codes. -***************************************************** - -Do you want to add some pizzazz to your Python console output? 💥 Say -hello to ANSI escape codes! 🎨✨ - -ANSI escape codes are special character sequences that allow you to -change the color and formatting of text in the console or terminal. -Let’s take a look at how you can use them in Python to bring your -console output to life! 🚀 - -.. code:: python - - # ANSI color codes - RESET = "\033[0m" - RED = "\033[31m" - GREEN = "\033[32m" - YELLOW = "\033[33m" - BLUE = "\033[34m" - MAGENTA = "\033[35m" - CYAN = "\033[36m" - WHITE = "\033[37m" - - # Example usage - print(RED + "This text is red." + RESET) - print(GREEN + "This text is green." + RESET) - print(YELLOW + "This text is yellow." + RESET) - print(BLUE + "This text is blue." + RESET) - print(MAGENTA + "This text is magenta." + RESET) - print(CYAN + "This text is cyan." + RESET) - print(WHITE + "This text is white." + RESET) - -With just a few lines of code, you can transform your console output -into a vibrant display of colors. 🌈✨ Imagine the possibilities! 🎉 - -However, keep in mind that ANSI escape codes may not work on all -terminals or console emulators, especially on Windows. But don’t worry, -Windows users can achieve similar effects by using the ``colorama`` -library. Simply install it with ``pip install colorama`` and modify the -code as follows: - -.. code:: python - - from colorama import Fore, Style - - # Example usage - print(Fore.RED + "This text is red." + Style.RESET_ALL) - print(Fore.GREEN + "This text is green." + Style.RESET_ALL) - print(Fore.YELLOW + "This text is yellow." + Style.RESET_ALL) - print(Fore.BLUE + "This text is blue." + Style.RESET_ALL) - print(Fore.MAGENTA + "This text is magenta." + Style.RESET_ALL) - print(Fore.CYAN + "This text is cyan." + Style.RESET_ALL) - print(Fore.WHITE + "This text is white." + Style.RESET_ALL) - -Now you can enjoy colorful console output on any platform! 🎉🎉 - -So go ahead and make your Python console output stand out from the -crowd. Impress your colleagues and friends with eye-catching displays of -information. 🌟✨ - -Have fun experimenting with ANSI color codes in Python, and let your -imagination run wild! 🚀🐍 - -3. 🔀 Partial method in python -******************************* - -Partial methods are a fascinating feature in Python that allow you to -create new methods from existing ones by pre-filling some of the -arguments. This enables you to customize and specialize functions -without the need for repetitive code. Let’s explore this concept -further! 💡🔧 - -Imagine you have a function with multiple arguments, and you frequently -call it with some fixed values for some of the parameters. Instead of -passing those values every time you call the function, you can use -partial methods to create a new function with those arguments already -filled in. This can make your code more concise and easier to read. 🧩✨ - -In Python, you can utilize the ``functools`` module to create partial -methods. The ``functools`` module provides the ``partial`` function, -which takes a callable and any number of arguments or keyword arguments. -It returns a new partial object, which can be called as a regular -function. 💻🔍 - -Here’s an example to illustrate the concept: 📝 - -.. code:: python - - from functools import partial - - def greet(name, greeting): - print(f"{greeting}, {name}!") - - say_hello = partial(greet, greeting="Hello") - say_hello("Alice") # Output: Hello, Alice! - say_hello("Bob") # Output: Hello, Bob! - -In the example above, we defined a ``greet`` function that takes two -arguments: ``name`` and ``greeting``. By using ``partial``, we created a -new function called ``say_hello``, where the ``greeting`` argument is -already set to “Hello”. Now, whenever we call ``say_hello``, we only -need to provide the ``name`` argument. 👋👋 - -Partial methods are particularly useful when working with libraries or -frameworks that require callback functions with predefined arguments. -Instead of writing separate functions for each callback, you can use -partial methods to create specialized callbacks without duplicating -code. 📚🧪 - -Remember that partial methods are not limited to positional arguments -only; you can also use them with keyword arguments. Additionally, you -can modify or override any of the pre-filled arguments when calling the -partial method, providing you with even more flexibility. 🎛️🔀 - -4. 🔑 Encoding and Decoding using Base64 -***************************************** - -Base64 encoding is commonly used when you need to represent binary data, -such as images or files, as ASCII text. It converts binary data into a -string of characters that are safe to transmit or store, ensuring -compatibility across different systems and protocols. Python provides a -convenient way to perform base64 encoding and decoding using the -built-in ``base64`` module. 📚🔡 - -Let’s take a look at an example to see how base64 encoding and decoding -work: 🖥️🔑 - -.. code:: python - - import base64 - - # Encoding binary data to base64 - data = b"Python-World" - encoded_data = base64.b64encode(data) - print(encoded_data) # Output: b'UHl0aG9uLVdvcmxk' - - # Decoding base64 data to binary - decoded_data = base64.b64decode(encoded_data) - print(decoded_data) # Output: b'Python-World' - -In the example above, we imported the ``base64`` module and encoded the -binary data “Python-World” using ``base64.b64encode()``. The result, -``encoded_data``, is a byte string representing the base64 encoded -version of the data. When printing ``encoded_data``, the ``b`` prefix -indicates that it is a byte string. 📜🔢 - -To decode the base64 data back into its original binary form, we used -``base64.b64decode()`` and assigned the result to ``decoded_data``. -Printing ``decoded_data`` shows that it successfully restored the -original binary data. 🔄🔤 - -Base64 encoding and decoding have various applications, including data -transmission over email, storage of binary data in JSON or XML formats, -and handling binary data in network protocols. Understanding base64 -encoding is essential when working with data that needs to be safely -represented as text. 📡📦 - -Python’s ``base64`` module provides additional functionalities, such as -handling URL-safe base64 encoding and decoding, as well as encoding and -decoding using different character sets. Exploring these options can -further enhance your encoding and decoding capabilities. 🌐🔠 - -5. 🎣 Understanding hooks in requests -************************************* - -Hooks in the ``requests`` module provide a mechanism to intercept and -modify the request and response flow. They enable you to inject your own -code at various stages of the request lifecycle, empowering you to -perform custom processing, logging, authentication, error handling, and -much more. Hooks are a powerful tool to enhance and tailor your HTTP -requests according to your specific needs. 💡🔌 - -.. raw:: html - -

- -Types of Hooks: - -.. raw:: html - -

- -1. Response Hooks: - - - ``response``: Executed after a response is received, regardless of - the response status. - -These hooks provide immense flexibility and control over your requests, -enabling you to customize and augment the behavior as per your -requirements. ⚙️🎛️ - -.. raw:: html - -

- -🎯 Use Cases for Hooks: - -.. raw:: html - -

- -Hooks can be employed in various scenarios to enhance the functionality -of your requests. Some common use cases include: - -1. Logging: Add logging statements to track the request and response - details for debugging or analysis purposes. -2. Authentication: Implement custom authentication mechanisms or token - management. -3. Error Handling: Define actions to be taken when specific exceptions - occur during the request. -4. Retry Strategies: Implement custom retry logic based on response - status codes or error conditions. - -.. raw:: html - -

- -🌟 Registering Hooks with Specific Requests: - -.. raw:: html - -

- -In addition to registering global hooks, you can also specify hooks as -keyword parameters when making individual requests using methods like -``get``, ``post``, ``put``, etc. This allows you to define hooks -specifically for a particular request and control their execution on a -per-request basis. Here’s an example: - -.. code:: python - - import requests - - def first_hook(response, *args, **kwargs): - # Perform custom logic for the first hook - print("First hook executed") - response.first_hook='you can pass any value or object' - - def second_hook(response, *args, **kwargs): - # Perform custom logic for the second hook - print("Second hook executed") - - # Make a request with multiple hooks - response = requests.get('https://www.example.com', hooks={'response': [first_hook, second_hook]}) - - # Retrive first_hook parameters - print(response.first_hook) - -In this case, both ``first_hook`` and ``second_hook`` will be executed -for the single request made in the ``get`` method. - -.. raw:: html - -

- -🚀 Registering Hooks with a Session: - -.. raw:: html - -

- -If you need to maintain state or persist hooks across multiple requests, -you can use a ``requests.Session`` object. Here’s an example: - -.. code:: python - - import requests - - def custom_hook(response, *args, **kwargs): - # Perform custom logic - print("Custom hook executed") - - # Also U can set custom attibute to response object - response.custom_hook_called=True - - - # Create a session and register the custom hook - session = requests.Session() - session.hooks['response'].append(custom_hook) - - # Make requests using the session - response1 = session.get('https://www.example.com') - - ## Status of custom hooks - print("parameter from custom hooks:",response1.custom_hook_called) - -In this example, the ``custom_hook`` will be executed for both -``response1`` and ``response2``, as they are made using the same -session. - -6. 📢 LinkExtractor in Scrapy -***************************** - -🔗 The LinkExtractor class in Scrapy is a powerful tool for extracting -links from web pages. It provides a convenient way to crawl and scrape -websites efficiently. Let’s dive into some simple code examples to -understand how it works. - -📝 Code Example: - -.. code:: python - - - import scrapy - from scrapy.crawler import CrawlerProcess - from scrapy.linkextractors import LinkExtractor - - class MySpider(scrapy.Spider): - name = 'example' - start_urls = ['http://www.example.com'] - - def parse(self, response): - # Instantiate a LinkExtractor object - link_extractor = LinkExtractor() - - # Extract links from the response - links = link_extractor.extract_links(response) - - # Process the extracted links - for link in links: - # Access the URL, text, and other attributes of the link - yield { - 'url': link.url, - 'text': link.text - } - - - - # Create a CrawlerProcess instance - process = CrawlerProcess() - - # Add your spider to the CrawlerProcess - process.crawl(MySpider) - - # Start the crawling process - process.start() - - - # Output: > {'url': 'https://www.iana.org/domains/example', 'text': 'More information...'} - -🔍 In this example, we create a Scrapy spider named ``MySpider``. The -``LinkExtractor`` class is imported from ``scrapy.linkextractors`` to -handle link extraction. - -🕸️ Inside the ``parse`` method, we instantiate a ``LinkExtractor`` -object. Then, we use the ``extract_links`` method to extract all links -from the ``response`` object. - -🔗 We iterate over the extracted links and access their URL and text -using the ``url`` and ``text`` attributes. You can perform further -processing or extraction based on your specific needs. - -📥 Finally, we yield a dictionary containing the URL and text of each -extracted link. You can modify this code to process the links -differently or store them in any desired format. - -💡 The LinkExtractor class provides many additional options and -parameters to customize link extraction based on patterns, tags, -attributes, and more. Make sure to explore the Scrapy documentation for -more advanced usage. - -7. 📝 itemgetter in python -*************************** - -🔍 The ``itemgetter`` function in Python is a convenient tool for -extracting specific elements from iterable objects. It provides a simple -and efficient way to access and manipulate data. Let’s explore its -functionality with some simple code examples, including its usage in -``sorted`` with lists, dictionaries, and lists of dictionaries. - -In general, if you need to access specific elements from iterable -objects and performance is a concern, using ``itemgetter`` is a -recommended approach. It offers better performance compared to using a -lambda function, particularly when dealing with large datasets or -performing operations that need to be executed multiple times. - -📝 Code Example: - -.. code:: python - - from operator import itemgetter - - # Example 1: Accessing Elements from a List - my_list = ['apple', 'banana', 'cherry', 'date'] - get_second_element = itemgetter(1) - print(get_second_element(my_list)) # Output: 'banana' - - # Example 2: Accessing Elements from a Dictionary - my_dict = {'name': 'John', 'age': 30, 'city': 'New York'} - get_age = itemgetter('age') - print(get_age(my_dict)) # Output: 30 - - # Example 3: Accessing Multiple Elements from a Tuple - my_tuple = ('apple', 'banana', 'cherry', 'date') - get_first_and_last = itemgetter(0, -1) - print(get_first_and_last(my_tuple)) # Output: ('apple', 'date') - - # Example 4: Using itemgetter in sorted with a List of Tuples - students = [('John', 20, 'A'),('Alice', 19, 'B'),('Bob', 21, 'A-'),('Carol', 18, 'B+')] - sorted_students = sorted(students, key=itemgetter(2)) - print(sorted_students) - - # Example 5: Using itemgetter in sorted with a Dictionary - student_grades = {'John': 'A','Alice': 'B','Bob': 'A-','Carol': 'B+'} - sorted_grades = sorted(student_grades.items(), key=itemgetter(1)) - print(sorted_grades) - - # Example 6: Using itemgetter in sorted with a List of Dictionaries - people = [ - {'name': 'John', 'age': 25}, - {'name': 'Alice', 'age': 30}, - {'name': 'Bob', 'age': 20}, - {'name': 'Carol', 'age': 35} - ] - sorted_people = sorted(people, key=itemgetter('age')) - print(sorted_people) - -🔢 In these examples, we import the ``itemgetter`` function from the -``operator`` module to extract specific elements from iterable objects. - -📌 Examples 1, 2, and 3 demonstrate how ``itemgetter`` can be used to -access elements from a list, dictionary, and tuple, respectively. - -📌 Example 4 showcases the usage of ``itemgetter`` in the ``sorted`` -function with a list of tuples. By specifying ``key=itemgetter(2)``, the -``sorted`` function sorts the students based on their grade (the third -element in each tuple). - -📌 Example 5 illustrates how ``itemgetter`` can be used with the -``sorted`` function with a dictionary. We convert the dictionary items -into a list of tuples using the ``items()`` method and then sort the -tuples based on the grades using ``key=itemgetter(1)``. - -📌 Example 6 demonstrates the usage of ``itemgetter`` in the ``sorted`` -function with a list of dictionaries. By specifying -``key=itemgetter('age')``, the ``sorted`` function sorts the list of -dictionaries based on the ‘age’ key, resulting in a sorted list of - -people based on their age. - -💡 The ``itemgetter`` function is a powerful tool for accessing and -sorting specific elements from iterable objects. It offers flexibility -and performance benefits, making it a valuable addition to your Python -toolkit. - -8. 🖥️ Fetching device name using platform -****************************************** - -🔍 The ``platform`` module in Python provides a convenient way to access -information about the platform your code is running on. Let’s dive into -how you can use this module to fetch the device name: - -🔦 **Fetching Device Name:** The ``platform`` module’s ``node()`` -function returns the device’s network name, which is often the device’s -hostname. This can provide a reasonable approximation of the device name -in many cases. - -.. code:: python - - import platform - - device_name = platform.node() - print(f"Device Name: {device_name}") - -🖥️💻📱 The ``device_name`` variable will contain the name of the device -your code is running on, which could be the hostname of the machine or a -recognizable identifier for the device. - -🚀 **Platform Information:** The ``platform`` module can provide more -than just the device name. You can also access other platform-related -information, such as the operating system, Python implementation, and -architecture. - -.. code:: python - - import platform - - # Get the operating system name - os_name = platform.system() - print(f"Operating System: {os_name}") - - # Get the release version of the operating system - os_release = platform.release() - print(f"Release Version: {os_release}") - - # Get the version of the operating system - os_version = platform.version() - print(f"OS Version: {os_version}") - - # Get the machine type - machine_type = platform.machine() - print(f"Machine Type: {machine_type}") - - # Get the processor name or identifier - processor = platform.processor() - print(f"Processor: {processor}") - - # Get the version of Python - python_version = platform.python_version() - print(f"Python Version: {python_version}") - - # Get the name of the Python implementation - python_implementation = platform.python_implementation() - print(f"Python Implementation: {python_implementation}") - - # Get the compiler used to build Python - python_compiler = platform.python_compiler() - print(f"Python Compiler: {python_compiler}") - - # Get the architecture and bitness of the operating system - architecture, bitness = platform.architecture() - print(f"Architecture: {architecture}") - print(f"Bitness: {bitness}") - - # Get the network name of the device - device_name = platform.node() - print(f"Device Name: {device_name}") - - ''' - Output: - Operating System: Windows - Release Version: 11 - OS Version: 12.0.22334621 - Machine Type: AMD64 - Processor: AMD64 Family 21 Model 111 Stepping 2, AuthenticAMD - Python Version: 3.11.3 - Python Implementation: CPython - Python Compiler: MSC v.1934 64 bit (AMD64) - Architecture: 64bit - Bitness: WindowsPE - Device Name: DESKTOP-KJK - ''' - -📡 **Platform-Specific Functionality:** By knowing the device name or -platform, you can tailor your code’s behavior to provide -platform-specific functionality. For example, you can enable or disable -certain features, adjust settings, or optimize code paths based on the -device or platform your code is running on. - -💡 Fetching the device name using the ``platform`` module allows you to -adapt your code to different devices and platforms. It opens up -possibilities for building cross-platform applications, device-specific -optimizations, and customized user experiences. - -9. 🌟 Package your app into a executable file using zipapp -********************************************************** - - -🔍 **What is Zipapp?** Zipapp is a module introduced in Python 3.5 that -enables you to package your Python application along with its -dependencies into a single executable ZIP file. This ZIP file can be -executed directly, making it convenient to distribute your application -as a standalone package. - -🚀 **Key Features and Benefits:** - -- Simplified Distribution: - With Zipapp, you can distribute your Python application as a single file, - eliminating the need for users to install dependencies separately. - -- Easy Execution: - The executable ZIP file can be run directly without - the need for a Python interpreter or additional setup. - -- Cross-Platform Compatibility: - Zipapp packages are portable and can - be executed on different operating systems, making it easier to - distribute your application across platforms. - -🔧 **Creating a Zipapp:** - -Creating a zipapp is straightforward.Here’s a -simple example create ``app.py`` file in ``myapp``: - -.. code:: python - - # myapp/app.py - def main(): - print("Hello, Python-World!") - - if __name__ == '__main__': - main() - -To create the zipapp - -.. code:: bash - - python -m zipapp myapp -m "app:main" - -In this example, we’re creating a zipapp named ``myapp.pyz``, specifying -the ``app.py`` file as the entry point . - -🚀 **Executing the Zipapp:** - -Once you have the zipapp file, you can run -it like any other executable. Here’s an example: - -.. code:: bash - - $ python myapp.pyz - Hello, Python-World! - -💡 **Use Cases and Considerations:** - -- *Distribution of Command-Line Tools:* - Zipapp is an excellent choice for packaging and distributing - command-line tools written in Python. -- *Portable Applications:* - If you want to create a portable Python application that can be run on - different systems without requiring installation, zipapp can be a great - solution. -- *Version Management:* - Zipapp can help in managing and - distributing specific versions of your application, ensuring consistent - execution across environments. - -Zipapp is a powerful tool for simplifying the distribution and execution -of your Python applications. It provides a convenient way to package -your code and dependencies into a single executable file, making it -easier for users to run your application without complex setup -processes. - -10. 🔧 Secure User Input with getpass() -**************************************** - -🔎 When it comes to handling sensitive user input, such as passwords or other confidential information, security is of utmost importance.the `getpass()` method, which provides a secure way to accept user input without displaying it on the screen. - -**What is getpass()?** - -The `getpass()` method is a part of the Python `getpass` module. It is used to prompt the user for input, such as a password, and securely captures the input without echoing it back to the screen. - -🚀 **Key Features and Benefits:** - -- **Secure User Input:** The `getpass()` method ensures that sensitive user input, like passwords, remains hidden, reducing the risk of unauthorized access. -- **Cross-Platform Compatibility:** The method works consistently across different operating systems, providing a reliable solution for secure user input. -- **Simplicity of Use:** With a single function call, you can prompt the user for input and retrieve it securely, without the need for complex code. - -🔧 **Using getpass():** - -Using the `getpass()` method is straightforward. Here's a simple example: - -.. code:: python - - import getpass - - password = getpass.getpass("Enter your password: ") - print("Password entered:", password) - - -When you run this code, the `getpass()` method will prompt the user to enter a password, and the input will be securely captured without being displayed on the screen. - -💡 **Best Practices:** - -- **Avoid Storing Passwords in Plain Text:** Remember, the `getpass()` method only helps in securely capturing user input. It's essential to handle the captured passwords carefully and avoid storing them in plain text. Consider using secure password storage mechanisms like hashing and salting. -- **Ensure Proper Error Handling:** Handle exceptions raised by the `getpass()` method to provide meaningful error messages and gracefully handle any issues encountered during user input. - -The `getpass()` method is a valuable tool for securely capturing sensitive user input, making it an ideal choice when handling passwords or other confidential information. By using this method, you can enhance the security of your applications and protect user privacy. - -.. raw:: html - - - -Upcoming Events ---------------- - -+------------------+---------+------------+---------------------------+ -| Event Name | Date | Location | URL | -+==================+=========+============+===========================+ -| PyCon 2023 | Sept 29 | HYDRABAD | `Website `__ | -| | Oct | | | -+------------------+---------+------------+---------------------------+ - -Stay updated with the latest events and conferences in the Python -community. Mark your calendars and don’t miss out on these exciting -opportunities to learn, network, and engage with fellow Python -enthusiasts! - -Useful Resources ----------------- - -Here are some valuable resources to enhance your Python programming -skills and stay updated with the latest trends: - - -- **Online Course**: Take your Python web development skills to the - next level with the “Mastering Flask” course on - `Pluralsight `__. - -- **Forum**: Join the vibrant Python community discussions and seek - help at `Python - Forums `__. - Engage with fellow developers, share knowledge, and contribute to the - Python ecosystem. - -Stay curious, keep learning, and make the most of these resources to -enhance your Python journey! - -Contact -------- - -If you have any questions or need further assistance, feel free to reach -out to us at [pythonworldhelp@gmail.com] or join the discussion on our -`GitHub -Discussions `__ -board. - -Contributors ------------- - -We would like to express our sincere gratitude to the following -contributors who have made valuable contributions to this edition of the -Python-World Newsletter: - -- `Ravishankar Chavare `__ - -Thank you for your dedication and for enriching the Python community -with your valuable insights, code snippets, and contributions! Happy -coding! 🐍✨ diff --git a/docs/_sources/newsletters/2023/WEEK_26.rst.txt b/docs/_sources/newsletters/2023/WEEK_26.rst.txt deleted file mode 100644 index c0a532e..0000000 --- a/docs/_sources/newsletters/2023/WEEK_26.rst.txt +++ /dev/null @@ -1,792 +0,0 @@ -Week 26 - Jully 2023 -#################### - -Introduction and Highlights ---------------------------- - -Welcome to the latest edition of the Python-World Newsletter! We bring -you the most exciting updates and insightful content from the Python -community. In this week’s edition, we have some incredible code -snippets, community spotlights, upcoming events, useful resources, and -more. Let’s dive in! - -Code Snippets -------------- - -1. 🐍 Exploring the Power of \\r in Python's Print Statement -************************************************************* - -🖋️ The '\\r' character allows you to return the cursor to the beginning of the current line without advancing to the next line. This simple yet powerful escape sequence enables dynamic and interactive output. - -💡 Use Cases and Examples: - -1️⃣ Basic Usage: Update the content on the same line. For example: - -.. code:: python - - import time - - for i in range(10): - print('Count:', i, end='\r') - time.sleep(1) - - -2️⃣ Progress Bar Effect: Create captivating progress bars or indicators using '\\r' to update the value dynamically. For example: - -.. code:: python - - import time - - for i in range(10): - progress = '#' * i + '-' * (10 - i) - print('Progress:', progress, end='\r') - time.sleep(1) - - -3️⃣ Overwriting Lines: Master the art of using multiple '\\r' characters to overwrite previous lines, perfect for real-time updates or interactive outputs. For example: - -.. code:: python - - import time - - print('Starting process...') - time.sleep(2) - print('Processing Step 1...', end='\r') - time.sleep(2) - print('Processing Step 2...', end='\r') - time.sleep(2) - print('Processing Step 3... Complete!',end='\r') - - -**🌟 Enhancing User Experience:** - -By leveraging the power of '\\r', you can create engaging and interactive command-line applications that provide real-time feedback and a captivating user experience. - -**🏢 Industry Examples:** - -**1️⃣ Software Development:** Use '\\r' to display progress and status updates during long-running tasks, such as building and compiling large codebases. - -**2️⃣ Data Analysis:** Employ '\\r' to provide live updates on data processing and analysis tasks, enhancing the transparency and interactivity of the process. - -**3️⃣ File Conversion Tools:** Utilize '\r' to show progress while converting files from one format to another, giving users real-time feedback on the conversion process. - -**4️⃣ Network Monitoring:** Implement '\\r' to display real-time network statistics, such as data transfer rates and network latency, helping network administrators monitor network performance. - -**⚠️ Compatibility Considerations:** - -Remember that the behavior of '\\r' may vary depending on the platform or console being used. While it typically works well in terminal environments, it may not function as expected in certain IDEs or text editors. - - - -2. 📚 Unleashing the Power of OrderedDict -***************************************** - -**📰 What is OrderedDict?** - -OrderedDict is a specialized dictionary available in Python's collections module that maintains the order of its items based on their insertion. While regular dictionaries don't guarantee any specific order, OrderedDict offers a solution by providing a predictable sequence of elements. - -**✨ Features and Benefits:** - -**1️⃣ Order Preservation:** The primary advantage of OrderedDict is that it retains the order of elements, allowing you to iterate over them in the exact order they were added. This characteristic is valuable when working with scenarios where order matters. - -**2️⃣ Predictable Iteration:** Since OrderedDict maintains the order of elements, it guarantees predictable iteration behavior. This property makes it useful when you need to perform operations that rely on a specific sequence, such as sorting, serialization, or generating reports. - -**3️⃣ Element Reordering:** With OrderedDict, you can easily rearrange the elements by inserting or moving items at specific positions. This feature is particularly handy when you want to change the order dynamically based on certain conditions or requirements. - -**4️⃣ JSON-like Structure:** The structure of OrderedDict resembles JSON objects, making it convenient when working with JSON data. It ensures that the order of elements is preserved when serializing or deserializing JSON data, maintaining consistency across operations. - -**5️⃣ Frequency Counting:** By combining OrderedDict with other data structures like defaultdict, you can create powerful tools for counting the frequency or popularity of elements in a collection. This can be helpful in various scenarios, such as analyzing user interactions or tracking word occurrences in a text corpus. - -**🌟 Real-World Examples:** - -**1️⃣ Maintaining Configuration Order:** - -OrderedDict can be used to store configuration settings, ensuring they are applied in a specific order. For instance, consider a scenario where you have multiple settings with dependencies, and the order of their application matters. OrderedDict guarantees that the settings are processed in the desired sequence. - -Example: - -.. code:: python - - from collections import OrderedDict - - config = OrderedDict() - config['database'] = 'localhost' - config['username'] = 'admin' - config['password'] = 'secretpassword' - config['port'] = 5432 - - for key, value in config.items(): - print(f'{key}: {value}') - -**2️⃣ Logging Request Order:** - -When building a web application, you might want to log incoming requests in the order they are received. By utilizing an OrderedDict, you can store request information and maintain the exact order of requests, allowing you to analyze the traffic patterns effectively. - -Example: - -.. code:: python - - from collections import OrderedDict - - request_log = OrderedDict() - - def log_request(request): - request_log[request['timestamp']] = request['url'] - - # Log requests - log_request(dict(timestamp='2023-06-23 10:30:00', url='http://example.com')) - log_request(dict(timestamp='2023-06-23 10:35:00', url='http://example.com/about')) - log_request(dict(timestamp='2023-06-23 10:40:00', url='http://example.com/contact')) - - # Print request log - for timestamp, url in request_log.items(): - print(f'{timestamp}: {url}') - -**💡 Conclusion:** - -OrderedDict in Python provides a valuable tool for scenarios where preserving the order of elements is crucial. By using OrderedDict, you can maintain order, achieve predictable iteration, and handle various real-world use cases effectively. Its flexibility and simplicity make it a powerful addition to your Python toolkit. - - - - -3. 🌿 Exploring the Magic of stem in pathlib -********************************************* - -**📜 Overview:** - -The `pathlib` module is a powerful tool for working with file system paths in a platform-independent manner. One of its notable features is the `stem` attribute, which allows you to extract the file name without the file extension from a given path. - -**💡 Understanding `stem`:** - -The `stem` attribute provides a convenient way to extract the base name of a file from its path. It essentially removes the file extension and returns the file name only. This can be extremely useful when you need to work with file names or perform operations that require manipulating file names separately. - -**🔧 Example Usage:** - -Let's see an example to better understand the usage of `stem`. Suppose we have a file path like "/path/to/myfile.txt" and we want to extract just the file name "myfile" without the ".txt" extension. We can achieve this using the `stem` attribute as follows: - -.. code:: python - - from pathlib import Path - - path = Path("/path/to/myfile.txt") - file_stem = path.stem - - print(file_stem) # Output: "myfile" - -As you can see, by accessing the `stem` attribute of the `Path` object, we obtain the desired file name without the extension. - -**🌱 Benefits of Using `stem`:** - - - Simplifies file name extraction: With `stem`, you can easily extract the base name of a file without manually manipulating the string or using other techniques. - - Platform-independent: The `pathlib` module ensures consistent behavior across different operating systems, making your code more portable. - -**🌿 Industry Examples:** - - - Renaming files: You can use `stem` to extract the base name of files and perform renaming operations based on specific criteria. - - File manipulation: By working with the extracted file names, you can perform targeted operations on files within a directory. - - - -4. 🌐 Demystifying URL Parsing with `urlparse` -********************************************** - - -**🔗 What is `urlparse`?** - -`urlparse` is a Python module that provides a convenient way to parse, manipulate, and extract information from URLs. It allows you to break down a URL into its various components, such as the scheme, network location, path, query parameters, and more. - -**🚀 Why Use `urlparse`?** - - - URL Parsing: Extract individual components from a URL, such as the domain, path, or query parameters. - - URL Construction: Assemble a URL by combining its components into a valid URL string. - - URL Manipulation: Modify specific parts of a URL, such as adding or updating query parameters. - - URL Validation: Check the validity and integrity of a URL. - - URL Normalization: Convert relative URLs to absolute URLs for consistency and usability. - -**🔧 How to Use `urlparse`:** - -Using `urlparse` is straightforward. Let's look at an example: - -.. code:: python - - from urllib.parse import urlparse - - url = "https://www.python.org/docs/?q=python&page=1#intro" - parsed_url = urlparse(url) - - print(parsed_url.scheme) # Output: "https" - print(parsed_url.netloc) # Output: "www.python.org" - print(parsed_url.path) # Output: "/docs/" - print(parsed_url.query) # Output: "q=python&page=1" - print(parsed_url.fragment) # Output: "intro" - -**💡 Pro Tip:** - -Remember to handle exceptions when parsing URLs, as not all URLs may conform to the expected format. Additionally, consider URL encoding and decoding for special characters in query parameters. - -**🌟 Industry Use Cases:** - - - Web Scraping: Extracting specific information from URLs. - - URL Routing: Building web applications with URL routing and parameter extraction. - - API Integration: Parsing URLs to interact with RESTful APIs. - - URL Canonicalization: Standardizing and normalizing URLs for data analysis or comparison. - - - - -5. 🧪 Exploring Type Creation and Modification using `type` -*********************************************************** - - -**🔍 Understanding Types and Metaclasses:** - -In Python, everything is an object, including types themselves. The `type` function not only allows us to check the type of an object but also grants us the ability to dynamically create and modify types. This opens up exciting possibilities for metaprogramming and advanced customization of our Python programs. - -**💡 Introspection with `type`:** - - - Checking the type of an object: `type(obj)` - - Obtaining the base classes of a type: `type.__bases__` - - Retrieving the name of a type: `type.__name__` - - Accessing the module in which a type is defined: `type.__module__` - -**✨ Creating New Types:** - -You can create a new class by invoking type with three arguments: the class name, the base classes (as a tuple), and a dictionary containing the class attributes and methods. - -Using `type` dynamically, we can create new types on the fly. For example: - -.. code:: python - - MyClass = type("MyClass", (object,), {}) - -🔹 Adding attributes to a dynamically created class: - -.. code:: python - - MyClass.attr = value - -🔹 Defining methods for a dynamically created class: - -.. code:: python - - def my_method(self): - ... - MyClass.my_method = my_method - - -**💡 Practical Examples:** - -**1️ Dynamic Class Generation:** - -Generating classes dynamically based on runtime conditions or configuration parameters. - -.. code:: python - - def create_dynamic_class(name, bases, attrs): - return type(name, bases, attrs) - - value=5 - DynamicClass = create_dynamic_class("DynamicClass", (object,), {"attr": value}) - print(DynamicClass.attr) # Output 5 - -**2 Create a new class by inheriting properties from a parent class** - -.. code:: python - - # Define the parent class - class ParentClass: - def parent_method(self): - print("This is a parent method.") - - # Define a dictionary to specify the attributes of the new class - class_attrs = { - 'child_attr': 42, - 'child_method': lambda self: print("This is a child method.") - } - - # Create a new class dynamically by inheriting from the parent class - ChildClass = type('ChildClass', (ParentClass,), class_attrs) - - # Create an instance of the child class - child = ChildClass() - - # Call methods from both parent and child classes - child.parent_method() # Output: This is a parent method. - child.child_method() # Output: This is a child method. - - # Access attributes from the child class - print(child.child_attr) # Output: 42 - - -6. 🏝️ Uses of Ellipses in Python -********************************* - -In Python, the Ellipsis or Ellipsis literal `...` (three dots) serves various purposes and provides useful functionalities in different contexts. This article explores the different uses of ellipses in Python and how they can enhance your code. - -**🌟 Placeholder for Unwritten Code** - -One use of the ellipsis literal is as a placeholder for unwritten code. Instead of using the `pass` keyword, you can use the ellipsis `...` to indicate that certain parts of your code, such as functions or classes, are yet to be implemented. - - -.. code:: python - - def unfinished_function(): - ... - - -Using the ellipsis as a placeholder signifies that the function body will be filled in later. - -**📚 Type Hinting with Ellipsis** - -Since Python 3.5, ellipses have been utilized in type hinting. Type hints allow you to declare and use specific data types for variables, parameters, and return values. The ellipsis can be part of a type hint, indicating that only part of the type is specified. - - -.. code:: python - - from typing import Tuple - - def process_data(data: Tuple[int, ...]): - # Process the data - - -In the above example, the ellipsis `...` is used within a tuple type hint to indicate that all items in the tuple should be of the same integer type, but the length of the tuple can be arbitrary. - -**🔪 Slicing in NumPy** - -NumPy, a popular library for scientific computing, makes extensive use of ellipses for slicing multidimensional arrays. Slicing allows you to extract specific portions of arrays based on indexes. Ellipsis provides a concise way to handle multidimensional arrays in NumPy. - - -.. code:: python - - import numpy as np - - arr = np.array([[5, 3, 2, 3], [4, 8, 2, 6], [8, 2, 3, 0]]) - - # Extracting elements using ellipsis literal - print(arr[..., 1]) - - # Extracting elements using general slice notation - print(arr[:, 1]) - - # Extracting elements using ellipsis object - print(arr[Ellipsis, 1]) - - -In the above code, the ellipsis `...` represents all the dimensions of the array. By using ellipsis, you can conveniently extract elements from specific indexes across different dimensions of the array. - -**💡 Conclusion** - -Ellipses in Python serve multiple purposes, ranging from placeholders for unwritten code to enabling advanced slicing in libraries like NumPy. Understanding and utilizing ellipses can enhance your code readability and make complex operations more manageable. By harnessing the power of ellipses, you can unlock new possibilities in your Python programming journey. - - -7. 🧩 Understanding `*args` and `**kwargs` in Python -***************************************************** - -In Python, \*args and \**kwargs are special syntaxes used to pass a variable number of arguments to functions. These notations provide flexibility when working with functions that can accept an arbitrary number of arguments. -This article dives into the details of \*args and \**kwargs and explores their uses and benefits. - -**🌟 *args: Variable-Length Arguments** - -The \*args syntax allows a function to accept a variable number of non-keyword arguments. It collects the arguments passed to the function into a tuple, enabling the function to handle any number of positional arguments. - - -.. code:: python - - def sum_numbers(*args): - total = 0 - for num in args: - total += num - return total - - print(sum_numbers(1, 2, 3)) # Output: 6 - print(sum_numbers(4, 5, 6, 7)) # Output: 22 - - -In the above code, the function `sum_numbers` accepts any number of arguments. The `*args` notation allows passing multiple values, which are then treated as a tuple within the function. This way, you can perform operations on an arbitrary number of arguments. - -**🔧 kwargs : Variable-Length Keyword Arguments** - -The \**kwargs syntax, on the other hand, enables a function to accept a variable number of keyword arguments. It collects the keyword arguments passed to the function into a dictionary, allowing the function to handle a flexible set of named arguments. - - -.. code:: python - - def print_details(**kwargs): - for key, value in kwargs.items(): - print(f"{key}: {value}") - - print_details(name="John", age=25) # Output: name: John, age: 25 - print_details(city="London", country="UK", occupation="Engineer") # Output: city: London, country: UK, occupation: Engineer - - -In the above code, the function `print_details` accepts any number of keyword arguments. The `\**kwargs` notation collects the key-value pairs and treats them as a dictionary within the function. This allows for flexible handling of named arguments without explicitly defining them. - -**🎯 Combining *args and **kwargs** - -You can also use \*args and \**kwargs together in a function declaration to handle both positional and keyword arguments simultaneously. This allows for maximum flexibility when designing functions that can accept different types of inputs. - - -.. code:: python - - def process_data(*args, **kwargs): - for arg in args: - print(f"Positional Argument: {arg}") - for key, value in kwargs.items(): - print(f"Keyword Argument - {key}: {value}") - - process_data(1, 2, 3, name="John", age=25) - - -In the above code, the function `process_data` can handle both positional and keyword arguments. The `*args` notation captures any number of positional arguments, while the `**kwargs` notation captures any number of keyword arguments. This allows for ultimate flexibility in function parameter handling. - -**💡 Conclusion** - -Understanding \*args and \**kwargs in Python empowers you to write more flexible and versatile functions. \*args enables you to handle an arbitrary number of positional arguments, while \**kwargs allows you to handle a variable number of keyword arguments. By combining both notations, you can create functions that are capable of accepting and processing different types of inputs. Utilizing \*args and \**kwargs expands the capabilities of your code and enables you to build more dynamic and adaptable solutions. - - -8. 🔍 Exploring Context Managers in Python with `with` -****************************************************** - -**🔗 What are Context Managers?** - -Context managers in Python are objects that help manage resources and define the behavior that should occur when entering and exiting a specific context. They are primarily used to simplify the management of resources like files, database connections, and network connections, ensuring that they are properly initialized and cleaned up after use. - -**🚀 Using Context Managers for File Handling** - -One common use case for context managers is file handling. By using a context manager, you can automatically handle the opening and closing of files, ensuring that resources are properly released, even in the presence of exceptions. - -Here's an example of using a context manager with the `with` statement for file handling: - - -.. code:: python - - with open("example.txt", "r") as file: - content = file.read() - print(content) - - -In the above code, the `open` function is used to open the file "example.txt" in read mode. The `with` statement ensures that the file is automatically closed when the block is exited, even if an exception occurs. This eliminates the need to manually close the file and reduces the risk of resource leaks. - -**🔧 Creating Custom Context Managers** - -Python allows you to create your own context managers by defining classes that implement the `__enter__` and `__exit__` methods. The `__enter__` method sets up the context, and the `__exit__` method defines the actions to be taken when leaving the context. - -Here's an example of creating a custom context manager using the `contextlib` module: - - -.. code:: python - - from contextlib import contextmanager - - @contextmanager - def my_context_manager(): - # Code to be executed on entering the context - print("Entering the context") - - # Yielding control back to the caller - yield - - # Code to be executed on exiting the context - print("Exiting the context") - - # Using the custom context manager - with my_context_manager(): - print("Inside the context") - - -In the above code, the `@contextmanager` decorator from the `contextlib` module is used to define a generator-based context manager. The code before the `yield` statement is executed on entering the context, and the code after the `yield` statement is executed on exiting the context. - -**💡 Utility of Context Managers** - -Context managers offer several benefits: - -1. **Resource Management**: Context managers ensure that resources are properly initialized and cleaned up, even in the presence of exceptions. This helps prevent resource leaks and improves the reliability of your code. - -2. **Readability**: Using context managers with the `with` statement improves the readability of your code by clearly delineating the start and end of a context. It also eliminates the need for explicit cleanup code. - -3. **Simplification**: Context managers simplify the usage of resources by encapsulating the setup and teardown operations within the context manager object. This makes your code more concise and easier to maintain. - -4. **Error Handling**: Context managers allow you to handle exceptions gracefully. The `__exit__` method can be used to catch and handle exceptions that occur within the context, providing a centralized place for error handling. - -**🌟 Conclusion** - -Context managers in Python, used with the `with` statement, provide a convenient and reliable way to manage resources and handle context-specific behaviors. They simplify the management of resources like files and database connections, ensuring proper initialization and cleanup. By creating custom context managers, you can encapsulate specific context-related functionality and improve the readability and maintainability of your code. Understanding and utilizing context managers is a valuable skill for writing robust and efficient Python code. - - -9. 🧨 Harnessing the Power of Generators in Python with `yield` -*************************************************************** - -**🔗 What are Generators?** - -Generators in Python are a type of iterable that allows you to iterate over a potentially infinite sequence of values without storing them all in memory at once. They are defined using the `yield` keyword and offer a more memory-efficient and lazy evaluation approach compared to traditional lists or iterators. - -**🚀 Working with Generator Functions** - -Generator functions are special functions that use the `yield` keyword to produce a sequence of values. When called, a generator function returns a generator object that can be iterated over using a `for` loop or by using the `next()` function. - -Here's an example of a generator function that generates a sequence of Fibonacci numbers: - - -.. code:: python - - def fibonacci(): - a, b = 0, 1 - while True: - yield a - a, b = b, a + b - - # Using the generator function - fib_gen = fibonacci() - for _ in range(10): - print(next(fib_gen)) - - -In the above code, the `fibonacci()` function is a generator function that yields the Fibonacci sequence. The `yield` keyword suspends the function's execution and returns a value, allowing the generator to produce the sequence incrementally. The `for` loop and `next()` function are used to retrieve values from the generator. - -**🔧 Benefits of Generators** - -Generators offer several advantages: - -1. **Memory Efficiency**: Generators produce values on the fly, allowing you to work with large or infinite sequences without needing to store all the values in memory. This makes generators memory-efficient and suitable for processing large datasets. - -2. **Lazy Evaluation**: Generators use lazy evaluation, meaning they compute values only when needed. This results in improved performance by avoiding unnecessary computations and reducing memory consumption. - -3. **Simplified Code**: Generators simplify code by encapsulating complex logic within a single function. They enable you to express iterative algorithms more concisely and intuitively. - -4. **Infinite Sequences**: Generators are ideal for generating infinite sequences or handling situations where the exact number of values is unknown in advance. They allow you to work with sequences that would otherwise be impractical to generate or store in memory. - -**💡 Creating Generator Expressions** - -In addition to generator functions, Python also provides generator expressions, which are similar to list comprehensions but generate values on-the-fly. Generator expressions are enclosed in parentheses instead of brackets and offer a concise way to create generators. - -Here's an example of a generator expression that yields squares of numbers: - - -.. code:: python - - squares_gen = (x ** 2 for x in range(10)) - for num in squares_gen: - print(num) - - -In the above code, the generator expression `(x ** 2 for x in range(10))` generates squares of numbers from 0 to 9. The resulting generator can be iterated over to retrieve the squared values. - -**🌟 Conclusion** - -Generators in Python, implemented using the `yield` keyword, provide a powerful mechanism for working with sequences of values in a memory-efficient and lazy manner. They allow you to generate values on-demand, handle infinite or large sequences, and simplify code by encapsulating complex logic. Whether through generator functions or generator expressions, harnessing the power of generators is invaluable for writing efficient, concise, and flexible code in Python. - - - -10.⚡️ Understanding Async and Await in Python: Concurrency Made Easy -********************************************************************** - -**🔗 What is Async and Await?** - -Async and await are keywords in Python that enable asynchronous programming, also known as concurrency. Asynchronous programming allows you to write code that can perform multiple tasks concurrently, without blocking the execution of other code. - -**🚀 Concurrency Made Easy** - -Traditionally, Python executes code sequentially, meaning one line at a time. However, certain tasks, such as network requests or file operations, can take a significant amount of time to complete. During this time, the program would be idle, waiting for the task to finish, which can lead to inefficiencies. - -With async and await, you can define asynchronous functions that allow other parts of your program to continue executing while waiting for a task to complete. This concurrency model enables you to make efficient use of system resources and greatly improves the performance of certain operations. - -**💡 Understanding Concurrency with Real-World Examples** - -To better understand the concept of concurrency, let's consider a couple of real-world examples: - -**1. Downloading Multiple Files Concurrently** - -Imagine you need to download multiple large files from the internet. Using synchronous programming, you would have to download one file at a time, waiting for each download to complete before starting the next one. This would result in significant waiting time. - -However, with async and await, you can write an asynchronous function for downloading a single file and call it multiple times concurrently. This allows the downloads to happen simultaneously, significantly reducing the overall time required to download all the files. - -**2. Web Scraping with Multiple Requests** - -Web scraping often involves sending multiple HTTP requests to fetch data from different pages. In synchronous programming, you would need to wait for each request to complete before making the next one, leading to slower scraping times. - -Using async and await, you can write asynchronous functions for making HTTP requests and parse the responses. By executing these functions concurrently, you can send multiple requests simultaneously, speeding up the web scraping process. - -**🔧 How to Use Async and Await** - -To utilize async and await, you need to follow a few key steps: - -1. Define an asynchronous function using the `async def` syntax. -2. Use the `await` keyword to indicate points where the function can await the completion of tasks without blocking other code execution. -3. Call the asynchronous function using an event loop, which manages the execution of multiple asynchronous tasks. - -Here's a simple example: - - -.. code:: python - - import asyncio - - async def greet(name): - print(f"Hello, {name}!") - await asyncio.sleep(1) - print(f"Goodbye, {name}!") - - async def main(): - await asyncio.gather(greet("Alice"), greet("Bob")) - - asyncio.run(main()) - - -In the above code, the `greet` function is defined as an asynchronous function. It prints a greeting and awaits for 1 second using `asyncio.sleep()` before printing a farewell. The `main` function is also defined as an asynchronous function and uses `asyncio.gather()` to concurrently execute the `greet` function with different names. - -**🌟 Benefits of Async and Await** - -Async and await provide several advantages: - -1. **Improved Performance**: By allowing tasks to execute concurrently, async and await enable better utilization of system resources, resulting in improved performance and responsiveness. - -2. **Simplified Code**: Asynchronous programming simplifies code by eliminating the need for complex threading and callback mechanisms. It offers a more straightforward way to write concurrent code. - -3. **Enhanced Scalability**: With async and await, you can handle large numbers of concurrent tasks efficiently, making it suitable for building scalable systems. - -4. **Responsive Applications**: By avoiding blocking operations and leveraging - - non-blocking I/O, async and await help create responsive applications that can handle multiple tasks simultaneously. - -**💡 Writing Your Own Async Context Managers** - -In addition to writing asynchronous functions, Python also provides the ability to create async context managers using the `async with` statement. Async context managers are useful for managing resources that require asynchronous setup and teardown. - -To create an async context manager, you need to define an asynchronous context manager class that implements the `__aenter__()` and `__aexit__()` methods. These methods specify the setup and teardown actions for acquiring and releasing resources. - -Here's an example of an async context manager for managing a database connection: - - -.. code:: python - - import asyncio - - class DatabaseConnection: - def __init__(self, connection_string): - self.connection_string = connection_string - - async def __aenter__(self): - self.connection = await asyncio.sleep(1) # Simulating asynchronous setup - return self.connection - - async def __aexit__(self, exc_type, exc_val, exc_tb): - await asyncio.sleep(1) # Simulating asynchronous teardown - self.connection.close() - - async def main(): - async with DatabaseConnection("example_connection_string") as connection: - # Perform database operations using the connection - pass - - asyncio.run(main()) - - -In this example, the `DatabaseConnection` class is defined as an async context manager by implementing the `__aenter__()` and `__aexit__()` methods. The `__aenter__()` method is responsible for setting up the connection, while the `__aexit__()` method handles the teardown. - -**🌟 Decorators that Take Arguments in Async Functions** - -Similar to synchronous functions, async functions can also be decorated to modify their behavior. Decorators that take arguments can be particularly useful when working with async functions. - -To create decorators that take arguments for async functions, you can follow the same principles as with synchronous functions. The only difference is that the decorator itself needs to be an async function or an async context manager. - -Here's an example of a decorator that measures the execution time of an async function: - - -.. code:: python - - import time - import asyncio - - def measure_time_async(func): - async def wrapper(*args, **kwargs): - start_time = time.time() - result = await func(*args, **kwargs) - end_time = time.time() - execution_time = end_time - start_time - print(f"Execution time: {execution_time} seconds") - return result - return wrapper - - @measure_time_async - async def process_data_async(data): - await asyncio.sleep(1) # Simulating some async processing - return data - - asyncio.run(process_data_async("example_data")) - - -In this example, the `measure_time_async` decorator is defined as a regular function that takes an async function as an argument. It measures the execution time of the async function and prints the result. - -**🚀 Unlocking the Power of Async and Await** - -Async and await have revolutionized the way Python handles concurrency, making it easier to write efficient and scalable code. By understanding and leveraging async and await, you can build responsive applications that effectively handle multiple tasks concurrently. - -Whether you're downloading files, scraping websites, or managing resources, async and await provide the tools to optimize your code and unleash the power of concurrency. - -Keep exploring the vast possibilities of async and await, and embrace the world of concurrent programming in Python! - - - - -Upcoming Events ---------------- - -+------------------+---------+------------+---------------------------+ -| Event Name | Date | Location | URL | -+==================+=========+============+===========================+ -| PyCon 2023 | Sept 29 | HYDRABAD | `Website `__ | -| | Oct | | | -+------------------+---------+------------+---------------------------+ - -Stay updated with the latest events and conferences in the Python -community. Mark your calendars and don’t miss out on these exciting -opportunities to learn, network, and engage with fellow Python -enthusiasts! - -Useful Resources ----------------- - -Here are some valuable resources to enhance your Python programming -skills and stay updated with the latest trends: - -- **Online Course**:Interested in remote sensing, geospatial technology, and its applications using python. - `IIRS `__. - -- **Python Version Update**: This is a beta preview of Python 3.12 - `Python 3.12.0b3 `__. - -- **Python-World Github Repo**: Python-World Github Repository - `Python-World `__. - -- **Forum**: Join the vibrant Python community discussions and seek - help at `Python - Forums `__. - Engage with fellow developers, share knowledge, and contribute to the - Python ecosystem. - -Stay curious, keep learning, and make the most of these resources to -enhance your Python journey! - -Contact -------- - -If you have any questions or need further assistance, feel free to reach -out to us at [pythonworldhelp@gmail.com] or join the discussion on our -`GitHub -Discussions `__ -board. - -Contributors ------------- - -We would like to express our sincere gratitude to the following -contributors who have made valuable contributions to this edition of the -Python-World Newsletter: - -- `Ravishankar Chavare `__ -- `Aahnik Daw `__ - -Thank you for your dedication and for enriching the Python community -with your valuable insights, code snippets, and contributions! Happy -coding! 🐍✨ diff --git a/docs/_sources/newsletters/index.2022.rst.txt b/docs/_sources/newsletters/index.2022.rst.txt deleted file mode 100644 index d5feac2..0000000 --- a/docs/_sources/newsletters/index.2022.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -2022 -========== -.. toctree:: - :maxdepth: 4 - - 2022 Jan - Week 1 <2022/WEEK_1.rst> \ No newline at end of file diff --git a/docs/_sources/newsletters/index.2023.rst.txt b/docs/_sources/newsletters/index.2023.rst.txt deleted file mode 100644 index 8058ba9..0000000 --- a/docs/_sources/newsletters/index.2023.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -2023 -========== -.. toctree:: - :maxdepth: 4 - - 2023 June - Week 26 <2023/WEEK_26.rst> - 2023 June - Week 25 <2023/WEEK_25.rst> - \ No newline at end of file diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index 7577acb..0000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,903 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/check-solid.svg b/docs/_static/check-solid.svg deleted file mode 100644 index 92fad4b..0000000 --- a/docs/_static/check-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_static/clipboard.min.js b/docs/_static/clipboard.min.js deleted file mode 100644 index 54b3c46..0000000 --- a/docs/_static/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.8 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 - - - - diff --git a/docs/_static/copybutton.css b/docs/_static/copybutton.css deleted file mode 100644 index f1916ec..0000000 --- a/docs/_static/copybutton.css +++ /dev/null @@ -1,94 +0,0 @@ -/* Copy buttons */ -button.copybtn { - position: absolute; - display: flex; - top: .3em; - right: .3em; - width: 1.7em; - height: 1.7em; - opacity: 0; - transition: opacity 0.3s, border .3s, background-color .3s; - user-select: none; - padding: 0; - border: none; - outline: none; - border-radius: 0.4em; - /* The colors that GitHub uses */ - border: #1b1f2426 1px solid; - background-color: #f6f8fa; - color: #57606a; -} - -button.copybtn.success { - border-color: #22863a; - color: #22863a; -} - -button.copybtn svg { - stroke: currentColor; - width: 1.5em; - height: 1.5em; - padding: 0.1em; -} - -div.highlight { - position: relative; -} - -/* Show the copybutton */ -.highlight:hover button.copybtn, button.copybtn.success { - opacity: 1; -} - -.highlight button.copybtn:hover { - background-color: rgb(235, 235, 235); -} - -.highlight button.copybtn:active { - background-color: rgb(187, 187, 187); -} - -/** - * A minimal CSS-only tooltip copied from: - * https://codepen.io/mildrenben/pen/rVBrpK - * - * To use, write HTML like the following: - * - *

Short

- */ - .o-tooltip--left { - position: relative; - } - - .o-tooltip--left:after { - opacity: 0; - visibility: hidden; - position: absolute; - content: attr(data-tooltip); - padding: .2em; - font-size: .8em; - left: -.2em; - background: grey; - color: white; - white-space: nowrap; - z-index: 2; - border-radius: 2px; - transform: translateX(-102%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); -} - -.o-tooltip--left:hover:after { - display: block; - opacity: 1; - visibility: visible; - transform: translateX(-100%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); - transition-delay: .5s; -} - -/* By default the copy button shouldn't show up when printing a page */ -@media print { - button.copybtn { - display: none; - } -} diff --git a/docs/_static/copybutton.js b/docs/_static/copybutton.js deleted file mode 100644 index 2ea7ff3..0000000 --- a/docs/_static/copybutton.js +++ /dev/null @@ -1,248 +0,0 @@ -// Localization support -const messages = { - 'en': { - 'copy': 'Copy', - 'copy_to_clipboard': 'Copy to clipboard', - 'copy_success': 'Copied!', - 'copy_failure': 'Failed to copy', - }, - 'es' : { - 'copy': 'Copiar', - 'copy_to_clipboard': 'Copiar al portapapeles', - 'copy_success': '¡Copiado!', - 'copy_failure': 'Error al copiar', - }, - 'de' : { - 'copy': 'Kopieren', - 'copy_to_clipboard': 'In die Zwischenablage kopieren', - 'copy_success': 'Kopiert!', - 'copy_failure': 'Fehler beim Kopieren', - }, - 'fr' : { - 'copy': 'Copier', - 'copy_to_clipboard': 'Copier dans le presse-papier', - 'copy_success': 'Copié !', - 'copy_failure': 'Échec de la copie', - }, - 'ru': { - 'copy': 'Скопировать', - 'copy_to_clipboard': 'Скопировать в буфер', - 'copy_success': 'Скопировано!', - 'copy_failure': 'Не удалось скопировать', - }, - 'zh-CN': { - 'copy': '复制', - 'copy_to_clipboard': '复制到剪贴板', - 'copy_success': '复制成功!', - 'copy_failure': '复制失败', - }, - 'it' : { - 'copy': 'Copiare', - 'copy_to_clipboard': 'Copiato negli appunti', - 'copy_success': 'Copiato!', - 'copy_failure': 'Errore durante la copia', - } -} - -let locale = 'en' -if( document.documentElement.lang !== undefined - && messages[document.documentElement.lang] !== undefined ) { - locale = document.documentElement.lang -} - -let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; -if (doc_url_root == '#') { - doc_url_root = ''; -} - -/** - * SVG files for our copy buttons - */ -let iconCheck = ` - ${messages[locale]['copy_success']} - - -` - -// If the user specified their own SVG use that, otherwise use the default -let iconCopy = ``; -if (!iconCopy) { - iconCopy = ` - ${messages[locale]['copy_to_clipboard']} - - - -` -} - -/** - * Set up copy/paste for code blocks - */ - -const runWhenDOMLoaded = cb => { - if (document.readyState != 'loading') { - cb() - } else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', cb) - } else { - document.attachEvent('onreadystatechange', function() { - if (document.readyState == 'complete') cb() - }) - } -} - -const codeCellId = index => `codecell${index}` - -// Clears selected text since ClipboardJS will select the text when copying -const clearSelection = () => { - if (window.getSelection) { - window.getSelection().removeAllRanges() - } else if (document.selection) { - document.selection.empty() - } -} - -// Changes tooltip text for a moment, then changes it back -// We want the timeout of our `success` class to be a bit shorter than the -// tooltip and icon change, so that we can hide the icon before changing back. -var timeoutIcon = 2000; -var timeoutSuccessClass = 1500; - -const temporarilyChangeTooltip = (el, oldText, newText) => { - el.setAttribute('data-tooltip', newText) - el.classList.add('success') - // Remove success a little bit sooner than we change the tooltip - // So that we can use CSS to hide the copybutton first - setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) - setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) -} - -// Changes the copy button icon for two seconds, then changes it back -const temporarilyChangeIcon = (el) => { - el.innerHTML = iconCheck; - setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) -} - -const addCopyButtonToCodeCells = () => { - // If ClipboardJS hasn't loaded, wait a bit and try again. This - // happens because we load ClipboardJS asynchronously. - if (window.ClipboardJS === undefined) { - setTimeout(addCopyButtonToCodeCells, 250) - return - } - - // Add copybuttons to all of our code cells - const COPYBUTTON_SELECTOR = 'div.highlight pre'; - const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) - codeCells.forEach((codeCell, index) => { - const id = codeCellId(index) - codeCell.setAttribute('id', id) - - const clipboardButton = id => - `` - codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) - }) - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} - - -var copyTargetText = (trigger) => { - var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); - - // get filtered text - let exclude = '.linenos'; - - let text = filterText(target, exclude); - return formatCopyText(text, '', false, true, true, true, '', '') -} - - // Initialize with a callback so we can modify the text before copy - const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) - - // Update UI with error/success messages - clipboard.on('success', event => { - clearSelection() - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) - temporarilyChangeIcon(event.trigger) - }) - - clipboard.on('error', event => { - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) - }) -} - -runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/_static/copybutton_funcs.js b/docs/_static/copybutton_funcs.js deleted file mode 100644 index dbe1aaa..0000000 --- a/docs/_static/copybutton_funcs.js +++ /dev/null @@ -1,73 +0,0 @@ -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -export function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} diff --git a/docs/_static/debug.css b/docs/_static/debug.css deleted file mode 100644 index 74d4aec..0000000 --- a/docs/_static/debug.css +++ /dev/null @@ -1,69 +0,0 @@ -/* - This CSS file should be overridden by the theme authors. It's - meant for debugging and developing the skeleton that this theme provides. -*/ -body { - font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji"; - background: lavender; -} -.sb-announcement { - background: rgb(131, 131, 131); -} -.sb-announcement__inner { - background: black; - color: white; -} -.sb-header { - background: lightskyblue; -} -.sb-header__inner { - background: royalblue; - color: white; -} -.sb-header-secondary { - background: lightcyan; -} -.sb-header-secondary__inner { - background: cornflowerblue; - color: white; -} -.sb-sidebar-primary { - background: lightgreen; -} -.sb-main { - background: blanchedalmond; -} -.sb-main__inner { - background: antiquewhite; -} -.sb-header-article { - background: lightsteelblue; -} -.sb-article-container { - background: snow; -} -.sb-article-main { - background: white; -} -.sb-footer-article { - background: lightpink; -} -.sb-sidebar-secondary { - background: lightgoldenrodyellow; -} -.sb-footer-content { - background: plum; -} -.sb-footer-content__inner { - background: palevioletred; -} -.sb-footer { - background: pink; -} -.sb-footer__inner { - background: salmon; -} -.sb-article { - background: white; -} diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index d06a71d..0000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js deleted file mode 100644 index b57ae3b..0000000 --- a/docs/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/docs/_static/language_data.js b/docs/_static/language_data.js deleted file mode 100644 index 250f566..0000000 --- a/docs/_static/language_data.js +++ /dev/null @@ -1,199 +0,0 @@ -/* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * - * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; - - -/* Non-minified version is copied as a separate JS file, is available */ - -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/docs/_static/minus.png b/docs/_static/minus.png deleted file mode 100644 index d96755fdaf8bb2214971e0db9c1fd3077d7c419d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK diff --git a/docs/_static/plus.png b/docs/_static/plus.png deleted file mode 100644 index 7107cec93a979b9a5f64843235a16651d563ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz diff --git a/docs/_static/pygments.css b/docs/_static/pygments.css deleted file mode 100644 index d9a83a7..0000000 --- a/docs/_static/pygments.css +++ /dev/null @@ -1,255 +0,0 @@ -.highlight pre { line-height: 125%; } -.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f8f8f8; } -.highlight .c { color: #8f5902; font-style: italic } /* Comment */ -.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ -.highlight .g { color: #000000 } /* Generic */ -.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ -.highlight .l { color: #000000 } /* Literal */ -.highlight .n { color: #000000 } /* Name */ -.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ -.highlight .x { color: #000000 } /* Other */ -.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ -.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ -.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #a40000 } /* Generic.Deleted */ -.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #ef2929 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ -.highlight .gp { color: #8f5902 } /* Generic.Prompt */ -.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ -.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ -.highlight .ld { color: #000000 } /* Literal.Date */ -.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ -.highlight .s { color: #4e9a06 } /* Literal.String */ -.highlight .na { color: #c4a000 } /* Name.Attribute */ -.highlight .nb { color: #204a87 } /* Name.Builtin */ -.highlight .nc { color: #000000 } /* Name.Class */ -.highlight .no { color: #000000 } /* Name.Constant */ -.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #ce5c00 } /* Name.Entity */ -.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #000000 } /* Name.Function */ -.highlight .nl { color: #f57900 } /* Name.Label */ -.highlight .nn { color: #000000 } /* Name.Namespace */ -.highlight .nx { color: #000000 } /* Name.Other */ -.highlight .py { color: #000000 } /* Name.Property */ -.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #000000 } /* Name.Variable */ -.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ -.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ -.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ -.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ -.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ -.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ -.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ -.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ -.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ -.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ -.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ -.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ -.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ -.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ -.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ -.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ -.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ -.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ -.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ -.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ -.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #000000 } /* Name.Function.Magic */ -.highlight .vc { color: #000000 } /* Name.Variable.Class */ -.highlight .vg { color: #000000 } /* Name.Variable.Global */ -.highlight .vi { color: #000000 } /* Name.Variable.Instance */ -.highlight .vm { color: #000000 } /* Name.Variable.Magic */ -.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ -@media not print { -body[data-theme="dark"] .highlight pre { line-height: 125%; } -body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight .hll { background-color: #404040 } -body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } -body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ -body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ -body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ -body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ -body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ -body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ -body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ -body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ -body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ -body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ -body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ -body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ -body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ -body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ -body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ -body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ -body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ -body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ -body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ -body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ -body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ -body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ -body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ -body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ -body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ -body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ -body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ -body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ -body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ -body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ -body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ -body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ -body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ -body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ -body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ -body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ -body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ -body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ -body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ -body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ -body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ -body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ -body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ -body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ -body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ -body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ -body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ -body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ -body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ -body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ -body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ -body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ -body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ -body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ -body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ -body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ -body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ -body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ -body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ -body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ -body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ -body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ -body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ -body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ -body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ -body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ -body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ -body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ -body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ -body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ -body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ -body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ -body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ -body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ -@media (prefers-color-scheme: dark) { -body:not([data-theme="light"]) .highlight pre { line-height: 125%; } -body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } -body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } -body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ -body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ -body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ -body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ -body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ -body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ -body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ -body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ -body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ -body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ -body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ -body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ -body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ -body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ -body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ -body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ -body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ -body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ -body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ -body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ -body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ -body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ -body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ -body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ -body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ -body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ -body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ -body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ -body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ -body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ -body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ -body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ -body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ -body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ -body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ -body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ -body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ -body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ -body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ -body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ -body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ -body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ -body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ -body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ -body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ -body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ -body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ -body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ -body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ -body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ -body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ -body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ -body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ -body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ -body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ -body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ -body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ -body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ -body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ -body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ -body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ -body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ -body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ -body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ -body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ -body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ -body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ -body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ -body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ -body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ -body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ -body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ -body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ -body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ -} -} \ No newline at end of file diff --git a/docs/_static/scripts/furo-extensions.js b/docs/_static/scripts/furo-extensions.js deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_static/scripts/furo.js b/docs/_static/scripts/furo.js deleted file mode 100644 index 32e7c05..0000000 --- a/docs/_static/scripts/furo.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see furo.js.LICENSE.txt */ -(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); -//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/_static/scripts/furo.js.LICENSE.txt b/docs/_static/scripts/furo.js.LICENSE.txt deleted file mode 100644 index 1632189..0000000 --- a/docs/_static/scripts/furo.js.LICENSE.txt +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * gumshoejs v5.1.2 (patched by @pradyunsg) - * A simple, framework-agnostic scrollspy script. - * (c) 2019 Chris Ferdinandi - * MIT License - * http://github.com/cferdinandi/gumshoe - */ diff --git a/docs/_static/scripts/furo.js.map b/docs/_static/scripts/furo.js.map deleted file mode 100644 index 7b7ddb1..0000000 --- a/docs/_static/scripts/furo.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js deleted file mode 100644 index 97d56a7..0000000 --- a/docs/_static/searchtools.js +++ /dev/null @@ -1,566 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -/** - * Simple result scoring code. - */ -if (typeof Scorer === "undefined") { - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [docname, title, anchor, descr, score, filename] - // and returns the new score. - /* - score: result => { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) - ); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; - console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - // array of [docname, title, anchor, descr, score, filename] - let results = []; - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // lookup as object - objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - results = results.reverse(); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/docs/_static/skeleton.css b/docs/_static/skeleton.css deleted file mode 100644 index 467c878..0000000 --- a/docs/_static/skeleton.css +++ /dev/null @@ -1,296 +0,0 @@ -/* Some sane resets. */ -html { - height: 100%; -} - -body { - margin: 0; - min-height: 100%; -} - -/* All the flexbox magic! */ -body, -.sb-announcement, -.sb-content, -.sb-main, -.sb-container, -.sb-container__inner, -.sb-article-container, -.sb-footer-content, -.sb-header, -.sb-header-secondary, -.sb-footer { - display: flex; -} - -/* These order things vertically */ -body, -.sb-main, -.sb-article-container { - flex-direction: column; -} - -/* Put elements in the center */ -.sb-header, -.sb-header-secondary, -.sb-container, -.sb-content, -.sb-footer, -.sb-footer-content { - justify-content: center; -} -/* Put elements at the ends */ -.sb-article-container { - justify-content: space-between; -} - -/* These elements grow. */ -.sb-main, -.sb-content, -.sb-container, -article { - flex-grow: 1; -} - -/* Because padding making this wider is not fun */ -article { - box-sizing: border-box; -} - -/* The announcements element should never be wider than the page. */ -.sb-announcement { - max-width: 100%; -} - -.sb-sidebar-primary, -.sb-sidebar-secondary { - flex-shrink: 0; - width: 17rem; -} - -.sb-announcement__inner { - justify-content: center; - - box-sizing: border-box; - height: 3rem; - - overflow-x: auto; - white-space: nowrap; -} - -/* Sidebars, with checkbox-based toggle */ -.sb-sidebar-primary, -.sb-sidebar-secondary { - position: fixed; - height: 100%; - top: 0; -} - -.sb-sidebar-primary { - left: -17rem; - transition: left 250ms ease-in-out; -} -.sb-sidebar-secondary { - right: -17rem; - transition: right 250ms ease-in-out; -} - -.sb-sidebar-toggle { - display: none; -} -.sb-sidebar-overlay { - position: fixed; - top: 0; - width: 0; - height: 0; - - transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; - - opacity: 0; - background-color: rgba(0, 0, 0, 0.54); -} - -#sb-sidebar-toggle--primary:checked - ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], -#sb-sidebar-toggle--secondary:checked - ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { - width: 100%; - height: 100%; - opacity: 1; - transition: width 0ms ease, height 0ms ease, opacity 250ms ease; -} - -#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { - left: 0; -} -#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { - right: 0; -} - -/* Full-width mode */ -.drop-secondary-sidebar-for-full-width-content - .hide-when-secondary-sidebar-shown { - display: none !important; -} -.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { - display: none !important; -} - -/* Mobile views */ -.sb-page-width { - width: 100%; -} - -.sb-article-container, -.sb-footer-content__inner, -.drop-secondary-sidebar-for-full-width-content .sb-article, -.drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 100vw; -} - -.sb-article, -.match-content-width { - padding: 0 1rem; - box-sizing: border-box; -} - -@media (min-width: 32rem) { - .sb-article, - .match-content-width { - padding: 0 2rem; - } -} - -/* Tablet views */ -@media (min-width: 42rem) { - .sb-article-container { - width: auto; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 42rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} -@media (min-width: 46rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 46rem; - } - .sb-article, - .match-content-width { - width: 46rem; - } -} -@media (min-width: 50rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 50rem; - } - .sb-article, - .match-content-width { - width: 50rem; - } -} - -/* Tablet views */ -@media (min-width: 59rem) { - .sb-sidebar-secondary { - position: static; - } - .hide-when-secondary-sidebar-shown { - display: none !important; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 59rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} -@media (min-width: 63rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 63rem; - } - .sb-article, - .match-content-width { - width: 46rem; - } -} -@media (min-width: 67rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } - .sb-article, - .match-content-width { - width: 50rem; - } -} - -/* Desktop views */ -@media (min-width: 76rem) { - .sb-sidebar-primary { - position: static; - } - .hide-when-primary-sidebar-shown { - display: none !important; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 59rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} - -/* Full desktop views */ -@media (min-width: 80rem) { - .sb-article, - .match-content-width { - width: 46rem; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 63rem; - } -} - -@media (min-width: 84rem) { - .sb-article, - .match-content-width { - width: 50rem; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } -} - -@media (min-width: 88rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } - .sb-page-width { - width: 88rem; - } -} diff --git a/docs/_static/sphinx_highlight.js b/docs/_static/sphinx_highlight.js deleted file mode 100644 index aae669d..0000000 --- a/docs/_static/sphinx_highlight.js +++ /dev/null @@ -1,144 +0,0 @@ -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '
" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); diff --git a/docs/_static/styles/furo-extensions.css b/docs/_static/styles/furo-extensions.css deleted file mode 100644 index bc447f2..0000000 --- a/docs/_static/styles/furo-extensions.css +++ /dev/null @@ -1,2 +0,0 @@ -#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} -/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/_static/styles/furo-extensions.css.map b/docs/_static/styles/furo-extensions.css.map deleted file mode 100644 index 9ba5637..0000000 --- a/docs/_static/styles/furo-extensions.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_static/styles/furo.css b/docs/_static/styles/furo.css deleted file mode 100644 index f853550..0000000 --- a/docs/_static/styles/furo.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground)}.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}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}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}.sig:not(.sig-inline) span.pre{overflow-wrap:anywhere}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);overflow-wrap:break-word;padding:.1em .2em}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} -/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/_static/styles/furo.css.map b/docs/_static/styles/furo.css.map deleted file mode 100644 index 997200a..0000000 --- a/docs/_static/styles/furo.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo.css","mappings":"AAAA,2EAA2E,CAU3E,KAEE,6BAA8B,CAD9B,gBAEF,CASA,KACE,QACF,CAMA,KACE,aACF,CAOA,GACE,aAAc,CACd,cACF,CAUA,GACE,sBAAuB,CACvB,QAAS,CACT,gBACF,CAOA,IACE,+BAAiC,CACjC,aACF,CASA,EACE,4BACF,CAOA,YACE,kBAAmB,CACnB,yBAA0B,CAC1B,gCACF,CAMA,SAEE,kBACF,CAOA,cAGE,+BAAiC,CACjC,aACF,CAeA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CAEA,IACE,aACF,CAEA,IACE,SACF,CASA,IACE,iBACF,CAUA,sCAKE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACF,CAOA,aAEE,gBACF,CAOA,cAEE,mBACF,CAMA,gDAIE,yBACF,CAMA,wHAIE,iBAAkB,CAClB,SACF,CAMA,4GAIE,6BACF,CAMA,SACE,0BACF,CASA,OACE,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBACF,CAMA,SACE,uBACF,CAMA,SACE,aACF,CAOA,6BAEE,qBAAsB,CACtB,SACF,CAMA,kFAEE,WACF,CAOA,cACE,4BAA6B,CAC7B,mBACF,CAMA,yCACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,QACE,aACF,CAMA,QACE,iBACF,CAiBA,kBACE,YACF,CCvVA,aAcE,kEACE,uBAOF,WACE,iDAMF,gCACE,wBAEF,qCAEE,uBADA,uBACA,CAEF,SACE,wBAtBA,CCpBJ,iBAOE,6BAEA,mBANA,qBAEA,sBACA,0BAFA,oBAHA,4BAOA,6BANA,mBAOA,CAEF,gBACE,aCPF,KCGE,mHAEA,wGAGA,wBAAyB,CACzB,wBAAyB,CACzB,4BAA6B,CAC7B,yBAA0B,CAC1B,2BAA4B,CAG5B,sDAAuD,CACvD,gDAAiD,CACjD,wDAAyD,CAGzD,0CAA2C,CAC3C,gDAAiD,CACjD,gDAAiD,CAKjD,gCAAiC,CACjC,sCAAuC,CAGvC,2CAA4C,CAG5C,uCAAwC,CChCxC,+FAGA,uBAAwB,CAGxB,iCAAkC,CAClC,kCAAmC,CAEnC,+BAAgC,CAChC,sCAAuC,CACvC,sCAAuC,CACvC,qGAIA,mDAAoD,CAEpD,mCAAoC,CACpC,8CAA+C,CAC/C,gDAAiD,CACjD,kCAAmC,CACnC,6DAA8D,CAG9D,6BAA8B,CAC9B,6BAA8B,CAC9B,+BAAgC,CAChC,kCAAmC,CACnC,kCAAmC,CCPjC,ukBCYA,srCAZF,kaCVA,mLAOA,oTAWA,2UAaA,0CACA,gEACA,0CAGA,gEAUA,yCACA,+DAGA,4CACA,CACA,iEAGA,sGACA,uCACA,4DAGA,sCACA,2DAEA,4CACA,kEACA,oGACA,CAEA,0GACA,+CAGA,+MAOA,+EACA,wCAIA,4DACA,sEACA,kEACA,sEACA,gDAGA,+DACA,0CACA,gEACA,gGACA,CAGA,2DACA,qDAGA,0CACA,8CACA,oDACA,oDL7GF,iCAEA,iEAME,oCKyGA,yDAIA,sCACA,kCACA,sDAGA,0CACA,kEACA,oDAEA,sDAGA,oCACA,oEAIA,CAGA,yDAGA,qDACA,oDAGA,6DAIA,iEAGA,2DAEA,2DL9IE,4DAEA,gEAIF,gEKgGA,gFAIA,oNAOA,qDAEA,gFAIA,4DAIA,oEAMA,yEAIA,6DACA,0DAGA,uDAGA,qDAEA,wDLpII,6DAEA,yDACE,2DAMN,uCAIA,yCACE,8CAGF,sDMjDA,6DAKA,oCAIA,4CACA,kBAGF,sBAMA,2BAME,qCAGA,qCAEA,iCAEA,+BAEA,mCAEA,qCAIA,CACA,gCACA,gDAKA,kCAIA,6BAEA,0CAQA,kCAIF,8BAGE,8BACA,uCAGF,sCAKE,kCAEA,sDAGA,iCACE,CACA,2FAGA,gCACE,CACA,+DCzEJ,wCAEA,sBAEF,yDAEE,mCACA,wDAGA,2GAGA,wIACE,gDAMJ,kCAGE,6BACA,0CAGA,gEACA,8BAGA,uCAKA,sCAEA,wFAEA,iCAIA,sCAMA,sDAEE,gGAKE,+CAON,sBACE,yCAEA,0BAUF,yLAKA,aACE,mCAEA,mBAEF,wCAGE,MACA,kCACA,kCAGA,SAEF,kCAME,mBAGF,CAJE,eACA,CAHA,gBAEA,CASA,mBACA,mBAEF,oBACE,+BAGA,YACE,mBACA,CAMF,yBADF,kBAEE,CADA,gBACA,uCAEA,qBACA,iBACA,OACA,aACA,CAFA,WAEA,GACE,qBADF,gBACE,aAGF,+CAEA,SACA,CANE,WAEJ,aACE,CADF,SAIE,4BACA,GAGE,wBADF,yBACE,kDACA,uCAEA,yDAEE,+CAKN,uBACE,yDAKF,uBACE,CACA,iBACA,uBACA,kDAMA,0DAGF,CALE,oBAKF,0GAWE,sJAOA,+CAGF,sBAEE,WAKA,0CAEA,CALF,qCAGE,CAHF,WAKE,SAGA,0CAEE,CALF,qCAKE,OACA,YAEJ,gBACE,gBAIA,+CAKF,CAGE,kDAGA,CANF,8BAGE,CAGA,YAEA,CAdF,2BACE,CAHA,UAEF,CAYE,UAEA,CACA,0CACF,iEAOE,iCACA,8BAGA,wCAIA,wBAKE,0CAKF,CARE,6DAGA,CALF,qBAEE,CASA,YACA,yBAGA,CAEE,cAKN,CAPI,sBAOJ,gCAGE,qBAEA,WACA,aACA,sCAEA,mBACA,6BAGA,uEADA,qBACA,6BAIA,yBACA,qCAEE,UAEA,YACA,sBAEF,8BAGA,CAPE,aACA,WAMF,4BACE,sBACA,WAMJ,uBACE,cAYE,mBAXA,qDAKA,qCAGA,CAEA,YACA,CAHA,2BAEA,CACA,oCAEA,4CACA,uBAIA,oCAEJ,CAFI,cAIF,iBACE,CAHJ,kBAGI,yBAEA,oCAIA,qDAMF,mEAEA,CACE,8CAKA,gCAEA,qCAGA,oCAGE,sBACA,CAJF,WAEE,CAFF,eAEE,SAEA,mBACA,qCACE,aACA,CAFF,YADA,qBACA,WAEE,sBACA,kEAEN,2BAEE,iDAKA,uCAGF,CACE,0DAKA,kBACF,CAFE,sBAGA,mBACA,0BAEJ,yBAII,aADA,WACA,CAMF,UAFE,kBAEF,CAJF,gBACE,CAHE,iBAMF,6CC7ZF,yBACE,WACA,iBAEA,aAFA,iBAEA,6BAEA,kCACA,mBAKA,gCAGA,CARA,QAEA,CAGA,UALA,qBAEA,qDAGA,CALA,OAQA,4BACE,cAGF,2BACE,gCAEJ,CAHE,UAGF,aACE,iCAEA,CAHF,UAGE,wCAEA,WACA,WADA,UACA,6CAGA,yCAIA,kEAGE,QADA,KACA,cAQA,0CACA,CAFF,kBACE,CACA,wEACA,CALJ,YACE,CAEE,mBAFF,OAIE,gBAJF,gCACA,CADA,eALE,oBAIJ,CACE,SAIE,0BAEJ,CAFI,UAEJ,CACE,kCACA,qBACE,CAFF,sBAEE,qEACA,uDACA,8DAMF,yBAII,oDAJJ,YAGE,CAHF,eAGE,iBACE,WACA,uDACE,yCACA,2CACE,yCACA,YADA,eACA,uFALJ,+CACA,gBACE,kBACA,CADA,2CADF,eACE,MACA,0DACE,yCACA,qGALJ,oCACA,uCACE,CAFF,UAEE,uEACA,+CACE,oDACA,6DANN,kCACE,kCACA,gBADA,UACA,yBACE,wDACA,cADA,UACA,qBACE,6CACA,yFALJ,sCACA,CAEE,gBACE,CAHJ,gBAGI,sBAHJ,uBACE,4DACA,4CACE,iDAJJ,2CACA,CADA,gBAEE,gBAGE,sBALJ,+BAII,iBAFF,gDACA,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,yDCpEA,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,wDAIA,uCAEE,kEAEF,CACF,6CAEE,uDAEA,oCAIF,4BACE,6BAEA,gEAEE,+CAIF,0EC9FA,sDAGE,+DCLJ,sCAGE,8BAKA,wJAIE,gBACA,yGCZF,mBAQA,2MAIA,oBAOF,wGAKE,iCAEE,CAFF,wBAEE,8GAWF,mBAEE,2GAMA,mBAEA,6HAOF,YAGA,mIAOE,gBADA,YACA,4FAOF,8BACA,uBAYA,sCAEE,CAFF,qBARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,mBAEA,sBAEA,kDAEA,CAEE,kCACE,6BACA,4CAMJ,kDAGA,eAIA,6CACE,mCACA,0CACA,8BAEA,sCACA,cAEF,+BACE,CAHA,eAGA,YACA,4BACA,gEAGF,0DAME,sBAFA,kBAGE,+BACA,4BAIJ,aACE,oBACA,CAFF,gBAEE,yBAEA,eACA,CApHsB,YAmHtB,CACA,sECpIF,mDACA,2FAMA,iCAGA,CACA,eACE,CAFF,kBACA,CADA,wBAEE,CACA,6BACE,eAEF,CAHA,YAGA,wEAIE,mBACE,qCACF,CAGJ,wBACE,CAJE,iBAIF,8BAIJ,+CAEE,qDAEF,kDAIE,YAEF,CAFE,YAEF,CCjCE,mFAJA,QACA,UAIE,CADF,iBACE,mCAGA,iDACE,+BAGF,wBAEA,mBAKA,6CAEF,CAHE,mBACA,CAEF,kCAIE,CARA,kBACA,CAFF,eASE,YACA,mBAGF,CAJE,UAIF,wCCjCA,oBDmCE,wBCpCJ,uCACE,8BACA,4CACA,oBAGA,2CCAA,6CAGE,CAPF,uBAIA,CDGA,gDACE,6BCVJ,CAWM,2CAEF,CAJA,kCAEE,CDJF,aCLF,gBDKE,uBCMA,gCAGA,gDAGE,wBAGJ,0BAEA,iBACE,aACF,CADE,UACF,uBACE,aACF,oBACE,YACF,4BACE,6CAMA,CAYF,6DAZE,mCAGE,iCASJ,4BAGE,4DADA,+BACA,CAFA,qBAEA,yBACE,aAEF,wBAHA,SAGA,iHACE,2DAKF,CANA,yCACE,CADF,oCAMA,uSAIA,sGACE,oDChEJ,WAEF,yBACE,QACA,eAEA,gBAEE,uCAGA,CALF,iCAKE,uCAGA,0BACA,CACA,oBACA,iCClBJ,gBACE,KAGF,qBACE,YAGF,CAHE,cAGF,gCAEE,mBACA,iEAEA,oCACA,wCAEA,sBACA,WAEA,CAFA,YAEA,8EAEA,mCAFA,iBAEA,6BAIA,wEAKA,sDAIE,CARF,mDAIA,CAIE,cAEF,8CAIA,oBAFE,iBAEF,8CAGE,eAEF,CAFE,YAEF,OAEE,kBAGJ,CAJI,eACA,CAFF,mBAKF,yCCjDE,oBACA,CAFA,iBAEA,uCAKE,iBACA,qCAGA,mBCZJ,CDWI,gBCXJ,6BAEE,eACA,sBAGA,eAEA,sBACA,oDACA,iGAMA,gBAFE,YAEF,8FAME,iJClBF,YACA,gNAUE,6BAEF,oTAcI,kBACF,gHAIA,qBACE,eACF,qDACE,kBACF,6DACE,4BCxCJ,oBAEF,qCAEI,+CAGF,uBACE,uDAGJ,oBAkBE,mDAhBA,+CAaA,CAbA,oBAaA,0FAEE,CAFF,gGAbA,+BAaA,0BAGA,mQAIA,oNAEE,iBAGJ,CAHI,gBADA,gBAIJ,8CAYI,CAZJ,wCAYI,sVACE,iCAGA,uEAHA,QAGA,qXAKJ,iDAGF,CARM,+CACE,iDAIN,CALI,gBAQN,mHACE,gBAGF,2DACE,0EAOA,0EAKA,6EC/EA,iDACA,gCACA,oDAGA,qBACA,oDCFA,cACA,eAEA,yBAGF,sBAEE,iBACA,sNAWA,iBACE,kBACA,wRAgBA,kBAEA,iOAgBA,uCACE,uEAEA,kBAEF,qUAuBE,iDAIJ,CACA,geCxFF,4BAEE,CAQA,6JACA,iDAIA,sEAGA,mDAOF,iDAGE,4DAIA,8CACA,qDAEE,eAFF,cAEE,oBAEF,uBAFE,kCAGA,eACA,iBACA,mBAIA,mDACA,CAHA,uCAEA,CAJA,0CACA,CAIA,gBAJA,gBACA,oBADA,gBAIA,wBAEJ,gBAGE,6BACA,YAHA,iBAGA,gCACA,iEAEA,6CACA,sDACA,0BADA,wBACA,0BACA,oIAIA,mBAFA,YAEA,qBACA,0CAIE,uBAEF,CAHA,yBACE,CAEF,iDACE,mFAKJ,oCACE,CANE,aAKJ,CACE,qEAIA,YAFA,WAEA,CAHA,aACA,CAEA,gBACE,4BACA,sBADA,aACA,gCAMF,oCACA,yDACA,2CAEA,qBAGE,kBAEA,CACA,mCAIF,CARE,YACA,CAOF,iCAEE,CAPA,oBACA,CAQA,oBACE,uDAEJ,sDAGA,CAHA,cAGA,0BACE,oDAIA,oCACA,4BACA,sBAGA,cAEA,oFAGA,sBAEA,yDACE,CAIA,iBAJA,wBAIA,6CAJA,6CAOA,4BAGJ,CAHI,cAGJ,yCAGA,kBACE,CAIA,iDAEA,CATA,YAEF,CACE,4CAGA,kBAIA,wEAEA,wDAIF,kCAOE,iDACA,CARF,WAIE,sCAGA,CANA,2CACA,CAMA,oEARF,iBACE,CACA,qCAMA,iBAuBE,uBAlBF,YAKA,2DALA,uDAKA,CALA,sBAiBA,4CACE,CALA,gRAIF,YACE,UAEN,uBACE,YACA,mCAOE,+CAGA,8BAGF,+CAGA,4BCjNA,SDiNA,qFCjNA,gDAGA,sCACA,qCACA,sDAIF,CAIE,kDAGA,CAPF,0CAOE,kBAEA,kDAEA,CAHA,eACA,CAFA,YACA,CADA,SAIA,mHAIE,CAGA,6CAFA,oCAeE,CAbF,yBACE,qBAEJ,CAGE,oBACA,CAEA,YAFA,2CACF,CACE,uBAEA,mFAEE,CALJ,oBACE,CAEA,UAEE,gCAGF,sDAEA,yCC7CJ,oCAGA,CD6CE,yXAQE,sCCrDJ,wCAGA,oCACE","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\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\np.admonition-title, p.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\n // Break words when they're too long\n span.pre\n overflow-wrap: anywhere\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 overflow-wrap: break-word\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