From d47df6e07f329f873e981c21b0b96de968a482a1 Mon Sep 17 00:00:00 2001 From: lwasser Date: Tue, 5 Mar 2024 15:59:16 +0000 Subject: [PATCH] deploy: da477d2ecaa43168fded4cd1985eb087ea0c92b7 --- .doctrees/environment.pickle | Bin 2256051 -> 2259868 bytes .doctrees/tutorials/add-readme.doctree | Bin 40689 -> 42669 bytes _sources/tutorials/add-readme.md.txt | 5 +++- searchindex.js | 2 +- tutorials/add-readme.html | 33 ++++++++++++++----------- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 72eca11c11762d62b0bf87ba7275b36c7fd39e88..cdf5b31f824aa541553f2ce142bf031c29460384 100644 GIT binary patch delta 118214 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

B%x27Vzoq1zA2GOFpKx28Kr>3-8|q9eZ)CQqy$ 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 XtXZSx^vQf;yV2{;j_W#F>&pHOyWkbr delta 116820 zcmcG1cYGAZ`>=aS?sAt2>6hD*MhQI$3B84c76<`C?+}VYkX}S70V|22dBC9bq7Wxi>AG9?4Z=q$;eqyx*Xqqel*NZfsmV zm^5zFx&RLt$ z4eO<{bdzGPFL8?6^zA280jJ}rWY5=+}OQbOpC zuOdrJ3C=04;+=_UHmMF>^05@-?A1akHM=li^ng*LM#Fv-7oPm8#$LdEtdZf2cQMNdMWn5BRgagvz1RsCj}pfa5oIDY2|UQsj)yXkfbSlf=T#`MI;nb#u2?8j@$q~}&i z8P157>E=ruEs-lJ04xs7e|OGkS=W4#7u5natPeED`p?e2!yyR(sW&7n(sy>QkFT>) zW;rwATw2Xf=)D*TR{HCN?#Pxzh2@3>8Kqxj`74vXe@ z+^)GX{O)&t7t8OsL388y9XDidX@2L!FJ<_J+c38*zi{j2mV?&)&2Qs5@UnAOo3K1? zyWEQW`7yt%#P7J}ax3$Tgo_XU;%U5zKM z{{oBkE#ryXpuloxz465DP+*yL&3NLrD6s5_o(o*KEekBI@{A{LodV19b;c97P=V$8 zA>-*v9z5>;(|F{TDzMDZD6rwyDzKdGXFPF>6<9tvYdmqQF=5i@0VcOxf#r=~jVErs z0!xiD??V~4V1eayZR3e&o&w9nzl^7gK6(7nbn*j0<%TV=NT&Jl#En~E8PZ?@JaGdT zSoZHUp16?dF)ZU zz8ng9g%C3MX?hXZ(v?sR`Oc;aqSV3{&}HI#8zNiDEk-ex>WTv<3>f&lFgSPJ9ec+-(Xh^{;#a zPdv5@EF(hK{dm?nsbdS1$=A8RW4e`FZ^rBjg(=P>9m~?h!KH&uh3V|RvNN@l!*?c& zIp?fSbxeM~&hI+?AYF1U?p#-T;QY07vgx9avs9NvE7v$@P|3Nmt9|ag*Z}9uE;dtP zJUs664`DoruX9nCTBbjJoX5LVckbv_-s#)Dnw1-X6V{<^DhAZ`naSd9b=OhO6(2=6uqD(mlr~RtL2xmdDWU#Nzy&%`FYJZ&pWA9mjawQYntm1f}}OsQV|F1H*%y=>2&iY zM~1#~h4i&Vk34kv>LWgqzJl98J#Cfrm5DT?dtW?>)n_)(6kG- zFujq@)WAwtlA-^cZYqqGu0V}z`k5k=rGMbwI@h!*fX1vfY5MV{ zri=i(eJQ)Gx7KvTM(=jFX6Ws=nkEdCo&a)WoXJ+qykY%K=g>+TmqvpV?&)3bxvWyx++ z)wvZVi~etSzpk~V-=Ug?v;CTdG8g6Asl3u}c?G)RpNI(kx9|OqTWP(s;VJsf6MjyU zal84H-#im7dc&TqPdw|l(gp2&!S8jmfk3YLIeh5wnGB)R4ZoLM(4s&50s{fzvn2B) zlTqH=$82_?QnPuD3p&bbzUI1}PRw7rZeI^FkMuXl;vMF5E@*Al{E4fE$kOJME@{e@ zGf#8fUMg?yWH!i#B$%5TP&%=R!=m3vGB+N9d~`S@wt11AF~7eR`<> zyvkGxVcPH7(0|0+bYv)lUf%1!r#*)z>n9x6;}YCbb{nHhs&#QqgUx5z)`m8E=>~JB zdOfV?0!_r1_NgD*nx1;iYNOGEtQLJjuC=4T2yZlm!IMW>yIG3iI>X;!rW>Mcezafx z&`kZ*6l)8M`x*G@dHL2W=3){9w0kDvVt_`^vyN-du=HDJtsnaEn>oK(+gfSI*?t*% z)tlD8!|Ag2HjTbtprq<~CR-VY^e1?>{*z)mX>vVK_7Jrt+U6Hg3}CKl(Nj}w{bFfZ z6QkeS%R=-6?QQS%be@}+p|99zo1Y~8O_yd{!}SgqY!iQC4?JLW->m^DA?#tJVola_ z_Xm^>cRf)1nSfCJ$I}6e1L$ubG3h?P7I48rGtc^^=-=N7_>&m7e?1P^SJSw?RfBYo zgxhx}WD)j1P@j-hYJCySYZ|1{%!&c6bZ5h$8)n)tGf30tHw{|uM=LjEx7{*>4mqV8 z;1a{m1|>eABd-Ny=$B6f_v%d-+zCk0U#S!F&pqh{$YNU)Lq8%cgX_$e9WCsJ8?}ob z)FgDa`{_|;=rQ+G4K=dbxK)`wTQ$j8sMs z4+^vCEAEDNlU?Oh4-5;@(*wg^=~0ZNGo-$j;_`7L!$RmcL&8eYGjE3Z>jfjiUQd=D zLVG%_2zxzHdT40=_l;q1I_T8%VVeH#fv`t*dj9vY^7{JoVaYZ+>;Qv4`aLWxmTn4S zS+olYU+pVdK|q?fG0LLX3ki4no2;&c`$skQ$Kq2jwOl)_pnyh4=)Vg z;!9ULtjVkP4KL<=W8K!NwzhD9;{}!>W%gAHza!PQn;pH*czS`ZeTSz z6h1*R7_i%DJ^1_Zl@_Du+Rx#CnWXFbxf9{t{S45Mv*8oW^y{sRhu`J!^^FZema+Wx zTNNX6`%Bj;!w%PnOphoayf8(tG(Tc7NR*=gyD*}?FJsttSwy15{!U&VQIGwl?76Z2 zWJN^Fsz5@|)m8lUH-Ct@;7d0sjK%xMBO*&bZHZ0){-1~|wcuH2Ei2c~pt`oy9;(-P z)85f$Q0o`Ww#adgEQ?Xe2nM(ISlpMYL8~AAZFYVDjlFe;An)xBxj2ZebsHRUTUC)XfonB1ZYi49Dlh}~* z)y0t^`j?9$tNSx?^!p!0HZt*>x~n6T1Eu@m%b#wE4D_W*Bf?TB%K#QSd|#wZ_uC%H zx~xA6LR0h$J0h=}pj>~lJMzBkw$k3n7aK`0=(Bts+fofg*6{>rrd}4k$^ZwmK>V0U zg~kkW)Rkgsw?U5nzP2)DVrkmEP&=JD*bzhzz8gvWY_=Ao%hRChibH=i#L-PM*=)3E zl;dk(o2^nTy*|#N`S6=}UUSq8vCYoi$HqxLXXpON{&e~OR*}AAkfW(Y+vGYz^o0`~ z)qTn(r6dV;7y4G?ptojEVRPZ!Uzjwx{gY_Uc}EA@a4KvZ zy)oHQ+SD(JZrsW|Y*dm&H*PV>mi9@~3%PBRXv-;%*T|UM-z+b@z^B*kljyHg9GMJq zhH>W*hEwZxM;_h$o1;D5z19{+XXqveZTN;GFt8J2k|{A1=><0GJpWa=LciY<8Kh5n z!!h1Ocg!)hqU|m^!szI?9aYKayv7q;=1-Go$PIf2JrXPtD!t?AOLSazr*1?9ee)g1 z1+pK5rM8ZEFNmFfKGiWq1W#ESnMEh(J1q8ZIX$RJs9?m!$VB>GzN0p|fGYr*mh=q` zh|F~pp2Zj-*^C0mholIDK{5d{t7&8$b-wFpME=EyaR=mdI<0K5l@7}YiJ+;4jyNQv zz+uWfha%Pj%}UrBWr-|VI*AS+;v253(;UB;h+GXR8>ESy$v*9R9fEzD@?%Ct8)5h;Pc9Xi8@%ay!0g}cm7Q{578eRH%Of5Qj zr;jZLE0xLlD|ZUudy?H{+Gv`;6h<#N9WNp6cw2D#Y)5_44Od+3Rep1e1nYOkNMOW{ za~xa9Knw<Y1{Hyzh8GD6aHqSLSiGKX6nhi!nH41mkq3q6u>n=q`M~!a#t4 zH+w?tbm)A?SP>B%^7cs|%)2wL9O5j0fnzlJ5`&*wDN07BhcMlR@xV}17dj4*BN)sL z6{Y^)l&2RlfiGZ6u8gQCPs%eGWy;y`G&*y%FK&~UPwG>#H17NGA;5^F%34-(T&>CcQ8i-2CzFDBL`OuFo1rtjLLb zZ&cOi%D@$>2Yl@4Dv`0cHi!^Uh@Ecz#1SeY=B!go)BB$|%8|D*J@{dwXVn5j=UPWc zkr%Jjj&as8`9B)YE43-P* z<_WRWgSw-QH=-RQB3<|0>S!WjLpN|XE;60`g=^#8fHP@BARWF<$o-fv-MEd7j06Z+ z4nt7g@t?C11ummtxm}+Nsup#@2U98A9W`j>?@fXHE}cZCpxiQL`?EEl9jS%WC)*t# zkcyZDVt8^}s~;)H!LII`KK_CY8fsxg$T~w52ObENOQDcEmVED*z}^7CdLPO)IVIQ= z@XzgZv_l>ut_uUkmenGF z!IjTNN8s@-u0W!9CfUMi)q{@3wB-So@Q&kZn2cFr?k;Pjq1qo)C?s)4^t(iEV1hd# zkzGyKQt0_N)t2BEjs2wOIH&whB_F_8%3jv{skgW!=gPO)Xsjz=6JE^+20nXyBLA#y{io>hfm z3zi17Kr0?~^dfaJ9eDb=qt7<#(I@r{z3C4QlSEo$Ldg6HzuOW>Ck*Bh5Ix>gZJ1J` z=P%o|5}5UA7?DHKbjIkg^3^?UDM$Tfe z;f3v^pGgN&?LF=2^DLhpM2nv?_RqB=^(>{bTI7(>7ZKx>0ojL(!uZ^q=NxOb1oh9?;t01QXnVz z%kAoZtoU$sy74#1R6D5J>~Aa>J!V3)MWOrEX`71<+1iQeCDY8*Lq}Y6L|8v&Y%_zI zj_8bwjz}9}ddZZzqUfFlj>N!sX6H8Hpg68EdTyDcd|3wSz=I%*6M-Lbtn=+e$ zmvQg_u1DH%QCvO3K!^=TC1+-ci(0O3a=<=gthYlDwno*A#(>K@5 zmsjb-OO9rwTMgD8Se@!n1FcRiz3k{jI^#0%VaF9VW*CCOEC3qQnY-CCV&YYn00#0h z=-mflEa*L8Y08Zta8IigZP#~Sb@)hR3MPbJRD@i2^!LWGV;m*|jLintplh$QX+AEa zcdoP4@eC=X1xkXR|GOhuGOegVcieEubnjwWqkr6RG$4z)T*Z9r-E{m#HepFY5lJsv zY+=A0I<{Cj=&;*N{DU6VzyhMN z)Z=c)w-^Z~0?9>=ff6}^;h;?sa@`S0Z{Klbc_Z2}B5L}Zf3V&Zml=~T3_;kH?s{Uw zcn21oo*{k6ixC-mvp*eniTKrItctx8<{SC<934m?2E($`LVsIX+U7680|jDOY!V@S zv8hiBwlv_D!-N?d-P*=*jPL}jllPbU)W7*4ArTWoUO#e{EfBdmSHTF3a|S9Cnbwpu zV;en&MsdG*G$^%FDdZ&>bMcWQHSB??+dl3{@c=RD#U>U`mGL~Ontx0$M>*$j*~L}&e0KYsx~mvkHJI1)S%uP2IJ+l zT3Ojn>zL%D|Bc2+Qf6I&w?e)K~6C^O8fY)ARi`mF&M1o39-{ph+IcRyhCK%!HB&13eE69`M5;ddNKEe*y;Qr zCcP&(-i{%xWyO6`O0e8S#D>vx@4Sd;b&mZ7=>`7J@Xdj^a#)sYTFizq1dHQJXu}Y> zhRB+$<5_}i50QKRckDi)@=O06J19)eHe~OBtlE z9)`XIB0d13!|VB*_2p4=Ux_$sGm(qaHMH9kVy9hWaznBbgF(<-lqeu43Y6_C z%eu%5JfLd5NF0d^F;^H-?ye$Z1WzHW>b9!#Rf&9y2|>!3M7a<79)m$j*W##KotRR; zmniS>UwxuM-f`F#?3cl6vw6 z(i?*f#%!4vsjLS^0FApAh}|yd&3Z)xxhZw@4GpC1t{oYRc|avecEPNpFak)wwxJLw zURCJ#8_I7=WEv*qoTJ8iYP0~OKm)u`MDA<~7B$L~i?`_yrO98Dm6$oyKkm7dkiw%I z%X^WA1*fbw!5&UY6FJt@s5VV#BEMVLt!JF;nZs_Y#h0FP_i_aTxAo;khyjNrb+4<1hZ10C#M;$Rc&{5TP@;)*VgN@Ft zy<_f9gOa~#Ayn+#65vO8DneEB@2*V+i z-}Mw{IYt5AMV+3*n&Tl)#ul>~vDD zTuwxUE`+i8IahwM}Kd!Oz0Y1S_OK08Lx&C_0vIUOwT%`~=YzW1`c z1bG_nnb{j3w$b*LA@XGM8CHP1*KIpgaDh!23sn31Q28Z^e1+kl4o`@kHW)5<@J6&_ zL?(Ih8qta2a^L@s{l*A6Tf_#n_54Jbt_#wq?U0k`Ya``3=n7O$cYR1ta=~3BL6L7gBp`Y3NuAf4}1&WgjeOq5=p_5jmVA00|`u{7mb&5 zB+?Y4d&KW*BYxBB(-E^&J2g*`Z__U)$*o9xOa!Zjpp@#Tnf1i$k-3omzyV5);HFIe$z57XDb!Nw8DX@t;#tl;|=Thjep5XSXMfFE7^mXH;6 zj0NM=vv0{?kZ&;oc8gvvd1LRg3`1j82z}Or#-(8@ie$7+WOdn-@dh zW9yNvFddBd-hNLWNZMmC45xN@HeaM15$&*Jh}&l=^H~+X<&E;8`pVo**K%0>XQFc_4x z$5S$qk}C&8N>UEJxg-EjGD=p>gL!^m!95CM8G+rW)BT_?FUfhGT*z{Tz0oN=WYYsBQS4-t1NN6FY8>wTNd=w#gj|6|(7FUbjxK}EWI##fC(JCH- zX3z~Qgd|cCBk;tpUs)k1NTe=?gI^8(NN@))Lb~K5IhSO3(JkpKBx-?dm+ z`qwMvxf1DtsUgbpS2L#lFc_ljII<3`SYS$h&>ER-N5LRt6Zg5Fgv8zzvxU&`V%rI$ z+}UBT<}A8YBgzX+Xw;(7YJ%Qrt-OV8FUI7c#Xh@)sdqj`U?S9-`>|?`&OG7SJfQ;E zGX7|ToK5q$`i0VSzNUDx0yBc%f^Qy=Si->`j(pM?aypDY-oVylH(@G}Z^i>(JWW~B z&~RYbNpAKvc9KI>!TjW;;mCq?ZkztJNgiV&hj1NW(^o!Y-O4cx2AiHmf`Uy2%8py) z`64gKH3ANUM6hq9ulm2iC@$ldo%?45+YIx$ETb?K+7F|r zk)N}bdQ&RO5-|MV9v6^KY#0o~|9~%qF_1tv=nFQB5+Kl;CvOQ01%d=@UbK(I<66KW z*r%X=wD(RSipyXu*ckWTPPwN|nazMFn#RN>jrRksh<#2j=znn;NaT(L{ax}8; zn@W!yU~dWpdT=LCh@Fl-DEAf-VF`e-@c)i2rV0ebB}=|z3ywkww^`UtPZbuorspAf zxJ2e-i9s4qh@HlL&$c@VV5oC`D&6=!^OF)wnjMkri6!7cSt3RKFo_|FDqa}b~^2t zj78d$N@2zH@G+(yx?{U+GqH`M%$Aw7;!koaJ@&IKBlds0*x&aQ=}#B?>Bl|UFFnq@ zz%3xtLE2lK{aABzapFak`fTAX3;KXWh`Bzpa< zToVb?6C)fx%jRJM1l;J%C80y>hDji;KK3++C=Fk>e&mUQb*L{nFIO;;0?e2vhw!J} zP}U2QksaP{WPF6t@}m3$nTH7=oID|RI{XsbYb1b|ZjSDVJffIm`OESLWE1AdL}*Nd zugIYYdtDrFTKw)`7W zF&zvs#uu?kL1_#=+EmSo4)KyiAdSBxcM+L^X#^YwvC|*!$X&e=?HJLmN;>KfxwVK5 zMj85Dz_Z)NH}7TLm77SUC2j?4Txq)NPqx;djls~k2(QKoq{Hs9)gS=^jq`-qY1m(^ zah~9KJBFafefk$mp}36BdL-ASt^Q`?_OVz-{y~;~6oMco)$Yr)Xv-#!1-{ePInUyZYvn<|@A;?5G z%*uEX8#2Ofi(myoV76wFs0aEhJ0(+{bYs!tqh@T&GCRYmF{#eQEZ!lJZBuSbq`8;m zo)9~oO_XjTBJ?oL(`j6wl3Q}g&Ol{Q$tB%NDV@atEAJg-}N;8s=weZwA=;RPV(Qjic zSOnP|qQtY0)-W8b?+LNfs$oi&H=-RQx@|+h3{#qj*pQD-71-m+dR!aNM={A>J}j^` zKJ&yN3f#V5Xs=H8cyfz=J~s+qtq9DxPnJOCr7b$xu8bllaD|ehd`T{12xP4D2!gb7 zHdg6GCpwgB^t;`W$@H8%^}ytEYIS4x|dk5RfVmK}4yV z(3vOvO3|6B;&63OwY^Lt)bLciXm3Psy$#Wn>m&))PGOZ`M=dRh-XaQ2cdEUuWYU0W zr8@F`fuv)!(ne$gxunle(Kw?EmB)Rh*!5~LN{U3f;MzeO9T7y-#&p9xi{k|IWFvfI z`1>U8*_MGc)~d9UZ8A-2Y^1TDZ#XpiS*n&!UgfNc(^% z?C5CYk`#A#gVfZ0c1Ya z*!YJ2!Fj(*Mz3C!pjgoqqp-0NzXI=)(r=n8zrNa-j`&uw)8mOsJdM3msuaDoFv_2v zNmS~hY}~MTVuj+?SP;xiQocYQDP&`wuJz<5i@yROw#W|R7u^iKDvj;J*P39O3LudQ^H zNN0hDk7qj|h}(B5sjDnCg5_*oAz0cXd?Q#=>j^E*!U%UBN2k$6B0@`y0LvrS>nWoo zG8Mxikl#WOQMOJrp`p^+5O7^XLBJ`9$PjSdEDKH~lQ04ZI3!hQfwzF$QkAn3*(MNj z$Pl%=p8B9$m4{@wK*Dz(dqV7Vc_$@Z1T)=s zL@tGSOLR#yGkXix(p-s7Uc=5GU)Nc|FBdSbk$c%G4N)|xi_-L2iiGiUUKeEoLg;|M zCWfOL2G(#L)xbvI^hgKm6*{)NQr5J-DV%oc!=db~h6+^ep~RVXH8sv^;7~ZLVO>)= zt08YE)5n>zwG0(e9156_(x);`K1lt zM&62F4)e!@{L+j+Hs%-Db`Cquzv4T;ck|2V{F0~h>pH%F>tlYA`IbsMzm(%|Z%Xsa zX1+IM1HV+{Z(QT~MdJlBzl8Hk2)`8ZN#{*|xzE?9?(xeN{&>Pp&5*f36&4x=QGiz7p8*L z`5^IBkTxGAMaNr!y&(3$UT`o0*y~$vzE-t)`{A=OFc^IC2nK^sifW2Th1lWterGMEl7%WJ9$&CnaJi&CZunDGv zg&{Be%2ZLm=9E?Q4a*)Tk<#Mx`$N%OSPUHJ1<4sqZ@(%=)oE!SF zqfL_i{7e^{Qud0F{hm*>=!p}9=2v|24WiL=8-v>sC5hT zp3EgIJgBvw(!^GU=`?dAj}cnwEu;1rPP&Z+3!U6gscpT>f+6!LQ#;+$PibI#$f6|k zA`ccibcft1l+|^eVPvsIU#|PYYK`YiQL2?6fa`jd*d4Az1MzN8E%^)MJ-?!ZAJbvYPbNeguR;3hhE zpt6Fr!E`XBpFBvJOuAt(jLAA92;&KJox06vqaAFaWOAB0l>bOoE$NZ*(+K>?X1lv? zp_0yn+3JP>fx|}J*sV}a#!I2eud|I9ZiE&HK_Bt55-5=w2t+~NLIe@z&4yXAOVlWH zaZ`#FH5CyWM`tzK$@V3=tA9&CU~m7NiGy)D77tzn(gnkq;kIHjcriJBR%9iz8-w|a zNxEUUVu^HDhw0eYvGJCu5?H0quvZ~Jl*kH6j#<&qM<@v*CwMEy&k#l=pJATxs&ny3 zc7&5#JnzIb~fCO%LR$~pP7BxvjlB8!Nyjy8TyR1!Ic>Dgl1B;szz-sW`s+e)@b3QORuB=sF-uvh{Pz|Y!2 z?dSyUpu<;6{xp^bSBVik;%SCwK5v+w244)XN{3$#_tn=;RX&wW5<6mv??9Zti0we+ zKO#c@XLBnxX3}hw)%W`05PBERmWR4hHgs*y)cml_4S`=rYzU;eZxv;P3Aa z&Qj|6kXE<`$oVOAl(wV;2J+F9)!tVsi439fMFAntZ2Zypm0e^yt_+p|-_3xfOV;TwdQ_?k z?KNMiO5VX(uv4q5r!-ivI$MCvGnqEIyl!Fv^E&?1GnD=GOck=0Gb?tzhl`YRCbApz zf9iT+ZtqGl++%HqF*)tAOzDh#FR=vYIkHTd`>Z?;e);ior5(B8QL)P}YZl8_?3ZUT z9?b2hu26dTkRl9+l)9*F5Z1Ur2vg=^tCZ=_5)94`AG2C1OJ7>eg4EVRjK~aH^dO2L zVhcuqaH+ONna+*}!Eg|ZA6)cY!j_*XibUcuA&fECtYw~B4THIt#3Uey+nnqUGEg<+ z&{O_Oqj;Q|xL)YEg^F6OXDLE}fb&*0v(1$5L@G2EOjv6Jdmq{bNn(t^;V>jOT}O-n zyRuU@DqEz%bjl*O^5?rrd6B%xQHou1>?Y;0iM)!bN^;4jhSR;+!f?rZpD8)WCDV;k zp>7zTOx?otIRi5X`?S#o^$2t@1^84~){y01bf<@CSVv1R0_==xS==txLP)U-F$%2h z_SvS?m&oTBKJ2nRj_&_lsZ74a;1S>2*$;efSJIeO`S15cWqNWKxHz{f6-B;AMjj~m zqK<2TaqA=z!CT^;UnuO$uuGT_@@K1^%G=~721EXg-KDfcjwH|-FVpP4Aqe3D<^Wo3 z<=IYenMUqbx=19TCDU{9$P+BPL1w4eEs}r{jZfrBnuOR zLWai*VJ#3JZ4qs!`@RuUw;1=|Dm#&~@Ic7;N_F&pr4Jd7D`mlJq;*>LfDmLuFcu{B z-UpNn6PbkJT;#cjo=rF6hTX2G98wyvcW$0^6b^KEn^vfBPl~3@{a*Qve1OS9Dzfh( zpFsiL$Iv6na)jWmfKEr1(_|~=$)dI|N=?0tJn$(-nev^z9{C1C{sYnZALAO(#dob1 zBJ$!JGWx`uY*D>DJ!vDZ0s5=<$CRoPIVZrUM3oo9h>fA_^w>|zDiO~Z;IQ+lkUGQ) zTpxJRI>(hi=z%@#T{l~#f#~SxDcL_*f~CJG8Hnj$xQvCY@##{u7Y|%HTPMr4gz4i? z@GTxnre{*v-7>_2<_PvozIsxNF8o}w#RzPkc1w%{bgcvUhZXwdlgc28Bw)Uf0PUxh zDx@X`Ljs(6T1bEb9c;-EA?SQ6w<}_?j8N0humN&AT$wx6`kWO)rVYk|=3v4N77M2fk8XR5Z)|Eg9^{o6&8E#taRnM3b>S4c6WT&eyD&LXyxE`2E zctY%S|0TAmz!MyA#}MW^#cO~~FDs2jY)}(FIUX%Iv_bVsG^a~YxL)_FVwY&WPo)rk z+fkwuem24hMhahCQ{u@9M8)3wvynp5cVT7d&J*E*wBdDyxW){$_jUGzQf^%x&7>o* zD-Y;o_Un~AKDj_)uEWjUScjPE7OH7>K{R)}5^pFUBG>TtRr#i}i1@Waap?9{IO*J7 zl}W(j=T(il#g;K-43-`+J;q@OtOuS=iNM)NAh~>-?aC4$ux`}3h)qLMFeg|ydZXB6 zOkxv6!Y~4C*>CoTvYd3lU?Z*ERmPGY7+gFr zZI0>_=pe0#5N24~C|StY*_bC6ac*rvgI*Hq?e8hIB{B)q84(yEEIg0L2-4p|J{Ott zZv(uvE%*TBt5bg~OUMGu6$VT1c-m`2>SOZr8yfZhZ=rH3HQ{ zkrzLA18ILLW(eBfnJ%4>K$ z)|H@%n7`O+=r;~kVY`lS?c969e(|)^l`P|p-*i>Q-TB2Vx>QvU5ver_M7JWX7|azJ z>iP`Xtw@RXk5Xer24HpmSu+|qJT?Rf^J2h6$l)hM&4?BxI|um2FIU>J+L)llYd`-) zt9984HCRX^cGwro$azzCG)@@iL+7ndQ*i%5_Hy!(22wSn2Rur==%8qn^^;jt*;UMaz=A>nRK zP&Xj^2?-aL64xfGg=Cx13Z8J`%aL%`?l`w{wqQh9IoOw^?w80n7!D(+?a3-T;}(Nq z`Sg^hya?|R$a|BnXZCn>e1K_qGF=~olhIH9ImZ` zg5+?X;WxF^732|?5cas1^=kA3j05`|y>b4=IB9hl=kPWt4{*+O*l@Pj)7_8|i~xH* z7uHoVg20mncFUM7?}~+X!Ea91t*0(0379#wtGrjc1XAcd2G&kM4{1jvg+NljnfjK<1hU4hW-Mzg!c5LLh{}p) zd%<0)xHxSH%wSR>Kp-?4oM4|JxIGHD!pP3`GSrXB=bp9E)E0uHZNUgVTd<*^0O3_d zH}Vots14kwQ%kj%Wcs0GTc*2giOKY8t<)CmFne4-gbHknepbV>)Q?f4y-k01A{~@-vD15;+!L6-s@m`#9y+49;6B!UF+ z&f`)$bt_2{s^Z)4+j$9J72`l^^2Vuzap1kj(hh9YPMTvl(>nI#Cb$f8)3i>4%mP!k zSU-RUcUG;)EJC9aJF8R3i~NMrh>vuY##IJkJ3CZdbFfQ-h7u%2?di+TYKfcmvH zHcg-FsB&VwXLna$BeOjTB6^lU;M#C9vxnL{lzfCqnCw~M?jEMM z%dwZWrTlOjS};sKM|4a8E}hWW>W|v+XE@BlX9ap#O%ovC+^>yN`;x1eBX{ob{$7$XrcXb^Dxr8; zTb(JPBKrv$%nL>YOLC&)i6t9_6^sZ5j%BkZcc?#UOUWy0C6OMYX2vT*>;6Rwe922p zu0X!WA#j|!o4wt|wYoJ}6@%e>fI(i2;!~L2V+k zfOpK7Ca7$!lgSRu6g2rcXtFO`f!(NB zlfz5oSnw7zf*=p5&l{Ju08XD;{kA$)A{TLGpu}Nb@}75Vgr1!$D67~({qxm95>>_; z?S85W@&vPo=&t&%z~Fwip7t&quDNLo+4myuKr*C_qA}CdQ$%Tp!VZKTHw1;yWv`cG>G%CqnGRz+9#GvC+8H0r2~0q%V@j%)Clu~A zwC60Li7c70<4qkBX@iAv>!=e3gUh_)#lB5D+SRGv5?Me#Su)$BGNbwXXRB=`G8D50 zg}v&1T`7ljIcUrVe#26=tw;|VSQrw6dsZeb%se+Q zSIbKJN6Xa)k}0q~EZCxf!8`7O0ZY4m=#~%F<0QU4ibRm@^N-ZBBmsk=A9>G9eevyS z=1R4C2`oNYsa7G4{u_&?tJGQ|3wQ6_4zmCsVJ}cyMr4&J%Y@aeQlU9qRpH*aW!ghm zQbI{=dv|YALU9xn^VATE{FJ*2@7hy7R>w+YA{N>0D{o>jq=wmE`kdIFzPgqrM}bAo zI<+~Oi>bjHB~nMMSLcY-paE}O!(YN_ibzV+jX&%Usc0^j|mfe)1bZ626L% zx>@kqy)NZ`;MKf6Sh?QCJD)1o7VceI9FHSDRUeWoSP0PZ`=2pCyoJG_;{{$qTxn11 zZc(p@EI>=%xGddI*I6i$pbjWTz&r16RXfqVm8kDouubiRoFb?LeY}muxIhY_d;85& zICMz|V_b9Ub3u*P4o^L?3}R~ru+cfq+%8ZQYiQec^*fS|C3b751qMULO5LIQqZiJc zuK3)W#WZh-x|lxNp_UT)fx4D>skT^vX*<=OBnQ_7>33O41pELt6PpaN8Cx})blw(4 z9SfrqXx?u1O|;U}(dCMG4yVWMQTIvYUC(;h`Gdm55YtfDbolO9>Q>XD4#r08UVGKf zHQAIw!=0@wNi9`)qqld$JkcX9GbR8i74lu zl&z9-7xsUFe+&jMkp-#P%*w6@e4}oY$R1oRR~wDm|Lo?#l&tN3bprX`lP+eXm%4GC zuE}JV18SCuoX5l-lgZ64flo6xWl4^ndqeTnD<4wXM-R6#8JKvBSDl=Ue@^`S_bNLF z?U5%1{o<(L!wek`K^H`In^suwdbBp7^5Z6%RdObd~G@h7zh zser-I&m^s9=b-JLXCrjo&uS&Kjv#P=^%McZVhg5Ssx7fFH~($s+|KdABk?w3yGyme$YmfQU5D9km2?Jl?tZu zGiO?C^wep==UZY<;PXLe*fJu;U>M+fLhQ8ES+%r?2nO2YWgwvrFwhrg)qBq}5Fng7 zr|v=s!UjP0?)ZK3B^HpymFq3WUa!h`Aw+%81@*i{jvx>PC;$4nWE75bO}wObm&h3} z+Haprt4mkZX%e~NMRwr1WDr+Wxu$L+j|Eb`e*B#m=>v=d2PdxETneuiV=WjtRllxo zewK#eWzqWI)lW(3PADIEIQwB&h(u!?aL;NO@?WS@opB01a+AHu6q)f&mf*EXw*;?M zaRuPD{cfork(L+?hCSk?DuEOhV86Ysb|bwoDXcOKEMl{RK^P3*1iXkK?w*a^!5gT} z^n3$$N@V^WwUTQcBKij}5rn#)F0hq=*d5gcBbgF#x?mjG-crbxA*^P&6P@{Eb5YxtFe z&?E4CHRn|=iL}FP-MzxEUhdEaBeK&{ddFf&3C5G?#x?f(G;oW_pQe5oX(2CT4lsz# z{Mc?IgD|*_Nn^jFhaoWj>Fc9qq15{-M&QXi`jnTv0$X-8OoZuZ3tG=ts~Ywl`-~$e zH`52kzb$3Cqp6xa;(x~RI-9n-l9Ef3f;9zue=OKlr5?Cu__vQ~3L#Np1NFC!6^5dVY!I znJb)MGP&d#{BoFI4)V)fe&J2e{hHtLcDoOJ;qA?bwoZk1=I4fW;b*Y$_T@v{@}XV% z(59)-p8VYHd92!eXh=RZA|D!%55nhz;Q1hQJ_yW80iVm64>Gb7WuRg%+fX_U! z%rPg|=|YZ#V* z&uYLDFr5KQz&>#vG2k<9*aWr}flXi+#~*FD{^5;07zL(rlelHz9qbo;{s@zG zunvsb!8$N>1nWRf2J1kufps7;aqHyrm>!dR*>yxw05ix_uMIRFl3bpB)i~SeI{VX; zX%1L$>H)boTp;6nyiE2(sM;YGS~)~3L)*S6DaHXY<+|_#V$$gRO_4#B`7%JE@5_UR z4w#*_S#l+cga#~8z+!-q7IuVal_DX+iw}|cl~v2u4Or~Z+XIw_{K%Ix%v71>c<9hJ z2jUzYWM-zwtjQyXet$47nuA_u(UDn~hY)SFS}D&#{Wz!*k0qM3fgL``KpQxy6Eh%v z5UN$Q?qm*?*^9*!trDiC*d(@XICC%$DmwJ1xG4KOv*)ytj5Akr>$CXEoWe~?@BbXv zg!BK51zP3;9&hx>FL9Olp)Vs@oMnYeJo4zBM717=-RCg2>xIQ2o!nTBSzRR-ml93vqSgpzu+KOioBDDWD5TN}H8p5911l^9ve?v$`2#(3 zUaeG~!CEuTWw9v$_l!dS*v=z!hR2Q>&asd364vD&>`cFn&~}r-%=*SqV?Y;lddyY3 z){_iGWjgycmP>5cI|8{rb!ET5LSExwSVwxbi#}i0WQn|oF=79vZ!reL1@q77!k7Be z!n_I!yBNQSuuRqL5?SrZiSBC0e!b;Y4hB9S8GI-|`2~TCxqK9*y)Kd6UR?M|EeL&w z!G)jCf}orU+sWxI<7-`vj*S0g44rsXi--b&;0q}qLoTd8{+fdQ9%!uAR+7#eF>|DR zcs)d9D}jh@*Kqyd@PX3Wd*n~AHf(rO%3^nG;tocD`IAysYfb#SA|u0YQhxpgqVvND zuosvgg@F)E7y%|Sx#hIJBnE?lF+UXp(P%S9^Ro$y zP-uwIHiey9;ufqso%IJ>Q-&XXTPGH|wDEI__9a=3xx<2BQS*=rWFrQ{@NrTgvC<_0 zqM+TE$ zF+Dr#zhyBhhuVMdU8#3;KSt((K&|+MuqshDhCz zGr_#GYCX0Kg?9*%lDZjr zZ9%%$8^u%A;&@`trOo{@qN-g8%cphImm6zcQGAOzkpGBpo33GO&7p}_m*jeg*x@H>tWuV!ZIlM>u zt-02bEXH66k2WJDE1i*{#UrNkG1kEhO(6n=*|#w*IvE~n}=ySrj&4IESAj)ZR!It&YF+aUG>-EIV-HN2;Ys`Y<5iXNS`M0bSIvhB5+A~v+?W;=G$k6UEHxnM$jsl7G|A$Ui}!VcO5 zQVq+?V%2qcKteV4yMAu&2^b5OZ&q~Fsz@Xi!=bgF5LbQ`!0s-f4W<{nfT%{EDi?TE z?4l)mS8vBSNQcY2u%QVq;|CMPKMT7~SFMJK4H{p2)AmfAzyPR9H?1X^gqs9zzr33^ zl)Qz(@X>2i&-RIw{AW!u1ht0cy;^ihZyyJ;(0I%rB6Mdd_7#uYgyS#*MCgY-w6EAp zSPTbw<9lf-^xIxqMY0)}x%WSA$KXAEwGOEB*xVhqiaO7IYNJnj3w`A$-D#U2!y`@X z@6uLwmBya%OSZ2@yigOT_tDP8xrP5wz$$)uzKzE8)V9%PeYH{qV^9z^=dgcuaupF$ zE-KQ9KvKD%R$gRcWR5EANGZ1*%P>38^1AziQ+R4Qfp+MxeNL=BSleKgwKx~n8=&GaMesxU;h}VM8b!8su(g0u~F} z=_Q2FPM*f;<6NOz^G<6?gLx7kjCn&^^Mu&x+?TafZ$vvrM6HM#qP-+ygYEc%Mv$MN3NzE7QwtGKI!(- z2-7EQlfXWL4Epdj?Fx!I@7}fi1g(%X#ZtL@*T*63TmZN7(=itGt_>$@?6-T{W4JL( zVB?185z^jy?C8rJOn0)LXX zhwI?7MY&Fhd3IG1`u;bxjwaJIuc`)=P!;H5{o7iUL>A(@ARIj*>?fn9YOjlk5Mbw` z+4tMe7Aah>lCSNSOq;z#8u<*7=)`xmvE(Z(5#+?!LM?$D#9;Web?qSbTaNDf1v(hp z3J^nNc036p5%domPzO!Z;(ScMd5Jv!St6^mv^U9JEF0VKSehQ1rIjNOF&IRK6Bpbf z3v{p-M}+WmF5sL5H;K2%fle*L#}wAf)5l!L8;Asa=5}Z<8%o9ZLUHeop5g2_%8-J} zU@Y*OWmF4eKe&tG;5D8QJGH*A#fyk=!b=YhZi4CA<^_Dh%bEAJ3P=QjvG#%XipZ0j zHR^rO9OorBjh@e@^}TSl5LgSIO9>;-;00_^VWcM|g+mbBb{U2dAg{wA2yTRzF#=zD z(>E;Cs!1dt!@=E4EoPJISs2WHXKq^|+61zli?tadBT&m?&&IutnL@wrg(8T_`t>2m z6oOV^9<*(#_Buikd@XyKb{~~_XYuLFwb|r5EYedyj9Tg``hJWDp15{}wpSv*VmO#| z`EyCZq=_rF%j6cOWIvQNi2Q>g&=>yI%jj(dT;}g~x@xsHMPvcC>+`FBSz_;vV~c-< zzq=GWF~jW(0=uF$S}lc(@K*L7|hisWz(Wn+CVgd5GZrjYwwD@Ky~s4tqK`|d1Y@9<`e=G zXsZa}*)n0HkiVK?cF@+3p4(O!$Odf^c!-|IH_E4NVyhs8V%{*M-@lnHYc9rMn2fIS ztWuyH_Ni7$Px zrOfTZXk<2Xi#A!rhBebpx>lbYMbB>YgdY_% zVw;vj9-{h;c`AHT=+npD779};*V!lTfD|ZU>>xnk$Q3uX;1MuvXuVyVXfm-+Quyg_ z(SQl#JlEkUn1H=RoMa2vd+gN8NF-4ZO`Ln^#*m|OAK0fjcei$kG{ETKCY}&GjoYKe zh=^dKxA(AD5p6L&L~0h@xK2x^Z55kL`Rs*8eI=|bH0WcPM5qU{%5ZAKQvfC=AJWGN zO?|qY%nShf(D|8zG-ln0TEm5(^`fPuNeMYSeS+{)<{#2^<6P2;3#RnnwMuAlTSKVsZPVFQ zx*Qor+g#Ub(6hg5fdr!&KEsa)Lz2jd4=me7xeg0+hr1vwJFzH{-oBxYA^(rE?+(nO zc>eYd2#{O|327u;3mpOp(rf4~1Oh0%gCLJIr6@H4q(rGw7LeY16@qlESWr+@l#T)_ zB25&j@9f+?&&}QizrUA19-hoI^Vyl%+1Yw~^{FH-G#$Jl_$-Ao;LLH>PGQGP0LI;g zm;NjQ&jNL%f;bjDe-mc*Jt+m6TMb~f`EWcVzWW>f>@Tzd~1Yj}w4-1Bu2h%!r zDvn(URzD$4%R4~$Jw$z3SwMAi1_<}vcF&`HD-J|Ov-662Ls?77Xp)-}&GZ6ln#hPI z-S|V;F%$~G0oFeSR7i{mXbI@z<>w01y&x)R$I4d))x5Iu6_s?w%2TVtKkuDguaLS- zlIO|Ry_h#5)rFFBmP+Eo78jz`e593sZu>thMr{`@DBxt5(J|^~ada7DYNvCA4rk2lsxWR!HL~p68A%fv^mtLtx6xn|RZ1z{0`VQQALVv@`$m|*=C^(irwSd%OifmYDgp&9E>%HIR9>Qt{}btp3TjIc ziTizCD7+}#Nm+v1@ebD0&#P;ciL@kCU}Hsix8U29jKLf4@q!@Qx{^9d1j8igmCB^Z zycRSs&sfT{qO$tFvYAp)%_&vX=E{4NjA|C~s40jxtqQ%0KtVOVQX42Ts_Eqs)U@u1 z_1Yr%9XI+9R8vn$^68gc3&3fb{rt8dfkTyqnkpQk{*|hPKENgGTa*kwcrn(gbSfe} z$5yCPtOx@QIhr-Bt=1CBh`yz^T1pA(OPW1LCm}`AS&KTrEl_xph^7=WdOT1E25s~= zd;nSV-;?WD;Bf|H^h8@VabY;9dNL1e_bF6)U9p$tr^FVs_K5<`WQiVOwn zt6KCI7EQw0O*mK|&$B!rff3#+lb4%)`4WZoS}B8?>i7x1VN}4I)$28s z%dyYetL>Dyen9rG0XQwDRz;y3ixIf^T;_ZS^>d{>C8MEkN;G@aQEebHVm@f%$p>XA z7!DNDj|$DC6lK79&)m*xLpG%|cruOtcDu8XFq;d%LEp!gbP@7_2#iBxuX=(D@Nuyd z8}h`man)iX*ubukg$L4NR&-U{Dn3rJo9v!$Y8go$*AKfN(nMR?ZE$oyUVlZ{pS{#H z$;Zr8HR_$d`PhK;n2vJ4ek`MhI#5~ZDPb8YVSYDQ>Y3J4{Z`)PDFq&I#I=y^w3KB+ zDG~_Tg`ViGrs+-=@!u##Jz(#VruR|bf>*jxyth79 z*7^zGsoce<4u}>k2~<(`d7pY%Qi{LqZV`NuG0Nm*af>kRC3bsDXe84Iswb3+R1DjK zn-a|$3{uOAjJz#G_Vu&{^JU9hw+5-fveJw~^XXUMqFcv&kiaf7WfiOyelbC})(T0o zf61;0YCF4~25)!1`>Hzk83_&E?FDZX-}RbGj{^wZE?$zeVkk@!hf*z_OfqPg(AI`f zE}ZAA7^d!3##1tS&rOMDTZV)81TtolK_2f3W$id8FDlm+~H^BlsW9^HcC0lmYYGk>YS2gj2eJ3@gGfu|s3k{DeWU z3w?KIta?g0L4mPkJ>%Iv#|j&ep>9+zQ8}l=24@Pw=P4I2R9eG2j8`*Q!g%#V&;DxX4NOCl|)9YH~;OjjsrYJv46Q}p8ljka{II~o>~z^ab^FHi7>n_>=7O75sjui zST7gf6g*IfGGM=xI7ywQBvUe~HO_-wj`AROk6)u`oqMs5Ojh4hnov2c(&JMEof=XG z1WuePFnEFAn5x!Lx=}d<<~QAv80$mmCG9dQ& z|A}3mHGEtBRhdRb(b*F`qFIy&;k`V9>b#BVY2Jtsf(hH%yVGH#cRj^N`)bV)d@jhr zW`A_{kQr)0y5ldjV9eK>W~v_$_j_~e&ROah=nW`|&=d z1PUGSKHIiXsC}Js@g;{jTek$W6U~Flz@;7eLaev+V6wwe_*}a`7R2xlCQ8X+%;C9% zsWB}W)N8=-4yFc_40kY@Z0ozwO}C|FY)NxGeiB6SVxqR)*!IP0DY<1g_S0gu9B~=d z)*6EF8;A6?*&b9ew)wzf-x75_fqIEvs(`l+!6g^3<}Z>W zS*Uv!>OB>8&O&{&P}eNfGYfT`iuz@tZgAgF{|sIXS1Jn?%0gYpok8ed434ur0Pu;6~|xLk$xfU|3?2V9fEdcaY2M_wZ)|G*l-WDhmc`8gl< z3|J+Yf_%I(u;K6;@$u&7zca|U5&m!jQMe=s8GG8-16lFQ!dFQNto$0aNes3g|BXH) z0R`r5;98hg>LvLtJmnx{Q=f;(Wrx?Oh4a^gxJ|7C;marSx&k7a&04G05ADPMJcfRq){G4~RV13-TMIyQ!KtaoA;wwd zb!uX88pLbreIDMdh@zI}H~9Pu0iKpyfdR@3BnWy|cfDFH_)`e_L1v)CT~=`D_6;H*|#^UaG>%&Au*iL4&1E1pyYampzsN8^mBv)zu|=PA0MlG zFlI2^MYlr@ex7CQQ1eFr!vS&5E%giJm2gyDbBE!3N0)Du?zAB^1$~)~xf#(b0BQs6qY;@>j-SB4|A`$}cw}Dhv=9 z;KUri=7{{>pZ?A#6OzVm_tWEnB+R1TH?fl%B^C+<@V`Q4k(?cQ&R zAi8(X#eGzR6TSARChH=jS{iD6;)0;@VgzYQYyf#Y`WNf2MZYVOC*{w_ z-ufI?dG=HEfQ26l)GwfOa2&LM0ITpNY{m(anB^CK3DeorRFpSc`MUvRv334&wS(PG z3&p$D18Cgv-(ErrCnbW`_=t%R1c6QtLfootR-rwdz16-})0JEUNwdSb3%()mIZpQX zjepkAi?EwtLoJ6>Ztmei34Si%$KLX}fjlaz@^?T*u(~H<>7ckg6OMLa0a0VEeMZCO+Of%%=AxSAs8|fUX!u?J3+n&z%Gc56GbtITTOs# z*BlMI+U1`(oQIO3e4Z-37J*~__ zthoc(wbQUu`V54v|0jgUKdO~NDT2g?tdR}Y?I*Roa)d%)oXt8C99$?TP452$hZQJ} zmFJ8gi8^hz9W=+!s3n#26dfz=kE6k*lq-~smX~r{e%=lm_@4(2d$KMlAE~i3R*e<% z$ep%hX7xEp;dus;Muf$G@j-BTMWJLYzO=jeJcF#5h5xbmuT&*ph!Zd}lP;*uh(1s( zhKffYa0i}gyLCZT2tNb~ALC?Kxu{0Mb=OoOp28T9ZKWis$#_*sRkL3+}{0_{ubPs!-3vTk4X9K^D(z?!mvfGc9g zRX7PWT0jUq;5q%X;F4@eme831($lNza1n_cG{2Ta?SZ)%w`XhtI40~=ir=1IzpC(_ zxFxjMK)0}lQqAi^x3FXoOZ#2z@0DctgS6+B?Ee-We_gF8ih>jEB>9;j%9CWG+lf$k zkBza0h=8WwP^syQEYp{~EMzJ$eZ}LLWX5i&E0o`9X^s+iC>d+AoLh5+=d8GN!Khh&fO9Kzzpp5JvkLRFZjXznj#hJ9=lG> z>f~tu%4WCLlUZhDRDO2&4)mz?1@-+`nyJZdC!|n5T;yJKS6#29Q*yv39ViujQtmO_ zYw850Ag14gNu)r*);i<|xRBHlp$cT{f2+GBWi%}Yha_(dw(jj&_f=$J|5WGe`+_%z z4Q7|`tFJ4=s4y0|e7=wfh79K2Z&j9gC|7U{EgkCH-&34$ zs0uM)4Q0Uhvz2_P!W)+MP&x!=XXOy3@R(%F9}812LFC|LwVVioStd*g8Ks;Mka(84 z@C24)9j^*V2~Xj$qd?*6uw{Re!35WYOdKh<#0C}!DJ=r!JTG~Lj}38JX%Q+31@r)4^X1nTY0p)p+13*YL*KUd?cuejj(%=_Jxw_R!XfG zh){c++k~<#&#P5c1PU6MJD*lf=}H;7fu;Tv%h{MwSoorRaXG-E-v+y3|A&h2<=1M9 zSki;I1f~aTrZWEj6AMSXg1PA1r$0o{iW7W`M?gD;Xe%Xo;SjbXQ|n5yY6B~)3Ie!0 zG(A+yB%wfahIPjKsj3CBw+mSJ^EX;?KQI&nv8M?W9~-=?%iPQObvujMK+I zeL_qNa(s0wdvrk!h5$cML9BSZapD3c^NLqnxr0cM>>B~|9D#y!#VZk78|5#G#S^oB zn@~vpw5ND55{nCN%F@q;)bX$N{CDBABei(3aH!IXdFRQ`@tfe;rD{?UcI1}Of1Dy3 zSo13Fw!mOPQ5`>D!LbDVoSZQy?YIRwyd=?DW*MGy*Evyw0VR$R>mi;_c7&^duZ2Mn=pOPp8 zo^R+Dr@gHVreriUI$o=!jG$!Rm#OyUaZbtvuZvjNSou|Zq-hPHsHh~rbdNBI zO2VCWUPFZn^G{sa*SCbMAOyupRhz4DqQ> zAC*LCek~t?&ZZ1#Hou^cFo?k1Y)?B9(gLQFq|OEMuz{wwML9+Bd6eN!!C6YhKCfFC zJVxx8BZ&QzptTl(u+I~Cu+JO#O#y|iFRC>Wxv{zn%o1u-&>7p-mST`*m zAHsE;4&&h0tZN*GRM4i$%3O-eRV`%SyeJ6Z;v^sEM+6ia6q-!;_T_O^8EdAXfA=r&~=BL!sQgbPfcxm>8Dtms4mJP2r z9!eTEy24F~W?Rd`{6-+-B{^Y3S!MJ=jQVE-5W3JI+v3hgvh#y-l<<|9bgI zzxhxmu1YrRX&P>(lw01IO!2TpVRr^t4l#EsArbM$}T4>F@jM0>l)WYyInEcV- zaG_Nl=XRc;5N`Q&ZmEq{_EUwh)!@YBLrTV0b0l5pQU$qPt+e(zAmIS|yBv|oT$v(C z%orG2ScJlCmfl(@eJ=&Y48B!l*i9MWDZC{1pf#kTzbP55#kJEXl#JG1s0bGjImu9v ztJqe1K}13oFSZp_yh|}r#X2tt41$V$B}<*~pLK>oboT{F_Qi%l{rh)W1LKiIN<||E z4uiX093up=^_BHB2s_+E8^ZqVuB9t$C^jS+ zy4lMtU#}R(j#h+2Lq~c*Z?lW?;~-*rPpyQqpOSG95!nldmyQj)hG7DoV=N0Uw8*VJ zlz?|w3z`OcCRVt&c0~D!mJsOS)g^AMA1EKjbDuui8Rb_>#_95;m%#kHl+1gH=v#zB zQeb*t&427iwJ&;gj1$1a`e{C~I422&4=1gPw;#NT_8CC9{4PNAIQ5n;Sd0zm@0Ybq zx%6;%+gV}Nr@)UM%IkwQzv@)CSAD{0RuI8iK+#vU50x}3f)md|17PC$A|>M@sxe5I zwFq(t2WT5bBr8h{6q-(RiivIO#9#rl31z^x)qjvyLm5HIsN#u1TB0(Jl5uXl(H%&l zB;5QjVxf{<#|TG?hEh~)s2)_Wn$w2BRAMQWL^b~z0-jt;$*ATgx0<3PS5u&1$asX_ zrMT$LA+HJU7S-gllMU{Ig_syWKQ=l$WT+M;DW6enOp{~Z5Nb*grvXJ&`9a7mmLVHuWNhP^f>JAUMTQYn9>)L5akw&;0t-8xC`k10~ zy)+LCwc0*zGiH=_NLC69@L~quZME2_5tbzb_XX!=lSgT5SwYGi}^j^vUTprI{T#x$)4S(5%DholM*ohGq7)3rm&HbFan;vY}VZ02O) z)J($}+Ii(5<;J??x5g1KZMFkp)lBVW!qsfFqV))i7O*oIsX08?*p@4sWrB*zL z5>sYICn_5WzIF5UIzkak9N^z){;$F|uhuGyg<&lU3IQdWRbB&rbdyU&Qwk~m`!z7P zp}$#E;v4_za7ZLk*{jxSVY%h=ud^MWYH9h`Lwg!K*SB#53*Mv^Apvp63J9UXVBH{^ zb=;(}X9Wa4GFo}F_J;C^c#YrRoxoab(`qWY-=M7vE?r`Sx4_*CPID3DaLHrVth~YO zE0OD8ijH9K-jgmIuAz4y8kTwZa-Yg|A4Z!R=v~$ORZoF2V0>r%5?Na)DT?%*yS9NzycG4JH?U zi=Gy3KR4!hKZ`PAlFq+h%aD{sl#b2MO^Ie_4`_u%MqcZz$UzvyZ=~`VKidup@gu+; zKd7C~0SVWf4*Y*1O*{-!TLBxNhmQSk!*R4#>4Mmk$VwFfn%}rk%>xY*Cl|s)jG3pjDM~}P z0Ny@B#zD44EbBXMgwjsn=9<^?z_%F*9kE)EJvHO#k<8rLN50oa!Oevf0+&Wk%nZrT z-anYHJUe_^t3ZnOAyPAPP%?LR`j1*&NtsAN__Lsqbv=6c6^}Th^-<;t0zBn@eMX~h zoNZ|xSwBY{?%=euT0MBxI0eGC>!w7r%jdLKA|q}HY#7PyxGDFgbG3z{zef&o)23ohJovXbqW>}40VmXdOT+JhsVikG$J z%I}nn+XdG~TH6J0{;VayK;u$>{dsn=hET;9SiN7gBJ-z)mS8D0g>Uk2&4xjKUf z_=b78GP_+WPZT>*DmD-M^%rgWe`ew%S0EFsqr?{3lwl@r>8Zmw%81Qn@l|b#q?D!f zK(|_vQZc{&*&6N|a9k*eNxx}rp8?b;M<6q2Ag6yenQ=`sS-0PzqJ^SxfpOvQ+G|RC zij1uY-^v1qc1!4K=^pz9ly%p&0U|DjNk*Iad}NuFy3D>bXW1XT_ZmivcBR2Kb{ZTq z%1VRF|J2}>UK6MU+Hmov)=7Dbl0_S$(q8n~Fkuw?@|O0Vh{iRK^zuUaxPmGe5yodoj^fv9+?jp%Q_WJ6|o-LIQ17S?SJ~0R-WCs zWF4K6?g^uu<5Uy8DPzk$q4WEkGT;*5zxQAievOjxIr+{W3x1(Ic;keZM}QCi2h!6M zDus73+&TjnT{%`hqztICe*b@{{K|b;*NYlW+A*r!)uVC*Yf50FsPxSX8!P}{3CrugW)ZjS`l2y%R#BKxC9+8#;idJknJrHbv54UzQx1XlpSQ;hr1rULU0I&m}J%?VbSa57tYOQ72qmg`-Xi zlP!hlp^~zlsu)NLdnt9i0=IfNx(E_~DEb>B1||c%PR0?TASpTmUFKGt|5#m0Sw(ouS{QjwDJ4(}|FT7u|_DE%8nprBe_snQe~L*C0%g7RP^ zT^pm1RbHTE)HOX;ucCCOWV{yrLag9=LGE#^{<4UKm(n<~(VD_>1=;kwaM6>);MJ~w z9K_-nDu>$r9;YWN6Db+B8yqiaC&*2Y*BgpR=*G7_&L2r((T!dnQBlksUSA7gf|;Xv zvM%M9*Nt)KjBzD&gXD}EcFqt0_;DOIqNF~T?b{q4&cFSp9Hgq^U}st>y_@neC1Y}h z7t2Jl7Nzy_WNdzLjP*pM0K$C|x!vQF_kq{{RESR1f+psg+HT_`>qs`fjJ}rCte9o^ zySUnv)prmE;UG@EgM}-w=85`T+(S7hf0A5-(!HmiuDnb|oeia-l#ClnLkNXri{-uam+e&-t*oa|0li~yJxMGN1KTV05-Eyd z#n3l#GU4BowzH_BA$ONDb29 z1n3Gr{WY;LwBnIZu;M#X2-bvF&f^!s5UUk>t5k?tOqu_@qK{Sz!A)j?(~D^B-U0d$ z1y*w$GFlr?C~j+K#mB|^7yjxF67(1FaXKhaF#eJ}775BiKh#@K^R_}UZ4B1eDJ_YP z)&*C%=vTpmpGq0IGqP6?(dSA^7fQ!wT=9R)vX5SaQH0MUTKWGVx?rgOP3;r>I9~sZ!A6xlDmz(&<7XBE>M*cC9|1g4o+~HH1oBX3c z-|O$oKko65JN#o3->00wKce{xXd(Xb9bY2(hJXCV#jf&?seGt4X)KQ>lc#)*e>CBL zHsl|Txke56M{WL513sKfFS*WHsBaePnuU61p^jOoUl!_?g?eS7PFbi=7V46PdSr1O zG60B|pM_;-VYyjYX4Y`udDtT7*V&?bu&U5K_@EKG2cI@Z_uwN+=pK9o1l@y^N^}pN z8AJErp$&8oZn+og!Tp1KLFgY`4nzOoEOrui5>BkpJvgvL_h5g4?!ge_?(tzXR^;C> z9YR=FLg%k$wq`_eV zh$5E0Pc!(9kf$Mz(qLN){KYn?2?p2e4=6Pa7VEB#Veie*6GPqxzoo$>9Q?;-C+c;1 zA;qAU(_m7@JvpriJ9#7|c79hqPf7TxIYb=qZ@Fuy1zgFN`vmS zK_<(bsaFoJ%m0R4StFAjo~d`2ZZLh8UM=HpE-O&DbA3Pak3+!7L+1#0b1&af{@-)M zhx`7doLxg)oN4*tHcZYc0qZ@=`g^FG6?U7ERUSS(!xv&lDk`um+|3(FU~f^_w<6uF zZ#b|%nW8Q$>}H)MTN>ob0Bvtl*az`0Ubsv&VAmtcxl?s>W;&eLDChUOi!;seTgA)& zm-03@UA(EA9MoSaXZPYR&a@9~t8xSAQ_6ZE(al;tmxWr2^X8$>y7s)Aw*!Y|quc@v{^<1OqMkYRYLuI|7KhDVH%CvDG8D=?bflX# zpY3t(@V}@A-;Z~*{!SeG4`uB!%gvgd$5J-$@C>-Zm-3$8@8+EqX7NUX26rgy<&WL0 zd4ep~e8Bn#Wu1J|&3e{WHiL)36UtlfvYWS+T?_ev^*QRU^eZmb)XSCvJe%aDoMZoX zai%S?T#%hUpVz`eszK}nH}i9(7V=Zv9S_~Ca7A#S;r~Wa4?p#=22e{3_x(s9;nRYK z^&d6>u1DtG(G7NTk)FV6FVfq}#&|wWNoKRw=>=G>&3aKbYrkGiE=S3^R|9#*yLtz? z1|{#_0pyvhjUd))v7RC~p}%P>;kP=U=yl~6D7oksAb)vWZ_lb^>BZQQt#BV?GKXoo z6c7ec)>oGR`PNdsx;&ba-&_miY0LEb@>EJ5v<=7)ddqNsbuJ@Fo=1P%x*dKybX#vD zuXM;2*rL61-F()1+BSz?fDK;(>^CLjdHDb(|FsjypGO%DllghV@fW&6v#J52UTWu*6Kl0Fq^$dPhm|t zbC-ceSt-UM?BpJ;yiPAI6|)Ex*8^ctm;8xr&UjsjO+G7-xI#`5K8})Y5OV;-r954E=(MWpDBCOZ|gse?^4JpGSlvoUe8%Yu6 z+4ek8;xvo;%DX^4xLGeDEwl)`cu1V6XeLT)Ey7n^ZkiHVF0WM!yDW15Wk7yqt6o7m zVi6+N0bzM_Gf6sb5sq`$EchV0j#c1K7IhI1-s^kdQaM!P8XLbH?3_8z)TO^Hjwl`o z>8s5I31&yz!JCIR0-;9VxcW>x1)3LN=1zT%6mR`_m3t*-mtJ2g#R+xTf?aw<#tmq@ zK4UzzH9p+)mE+&|aL!kQf8(PyUlaa~kHvg1@Naymf7??QZQ`8VD}_;&GcyaVtZ;oo?A z_Z{coc>4DJ#J}xj8YOf8%M;R|>ujpO$;r z;NF#Z zWV4Uxm06Q)y(BBK2@du7MI+d;Y`vV^!z0>tB9jJ~^`(jYIT(#2ygJCJGUty`sZ4tx z+U{ggg$Oq8eaNK~Jvf;GoE^&$4$jxtldFS5A4B+^GR!Kud|bT`%qr}!MS4|Mew$yt z!=_nG-tR%&3#uFfjNLXyR3*d4;3o2vF8$^xH@});yXUG0>1P}1qK!1_n2El+bjPT| zX00~zU?(6&vZDv}CT!LZen*GD>2`F1H>smLNfiSk5p4Q6GnlnH3fpGM9=URFvZHsP zHNF|}GS*Y-2YOMd9l<#EfnG{(>k&`SS^W5idRb{C5pVO6UO^t=5g!^5505nJL8@53 z4|EA(vp$AAk|`NZ;P75g+F>Ey3iW$*s|Rt@n+)DzUL|)aUZ<^#gBzE9s+W^a1SBI^ ziDUZn@^O#k=Z*)DmH@fX&-5nJEh4w|GrgsJ!;%YeLi~3&ha!P(KLEQOfPsGa9Q`1F3V)u`>q(m|x2(6^(zBu! zBUn$o*O%K*Vk@rcjal6qc6>-LASh{vttSz;pyW?|rC7V89^uGGu>D`_#U!}X1GFUa zLnhJiN@8CXO~}jUp3sZrnLi1R4zqv8OXY2}`IA`BIVNfo!5W+d{pYxCo<(e)4(xXO zM!iZvS79R^q9(#FyY%upenHE!vRZ^t|lSD&j~S zDnU*`M<(y`JMszg6GuEmN9gR)+eTY<;$dulw(Wa;kQ_6a=|AWlEK24NFnSRvEl;~C zMSgTsezz%tH)`*f8rj}RbCioeD>Fgi{6aULG;hBJc`f6tUS1wT z0rH;HE6W2t0KUnzo-4Ck=itRbv#8)J=V3*3x<~LWyW}a8#p)bzK~I!-QGh!a^dxz^ z2Vjc>fVBvkV4?<71dl*^4P(hSq}puOR$Y-VQ|Ky}^=|S75A<2bD*{wlNiz={@w47g z&NC%Y@ewTY7rlifvlVBA7Vy*oLH!^QFrx00i0XPA2KnIgOIsj+6uAn2)V6_N`3hQ9 z4L4@hDZEuy4fKw`6qifbwcW)L3}^SR=@q4pC`~d)J0xJ{klI?`G1dVUHLGONFxGDj zuyW~+-}Kkzxi)s)!FC>%W+N*J^BF`l-Z3`4u2+?JIdT!~$Lo3>X*;^zl#mhuRW1c-a;6o2~__p3!u0NIa zTwu1x0gsg82CqfHt8?%a)^7^w#`yHe)^wnyY5G){A^6-l{n*Jrb&cIRkS9J69q|X{ zvTR&yoD86mAR5kA+|#Q{S#J5sjvn$v(3ob}-GA$)q-}xH!&#MopkvzXhS(rN`11)S z>1togMQt;_AwVDB*OR5M-9TTuY~k@V?X+CM2Dn22YCOMlKZqv3ImVa|^-fY0 z3%>*PjjlNL5EfV>SUngwkopcof>qzYu}gpG)ff*+=}Z2-zQ;SgAH%J*4GC)E6MckK z&y8BgLG?gnJcZFuKL=u7E~A3f$Bod_L4Yx?qZho<7xV&tjGp>;t(1aseoF$NWft(P zd%88OlolfpX&wu++?{>VmbsE}4lf-FNJp>}xs009ez)}AtUwpgGYhKfNN%IFbe@Pc z$YYe0&bZAv?U*BfmnBAAlOUs~EWKsrSWrBIh2%B5OHbSw5C01zpV3Y(Mlt@$XS^Vp zOnM|VZw(37c#7zOL&4I)Mmf0&#n=uMsBITUy__*tluD?=_JkaWjN|`-aX!K*E&ok1dKNNDNq5~Cw?qu=J|W65+wSI7Zf9VKTR3r2GVeU;If>tD z8-7VIBF*OvDQtw2;7kVif)VtluZ9^-*x=BFVp3IRh8T3bTIp?f6DSvBw1PeqW%Pmx z5$yXI<3*U_xCGn29f*GP^@UhNg_(>a)~>LTAdNsVl4OQ*LVbD2+ktVH8E15Yrs)WN z7YFN03*F_-M@5|>z^-^`TnC6)r6Lfa@4L&}gXKxPkdFCG1|;rLu7i;7-!GNBlAUU= z6Wk7(QAhgKje7-gIR@4ecmr!Gos$7p1Pz0^+NdI(a$}r)Hb##!MqT-VE&ZSjtR4R2mi|kS#wr98Ff81TTbT$MxHMZ) z#^}g8mjh3fnC_lU6rFC(CP38hGwg#)Qe2H25mY30l?Yn7rvGNH|LC2@F3M-82fx+4J%0@HkPCzb# z&8T9ul5cwC{+KQf`Dax%O34v3tgaCXj9?MfjPg<#>j{n}Z9qYSHHyh^eaC?{;Gu!P zxg55ty3sD| z?}3>O+*Kp0JJf-dhFIUx*A<$RF+VQPub#n9HaC6J3OB@3W>z(XA#f6#m|~QXKbgU{ zr5Ii04`;B@x<*s}KQ1_&=mTT^ZFP;tu*B_B=b)pGyl+Mznqf9nh5d6sPfZq9A7%h| zXE3v`*?|qN4;Z)H7&o{+P9OAg1EZ{5Xr?7`qXD#tf~;OOq0T~)VAWZ$^&RW%2DpxA zYS2VT61_SHnRb$>Zv)GXA^WGefonOy)Eo@p&?XR2FWKTVn?Nk}LT)lX>^_q>PHPQA zdccM^HAcu|X5s<{{Mopf@MlbO;m=>~KQT}M$ZrV#z0@*Hde?F{*7$d)>;Y`4gsSZ3 z=%9+Y^CEu^qI}Kj;syUO_EWc-AEBD)aqL%yw=|l_zd3RdEV`A^Lb~eq&d!aP6Z-~~QK3VOILh@27`*%B|FjSq(qy>&X(mcl`K8d^0-l!@cr4Zvfz@Xxg z8)Cm3LbH}q^)j+HaQBxz^N+BZkE>w zwO&eZZS|Za5Wn?-(bQLN#l9el9V3cu3MeL|!_2-g6oy$qcYnP~{h+}-cB4LUP`Paa zM99lVJS@XI5ScF-A+RECN4RDIHQ;%4;<3$|cW|3cYPge6h*?mK}f zf)%VO&@rMbKq7**8Emwd4!RZDhl)tqoL*lBdDLS8|FagGP}{5-81dlt_Ol zbkAM-op;1B60C~^G2>}o-R|UK=2&@nTMDRCaj20jN6vANLBr<+29j199cI*FoBJD0 zVGO{#`(Z`{R>NmhCq`G8gTq#-JgYa((41k**Tao+Eb$e;XuAeSJW9T9l_-}7W%&*SD2;9_z%?+q$1t7-kA&ri%@ptNkw!&% zg9mS|%jk2X;DE%JRB+U2qnZ4fNAMHd^bcL8qa`;ffI8NQk^k@j{AOG7p=}9h;<5zy z6BdqxafQar(aNO z{3bMk=^n_pY)H5K`_=Lnw;Mdn%LA_YeUec@-tIx!Vp~_h_B1pW^z==usa>35U{iw$ zS3eklBV5>A|Gww19=IzmPnXJq?hlT)OoAE$xd^sC%SeR9@YxfD%$J)J>dVmY`Db|8 z%Kq4&zYe?g7Pz<^fk=PbXeyOK2-4h2&T~eSvXYy%o@NY}8_vVwB>y{Mx-lG<*m}~;Yhq~R`@@3;U%{IC&R%C5~12*!u+7?q{N?xGLO3*=c;cGDcA zh;*5V8FP)I(gkY@*zYp5;=w{D)%QVySQWlJzVoVA<}opu4XVz#ih z5;9+GZs+?2SF&?$1uA`o!IEQnlqOTmvYb#~E;V0lZn+j3!{isJ_=$zaNU613yk$Uq z#UVIn0Rnu;O5BP=wyp0%2AxRJk{83=DHG91RE?c4dUXD~!Btt(3fN9xMTIvmfx**q zw<=3e6=@M0zs$e32zc1Mz_>sljodz90&m~{83oLj5X1c$)6}>cH z?Bu?@99*1bY=@>31ZSn7^?_J8E4~u4Q!eJtkIyl&!a`O-V3#0r$psV2$VEMJ2D4J5 z$^v!eKQhu#YDVPCt$}5L#vb_wjy!f)pa<60V^`g)$stLWF>er1-#Vj~Jlq5Nngt3Y zwDfsauZO`KUq7Up-H_fTAn_ZFhVlXr$UK)vN;L~fvZePE=@lDc6@ITrdbe%YPRB2x zgMC~fscndV4emU=BDH8j5q7Ab7H&6?D~uVNVO0Tsg1bvJ{y(lNVD*8r3M(}^q#Qf3 z(Fl>xcnUu4Ef_X|2gwl&tVW9{>$k!JUf2S65GV_*$^@mcGQb5nRz~V}u(=)uJii?V z8+AN@HElpro6;bduRY!Y<@ccg^LN7fNly)=JQM;}5p{peBX`-Oo%1LOV7 zM-cCi9Ki@S{9{-``qv})w{6K?a4kP@^}VQ#e^Q7+qkn27OJ&*71CZJwW+K>zPmL;a zDd=n9mK4%~6<-vnZ9)Fe4N6gV;TZG}EeS}H%r$fCwSe;&T|xy-MW2`5gL} zK_2;676m+l%3nXJ_!mrO6X_aXLg_O+(r??PPhEs=kpT@8le>bnP$k69(MJeswXa}` zanOUh576u*p*T$2T_m&++jeX+ISUJgqn)q(OEOd3F znW159$js0n%eFQIq2wvUlv{ZaTD)sTOfy(MrRO!KWQUevt-b@}h7*u&-$B^D<^dV( zfS_@pR*uHa=%R$$#;qo(dwwtq%PTynOI^lITW%JSJ|c2Pq?wNeuQ21}qaNWywo3b5 zcHRFG27cEF$i$yuJ@FTh{3S;oO#)?dG)X&aM9R^N1L-`1O*?DE$%PiX1EAnyv8p#1~spP@yp@kp<kj&Gth+r6tV!PdtJX;1_Cpw-wAcs- zbHiZp&Nl`!ufecDS>mp{{7b~)cE?{~*{HlD6V5LG3Js&IN3hfqvC_Z%4P4QZ3by#& zC@-ga1e-3gD!tK?K&8W$W)N~xDVU$W8I~V za!QjxW8T?-=DgaaN`c~WOMT=6SR^`RtDgIzQ4P*zaW@gw_gY}v`O!+0rn@Mc7Zj|* z(jP$vx@3cFe*|;<^C&|`C1;k31A^6$jm9!8l0fxzU=5$ZcG?qnxeu*!)90EY);HWR z0U!+DO1524iD*}p#e$}M?pFi6qH(JJ8f9el}`fTOE^q9R~(2gTf23 z6xj@t`=D3{woEn+SoCv=bwh%+`_g$?ppjy0TAa&lB~P)%8|5}%ga;j5;^ReeVVw0w z9BwWYt^kaxL0)yM|hgJ83*TzENmdL}fbT`XW~tb3>#EmyH1a4eeGtrb;244hak z00>CDlB*z$h zsOL#IIBka@{=m5PLs&KDk( zV>zOj`RC=v18s1mZT#f|@TSEmvxt1#hFTH@P=9)$u3J#@N-&1!4KOMvf5gXtImQaB za(Bg;4J4I?7c%KlxVRN!lmFuT@Ph39STkI%Ys1?`ygW0aQnIO550NX{j>-7g7- z*hck7qvV3Nx9>Xb551pa{Vmn9+9+nXJBP@zp}>Qha?na^{8INL|KXurE8WfQxs|+1 zG*;`ipb+->2feBMTyFMmg87R zKUbnZWw#~W63wdYb<=Fhz=PrJ&qT8h``I+!-lh6fgo1cW2lp~_}+`JhL5pRHuJ%hW4X%vkAXBHzBMsmT{T^5>o*-|l!J z|1dphwbeAih6wgWHM2OZ7Tm5TNjoV#h>|4RgFg=G6Ed8 zIuMFDjcJ-<>hdZ_E`l9RfzABoZjF{$8WsG=43Sm`q7fCCVMZphn{}a^|AgYSs%KW0 zK6K+85pd8jPzmF4wDl8Y*Ob611OCXm{A4v7e;uwj;13x~50Q&lbbmF^ruMcC?%mC6 zXqK1NHC(6zQyZC;pp9N?AoPkcYXWY-jy_Lgvm{$w6EeY&-@$j28k^-=^;%|i(ic`m z3@bJ&tqHgQ#~3dzi7d+wG=U*P54+ferZ76|iXsF9CM2Lo00YejRk-==qZHTm*Zwg;^I` zr%Udj;~dz?}v5mV3w4>!3t1W zVHOo-*U67-*^v%rSN@aU5t0M^@6-UQyR;*y`?aUEFP+jzcW;;W)Ap!R>|!Tgqw9E` zSA*&{JDc5Ln>4dCWOSf9rQGjqHkNa(^VIV?aVT5!K~w_!T1^O&tF9xJJhUq`|4JU| z3hS&WDZkEI&VCMLcs_+X@~ex3jMUiZvbHPwQrOwuVII-j1KY!;)POe8$*j&TFmy7N z4(SOsKhYzdX)86>RtnJkO8FOoA*Iz}(|bo7cm;>No1$)e+sw~u^@dil(*wQDhIYqb z!#-w1`7}kj+y@49-+2JOc?Q6cQD%(%kOG8;B&hOz55PSK0Gk!$Bg|{>S{VX|(VMT3 zVRYd75xL@eUZGaXmy_4KBca^-KxTtp>_xc^vUgy~KC`&o%ER7beIVQ8B;nl8(f)Y=D`@(!cM?878QS%Bw0|>so{dm+Af$qKJP0$r2(UXfLf&hOy)(p& zVMF3#inGwcW{AAo1F+KzfL&I(_?X&uoSt#8n#iX;2;W%<5}ZTq;RUlW(@G>%lruK4 zTd$h~|(mu5N?VG3zY83Z4Ghk_koRk)A?FY_LK=ETuBTX7IkP zFt&g_9@$-%EDZ1*&zG}2UuL~E)czL6;DO;z;HDknw`ls@aco?Nu|G_yBy_9j+cYn&q#>Bn^(TS1TPG$LhQV1MjD9Js#z( z2Xq;Iq~Zhz`iV+X0_&M6M1zh5D;kIv*r<<8GfPTM2}Hf=FbizthNz!21O`R=3 z2m}VjcQYU;UUuWWB;sK6h9JY{4S`CUcV*UNmRSN0cR60VI15yR^E#q+aBLI^fmlaK zXf_D>>jtawrQa47Rq$S`Z!F{vci_0!*N8y^|I1B*z(+UzniU&m&%|#BfOGg1A#Wrjg7IhdE{nmFasKdv%L$ziQ#O=bfNtf*c?y;FPr#iaqRPW zP)n{vg%cJ*Td07-WPo0t6Y9%lH;Znq^DYc-+f(rYMnXPz;$5>mTqwg8AQ-K4#yGRs zjFd-FjHXM>cnMy+EQ$~Fh}ZiG(n#Z_W{SLoil1K!?SGM5oCU2!qt!@%6;@i~n zmlRHqgz*yJr`LcIvVcIZs3e_(u*A{F=)_9FgpgZvf%LB$|ixMENkh9VAl znvWs*p5L1$m)yc`k1>66u`TYN*4z>p=0J<8!p7c=^^aQ`Z(-(CcvvlFEsR?lcqHp? z;Q?Yj<5d=~`r6CyqkXXo+{|^5f9uG<9fohspTa-i5l-t=1+KFGUN2FqGym~3n*_H* z^A~5P##>i?zszrJ#LK<9Zoxyo1b$Eeesm7-WBl-A1Mood!zcW2_*nt?MLEE~>xW+) zfCrKvJ~0P)tRwIg22brRVuSo4xUm0eyy>>Dhi`=WZ8Zq!?B3^-d=QQqjmShvL*WUPjIgCj^XV7j%!2#D;Ipt4z8V5oG~2K;*q1i+6T z!0%m3o!$y_|3@g(i4EEY%TWJ%Wd635xN9o`7=9)EZ35??1$V$8u`E0y!~>A+Fe}NW zwz@;N_*Tmxw_7*tgeKn7maV_bY#^t4WSedcWH-!>)!&09!$G#px%bR;`4x}M%T{@C z!QzUKVA2YUV*O ze9H!`@Ow|l^s%c8`^W7++la62Gn>j6J&5OAei*bL{E%y#<@bmKW;#3`_3Cb+V|Z*^ z@j!G#%0cjY30v~?L9-q_6~!e}_?{V&=`C6AbGq&99HT5Std zAB0Oo_M}f-A-I1IVs^MK2T$7zTMrbioo8L zv!hd)eK8}hh#j5v9PtQt{Bu~_spAo^x!r1%)wYW^omv%_U@6guqO|=Irc6CODBTgS$GK)${vAZ-Gh61nXUbgq7IGoT;(Qch04}sV1zGxUkIr{p zF)-vi7^zoevya210p)Ig2gBiH7Jfo#-!Sb2f;Aj2vqP-^2j815;Vu*hV&xBJTbR$e zAkzN>;+xYj!+^J&2ejz%BP{=qa6=5u83IOsqxhpa0qLkSW)qmjxfFosTb^md)&}v# zts7_I@tgq8p|h~@e87$K{(s<aZzqX? zwl7+7(;fc5XGTV*9k$=X=fqAPR_|LgDJ+VL^|HkVSz=K+iS1@Jt1VtNeqmBQcN>rp`Z`xwB{!@up@0*RS7>xWGB1&dGzZYWgspv1vju6i7 zHjH`t<6mH0@$$|+&~_D+UNN$|hZbkCJch?n51GSU1=IjL$dBpsuc^3^2i zW4HJR0daI3^abd+!rQHGrNDJEu^4+D66kZg*wNemyXqbz9GS{K*eUiUu%oTZI*N2) zO>V&UD7?z!ico)rIibEBy-Q3VXI>~$m1V+4hFsqkhi!s-aBqc6yjDQm-*4coFV8I) zoV;X9URY}8WovH1rf4q|Ckl7pC3YL{-iD>INhmh~9*cJsmVt#yV~}oLkpuwfG0@+y z0EXJSyD+YL&sHGyFEb6Ehv#Ud?5#rCcI*CO7irycPmC;hD(}KQQw^w}c*n-{CHBe%_tEc_vK`IX*t4_qp|XN^3F>tXNsWjLXU zQo9~O?6&tvz3`qGqRSpb1{h_DRD1$a^SVc5m|f7T?};(m>M1NcEwMyTK84}IB9ADu zMB%}T9U%$z`I<*aLN#^~?zw_9L_)yymJ%w!1%jyhpAy{Q`I!gollKC_iW9dV<%H6( zUVtK9awR0ozj;Ki+N%EyR`bVDU_~Ma1#rFR>`?W2d)ybln>X?fY+{~-6ghUc+woDm z1A1Vr4-ZOco6A?z7D~*U&{3}D5vsh~s;%dDTjMMMaaTWr{hBYKw(PU9GV&+XmHTj4*E@yu$Si`v-28cpL9YO%XuRQU03HoK2~ z%2fWq1A2IOU{M8)z+K{BP^N>mL43(0a~>Q)$KCuvO*!`-UQP#=wF(X_OMBd&e_|{D zaCaaQtwT)V2^Hj$w(N)D5Iw~_vgRJE0^G8XD{KC}$>ugf??Qmk#Dmb#K|t4m1z3e= zc8j6>Br>6rJkrLR7L`y#9^t_nx<|BrRCGc^d7&*68S%O9B)red^%`1`!N*?Ve;mc29s`Yp z%Irb7phqh~4-72`4}WO+I|r=WJP8TS<$1PaHY6mpl-_YWW~PP454Fn>nM54TQsup9 zOSQ1W)Qp8=(TphXd!YAbRuJq^><3J z?=(a%z1IrCS4t<;lS}M%r=y~K#g3qRnS?rWGh61LGLX9)dt@5ywbD@Cy;eT}82*~Z znuk=1e;=P&9=4Z)Xmqz2&|I^Zwj_6_)tzj`Az0^hp< zp!}s9Ai&?a0oeR?8-T*!wE^Yw7j2{##J6mKGW-=AP>_^69{$gdZ`S}V_)CdW!|}Bm z@LxVwt$acQS*1G`Q;&u9hyzAL;{s6AiH z9?CyP@Q;!F;~oAnkAEzv!ulm86wTm{oaMU=3-&WX#`^1u@Yk=xUlP11%;C%}{FPVu z%Mku5D*RQ#|5pYUpW^=$|Ee$i)kyfOsqj~-@Yl|kmTJ5@XZgMm{`y7u>v7<(jQ`i# z)dod%USaMoumP7q0w$m_E@x2DR3Sw`FymKEi`Jpjm?(o`MzA7YkPn-Uj!Y%AHsp1- z(`}aI9h<3|+FEL6l9*@~Xwpto+r%by;`B#m@*^|t7-#C#CVphBr8a$@vwMM?>5q1% zf1c+(&->o@?w)(jJ^R6Oxb))Q)PZcg5_kXNv;OL{KK5Bxeb%Qw>vnWWqn}cH-r=)~ zrmO*+@XCeMQZ{UfyVrfz4WIQ7pT!HzQ}BYv^-51!yyR0Bule`xQ2sg#t|3k z$>fpyyt{=K(RvK}>QGlN`h(2QkS( z?8F0N8y*mo9K<9CF)BcsWHK>!sG3p$nzCnjqT|>_pb&OHJ80{@&G?0z@ z#HdS*dc;IK-a?m7ceazC>gV|$;^|w%ZsC}{QZ0paPIiq5c~K4Shx5m5Lyc_DUpVGu zAX?oA@u=PV#_a1g61l4yV#nj|=jX20NLiqM%of*TBiv*ksFn9;Xxpd3NJd8NeOpiw zEVl7ufg$_GGStYM!Ds8_P~fwmeXdS^5y;B4P4)5#dHr%Z4o+TOE~f*|M|Na|d=R)0 zOdeP%6HXwQnH*d#rve<*u9Z$Fq|Kf_jXwLMoLDYeo9^F-2YWr3T=`|ZjSOl3r?dU` z$V<5kL)rUNQ=?yz?M?t|=B|@pI?l!9hwG&YY-=}&z--8b2m2I%dK)FT(iwns*%-AT0XZsHAWB?KjR4(6DoXk$P@mI5muBx?+G72r^263dcspLq*jc2 zf_+Ve#@F#1x!<+Rjsfj^_Q3^J@xQ{-ZOv9vH$yt+@D2 zeHj_s|8wC^euu~Y*X6t1{qQn2Ja>&7P6UyQIOU=n+#_Al_n_Ho>ttQG=XT27k9@wa z>rwNn94t&1_oKMQwfakZxx23k!Sl*iz(^YapJU>rsltyA;rNG?_$UqqsNa?P+&&~L zUzyzu+F!Y{Hn(@m&g;a-XDB}#I;DKsm`ONDh!PqIUnM+D*iSe>s3BAm8VO~DdkI5?X2Ra_M}gZooK0vU6caWR z1_`BvuM>I*{e&vQZo(qM0>Vl_ye$^`MpyezHpg`f#*;t!rW|*&YC5VrmL|Uzl{MKj R#-DI9zB~NTaI|g7zX6k3z19E# diff --git a/.doctrees/tutorials/add-readme.doctree b/.doctrees/tutorials/add-readme.doctree index b03674822b73c40ecd3ac6783e4e8341e93ebbcb..32834049346eac5a9635389d76260a4ef09f76dc 100644 GIT binary patch delta 1473 zcmbVM%TE(w5Z~Pv+g&2Wpbgm9HUy>63N>0d;DdND1Z^QkB{78bWxlS^l6E&LD31fB z#wAc^O@J6G0FWmeCNW4f)3_c zZ<(s8s{1QXURF&^GYiK2x9qxs=3r>%0-pA{D5nt9ph7GIJH#NkumyvYHrfZ)jPHPk zY!=216y=^)ZY#~CN^ZhP6IlBP~nO?0-;J?Zci)`jEr$VE=G+NPl zCsH~+uyx7k+SJ;!3dc*Wkt4bQ0}@S9`9MaZYYXxqU4M_bF|`E!nRAs=L|HiPaO{s3 zNr*i_904he_iUGpVRX3%72y>_QL@>qV{y?5r*3%Om$Mm|i(EdaY#5xrV@LHt8-1!#m@qyA zz)@5hrj2zFS#+Mwp`~^#h2?$Mlc{JVDJ4YjNIW5lv9u!G!?3=PGVRwX@n4DWaf$EU zqKnCK@O$x?bpf3_60UF%SaO@(7#9w4FtIdd7kJgM;~~jxA~X^cZ;oPZR7G%eP`%t+ zt0C@4#HIQ$YiRkFSxdl&Bfq{Jp{qTZ-AiMPqH=O;KJ{Rnu?vl=b5jFWJVdjKB!!Rs E0i`179RL6T delta 389 zcmZ2`mg(bOCe{Ylsn6zZWUXstieulb*mjedQDJg?YcP=X?@D3eQdU-&e4yKqm5a-> zM18V#zt3j2J~c)zAU98;BqLQJdh+=UnaR5*En?x~(o&dQJ57ceL|aTZOow8GOu4X`GvH%znfyV_<9mwX2845X5Pn(m17dN``dS63)r~3&bbC zoiE3Z$_XH1H;4~?aiV~s+m|yOOx~fsFQ>Y diff --git a/_sources/tutorials/add-readme.md.txt b/_sources/tutorials/add-readme.md.txt index 944fdd94..9fda85d5 100644 --- a/_sources/tutorials/add-readme.md.txt +++ b/_sources/tutorials/add-readme.md.txt @@ -221,11 +221,14 @@ You can also add any links to tutorials in your documentation here. ## Community -Add information here about contributing to your package. Be sure to add links to your `CODE_OF_CONDUCT.md` file and your development guide. For now this section might be empty. You can go back and fill it in later. +Add information here about contributing to your package. Be sure to add links to your +`CODE_OF_CONDUCT.md` file and your development guide. For now this section might be +empty. You can go back and fill it in later. ## How to cite pyosPackage citation information here +```` ## Wrap up diff --git a/searchindex.js b/searchindex.js index cade9170..4c56c9a2 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["CONTRIBUTING", "documentation/hosting-tools/intro", "documentation/hosting-tools/myst-markdown-rst-doc-syntax", "documentation/hosting-tools/publish-documentation-online", "documentation/hosting-tools/sphinx-python-package-documentation-tools", "documentation/hosting-tools/website-hosting-optimizing-your-docs", "documentation/index", "documentation/repository-files/code-of-conduct-file", "documentation/repository-files/contributing-file", "documentation/repository-files/development-guide", "documentation/repository-files/intro", "documentation/repository-files/license-files", "documentation/repository-files/readme-file-best-practices", "documentation/write-user-documentation/create-package-tutorials", "documentation/write-user-documentation/document-your-code-api-docstrings", "documentation/write-user-documentation/get-started", "documentation/write-user-documentation/intro", "index", "package-structure-code/code-style-linting-format", "package-structure-code/complex-python-package-builds", "package-structure-code/declare-dependencies", "package-structure-code/intro", "package-structure-code/publish-python-package-pypi-conda", "package-structure-code/pyproject-toml-python-package-metadata", "package-structure-code/python-package-build-tools", "package-structure-code/python-package-distribution-files-sdist-wheel", "package-structure-code/python-package-structure", "package-structure-code/python-package-versions", "tests/index", "tests/run-tests", "tests/test-types", "tests/tests-ci", "tests/write-tests", "tutorials/1-installable-code", "tutorials/add-license-coc", "tutorials/add-readme", "tutorials/get-to-know-hatch", "tutorials/intro", "tutorials/publish-conda-forge", "tutorials/publish-pypi", "tutorials/pyproject-toml"], "filenames": ["CONTRIBUTING.md", "documentation/hosting-tools/intro.md", "documentation/hosting-tools/myst-markdown-rst-doc-syntax.md", "documentation/hosting-tools/publish-documentation-online.md", "documentation/hosting-tools/sphinx-python-package-documentation-tools.md", "documentation/hosting-tools/website-hosting-optimizing-your-docs.md", "documentation/index.md", "documentation/repository-files/code-of-conduct-file.md", "documentation/repository-files/contributing-file.md", "documentation/repository-files/development-guide.md", "documentation/repository-files/intro.md", "documentation/repository-files/license-files.md", "documentation/repository-files/readme-file-best-practices.md", "documentation/write-user-documentation/create-package-tutorials.md", "documentation/write-user-documentation/document-your-code-api-docstrings.md", "documentation/write-user-documentation/get-started.md", "documentation/write-user-documentation/intro.md", "index.md", "package-structure-code/code-style-linting-format.md", "package-structure-code/complex-python-package-builds.md", "package-structure-code/declare-dependencies.md", "package-structure-code/intro.md", "package-structure-code/publish-python-package-pypi-conda.md", "package-structure-code/pyproject-toml-python-package-metadata.md", "package-structure-code/python-package-build-tools.md", "package-structure-code/python-package-distribution-files-sdist-wheel.md", "package-structure-code/python-package-structure.md", "package-structure-code/python-package-versions.md", "tests/index.md", "tests/run-tests.md", "tests/test-types.md", "tests/tests-ci.md", "tests/write-tests.md", "tutorials/1-installable-code.md", "tutorials/add-license-coc.md", "tutorials/add-readme.md", "tutorials/get-to-know-hatch.md", "tutorials/intro.md", "tutorials/publish-conda-forge.md", "tutorials/publish-pypi.md", "tutorials/pyproject-toml.md"], "titles": ["Contributing Guide for the Python open source software packaging book", "Tools to Build and Host your Documentation", "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs", "How to publish your Python package documentation online", "Using Sphinx to Build Python Package Documentation", "Optimizing your documentation so search engines (and other users) find it", "Documentation for your Open Source Python Package", "The CODE_OF_CONDUCT file - Python Packaging", "Contributing File in your Python Open Source Package", "What the development guide for your Python package should contain", "Documentation Files That Should be in your Python Package Repository", "License files for scientific Python open source software", "README File Guidelines and Resources", "Create tutorials in your Python package documentation", "Document the code in your package\u2019s API using docstrings", "Create User Facing Documentation for your Python Package", "Writing user-facing documentation for your Python package", "pyOpenSci Python Package Guide", "Python Package Code Style, Format and Linters", "Complex Python package builds", "Python Package Dependencies", "Python package structure information", "Publishing Your Package In A Community Repository: PyPI or Anaconda Cloud", "Use a pyproject.toml file for your package configuration & metadata", "Python Packaging Tools", "Learn about Building a Python Package", "Python Package Structure for Scientific Python Projects", "Creating New Versions of Your Python Package", "Tests and data for your Python package", "Run Python package tests", "Test Types for Python packages", "Run tests with Continuous Integration", "Write tests for your Python package", "Make your Python code installable", "Add a LICENSE & CODE_OF_CONDUCT to your Python package", "Add a README file to your Python package", "Get to know hatch", "Python packaging 101", "Publish your Python package that is on PyPI to conda-forge", "Publish your Python package to PyPI", "Make your Python package PyPI ready - pyproject.toml"], "terms": {"i": [0, 1, 2, 4, 5, 7, 10, 12, 13, 15, 18, 19, 21, 24, 26, 27, 28, 30, 31, 36], "commun": [0, 4, 5, 6, 7, 10, 11, 15, 21, 24, 26, 33, 34, 37, 38, 40], "resourc": [0, 17, 19, 23, 37, 40], "we": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29, 30, 34, 35, 36, 37, 38, 39, 40], "welcom": [0, 4, 6, 8, 17, 33, 36, 37], "form": [0, 29, 30, 37], "issu": [0, 5, 6, 8, 15, 17, 18, 19, 24, 26, 29, 30, 32, 33, 35, 39, 40], "pull": [0, 3, 8, 9, 13, 18, 20, 22, 32, 34, 37], "request": [0, 3, 8, 9, 13, 18, 22, 24, 32, 37, 40], "If": [0, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "you": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 25, 26, 28, 30, 31, 32, 35, 36], "have": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40], "an": [0, 2, 5, 6, 9, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31, 32, 35, 38, 39, 40], "idea": [0, 17, 37], "someth": [0, 6, 20, 25, 32, 33, 35, 36, 37, 38, 39, 40], "should": [0, 6, 7, 11, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 28, 30, 31, 32, 33, 35, 36, 38, 39, 40], "includ": [0, 1, 3, 4, 6, 7, 8, 9, 12, 13, 14, 15, 17, 18, 20, 22, 24, 25, 27, 33, 34, 35, 36, 37, 38, 40], "pleas": [0, 6, 12, 19, 21, 36, 38], "here": [0, 4, 6, 7, 12, 15, 16, 17, 18, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "find": [0, 2, 6, 12, 14, 15, 17, 18, 22, 23, 24, 25, 27, 29, 35, 37, 38, 39, 40], "typo": 0, "feel": [0, 14], "free": [0, 3, 4, 5], "submit": [0, 5, 6, 8, 9, 11, 12, 18, 20, 21, 31, 37], "modifi": [0, 11, 13, 18, 27, 37, 38, 40], "text": [0, 2, 7, 9, 11, 13, 14, 27, 33, 34, 35, 36, 38], "directli": [0, 18, 20, 22, 23, 24, 25, 26, 33, 34, 37, 39], "Or": [0, 6, 15, 20, 22, 29, 35, 37], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40], "less": [0, 12, 13, 18, 24, 30, 32], "comfort": [0, 2, 7, 36], "want": [0, 2, 3, 4, 5, 7, 11, 12, 13, 14, 17, 18, 19, 20, 22, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40], "see": [0, 4, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 32, 33, 35, 36, 37, 38, 39, 40], "larger": [0, 26, 37], "chang": [0, 6, 9, 17, 18, 24, 26, 27, 31, 32, 37, 38], "content": [0, 5, 6, 12, 17, 25, 27, 33, 34, 35, 36, 37], "first": [0, 12, 18, 21, 23, 24, 25, 26, 35, 36, 37, 38, 39, 40], "most": [0, 1, 2, 4, 5, 21, 22, 23, 24, 25, 27, 29, 33, 34, 37, 38, 39, 40], "repositori": [0, 3, 6, 7, 8, 9, 11, 12, 17, 18, 20, 23, 24, 25, 26, 27, 31, 33, 34, 35, 37, 39, 40], "sphinx": [0, 1, 2, 14, 15, 16, 20, 23, 39], "engin": 0, "built": [0, 5, 18, 22, 23, 24, 25, 27, 29, 30, 33, 38, 39, 40], "us": [0, 1, 2, 3, 5, 6, 7, 9, 10, 15, 17, 19, 21, 22, 25, 28, 30, 31, 32, 33, 35, 36, 38], "theme": [0, 5, 23, 37, 39], "myst": [0, 1, 4, 15], "syntax": [0, 1, 4, 15, 18, 20, 23, 25, 29, 33, 40], "creat": [0, 3, 4, 7, 9, 11, 12, 14, 16, 18, 21, 22, 23, 24, 26, 29, 30, 31, 34, 36, 40], "each": [0, 5, 6, 7, 13, 14, 15, 18, 21, 23, 24, 25, 29, 30, 32, 34, 37, 38, 40], "page": [0, 4, 5, 12, 13, 14, 17, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "wish": [0, 3, 6, 9, 18, 19, 23, 24, 25, 29, 31, 33, 34, 38, 39, 40], "work": [0, 3, 9, 13, 14, 17, 18, 20, 22, 23, 24, 26, 27, 29, 30, 31, 32, 33, 35, 37, 39, 40], "need": [0, 2, 3, 6, 9, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40], "fork": 0, "clone": 0, "The": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 34, 38, 40], "easiest": [0, 21], "wai": [0, 1, 3, 12, 15, 18, 21, 23, 24, 25, 27, 29, 30, 32, 33, 35, 37, 39, 40], "nox": [0, 20, 24, 28, 31, 33, 37], "tool": [0, 2, 4, 5, 7, 11, 12, 13, 14, 15, 17, 19, 20, 21, 22, 23, 25, 26, 28, 33, 34, 35, 37, 38, 40], "quickli": [0, 3, 12, 13, 14, 15, 32, 40], "environ": [0, 3, 9, 13, 18, 22, 24, 25, 26, 30, 31, 36, 38, 40], "run": [0, 3, 4, 9, 17, 20, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 39, 40], "command": [0, 14, 18, 20, 23, 24, 27, 29, 30, 33, 36, 37, 38, 39], "within": [0, 12, 14, 15, 18, 20, 21, 22, 23, 26, 27, 29, 33, 34, 35, 37, 38, 40], "them": [0, 6, 12, 14, 18, 20, 23, 24, 30, 33, 35, 37, 38, 39, 40], "ensur": [0, 11, 13, 14, 17, 18, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40], "ha": [0, 2, 9, 11, 12, 13, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 38, 39, 40], "all": [0, 6, 10, 11, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39], "depend": [0, 6, 17, 18, 19, 25, 26, 27, 29, 31, 33, 37, 38, 39], "To": [0, 11, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "do": [0, 3, 5, 11, 12, 14, 15, 18, 22, 25, 27, 29, 30, 34, 36, 37, 38, 39, 40], "so": [0, 6, 12, 18, 20, 21, 22, 24, 25, 30, 33, 36, 37, 38, 39, 40], "follow": [0, 5, 9, 10, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 36, 38, 40], "step": [0, 14, 15, 19, 22, 25, 26, 27, 29, 30, 31, 37], "instal": [0, 6, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 31, 34, 40], "pip": [0, 18, 23, 24, 29, 31, 35, 36, 37, 38, 39, 40], "": [0, 2, 3, 4, 7, 8, 9, 11, 13, 15, 16, 18, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 40], "doc": [0, 11, 12, 14, 17, 23, 24, 26, 29, 33, 39], "folder": [0, 21, 26, 38], "specifi": [0, 9, 12, 13, 14, 15, 18, 20, 23, 24, 29, 31, 33, 34], "noxfil": [0, 29], "py": [0, 5, 13, 14, 18, 20, 26, 27, 29, 35, 36, 37, 38, 39], "configur": [0, 13, 18, 24, 25, 26, 27, 33, 40], "output": [0, 13, 14, 18, 25, 29, 37, 38], "_build": [0, 13], "html": [0, 2, 4, 13, 39], "live": [0, 9, 13, 17, 21, 22, 26, 29, 33, 37], "updat": [0, 6, 7, 9, 17, 18, 22, 23, 24, 33, 34, 35, 37, 38, 39], "when": [0, 1, 5, 9, 10, 12, 14, 15, 18, 20, 21, 22, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 38, 39], "file": [0, 2, 3, 4, 5, 6, 9, 13, 14, 15, 17, 18, 21, 22, 24, 26, 27, 29, 31, 37, 38], "common": [1, 4, 11, 12, 20, 21, 24, 25, 29, 33, 35, 40], "python": [1, 2, 12, 23, 31, 36], "ecosystem": [1, 2, 4, 11, 12, 14, 18, 20, 21, 22, 25, 26, 27, 29, 36, 38, 39, 40], "current": [1, 4, 5, 20, 21, 24, 25, 26, 27, 29, 33, 35, 38, 39, 40], "howev": [1, 2, 3, 4, 5, 6, 11, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 35, 36, 37, 38, 39, 40], "some": [1, 3, 5, 7, 9, 11, 12, 13, 14, 15, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37, 38, 40], "maintain": [1, 3, 7, 9, 11, 12, 14, 17, 18, 20, 21, 23, 24, 25, 26, 27, 31, 32, 34, 35, 36, 39], "like": [1, 5, 6, 8, 12, 13, 17, 18, 20, 22, 23, 24, 25, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "mkdoc": [1, 4], "It": [1, 2, 5, 6, 7, 8, 9, 12, 13, 14, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "up": [1, 6, 9, 12, 14, 20, 24, 26, 27, 28, 29, 30, 31, 35, 36, 37, 39], "platform": [1, 10, 20, 23, 25, 28, 34, 35, 37], "prefer": [1, 2, 4, 6, 13, 18, 24, 27, 33, 38, 40], "In": [1, 6, 7, 10, 12, 14, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "thi": [1, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 38, 39, 40], "section": [1, 10, 13, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 39, 40], "introduc": [1, 24, 30, 36, 37], "talk": [1, 11, 16, 20], "about": [1, 2, 6, 8, 13, 14, 15, 16, 18, 19, 20, 21, 22, 28, 29, 30, 31, 34, 35, 36, 37], "variou": [1, 21, 22, 28, 29, 31, 32, 37, 38, 40], "option": [1, 2, 3, 5, 11, 12, 17, 21, 22, 24, 27, 29, 35, 36], "can": [1, 2, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "write": [1, 2, 4, 6, 12, 13, 14, 17, 18, 24, 27, 28, 29, 30, 37], "rst": [1, 4, 13], "also": [1, 3, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40], "publish": [1, 12, 15, 17, 20, 21, 23, 24, 25, 27, 33, 34, 35, 36], "onlin": [1, 10, 11, 12, 22, 28, 29, 31, 35, 37], "might": [1, 2, 6, 7, 12, 14, 15, 16, 18, 20, 21, 22, 23, 26, 27, 29, 30, 32, 33, 35, 36, 37, 38, 40], "help": [1, 5, 6, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40], "optim": 1, "websit": [1, 2, 3, 4, 5, 6, 9, 11, 12, 15, 23, 25, 26, 33, 34, 38, 39, 40], "There": [2, 12, 13, 14, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, 37, 38, 39, 40], "three": [2, 6, 19, 20, 27, 28, 29, 34], "commonli": [2, 3, 6, 18, 24, 25, 26, 27, 29, 34, 38], "easi": [2, 13, 15, 23, 24, 25, 27, 35, 40], "learn": [2, 11, 17, 18, 20, 22, 26, 28, 29, 30, 31, 33, 36], "default": [2, 13, 18, 20, 22, 24, 26, 29, 31, 33, 36, 38, 39, 40], "jupyt": [2, 26, 35], "notebook": [2, 26, 35], "add": [2, 4, 5, 11, 12, 13, 14, 17, 18, 19, 21, 22, 24, 25, 26, 27, 29, 30, 31, 32, 37, 39], "allow": [2, 3, 5, 9, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "render": [2, 13, 40], "limit": [2, 22, 24, 25, 39], "For": [2, 13, 14, 18, 19, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37, 38, 39, 40], "instanc": [2, 14, 18, 19, 24, 25, 27, 29, 32, 33, 36], "refer": [2, 3, 11, 14, 15, 18, 20, 21, 24, 25, 27, 30, 32, 33, 34, 37, 38, 40], "color": 2, "call": [2, 8, 14, 18, 19, 20, 22, 23, 25, 27, 29, 33, 34, 37, 38, 39], "out": [2, 9, 11, 13, 18, 21, 22, 23, 24, 25, 26, 34, 35, 36, 37, 38, 39, 40], "block": [2, 18], "other": [2, 3, 4, 6, 7, 10, 11, 12, 18, 21, 22, 23, 24, 25, 26, 30, 32, 33, 34, 35, 38, 39, 40], "custom": [2, 3, 11, 19, 24, 36], "element": [2, 5, 10, 11, 13, 14, 16, 23, 28, 30, 33, 35, 38, 40], "either": [2, 11, 19, 20, 23, 24, 25, 29, 38], "restructur": 2, "nativ": [2, 4], "support": [2, 3, 4, 5, 6, 13, 14, 15, 17, 19, 21, 22, 23, 25, 26, 27, 29, 30, 33, 34, 36, 38, 39, 40], "wa": [2, 18, 20, 22, 23, 25, 27, 32, 38, 39, 40], "mani": [2, 3, 5, 7, 10, 11, 13, 15, 18, 19, 21, 22, 24, 25, 26, 27, 33, 35, 38, 40], "year": [2, 17, 20, 22, 23, 30, 40], "recent": [2, 20, 22, 23, 40], "risen": 2, "top": [2, 12, 13, 18, 33, 34, 39, 40], "favorit": [2, 33, 36, 38], "given": [2, 15, 26, 27, 32, 34], "flexibl": [2, 21, 24], "combin": [2, 13], "vanilla": 2, "nice": [2, 9, 13, 20, 23, 29, 40], "becaus": [2, 11, 14, 18, 20, 22, 23, 24, 25, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40], "offer": [2, 3, 5, 24, 29, 36, 37], "both": [2, 6, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40], "rich": 2, "function": [2, 4, 6, 13, 15, 16, 18, 19, 20, 24, 25, 26, 27, 28, 29, 32, 33, 37, 40], "simpl": [2, 6, 12, 14, 15, 18, 19, 21, 22, 23, 24, 26, 33, 39], "while": [2, 4, 5, 9, 11, 18, 22, 23, 24, 25, 26, 27, 31, 33, 35, 36, 37, 39, 40], "chose": [2, 5, 14, 18, 19, 20, 36, 40], "ani": [2, 8, 9, 11, 15, 18, 20, 22, 24, 25, 27, 29, 33, 36, 37, 38, 39, 40], "list": [2, 5, 6, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25, 29, 31, 33, 37, 38, 39, 40], "abov": [2, 9, 10, 12, 14, 15, 18, 20, 23, 24, 25, 26, 27, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40], "suggest": [2, 3, 6, 11, 14, 18, 19, 20, 23, 26, 27, 33, 34, 35, 38, 39, 40], "simpler": [2, 11, 19, 20, 27], "thu": [2, 12, 14, 20, 22, 24, 25, 26, 27, 32, 34, 37, 38, 39, 40], "easier": [2, 4, 11, 13, 14, 16, 22, 23, 24, 29, 32, 36, 37, 39, 40], "simplic": 2, "make": [2, 5, 9, 13, 14, 15, 16, 17, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 38, 39], "more": [2, 3, 5, 6, 11, 12, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 38], "peopl": [2, 5, 6, 7, 11, 15, 20, 22, 23, 26, 27, 31, 32, 34, 35, 37, 40], "contribut": [2, 6, 7, 9, 11, 14, 15, 17, 18, 20, 23, 25, 26, 31, 32, 35, 37], "core": [2, 5, 11, 14, 17, 18, 21, 22, 23, 24, 25, 30, 33, 34, 35, 37, 40], "packag": [2, 5, 31, 36], "readm": [2, 6, 8, 10, 15, 17, 23, 24, 25, 26, 33, 34, 38], "md": [2, 6, 7, 9, 13, 15, 23, 25, 26, 33, 34, 37, 40], "alreadi": [2, 24, 25, 26, 29, 33, 34, 35, 38, 39], "format": [2, 3, 9, 13, 17, 20, 21, 22, 27, 33, 37, 38, 39], "github": [2, 6, 10, 11, 12, 13, 15, 17, 18, 19, 22, 23, 27, 28, 29, 30, 32, 34, 35, 38, 39, 40], "wide": [2, 14, 17, 27, 39], "scientif": [2, 4, 12, 14, 18, 20, 21, 22, 24, 27, 29, 30, 37, 38, 40], "fenc": 2, "setup": [3, 9, 13, 18, 19, 20, 21, 24, 28, 29, 31, 33, 36, 38, 40], "host": [3, 20, 23, 26, 35, 38], "servic": [3, 20, 38], "two": [3, 13, 14, 15, 20, 22, 23, 25, 26, 32, 33, 38, 39, 40], "below": [3, 6, 10, 11, 12, 13, 14, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 31, 32, 33, 35, 36, 37, 38, 40], "yourself": [3, 7, 26, 37], "anoth": [3, 10, 12, 13, 14, 19, 20, 22, 24, 30, 36, 37, 38], "project": [3, 11, 12, 15, 18, 20, 21, 22, 24, 27, 28, 29, 32, 34, 35, 36, 38, 39], "fulli": [3, 24, 27, 40], "featur": [3, 9, 15, 18, 19, 20, 21, 26, 27, 29, 31, 32, 33, 37], "its": [3, 6, 14, 15, 18, 20, 23, 24, 25, 29, 30, 32, 33, 34, 35, 37, 40], "paid": 3, "tier": 3, "autom": [3, 18, 20, 27, 28, 33, 37, 38, 39], "build": [3, 6, 9, 12, 14, 17, 20, 21, 22, 26, 29, 31, 33, 34, 35, 37, 38, 40], "turn": [3, 19, 27, 39], "integr": [3, 9, 20, 22, 25, 28, 29, 38], "where": [3, 13, 15, 18, 21, 23, 24, 27, 29, 30, 32, 33, 38, 39, 40], "view": [3, 4, 6, 14, 17, 20, 23, 24, 33, 34, 39], "progress": 3, "success": 3, "failur": [3, 32], "version": [3, 6, 14, 17, 18, 20, 21, 22, 23, 24, 25, 26, 28, 31, 33, 34, 35, 38, 39], "which": [3, 4, 6, 7, 11, 12, 14, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 37, 38, 39, 40], "user": [3, 4, 7, 8, 9, 11, 12, 13, 14, 17, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40], "older": [3, 24, 40], "tag": [3, 5, 20, 23, 24, 33, 35, 38, 40], "thei": [3, 5, 6, 7, 9, 11, 12, 13, 15, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40], "download": [3, 13, 25, 37, 38, 39], "pdf": 3, "readthedoc": [3, 20], "yaml": [3, 18, 20, 22, 38, 40], "web": [3, 5, 24, 39], "local": [3, 9, 17, 20, 22, 24, 26, 27, 28, 29, 31, 34, 36, 37, 38, 39], "continu": [3, 9, 20, 22, 28, 29, 30, 32, 34, 38, 40], "push": [3, 22, 27, 31, 33, 37], "branch": [3, 31, 33, 34, 38], "great": [3, 12, 14, 20, 21, 24, 29, 35, 37, 39], "deploy": [3, 20], "bit": [3, 30, 36, 38], "deploi": 3, "account": [3, 38], "entir": [3, 5, 18, 25, 30, 37, 38, 39], "process": [3, 9, 11, 14, 17, 18, 20, 21, 22, 23, 25, 28, 29, 35, 37, 38, 39, 40], "don": [3, 6, 12, 14, 18, 20, 24, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "t": [3, 6, 12, 14, 18, 20, 22, 23, 24, 25, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40], "On": [4, 13, 20, 22, 25, 29, 39], "discuss": [4, 6, 9, 14, 15, 18, 19, 20, 22, 24, 25, 26, 27, 29, 34, 36, 39, 40], "your": [4, 7, 17, 19, 21, 25, 30, 31], "face": [4, 6, 14, 26, 37], "explor": [4, 13, 21, 36], "gain": [4, 17, 18, 39], "popular": [4, 5, 24, 29, 33, 36], "exampl": [4, 6, 10, 12, 13, 15, 22, 29, 30, 33, 35, 38, 39], "love": 4, "geopanda": [4, 14, 15, 20, 25, 29, 33], "land": [4, 12, 13, 23, 25, 34, 35, 38, 39, 40], "verd": [4, 8, 14], "code": [4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 36, 38, 39, 40], "our": [4, 6, 11, 17, 19, 20, 21, 23, 24, 25, 26, 30, 33, 34, 35, 36, 37, 38, 40], "A": [4, 6, 8, 9, 11, 13, 14, 15, 18, 21, 23, 24, 25, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "base": [4, 5, 6, 9, 13, 14, 18, 21, 23, 24, 29, 30, 31, 32, 33, 37, 38, 40], "upon": [4, 20, 21, 22, 24, 26, 27, 29, 37, 40], "set": [4, 5, 6, 9, 13, 17, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40], "templat": [4, 11, 35, 36], "serv": [4, 12, 24, 29, 30, 32, 40], "mean": [4, 11, 14, 20, 22, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 37, 38, 39], "modif": 4, "fly": 4, "written": [4, 15, 19, 20, 21, 22, 23, 24, 32, 37, 38, 40], "extend": [4, 18], "few": [4, 12, 18, 19, 21, 24, 25, 26, 32, 33, 35, 36, 37, 40], "appli": [4, 12, 14, 18, 27, 38], "quick": [4, 12, 15, 18, 24, 33, 35], "beauti": [4, 20], "automat": [4, 11, 18, 20, 25, 27, 29, 32, 37, 39], "class": [4, 13, 14, 15, 16, 30, 32, 35, 37], "api": [4, 13, 15, 16, 23, 27, 39], "from": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 35, 36, 37, 38, 40], "docstr": [4, 9, 15, 18, 33, 37], "autodoc": [4, 14, 16], "test": [4, 6, 9, 13, 14, 17, 20, 21, 22, 23, 24, 25, 27, 34, 35, 36, 37, 40], "doctest": 4, "parser": 4, "whatev": [4, 25, 29, 31], "pydata": [4, 5, 23], "book": [4, 5], "furo": 4, "interest": [5, 8, 17, 18, 37, 40], "mai": [5, 7, 9, 13, 14, 15, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 35, 37, 38, 39, 40], "extens": [5, 13, 14, 16, 17, 20, 21, 22, 23, 25, 27, 29, 36, 37, 38, 39], "compliant": 5, "european": 5, "gener": [5, 11, 14, 15, 17, 19, 20, 24, 25, 27, 28, 29, 34, 38, 40], "data": [5, 6, 13, 14, 20, 22, 24, 25, 30, 33, 34, 36, 37], "protect": [5, 7, 11, 34], "regul": 5, "gdpr": 5, "compon": [5, 19, 30, 34, 37], "one": [5, 8, 14, 18, 20, 21, 23, 24, 25, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40], "let": [5, 11, 12, 15, 18, 20, 23, 25, 29, 32, 33, 35, 36, 37, 38], "know": [5, 6, 12, 14, 17, 24, 27, 29, 34, 35, 38], "site": [5, 12, 19], "collect": [5, 12, 18, 30, 37], "consent": 5, "possibl": [5, 15, 18, 30, 40], "infrastructur": [5, 6, 18, 20, 28], "around": [5, 7, 12, 17, 18, 21, 22, 27, 37, 40], "close": [5, 18, 27, 32, 34, 39], "slowli": 5, "shift": [5, 23], "awai": 5, "open": [5, 17, 18, 19, 21, 22, 24, 26, 33, 34, 35, 37, 38, 39, 40], "plausibl": 5, "cloudflar": 5, "matomo": 5, "pyopensci": [5, 9, 11, 12, 18, 20, 22, 23, 25, 27, 30, 33, 34, 35, 36, 38, 39, 40], "look": [5, 10, 13, 18, 20, 21, 23, 24, 25, 29, 32, 35, 36, 38, 39, 40], "sourc": [5, 18, 21, 22, 27, 33, 34, 35, 37, 38, 39, 40], "develop": [5, 6, 8, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 33, 35, 37, 40], "doe": [5, 13, 18, 24, 25, 27, 30, 32, 38, 39, 40], "sphinxcontrib": 5, "gtagj": 5, "try": [5, 11, 12, 21, 22, 29, 33, 35, 36, 38, 39, 40], "move": [5, 10, 12, 20, 24, 26, 40], "complianc": 5, "privaci": 5, "still": [5, 6, 20, 24, 27, 32, 37], "import": [5, 6, 7, 12, 14, 18, 20, 21, 24, 25, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40], "And": [5, 11, 13, 14, 18, 20, 21, 22, 24, 25, 38, 39, 40], "xml": 5, "index": [5, 13, 25, 26, 36, 37], "over": [5, 12, 17, 24, 26, 32, 37, 38], "time": [5, 9, 12, 13, 14, 18, 19, 22, 23, 24, 26, 27, 30, 32, 34, 35, 36, 37, 38, 40], "visibl": [5, 34, 40], "lightweight": 5, "requir": [5, 6, 9, 11, 14, 18, 19, 22, 24, 25, 27, 29, 32, 33, 35, 37, 38, 39], "conf": [5, 13, 14], "url": [5, 33, 39], "metadata": [5, 17, 20, 21, 22, 24, 26, 27, 34, 36, 37, 38, 39], "protocol": [5, 21], "provid": [5, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 37, 38, 39, 40], "preview": [5, 34], "share": [5, 11, 21, 33, 37, 38], "social": 5, "media": 5, "twitter": 5, "mastodon": 5, "even": [5, 14, 18, 20, 24, 27, 31, 32, 40], "slack": 5, "discours": [5, 17, 19], "note": [6, 15, 19, 24, 25, 26, 29, 30, 33, 35, 37, 38, 39, 40], "those": [6, 13, 14, 15, 18, 20, 21, 22, 23, 24, 25, 26, 27, 32, 35, 37, 38, 40], "As": [6, 14, 18, 19, 23, 24, 25, 26, 27, 32, 33, 35, 37, 39, 40], "evolv": [6, 17, 21, 22, 32], "guid": [6, 8, 10, 14, 15, 19, 20, 23, 24, 26, 27, 29, 33, 34, 35, 37, 40], "peer": [6, 11, 17, 18, 21, 27, 35, 37], "focus": [6, 13, 18, 19, 22, 37], "itself": [6, 7, 12, 18, 21, 37], "qualiti": [6, 12, 14, 18, 37], "cours": [6, 36], "valuabl": [6, 9, 18, 33, 37], "how": [6, 7, 8, 9, 10, 15, 16, 21, 24, 27, 28, 29, 30, 31, 33, 35, 36, 39], "get": [6, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 26, 29, 33, 37, 38, 40], "task": [6, 14, 18, 20, 23, 24, 29, 30, 35, 37], "done": [6, 18, 19, 33, 34, 39], "understand": [6, 11, 14, 17, 18, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 37, 38, 40], "workflow": [6, 9, 14, 15, 17, 19, 20, 21, 25, 26, 27, 29, 30, 31, 35, 37], "won": [6, 18, 24, 26, 29, 32, 33, 35, 36], "further": [6, 14, 19, 35, 37], "explicitli": [6, 24], "target": [6, 35], "who": [6, 15, 16, 21, 22, 23, 25, 26, 35, 38, 39, 40], "new": [6, 9, 11, 13, 14, 18, 21, 22, 24, 26, 30, 31, 32, 34, 35, 37, 38, 39], "er": 6, "scienc": [6, 9, 17], "expert": [6, 15], "programm": [6, 14, 15], "But": [6, 24, 25, 27, 30, 37, 39], "background": [6, 12], "softwar": [6, 20, 22, 25, 30, 31, 32, 34, 35, 37, 40], "These": [6, 7, 13, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 33, 34, 37, 39, 40], "start": [6, 11, 12, 13, 14, 15, 17, 18, 21, 23, 24, 26, 29, 30, 33, 34, 36, 37, 38, 39], "inform": [6, 8, 9, 20, 23, 25, 26, 29, 33, 36, 37, 38, 39, 40], "cite": [6, 11, 12, 35], "give": [6, 18, 30, 32], "credit": [6, 33], "research": 6, "applic": [6, 12, 20, 30, 35, 36, 37, 39, 40], "licens": [6, 8, 10, 12, 17, 23, 25, 26, 33, 35, 36, 37, 38], "oper": [6, 13, 14, 18, 23, 24, 25, 27, 28, 31, 37, 40], "subset": 6, "experienc": 6, "engag": [6, 7, 35], "abl": [6, 23, 25, 27, 29, 31, 32, 37], "bug": [6, 7, 27, 32, 37, 40], "fix": [6, 7, 18, 24, 27, 31, 37], "just": [6, 9, 11, 19, 21, 24, 25, 26, 33, 35, 36, 39], "spell": [6, 40], "error": [6, 18, 23, 27, 30, 32, 33, 38, 40], "tutori": [6, 14, 15, 16, 22, 23, 26, 30, 33, 34, 35, 36, 38, 40], "thing": [6, 8, 9, 17, 18, 24, 25, 32, 33, 34, 35, 37, 38, 39, 40], "d": [6, 8, 12, 17, 18, 23, 24, 29, 30, 33, 36, 37], "guidelin": [6, 8, 9, 18, 27, 34, 40], "clarifi": [6, 17], "rememb": [6, 18, 20, 35, 37, 38, 39], "definit": [6, 14, 18], "broad": [6, 15, 20, 22, 33, 34, 37], "could": [6, 18, 19, 24, 25, 27, 29, 30, 32, 35, 37, 38, 39], "report": [6, 29, 37, 40], "cover": [6, 9, 11, 13, 16, 23, 29, 35, 38], "edg": 6, "case": [6, 9, 11, 13, 14, 15, 18, 19, 20, 23, 24, 25, 26, 27, 30, 33, 35, 37, 38, 39, 40], "discov": [6, 18, 24, 34], "structur": [6, 13, 14, 17, 18, 23, 24, 25, 32, 35, 37, 39, 40], "specif": [6, 9, 11, 14, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 35, 37, 38, 40], "found": [6, 8, 15, 18, 22, 23, 24, 26, 27, 33, 38, 40], "check": [6, 11, 13, 14, 21, 22, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "link": [6, 8, 9, 10, 13, 15, 23, 27, 29, 31, 33, 34, 35, 37, 38, 40], "consid": [6, 7, 9, 11, 12, 14, 15, 16, 20, 21, 22, 23, 24, 26, 27, 29, 30, 35, 40], "detail": [6, 15, 18, 22, 24, 26, 27, 34, 36, 38], "movingpanda": [6, 10, 12, 22], "major": [6, 24, 27], "code_of_conduct": [6, 25, 26, 35, 40], "txt": [6, 20, 23, 25, 26, 33], "screen": [6, 10, 12], "shot": [6, 10, 12], "taken": [6, 10, 12, 38, 39], "nov": [6, 10, 12], "23": [6, 10, 12, 33, 39], "2022": [6, 10, 12], "walk": [6, 16, 23, 33, 34, 37, 38], "through": [6, 11, 12, 16, 17, 23, 24, 25, 29, 33, 34, 35, 36, 37, 38, 39, 40], "best": [6, 16, 18, 21, 22, 23, 24, 26, 37], "practic": [6, 16, 21, 23, 25, 27, 29, 37, 38, 39], "alwai": [6, 18, 23, 26, 27, 33, 35, 40], "explicit": 6, "keep": [6, 7, 10, 14, 15, 20, 22, 24, 27, 35, 37], "compat": [6, 11, 24, 27, 40], "old": 6, "difficult": [6, 14, 19, 22, 24, 29], "good": [6, 14, 18, 21, 27, 29, 32, 37, 38, 40], "rule": [6, 7, 18, 40], "thumb": 6, "least": [6, 33, 40], "latest": [6, 31, 38, 39], "e": [6, 14, 18, 19, 20, 23, 24, 26, 29, 38, 39, 40], "g": [6, 18, 19, 24, 26, 29, 33, 38, 40], "3": [6, 12, 14, 18, 20, 21, 23, 24, 25, 26, 29, 31, 32, 34], "8": [6, 18, 24, 27, 33, 38, 39], "7": [6, 33], "6": [6, 14, 18, 21], "scipi": [7, 21, 26], "conduct": [7, 8, 10, 37, 38], "notic": [7, 10, 13, 14, 15, 18, 20, 23, 25, 26, 29, 33, 34, 36, 38, 39, 40], "theirs": 7, "document": [7, 9, 11, 17, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 35, 38, 40], "fatiando": [7, 8], "locat": [7, 8, 12, 18, 20, 26, 27, 29, 31, 33, 35, 38, 39], "root": [7, 8, 11, 12, 18, 26, 29, 31, 33, 34, 35, 40], "onc": [7, 11, 12, 18, 20, 22, 25, 31, 33, 34, 36, 37, 38, 39, 40], "question": [7, 8, 15, 17, 19, 22, 24, 37], "encount": [7, 22, 26], "challeng": [7, 29, 34, 40], "team": [7, 18, 22, 24, 27, 31, 35, 37, 38, 39], "order": [7, 9, 14, 18, 20, 22, 23, 25, 33, 35, 38, 39, 40], "healthi": [7, 37], "unhealthi": 7, "behavior": [7, 24, 30, 32, 34], "establish": [7, 34, 37], "what": [7, 13, 15, 17, 18, 24, 27, 30, 39], "expect": [7, 14, 20, 28, 29, 30, 31, 32, 33, 38], "term": [7, 11, 12, 15, 24, 25, 32, 35, 40], "contributor": [7, 9, 12, 13, 14, 17, 18, 20, 23, 24, 27, 28, 31, 32, 34, 35, 40], "interact": [7, 24, 33, 34, 37], "enforc": [7, 18, 27], "harm": 7, "neg": [7, 30, 34], "own": [7, 11, 24, 25, 29, 30, 37, 38, 40], "encourag": [7, 11, 17, 22, 24, 36, 40], "adopt": [7, 21, 24, 27, 34], "languag": [7, 11, 12, 15, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 37, 38, 40], "coven": [7, 34], "terra": 7, "geoscienc": 7, "pygmt": 8, "type": [8, 9, 13, 15, 16, 17, 18, 19, 20, 22, 24, 27, 28, 33, 34, 37, 38, 39, 40], "happen": [8, 27, 35], "someon": [8, 12, 13, 15, 20, 23, 26, 32, 35, 37, 38, 39], "ask": [8, 12, 15, 24, 34, 37, 39], "place": [8, 20, 21, 23, 24, 26, 33, 34, 35, 39, 40], "ideal": [9, 12, 13, 15, 20, 22, 24, 37, 39], "clearli": [9, 12, 35], "show": [9, 10, 12, 13, 14, 21, 24, 25, 28, 29, 30, 33, 34, 35, 39], "technic": [9, 11, 12, 15, 32, 35, 38, 40], "profici": 9, "suit": [9, 12, 13, 14, 18, 20, 21, 22, 23, 25, 29, 30, 31, 32, 36, 37, 38], "standard": [9, 18, 21, 22, 23, 24, 27, 34, 37, 40], "style": [9, 17, 21, 33, 36, 37], "approach": [9, 17, 20, 21, 24, 26, 27, 29, 40], "exist": [9, 21, 22, 26, 27, 30, 32, 33, 34, 39], "releas": [9, 17, 18, 22, 24, 25, 33, 35, 37, 38, 39, 40], "onboard": [9, 37], "inclin": 9, "thought": [9, 27], "mainten": [9, 12, 13, 26, 27, 32, 35, 37, 39], "futur": [9, 14, 19, 23, 24, 27, 32, 33, 37, 38, 39, 40], "well": [9, 10, 12, 13, 14, 15, 20, 21, 22, 24, 27, 30, 32], "skip": [9, 29, 34, 35, 40], "especi": [9, 14, 24, 26, 38], "strongli": [9, 20, 23, 24, 26, 39, 40], "recommend": [9, 17, 20, 24, 25, 26, 27, 29, 33, 34, 35, 36, 39, 40], "elig": 9, "review": [9, 10, 11, 12, 13, 17, 18, 20, 22, 27, 32, 33, 34, 35, 37, 38, 40], "opt": 9, "mozilla": 9, "lab": 9, "outlin": [9, 35], "minimum": [10, 21, 38, 40], "mention": [10, 12, 23, 24], "etc": [10, 18, 23, 33], "measur": [10, 12], "health": [10, 12], "evalu": [10, 12, 29], "avail": [10, 11, 12, 17, 18, 20, 21, 22, 24, 27, 36, 37, 38, 39], "among": 10, "level": [10, 12, 13, 14, 15, 19, 20, 21, 26, 27, 30, 33, 37], "repo": [10, 15, 17, 18, 19, 24, 27, 33, 36, 37, 38], "snyk": [10, 12], "known": [10, 18, 22, 25, 30, 32, 38], "compani": [10, 38], "tab": [10, 24, 34], "similar": [10, 12, 14, 18, 24, 25, 33, 34, 38, 39, 40], "screenshot": [10, 25], "panda": [10, 12, 20, 25, 26, 32, 33, 37, 39, 40], "lesson": [11, 32, 34, 35, 36, 37, 38, 39, 40], "gitlab": [11, 33, 34, 35, 40], "contain": [11, 14, 20, 22, 23, 25, 26, 27, 29, 33, 34, 37, 39, 40], "legal": [11, 34, 35, 37, 40], "bind": 11, "describ": [11, 14, 15, 21, 23, 25, 27, 33, 35, 40], "whether": [11, 18, 20, 23, 26, 35, 37], "adapt": [11, 25, 32], "purpos": [11, 25, 30], "read": [11, 12, 14, 15, 16, 18, 23, 24, 25, 26, 34, 37, 40], "critic": [11, 24, 34, 35], "reason": [11, 14, 20, 21, 25, 26, 27], "select": [11, 18, 19, 21, 24, 34, 36, 39, 40], "choosealicens": [11, 34, 36], "com": [11, 18, 20, 23, 30, 33, 34, 35, 36, 38, 40], "avoid": [11, 12, 18, 20, 22, 35], "unless": [11, 31, 40], "guidanc": [11, 17, 21], "council": 11, "initi": [11, 14, 18, 37, 38, 40], "osi": [11, 23, 25, 37, 40], "approv": [11, 22, 23, 25, 37, 38, 40], "copi": [11, 33, 34, 35, 38, 39], "excel": [11, 19, 24, 27], "overview": [11, 19, 20, 21, 23, 24, 26, 27, 29, 35, 38, 40], "kei": [11, 23, 33, 40], "complementari": [11, 12, 30], "highlight": [11, 12, 24, 30], "bsd": [11, 23, 34, 36, 38], "2": [11, 12, 13, 14, 20, 21, 23, 24, 25, 32, 34], "claus": [11, 34, 38], "mit": [11, 25, 33, 34, 36, 38, 40], "psf": [11, 18], "incompat": [11, 27], "gpl": 11, "apach": [11, 40], "attribut": [11, 13, 14, 15, 16, 25, 27, 30, 32], "prohibit": 11, "commerci": 11, "coordin": [11, 14, 18], "unsur": [11, 34], "tend": [11, 26], "everi": [11, 14, 17, 18, 22, 23, 31, 33, 34, 37, 38, 39], "differ": [11, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 40], "borrow": 11, "compli": 11, "stackoverflow": 11, "stack": 11, "overflow": 11, "creativ": 11, "alik": 11, "sharealik": 11, "same": [11, 18, 22, 23, 24, 25, 26, 27, 30, 32, 33, 37, 38, 39, 40], "violat": 11, "proce": 11, "caution": [11, 24], "strong": 11, "paper": 11, "blog": [11, 23, 34, 37], "public": [11, 17, 22, 23, 33, 37, 40], "tell": [11, 18, 23, 24, 25, 32, 33, 35, 38, 39, 40], "cff": 11, "topic": [11, 23, 25, 33, 40], "doi": [11, 12, 35], "zenodo": [11, 26, 35], "often": [12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 33, 35, 37, 40], "befor": [12, 14, 18, 21, 26, 30, 32, 35, 36, 38, 39], "appear": [12, 23], "pypi": [12, 17, 20, 21, 23, 24, 26, 27, 29, 33, 34, 35, 36], "anaconda": [12, 26, 38], "pandera": [12, 37], "spend": [12, 30, 38], "front": [12, 19, 21, 26, 27, 39], "high": [12, 14, 15, 18, 19, 37], "editor": [12, 18, 21, 29, 33, 36, 37, 38], "chief": 12, "revis": 12, "begin": [12, 13, 17, 18, 21, 24, 30, 35, 36, 37, 38], "meet": [12, 21], "criteria": 12, "go": [12, 24, 29, 33, 34, 35, 37, 39], "checklist": [12, 30], "explan": [12, 14, 18, 33], "4": [12, 14, 15, 18, 21, 25, 29, 32], "sentenc": [12, 14, 18], "context": [12, 14], "fit": [12, 21, 30, 32, 39], "broader": [12, 15, 17, 24, 37], "librari": [12, 15, 18, 20, 29, 36, 38, 39], "wrap": [12, 21, 22, 24, 35], "associ": [12, 20, 23, 24, 27, 33, 35, 37, 38, 39, 40], "hint": 12, "wrapper": 12, "probabl": 12, "doesn": [12, 18, 22, 24, 25, 33, 34, 37, 38, 39], "ve": [12, 20, 24, 34, 36, 37, 38, 40], "bottom": [12, 13, 23, 33, 38], "self": [12, 14, 27, 29, 32, 37], "explanatori": 12, "better": [12, 17, 23, 24, 27, 37, 40], "draw": 12, "attent": 12, "assur": [12, 14], "design": [12, 14, 29, 35, 37, 40], "properli": [12, 14, 20, 23, 25, 30, 31, 32, 38, 40], "ad": [12, 13, 15, 16, 17, 18, 22, 23, 24, 26, 32, 33, 34, 35, 40], "statu": [12, 23, 25, 33, 40], "fail": [12, 26, 31, 32, 38], "toward": [12, 33], "brows": [12, 40], "cloud": [12, 26, 31, 37, 38], "pass": [12, 14, 18, 29, 30, 38], "accept": [12, 21, 33, 35, 37, 38, 40], "been": [12, 18, 23, 24, 25, 26, 27, 32, 33, 35, 38], "bewar": [12, 24], "overus": 12, "overload": 12, "potenti": [12, 13, 18, 24, 26, 27, 28, 31, 37], "At": [12, 32, 33, 35, 37, 38, 39, 40], "1": [12, 13, 14, 18, 20, 21, 23, 24, 25, 29, 32, 34, 37], "state": [12, 15, 24, 35], "goal": [12, 15, 21, 30, 37, 39, 40], "varieti": 12, "vari": 12, "school": [12, 15], "equival": [12, 18, 27], "appropri": 12, "maxim": 12, "access": [12, 15, 22, 25, 26, 27, 29, 33, 35, 37, 39], "sure": [12, 14, 18, 26, 30, 32, 34, 35, 36, 37, 38, 39, 40], "authent": [12, 35], "token": [12, 35], "complex": [12, 14, 18, 21, 22, 24, 25, 26, 31, 36, 38], "rather": [12, 13, 15, 18, 20, 23, 24, 26, 27, 29, 33, 36, 37, 38, 39], "than": [12, 13, 18, 19, 20, 23, 24, 26, 29, 32, 33, 36, 38, 39, 40], "complic": 12, "sever": [12, 14, 15, 18, 22, 23, 24, 25, 34, 36, 37], "overwhelm": 12, "plenti": 12, "present": [12, 13, 26, 32], "direct": [12, 15, 34, 37], "advanc": [12, 20, 24, 38], "final": [12, 20, 22, 24, 27, 30, 33, 35, 37, 40], "bane": 12, "sullivan": 12, "art": [12, 28], "kira": 12, "hackergrrl": 12, "finish": [13, 17, 30, 37, 38], "second": [13, 24, 33, 37], "reproduc": [13, 29, 37], "construct": 13, "act": [13, 21, 32], "via": [13, 24, 27, 38, 39], "thumbnail": 13, "plot": [13, 20, 37], "script": [13, 14, 23, 25, 37, 38], "enjoi": 13, "mimic": 13, "method": [13, 15, 16, 20, 30, 32, 37], "ie": [13, 14, 24], "ipynb": 13, "friendli": [13, 17, 24, 31, 36, 37, 38], "visual": [13, 18, 37], "grid": 13, "execut": [13, 18, 29, 38], "per": 13, "downsid": 13, "finicki": 13, "particularli": [13, 20, 24, 25, 26, 29, 37, 38, 39], "matplotlib": [13, 33], "name": [13, 15, 18, 20, 22, 23, 24, 25, 26, 27, 29, 31, 34, 37, 38, 39], "plot_": 13, "dai": [13, 27, 38], "slightli": [13, 14, 24, 26], "nuanc": [13, 19, 24], "successfulli": [13, 18, 38, 39], "directori": [13, 18, 24, 25, 26, 29, 30, 31, 35, 36, 37, 38, 39, 40], "plot_tutori": 13, "produc": 13, "build_exampl": 13, "plot_sampl": 13, "built_exampl": 13, "dir": [13, 36], "sg_execution_tim": 13, "similarli": [13, 22, 27, 30], "pro": 13, "con": 13, "By": [13, 14, 18, 24, 26, 29, 32, 34, 37, 39], "addit": [13, 14, 15, 18, 19, 21, 23, 24, 25, 27, 29, 33, 38, 40], "epilog": 13, "singl": [13, 14, 18, 20, 23, 24, 27, 29, 30, 35, 37, 40], "column": 13, "another_tutori": 13, "separ": [13, 14, 23, 24, 38], "seri": [13, 30, 33, 36, 37, 38], "onpythonpackag": 13, "stand": [14, 39], "ppli": 14, "p": 14, "rogram": 14, "nterfac": 14, "add_numb": [14, 32, 35], "bunch": [14, 30, 39], "number": [14, 20, 24, 25, 29, 32, 33, 38], "simpli": [14, 35, 37, 38, 39], "calcul": [14, 30, 32], "valu": [14, 18, 23, 25, 27, 30, 32, 33, 36, 40], "return": [14, 18, 24, 27, 30, 32, 33, 39], "consist": [14, 18, 21, 22, 24, 25, 27, 32, 33, 37], "interfac": [14, 18, 24, 29, 33, 34], "input": [14, 32, 33, 37], "usual": [14, 22], "paramet": [14, 29, 30, 33], "argument": [14, 24], "effect": 14, "automag": [14, 16, 18, 27, 34], "full": [14, 22, 24, 33], "clean": [14, 18, 22, 24, 29], "along": [14, 33], "brief": 14, "dig": 14, "down": [14, 24, 26, 33, 38, 39, 40], "click": [14, 22, 23, 24, 26, 36, 38, 39, 40], "descript": [14, 23, 27, 33], "explain": [14, 27, 32, 37], "defin": [14, 15, 20, 23, 25, 29, 33, 35, 37, 40], "string": [14, 18, 23], "int": [14, 33], "np": 14, "arrai": [14, 20, 23, 25, 32, 40], "object": [14, 33], "googl": [14, 33], "rest": [14, 20], "simplifi": [14, 22, 23, 27, 29], "contrast": 14, "harder": [14, 26, 27], "scan": [14, 18], "take": [14, 26, 37, 38, 39], "line": [14, 18, 23, 24, 27, 36, 40], "modul": [14, 18, 37, 38, 39], "napoleon": 14, "short": [14, 15, 23, 30, 33, 35], "longer": [14, 18, 24, 40], "def": [14, 29, 30, 32, 33], "extent_to_json": 14, "ext_obj": 14, "convert": [14, 25, 30, 36], "bound": [14, 24, 40], "shape": [14, 17, 38], "geojson": 14, "spatial": [14, 15, 20, 38], "crop": 14, "raster": 14, "imag": [14, 18, 34, 37], "geodatafram": 14, "extent": [14, 27], "otherwis": [14, 27, 29, 38], "minx": 14, "mini": 14, "maxx": 14, "maxi": 14, "extent_json": 14, "dictionari": [14, 40], "corner": 14, "repres": [14, 22, 23, 24, 25, 29, 30, 32, 38, 40], "gpd": 14, "earthpi": 14, "io": [14, 35, 38, 39], "path_to_exampl": 14, "load": 14, "shapefil": 14, "rmnp": 14, "read_fil": 14, "shp": 14, "convers": [14, 27, 34], "polygon": 14, "105": 14, "4935937": 14, "40": [14, 30], "1580827": 14, "correct": [14, 19, 23, 24, 25, 30, 32, 33, 34, 37, 40], "mind": [14, 15, 20, 24], "neither": [14, 33], "item": [14, 18, 25, 33, 38, 40], "replac": [14, 18, 23, 33], "alon": [14, 21], "across": [14, 18, 21, 22, 24, 25, 26, 28, 30, 31, 36, 37, 38], "system": [14, 20, 23, 24, 25, 26, 27, 28, 31, 33, 37, 39, 40], "add_m": 14, "num1": 14, "num2": 14, "sum": [14, 33], "integ": [14, 33], "saw": [14, 18], "layer": [14, 21, 24], "anum": 14, "anum2": 14, "being": [14, 17, 20, 21, 24, 33, 35, 38, 40], "debug": 14, "faster": [14, 25], "static": [14, 38, 40], "mypi": [14, 33, 40], "perform": [14, 20, 21, 23, 24, 30, 32, 35, 37], "lower": [14, 38, 40], "entranc": 14, "barrier": 14, "true": [14, 30, 36], "multipl": [14, 18, 20, 24, 27, 29, 33, 37, 38], "obviou": [14, 23, 40], "sens": [14, 27, 35], "lot": [14, 40], "increment": 14, "break": [15, 24, 27, 30, 32, 33, 37, 38], "broadli": [15, 18, 22, 37], "granular": 15, "showcas": 15, "greater": [15, 32, 40], "navig": [15, 17, 24, 33, 38, 39], "highli": 15, "audienc": [15, 23, 25, 33, 35, 37, 40], "whenev": [15, 20], "jargon": [15, 35], "instruct": [15, 34, 36, 37, 38, 39], "reader": 15, "vignett": 15, "small": [15, 18, 26, 27, 35, 38], "involv": [15, 27, 30, 37, 40], "part": [15, 18, 20, 25, 26, 28, 30, 32, 38], "store": [15, 23, 24, 25, 27, 33, 36, 38, 39, 40], "card": 15, "popul": [16, 23, 24, 25, 33, 34, 35, 38, 40], "galleri": 16, "scientist": [17, 37], "decis": [17, 18, 19, 27, 33], "piec": [17, 30, 32], "curat": 17, "surround": [17, 18, 24, 30], "coc": [17, 35], "now": [17, 20, 22, 27, 33, 34, 35, 38, 39, 40], "join": 17, "watch": 17, "conda": [17, 18, 21, 24, 25, 33, 35, 36, 39], "forg": [17, 18, 20, 21, 25, 29, 33, 35, 39], "pyproject": [17, 18, 24, 25, 26, 29, 34, 36, 38, 39], "toml": [17, 18, 24, 25, 26, 29, 34, 38, 39], "introduct": [17, 32], "hatch": [17, 19, 23, 25, 29, 35, 38, 40], "vibrant": 17, "sdist": [17, 22, 23, 24, 33, 37, 38], "wheel": [17, 22, 23, 24, 33, 37, 38], "declar": [17, 18, 23, 29, 33, 38, 39, 40], "non": [17, 19, 22, 23, 35, 40], "pure": [17, 18, 20, 21, 23, 25, 27, 33, 38], "intro": [17, 39], "ci": [17, 27, 28, 29, 30, 32, 36, 37], "activ": [17, 18, 20, 24, 26, 27, 29, 33, 37, 38, 39, 40], "goe": 17, "beginn": [17, 24, 26, 36, 37], "accur": 17, "divers": [17, 21], "pythonista": 17, "rang": [17, 21, 24, 40], "skill": [17, 40], "expertis": 17, "anyon": [17, 21, 22, 25, 38, 39, 40], "end": [17, 18, 19, 21, 23, 25, 28, 29, 31, 37, 38, 40], "usabl": 17, "invit": 17, "forum": 17, "next": [17, 18, 24, 33, 34, 35, 38, 39], "author": [18, 20, 21, 23, 25, 33], "pep": [18, 21, 24, 27], "readabl": [18, 23, 40], "precommit": 18, "bot": [18, 27, 38], "pr": [18, 22, 37, 38], "config": 18, "save": [18, 32, 34, 38], "signific": [18, 26], "care": [18, 25], "focu": [18, 24, 29, 30, 34], "without": [18, 20, 24, 25, 29, 31, 32, 33, 37, 39], "space": [18, 26, 33, 39], "punctuat": 18, "would": [18, 26, 27, 29, 30, 32, 33, 35, 37], "brain": 18, "forinstanceifyousawasentencelikethisonewithoutani": 18, "benefit": [18, 24, 33], "daili": 18, "manual": [18, 22, 24, 33, 35, 38, 40], "consum": 18, "road": 18, "reformat": 18, "adher": [18, 24, 40], "throughout": [18, 27, 37], "inconsist": 18, "lengthi": 18, "person": [18, 37, 39, 40], "dure": [18, 20, 29], "edit": [18, 20, 23, 24, 33, 39], "implement": [18, 21, 27, 29, 33], "dive": [18, 37], "identifi": [18, 23, 24, 34, 40], "typic": [18, 30, 32], "stylist": 18, "doubl": [18, 20, 36], "quot": [18, 20], "unapologet": 18, "except": [18, 25, 39], "length": 18, "88": 18, "79": 18, "10": [18, 25, 29, 31, 33, 35, 40], "charact": [18, 33, 39], "overwritten": 18, "adjust": [18, 26], "comment": [18, 20, 38, 40], "playground": 18, "leav": [18, 24, 32, 35, 38], "worri": [18, 25, 29, 30, 38, 39, 40], "pep8": 18, "toolbox": [18, 37], "flag": [18, 29], "beyond": [18, 37], "conflict": [18, 20, 38], "miss": [18, 24, 26, 29, 30, 32, 38, 40], "after": [18, 27, 33, 35, 36, 37, 38, 40], "comma": 18, "unus": 18, "variabl": [18, 27, 33, 37], "filenam": [18, 25], "stravalib": [18, 25], "model": 18, "dev": [18, 20, 23, 29, 39], "usernam": [18, 25, 39], "comput": [18, 20, 25, 29, 33, 36, 37, 38, 39], "f401": 18, "o": [18, 20, 23, 31, 38], "29": 18, "80": 18, "e501": 18, "too": [18, 20], "long": [18, 23, 24, 27, 32, 37, 39, 40], "90": 18, "34": 18, "95": 18, "442": 18, "82": 18, "443": 18, "39": 18, "e231": 18, "whitespac": 18, "493": 18, "20": 18, "e225": 18, "496": 18, "group": [18, 23, 24, 26, 27, 37, 38], "relat": [18, 22, 29, 33, 39], "third": 18, "parti": 18, "reorder": 18, "think": [18, 20, 21, 23, 26, 29, 30, 36, 37, 38, 40], "exc": 18, "starvalib": 18, "abc": 18, "log": [18, 39], "distribut": [18, 19, 20, 22, 23, 24, 29, 33, 37, 38, 40], "extra": [18, 37, 38], "sequenc": 18, "unithelp": 18, "uh": 18, "traction": 18, "sinc": [18, 27], "aim": [18, 37, 38], "behind": [18, 39], "instead": [18, 24, 33, 39], "distinguish": 18, "hundr": 18, "fixabl": 18, "f403": 18, "fast": [18, 31], "feedback": [18, 32], "loop": 18, "larg": [18, 26, 37], "pycodestyl": 18, "w": 18, "warn": [18, 27], "f": [18, 32], "pyflak": 18, "c90": 18, "mccabe": 18, "ignor": 18, "handl": [18, 24, 25, 32], "sort": [18, 23, 25, 40], "correctli": [18, 22, 24, 26, 30, 32], "package_fold": 18, "shown": [18, 25], "vscode": [18, 24], "pycharm": [18, 24], "shortcut": 18, "demand": 18, "action": [18, 27, 28, 29, 30, 32, 38, 39], "trigger": [18, 27, 31, 37], "m": [18, 24, 27, 31, 33, 38], "messag": [18, 24, 27, 32, 38], "hit": 18, "NOT": [18, 24, 26], "re": [18, 21, 23, 29, 32, 33, 34, 39], "stage": [18, 22], "record": [18, 25, 37], "cancel": 18, "intend": [18, 23, 25, 30, 37, 38, 40], "amount": 18, "lead": [18, 22, 25, 29, 35], "merg": [18, 22, 37, 38], "trail": 18, "streamlin": [18, 24, 29], "becom": [18, 27, 32, 37, 39], "friend": 18, "comer": 18, "never": [18, 24, 27, 30], "c": [18, 19, 21, 22, 35, 38], "cofig": 18, "http": [18, 20, 30, 33, 34, 35, 38, 39, 40], "pycqa": 18, "rev": 18, "5": [18, 21, 30, 32, 37], "11": [18, 25, 26, 29, 31, 33, 40], "id": [18, 24, 29], "misc": 18, "v4": [18, 31], "0": [18, 20, 24, 25, 27, 29, 30, 32, 33, 38, 39, 40], "ref": [18, 35], "autoformat": 18, "newlin": 18, "onli": [18, 19, 20, 22, 23, 24, 25, 27, 29, 31, 33, 37, 38, 39, 40], "fixer": 18, "insensit": 18, "filesystem": 18, "maco": [18, 29, 31], "hf": 18, "window": [18, 20, 25, 29, 31, 33, 36, 38], "fat": 18, "auto": [18, 24], "22": 18, "12": [18, 29, 33, 39], "language_vers": 18, "python3": [18, 24, 29], "codo": 18, "quarter": 18, "weekli": 18, "remov": [18, 23, 24, 33], "aren": [18, 26, 33, 38], "autoupdate_schedul": 18, "quarterli": 18, "readi": [18, 22, 25, 30, 33, 37, 38, 39], "regardless": [18, 22], "manag": [18, 20, 23, 24, 25, 29, 37, 38, 39], "reduc": [18, 20, 24], "effort": [18, 21, 26, 37], "compil": [19, 24, 25, 26], "thorough": 19, "classifi": [19, 23, 25], "categori": [19, 23, 25, 29, 40], "back": [19, 23, 25, 33, 35, 37, 39, 40], "reli": [19, 24, 27, 30], "setuptool": [19, 20, 25], "hatchl": [19, 24, 25, 29, 33, 38, 39], "pdm": [19, 23, 25, 36], "choic": [19, 24, 27, 29, 40], "fortran": [19, 24], "gdal": [19, 20, 22, 35], "scikit": [19, 24, 26], "meson": [19, 24], "106": 20, "issuecom": 20, "1844278487": 20, "jeremiah": [20, 40], "did": [20, 22, 30, 33], "inventori": 20, "realli": [20, 22, 37, 39, 40], "comprehens": [20, 30, 37], "pullrequestreview": 20, "1766663571": 20, "jonni": 20, "why": [20, 21, 22, 28, 34], "extern": 20, "improv": [20, 32], "codebas": [20, 37], "tabl": [20, 25, 33, 36], "Not": [20, 27], "pytest": [20, 23, 26, 30, 31], "linter": [20, 21, 37, 38, 40], "flake8": [20, 21, 23, 37], "ruff": [20, 21, 40], "formatt": [20, 23, 37, 40], "black": [20, 21, 23, 37, 40], "tox": [20, 24, 29, 37], "basic": [20, 24, 34, 37, 38], "previous": 20, "u": [20, 21, 24, 36, 37, 40], "cfg": [20, 23, 33, 36], "examplepi": [20, 23], "email": [20, 23, 33], "org": [20, 22, 23, 33, 34, 35, 36, 38, 39, 40], "rioxarrai": 20, "necessari": 20, "minim": [20, 22, 23, 38, 40], "must": [20, 38, 40], "fewer": 20, "likelihood": 20, "mismatch": 20, "pretend": [20, 30], "plotm": 20, "numpi": [20, 21, 25, 26, 32, 33, 37, 39, 40], "seaborn": 20, "styliz": 20, "alongsid": 20, "lint": [20, 23, 38], "cleanup": 20, "sub": [20, 23], "dep1": 20, "dep2": 20, "git": [20, 23, 24, 25, 33, 34, 38], "my_depend": 20, "server": [20, 39], "mydepend": 20, "secur": [20, 39], "point": [20, 23, 30, 32, 33, 35, 38, 40], "commit": [20, 24, 27, 33], "hash": 20, "upload": [20, 24, 25, 26, 29, 31, 37], "cov": [20, 23, 29], "pydata_sphinx_them": 20, "pypa": [20, 24, 25, 26, 39, 40], "plu": 20, "come": [20, 24, 26, 29, 33, 35, 39, 40], "prior": [20, 22, 23, 33], "anyth": 20, "newer": [20, 21, 24], "mac": [20, 25, 29, 31, 33, 38, 39], "bash": [20, 31, 33, 38], "unquot": 20, "bracket": [20, 23, 33, 40], "guidebook": [20, 34, 40], "packagenam": [20, 33, 35, 38], "twine": [20, 24], "assum": [20, 27, 29, 33, 37], "plan": [20, 21, 24, 38, 39], "recip": [20, 22, 37], "grayskul": [20, 37, 39], "mode": [20, 23, 24, 33, 36, 39], "risk": [20, 24], "geospati": [20, 22], "altern": [20, 35, 39], "dep": [20, 38], "path": [20, 26, 33, 36, 39], "extra_requir": 20, "subgroup": 20, "poetri": [20, 23, 25, 36, 40], "hidden": [20, 27], "TO": 20, "confus": [21, 24, 25], "modern": [21, 23, 24, 27, 29], "src": [21, 33, 36], "layout": [21, 33, 36], "flat": 21, "No": [21, 24], "matter": [21, 39], "knowledg": [21, 24, 38], "decid": [21, 22, 24, 37, 38, 40], "filter": [21, 23, 25, 40], "straight": [21, 22, 37], "forward": [21, 22, 37], "channel": [21, 25, 38, 39, 40], "semver": 21, "numer": [21, 23, 24, 26, 37], "calver": [21, 24, 27], "date": [21, 24, 27, 37], "pick": [21, 22, 24, 40], "blue": 21, "diagram": [21, 24], "bare": [21, 40], "expand": 21, "align": [21, 23, 24], "enhanc": [21, 37, 40], "spec": 21, "program": [21, 23, 24, 25, 30, 33, 40], "lend": 21, "abil": 21, "hear": 21, "glue": 21, "made": [21, 27, 31], "intent": [21, 32], "scope": [21, 35, 39, 40], "bioconda": [22, 38], "between": [22, 24, 37, 40], "rebuild": [22, 25, 38], "biggest": 22, "wherea": [22, 25, 37, 40], "tar": [22, 25, 38, 39], "gz": [22, 25, 38, 39], "zip": [22, 25], "whl": [22, 24, 39], "bundl": [22, 25, 38], "privat": 22, "ago": [22, 40], "earli": [22, 33], "were": [22, 24], "mechan": 22, "origin": [22, 23, 30, 40], "cross": [22, 35], "julia": 22, "r": [22, 24, 39, 40], "mix": [22, 38], "fledg": 22, "hous": 22, "driven": 22, "biomed": 22, "emerg": 22, "unlik": [22, 26, 29, 38], "wonder": [22, 32, 37], "importantli": 22, "right": [22, 32, 38], "answer": [22, 37], "everyth": [22, 25, 29, 37, 38, 40], "speak": 22, "smaller": [22, 24, 26, 30, 37], "chanc": 22, "yield": 22, "stabl": [22, 40], "complement": [22, 30], "anticip": 22, "terminologi": 22, "glossari": 22, "feedstock": 22, "kick": 22, "off": 22, "complet": [22, 24, 30, 33, 34, 36, 38, 39], "notif": 22, "happi": 22, "runtim": 22, "match": [22, 38], "valid": [23, 39, 40], "invalid": [23, 40], "rais": [23, 40], "isn": [23, 39], "august": 23, "2017": 23, "much": [23, 24, 29], "backend": [23, 24, 25, 27, 29, 33, 37, 40], "flit": [23, 25, 27, 36], "tom": [23, 40], "pair": [23, 40], "particular": [23, 29, 30], "squar": [23, 33, 40], "xclim": 23, "translat": [23, 25, 38], "print": [23, 25, 36], "organ": [23, 24, 25, 29, 33, 35, 37, 39, 40], "human": [23, 27, 40], "caus": [23, 25, 40], "problem": [23, 35], "scm": 23, "determin": [23, 27, 40], "dynam": [23, 24, 33, 35, 40], "clear": [23, 24, 26, 32, 33, 35], "x": [23, 24, 25, 27, 38, 40], "sometim": [23, 27, 29, 32, 37, 40], "choos": [23, 33, 34, 40], "random": 23, "experi": [23, 24, 30], "projectnam": 23, "keyword": [23, 27, 33], "word": [23, 27, 33, 39], "search": [23, 26, 39], "her": 23, "entri": 23, "shell": [23, 31, 33, 34, 36, 38, 39], "One": [23, 27, 33, 40], "control": [23, 24], "setuptooms_scm": 23, "tradition": 23, "Then": [23, 35, 37, 39, 40], "post": [23, 25, 34, 37, 38, 40], "independ": 23, "swap": 23, "setuptools_scm": [23, 24, 25], "61": 23, "build_meta": 23, "survei": 24, "oppos": 24, "upper": [24, 40], "overrid": 24, "discord": 24, "lock": 24, "matrix": [24, 29, 31], "winner": 24, "stick": 24, "testpypi": [24, 38, 39], "dist": [24, 25, 39], "main": [24, 27, 31, 33, 36, 38, 39], "plugin": [24, 27, 29, 36], "undocu": 24, "until": [24, 38], "result": [24, 32, 33], "n": 24, "000": [24, 26], "seen": [24, 26], "domain": [24, 36, 37], "heavili": 24, "snapshot": 24, "ye": [24, 34], "hook": [24, 27], "enough": [24, 37], "appreci": [24, 26], "summar": 24, "bump": 24, "bu": 24, "factor": 24, "semant": [24, 26], "receiv": [24, 38], "pyd": 24, "app": [24, 39], "virtual": [24, 29, 33, 39], "__pypackages__": 24, "init": [24, 35], "patch": [24, 27], "minor": [24, 25, 27], "strict": 24, "constraint": [24, 32], "came": 24, "Its": 24, "individu": [24, 29, 30, 37], "gap": 24, "frill": 24, "symlink": 24, "track": [24, 27, 35, 37, 38], "unifi": 24, "makefil": [24, 25], "drop": [24, 40], "switch": 24, "hatch_vc": [24, 25], "creation": 24, "uniqu": [24, 29, 39], "easili": [24, 29, 32, 38, 39], "burden": [24, 26], "compar": [24, 32, 36, 40], "recogn": [24, 33, 38], "upcom": [24, 33, 34, 37], "problemat": [24, 32], "quit": 24, "symbol": 24, "breakout": 24, "address": [24, 32, 37, 39], "9": [24, 27, 29, 30, 31, 33, 39], "matur": [24, 25, 40], "2009": 24, "earlier": 24, "largest": 24, "accord": 24, "customiz": 24, "backward": [24, 27, 40], "compatibli": 24, "pylanc": 24, "comparison": 24, "awar": [24, 40], "exclud": 24, "manifest": [24, 25], "subsequ": [25, 39], "figur": [25, 38, 39], "convent": [25, 27, 33, 34], "product": [25, 33, 40], "beta": [25, 33, 40], "indic": [25, 40], "displai": 25, "theori": 25, "frame": 25, "belong": [25, 39], "raw": 25, "onto": [25, 38], "veri": [25, 27, 38], "unbuilt": [25, 39], "ourc": 25, "ribut": 25, "impli": [25, 27], "compress": 25, "network": 25, "normal": [25, 26, 27], "tarbal": [25, 38], "post2": 25, "__init__": [25, 26], "conftest": 25, "strava_api_stub": 25, "test_client": 25, "unit": [25, 28, 31], "test_attribut": 25, "auth_respond": 25, "ini": 25, "util": 25, "_version": [25, 27], "_version_gener": 25, "egg": 25, "info": [25, 33], "pkg": 25, "dependency_link": 25, "top_level": 25, "changelog": [25, 26], "yml": [25, 31], "whose": 25, "binari": 25, "machin": [25, 37, 40], "pre": [25, 27, 39], "malici": 25, "inject": [25, 38], "py3": [25, 39], "none": [25, 38, 39], "linux": [25, 29, 31, 38, 39], "processor": 25, "architectur": [25, 38], "unpack": 25, "unzip": 25, "client": 25, "advantag": [26, 30], "tremend": 26, "proof": 26, "mypackagereponam": 26, "mypackag": 26, "modulea": 26, "moduleb": 26, "chapter": [26, 27], "sourmash": 26, "bokeh": 26, "openscm": 26, "awkward": 26, "poliastro": 26, "against": 26, "outsid": [26, 31, 32, 37], "size": 26, "storag": 26, "400": 26, "forc": 26, "prioriti": 26, "pythonsafepath": 26, "Be": [26, 35, 37, 38, 39], "accompani": 26, "slow": 26, "discourag": [26, 35], "figshar": 26, "pooch": 26, "increas": [26, 27], "toll": 26, "deal": 26, "thousand": [26, 37, 40], "respect": 26, "had": [26, 30], "worth": 26, "cost": 26, "primari": [26, 27, 38, 40], "characterist": 26, "file1": 26, "histor": 26, "engrain": 26, "danger": 26, "xarrai": [26, 29, 40], "invest": 26, "equat": 27, "hatch_vsc": 27, "hand": [27, 35], "440": 27, "assign": [27, 40], "Being": 27, "express": [27, 37], "deprec": 27, "polici": 27, "manner": 27, "label": 27, "bump2vers": 27, "chosen": [27, 33, 34], "ex": 27, "With": [27, 29, 37], "truth": 27, "elimin": 27, "vc": 27, "anywher": [27, 39], "hard": 27, "enter": [27, 36, 39], "slower": 27, "attribute_warn": 27, "mod_plot": 27, "athlet": 27, "feat": 27, "add_convers": 27, "hasn": 27, "2020": 27, "troubleshoot": [27, 38], "cleaner": 27, "histori": [27, 33, 37, 40], "wrong": 27, "graphic": 28, "isol": [29, 30, 36, 38], "confid": [29, 32, 39], "randomli": 29, "due": 29, "unexpectedli": [29, 37], "oversight": 29, "essenti": 29, "aid": 29, "plai": 29, "last": [29, 34, 38, 40], "replic": 29, "runner": 29, "analyz": 29, "coverag": [29, 31], "codecov": [29, 31], "conveni": 29, "breakpoint": 29, "toggl": 29, "test_modul": 29, "plasmapi": 29, "capabl": 29, "versatil": 29, "ti": 29, "familiar": [29, 30, 33], "Will": 29, "virtualenv": [29, 39], "interfer": 29, "promot": 29, "pyospackag": [29, 30, 31, 35, 38, 39, 40], "session": [29, 33], "decor": 29, "shorten": 29, "therefor": 29, "four": 29, "venv_backend": 29, "test_mamba": 29, "conda_instal": 29, "stronger": 30, "verifi": 30, "examin": 30, "puzzl": [30, 32], "broken": [30, 35], "togeth": [30, 32, 33, 38], "temperatur": 30, "celsiu": 30, "fahrenheit": 30, "degre": 30, "That": [30, 34, 38, 40], "celsius_to_fahrenheit": 30, "float": 30, "32": 30, "temperature_convert": 30, "test_celsius_to_fahrenheit": 30, "freez": 30, "water": 30, "assert": [30, 32], "approx": 30, "ab": 30, "01": 30, "boil": 30, "100": [30, 38], "212": 30, "connect": [30, 38], "whole": 30, "pictur": 30, "spreadsheet": 30, "averag": 30, "period": [30, 40], "behav": [30, 32], "fahr_to_celsiu": 30, "calc_annual_mean": 30, "df": 30, "robust": 30, "yearly_mean": 30, "groupbi": 30, "final_mean": 30, "certain": [30, 37], "simul": 30, "real": [30, 38, 39], "life": 30, "catch": [30, 32], "put": 30, "deliv": 30, "smooth": 30, "disadvantag": 30, "fine": [30, 32], "grain": 30, "natur": 30, "occur": [30, 32, 37, 38], "portion": [30, 34], "refactor": [30, 32], "didn": 30, "energi": 30, "bring": 30, "framework": [30, 32], "invalu": 31, "pull_request": 31, "job": [31, 37], "strategi": 31, "fals": [31, 36], "ubuntu": 31, "checkout": [31, 38], "upgrad": 31, "v3": 31, "safeti": 32, "net": 32, "spot": 32, "rectifi": 32, "affect": 32, "instil": 32, "alter": 32, "mistak": 32, "accident": 32, "broke": 32, "imagin": 32, "magic": 32, "button": [32, 39], "collabor": [32, 39], "everyon": [32, 40], "stai": 32, "suppos": 32, "fearless": 32, "empow": 32, "eas": 32, "unexpect": 32, "outlier": 32, "enabl": 32, "impair": 32, "datafram": 32, "suppli": 32, "gracefulli": 32, "situat": 32, "frustrat": 32, "unexplain": 32, "carpentri": [32, 33], "sai": 32, "b": [32, 33, 38], "test_add_numb": 32, "got": [32, 38], "result2": 32, "result3": 32, "nick": 32, "murphi": 32, "outcom": 32, "special": 32, "closer": 32, "boundari": [32, 40], "equal": 32, "001": 32, "999": 32, "previou": [33, 34, 35, 38, 39, 40], "remot": 33, "v": [33, 40], "consol": 33, "zsh": 33, "worthi": 33, "misconcept": 33, "pervas": 33, "ll": [33, 34, 36, 37, 39], "treat": 33, "empti": [33, 35], "testm": 33, "nor": 33, "termin": [33, 36, 38], "cd": [33, 37, 38], "lowercas": 33, "letter": 33, "_": 33, "pyo": [33, 35], "pyos_packag": 33, "ok": [33, 38, 40], "dash": [33, 39], "underscor": 33, "__about__": 33, "subdirectori": 33, "scratch": 33, "epytext": 33, "yet": [33, 34, 35, 36, 39, 40], "add_num": [33, 35], "denot": [33, 35], "sign": [33, 35], "hold": 33, "relationship": 33, "leah": [33, 36], "wasser": [33, 36], "cpython": 33, "unknown": 33, "delet": [33, 40], "later": [33, 35, 36, 39], "fill": [33, 35, 37], "uncom": 33, "admonit": 33, "impact": [33, 39], "firstnam": [33, 36, 40], "lastnam": [33, 36, 40], "youremail": 33, "flesh": 33, "rare": 33, "gitbash": 33, "venv": [33, 39], "pyosdev": 33, "env": [33, 36, 39], "mambaforg": 33, "obtain": 33, "leahawass": [33, 39], "build_edit": 33, "envt": [33, 39], "caveat": 33, "restart": 33, "regularli": [33, 39], "arrow": 33, "mamba": 33, "markdown": [33, 34, 35], "markupsaf": 33, "msgpack": 33, "2021": 33, "24": 33, "yourusernam": 33, "prompt": [33, 39], "copyright": 33, "branch_or_tag": 33, "forget": 33, "substitut": 33, "epydoc": 33, "reus": [34, 37], "permiss": [34, 36, 39], "accommod": 34, "sunpi": 34, "gui": 34, "past": [34, 35, 39], "touch": 34, "ones": 34, "side": 34, "sync": 34, "summari": [34, 38], "grow": [34, 35, 37, 39], "referenc": 34, "moder": 34, "visit": 34, "agre": 34, "fundament": 34, "opensourc": 34, "solv": 35, "header": [35, 36], "h1": 35, "vet": 35, "joss": 35, "shield": 35, "haven": 35, "briefli": [35, 40], "demonstr": 35, "demo": [35, 40], "send": 35, "journal": 35, "partnership": 35, "5281": 35, "8365068": 35, "svg": 35, "tinyurl": 35, "y22nb8up": 35, "115": 35, "todo": 35, "fa": 35, "solid": 35, "bubbl": 35, "perfect": [35, 39], "trust": 35, "misus": 35, "pipx": [36, 38, 39], "browser": [36, 39], "cach": [36, 39], "spdx": 36, "h": 36, "generaliz": 37, "divid": 37, "consider": 37, "relev": [37, 40], "concern": 37, "regard": 37, "baselin": 37, "besid": 37, "under": 37, "undo": 37, "publicli": 37, "event": 37, "somewher": 37, "lifecycl": 37, "soon": 37, "realiz": 37, "pipelin": 37, "tricki": 37, "compendium": 37, "transpar": 37, "analys": 37, "studi": 37, "compendia": 37, "pack": 37, "crowsetta": 37, "annot": 37, "anim": 37, "vocal": 37, "bioacoust": 37, "spectrum": 37, "concis": 37, "repeat": 37, "ever": 37, "remain": 37, "entail": 38, "gone": 38, "submiss": 38, "eventu": 38, "volunt": 38, "attempt": 38, "offici": [38, 39], "ou": 38, "l": 38, "pyenv": [38, 39], "recov": 38, "00": 38, "mib": 38, "var": 38, "r8": 38, "3vljpqb55psbgb1ghc2qsn700000gn": 38, "du0sf_a4": 38, "distutil": 38, "elaps": 38, "databas": 38, "percentag": 38, "97": 38, "low": 38, "red": 38, "green": 38, "lwasser": 38, "internet": 38, "grab": 38, "wherev": [38, 40], "meta": 38, "sha256": 38, "43ec82da3a10752a5dbf2f0ef742e357803a3ddb400005f87e86534685bfb8a7": 38, "noarch": 38, "vv": 38, "dev_url": 38, "license_fil": 38, "hi": 38, "proper": 38, "patient": 38, "respond": 38, "titl": 38, "meaning": 38, "my_nifty_packag": 38, "vendor": 38, "ship": 38, "cfep": 38, "18": 38, "01e31f5521973710d0d91b15a94491d4f8f8f54566322110098c0f2381dd09ab": 38, "git_url": 38, "confirm": 38, "willing": 38, "acknowledg": 38, "troubl": 38, "ping": 38, "wait": 38, "struggl": 38, "gemgi": 38, "newli": [38, 39], "shortli": 38, "yourpackag": 38, "blogpost": 38, "emphas": 39, "gitignor": 39, "migrat": 39, "global": 39, "warehous": 39, "standalon": 39, "mk7f5y0t": 39, "2i2c": 39, "bin": 39, "26": 39, "dateutil": 39, "pytz": 39, "2023": [39, 40], "post1": 39, "six": 39, "16": 39, "tzdata": 39, "exit": 39, "two2iqr3": 39, "v0": 39, "took": 39, "43": 39, "scene": 39, "safe": [39, 40], "stress": 39, "password": 39, "login": 39, "pyospackage_yournameher": 39, "box": 39, "backup": 39, "devic": 39, "phish": 39, "els": 39, "januari": 39, "2024": 39, "scroll": 39, "OR": 39, "abunchofrandomcharactersher": 39, "credenti": 39, "__token__": 39, "perman": 39, "pyospkg": 39, "youpackagenameher": 39, "teach": 39, "twofa": 39, "apitoken": 39, "followup": 39, "again": [39, 40], "world": 39, "takeawai": 40, "field": 40, "json": 40, "retriev": 40, "checker": 40, "deviat": 40, "ten": 40, "depth": 40, "bone": 40, "quirk": 40, "overlap": 40, "diverg": 40, "prescrib": 40, "carefulli": 40, "lowest": 40, "pydant": 40, "ruamel": 40, "17": 40, "21": 40, "cautiou": 40, "precis": 40, "resolv": 40, "absolut": 40, "reject": 40, "homepag": 40, "dotenv": 40, "www": 40, "pyosmeta": 40, "appendix": 40, "admin": 40, "alpha": 40, "bsd3": 40, "corpor": 40, "BE": 40, "home": 40, "tracker": 40, "fund": 40, "taxpasta": 40, "republish": 40, "daniel": 40, "feldroi": 40, "08": 40, "cheatsheet": 40}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"contribut": [0, 8, 12], "guid": [0, 9, 12, 17, 21, 39], "python": [0, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "open": [0, 6, 8, 11, 15, 36], "sourc": [0, 6, 8, 11, 15, 25, 26], "softwar": [0, 11], "packag": [0, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "book": 0, "how": [0, 3, 11, 12, 14, 17, 18, 20, 22, 23, 25, 26, 32, 34, 37, 38, 40], "thi": [0, 6, 17, 21, 33, 37], "structur": [0, 21, 26, 33], "instruct": [0, 12, 35], "build": [0, 1, 4, 13, 19, 23, 24, 25, 27, 39], "document": [0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14, 15, 16, 37], "local": [0, 18, 33], "your": [0, 1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 23, 24, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40], "comput": 0, "tool": [1, 6, 18, 24, 27, 29, 36, 39], "host": 1, "syntax": 2, "markdown": 2, "v": [2, 3, 18, 19, 20, 23, 24, 25, 27, 37, 39], "myst": 2, "rst": 2, "creat": [2, 13, 15, 17, 20, 25, 27, 33, 35, 37, 38, 39], "doc": [2, 3, 13, 20], "publish": [3, 22, 37, 38, 39, 40], "onlin": 3, "what": [3, 6, 8, 9, 11, 12, 14, 20, 21, 22, 23, 25, 26, 29, 32, 33, 34, 35, 36, 37, 38, 40], "i": [3, 6, 9, 11, 14, 17, 20, 22, 23, 25, 29, 32, 33, 34, 35, 37, 38, 39, 40], "read": [3, 20], "github": [3, 20, 25, 31, 33, 37], "page": [3, 15], "us": [4, 11, 12, 13, 14, 18, 20, 23, 24, 26, 27, 29, 34, 37, 39, 40], "sphinx": [4, 5, 13], "static": 4, "site": 4, "gener": [4, 18], "can": [4, 11, 20, 22, 24, 27], "custom": 4, "extens": [4, 19, 24], "theme": 4, "commonli": 4, "optim": 5, "so": 5, "search": 5, "engin": 5, "other": [5, 19, 20, 27, 29, 36, 37], "user": [5, 6, 15, 16, 20, 22, 32, 37], "find": 5, "googl": 5, "analyt": 5, "sitemap": 5, "sphinxext": 5, "opengraph": 5, "critic": 6, "": [6, 12, 14, 21, 22, 36, 37, 39], "success": 6, "two": 6, "type": [6, 14, 30, 32], "1": [6, 27, 33, 35, 36, 38, 39, 40], "basic": [6, 33], "2": [6, 27, 33, 35, 36, 38, 39, 40], "potenti": 6, "contributor": [6, 37], "element": [6, 15, 37], "pyopensci": [6, 17, 21, 26, 37], "look": [6, 26, 33, 37], "review": [6, 21, 24, 26], "next": [6, 36, 37, 40], "section": [6, 12, 35, 38], "todo": [6, 17, 20, 23, 29, 30, 31, 33, 36, 37, 39, 40], "The": [7, 26, 33, 35, 37, 39], "code_of_conduct": [7, 34], "file": [7, 8, 10, 11, 12, 20, 23, 25, 33, 34, 35, 36, 39, 40], "exampl": [7, 8, 11, 14, 18, 20, 23, 24, 25, 26, 27, 31, 32, 37, 40], "why": [7, 9, 11, 14, 24, 26, 32, 33, 37, 38, 39], "you": [7, 11, 13, 20, 21, 22, 23, 24, 27, 29, 33, 34, 37, 38, 39, 40], "need": [7, 26, 33], "md": [8, 12, 35], "should": [8, 9, 10, 12, 29, 34, 37], "contain": [8, 9, 12], "develop": [9, 39], "import": [9, 11, 23, 26, 33], "That": 10, "repositori": [10, 22, 38], "licens": [11, 34, 40], "scientif": [11, 26, 34], "ar": [11, 21, 26, 37], "where": [11, 17, 20, 22, 34], "store": [11, 20, 37], "permiss": 11, "when": [11, 13, 23, 37, 40], "possibl": [11, 35], "choos": [11, 24], "recommend": [11, 21], "from": [11, 20, 33, 39], "scipi": 11, "make": [11, 18, 33, 37, 40], "sure": 11, "close": [11, 36], "follow": [11, 39], "guidelin": [11, 12, 21], "outlin": 11, "chose": [11, 24], "an": [11, 14, 24, 25, 33, 34, 37], "determin": 11, "code": [11, 12, 14, 18, 33, 34, 35, 37], "reus": 11, "about": [11, 17, 23, 24, 25, 26, 27, 33, 38, 39, 40], "citat": [11, 12, 35], "readm": [12, 35, 40], "resourc": [12, 20, 22, 34], "name": [12, 33, 35, 36, 40], "badg": [12, 35], "current": 12, "version": [12, 27, 29, 37, 40], "continu": [12, 31, 37], "integr": [12, 30, 31, 37], "test": [12, 26, 28, 29, 30, 31, 32, 33, 38, 39], "coverag": 12, "A": [12, 17, 20, 22, 27], "short": 12, "easi": 12, "understand": [12, 20], "descript": [12, 35, 40], "doe": [12, 14, 20, 26, 33, 35, 37], "instal": [12, 20, 33, 35, 36, 37, 38, 39], "ani": [12, 35], "addit": [12, 20, 22, 34, 35], "setup": [12, 23, 25, 27, 35, 39], "requir": [12, 20, 21, 23, 26, 40], "brief": [12, 22, 33], "demonstr": 12, "link": 12, "tutori": [12, 13, 17, 37], "too": [12, 14], "much": [12, 14], "Of": 12, "good": [12, 15], "thing": 12, "commun": [12, 17, 22, 35], "conduct": [12, 34], "inform": [12, 21, 35], "run": [13, 14, 18, 29, 31, 36], "galleri": 13, "benefit": [13, 23, 26], "challeng": [13, 24, 26], "nbsphinx": 13, "jupyt": 13, "notebook": 13, "api": 14, "docstr": 14, "relat": [14, 37], "three": [14, 30], "format": [14, 18, 23, 25, 40], "we": [14, 24, 33], "like": [14, 26, 27, 39], "numpi": 14, "style": [14, 18], "better": 14, "best": [14, 17], "function": [14, 30, 35], "doctest": 14, "method": 14, "ad": [14, 20, 38], "hint": 14, "bewar": 14, "gradual": 14, "face": [15, 16], "core": [15, 20, 26], "compon": 15, "write": [15, 16, 32], "usabl": 15, "four": 15, "land": 15, "new": [17, 27, 33, 40], "seri": 17, "ecosystem": [17, 24, 34], "overview": [17, 33, 34], "practic": 17, "guidebook": 17, "who": [17, 37], "head": 17, "linter": 18, "take": [18, 22, 23], "awai": [18, 22, 23], "life": 18, "easier": 18, "lint": 18, "formatt": 18, "styler": 18, "black": 18, "flake8": 18, "isort": 18, "applic": 18, "ruff": 18, "workflow": [18, 24, 39], "favorit": 18, "pre": 18, "commit": 18, "hook": 18, "check": 18, "ci": [18, 31, 38], "set": [18, 20, 33], "up": [18, 33, 34, 38, 40], "git": [18, 27, 37], "summari": [18, 24], "complex": [19, 23], "pure": [19, 24], "languag": 19, "depend": [20, 22, 23, 24, 40], "option": [20, 23, 39, 40], "pyproject": [20, 23, 27, 33, 40], "toml": [20, 23, 27, 33, 36, 40], "do": [20, 23, 24, 26, 32, 33], "declar": 20, "wai": [20, 34], "mai": 20, "see": [20, 29], "add": [20, 23, 33, 34, 35, 38, 40], "group": 20, "gitlab": [20, 37], "m": 20, "pip": [20, 22, 25, 33], "For": 20, "zsh": 20, "shell": 20, "combin": 20, "conda": [20, 22, 29, 37, 38, 40], "fit": 20, "support": [20, 24, 37], "environ": [20, 29, 33, 37, 39], "yml": 20, "note": [20, 27], "learn": [21, 24, 25, 34, 35, 37, 38, 39, 40], "here": [21, 24], "suggest": [21, 24], "In": 22, "pypi": [22, 25, 37, 38, 39, 40], "anaconda": 22, "cloud": 22, "histori": 22, "evolut": 22, "channel": 22, "manag": [22, 27], "conflict": 22, "If": [22, 39], "both": 22, "forg": [22, 37, 38, 40], "accommod": 22, "more": [22, 24, 37, 39, 40], "submit": [22, 38], "maintain": [22, 37, 38, 40], "configur": [23, 36], "metadata": [23, 25, 33, 40], "happen": [23, 25, 40], "py": [23, 25, 33], "migrat": 23, "still": 23, "field": 23, "project": [23, 25, 26, 33, 37, 40], "tabl": [23, 24, 29, 40], "includ": [23, 26], "advanc": 23, "recurs": 23, "hatchl": [23, 27, 40], "setuptool": [23, 24, 27], "hatch": [24, 27, 33, 36, 39], "pdm": [24, 27], "poetri": [24, 39], "front": 24, "end": [24, 27, 30, 39], "back": [24, 27], "step": [24, 33, 35, 36, 38, 39, 40], "simplifi": 24, "non": 24, "featur": [24, 36], "c": 24, "flit": [24, 39], "might": 24, "want": [24, 39], "pin": [24, 40], "cfg": 25, "xclim": 25, "distribut": [25, 26, 39], "expect": [25, 37], "sdist": [25, 39], "archiv": 25, "wheel": [25, 26, 39], "whl": 25, "never": 26, "specif": [26, 39], "peer": 26, "src": 26, "layout": 26, "discov": 26, "priorit": 26, "modul": [26, 33], "sometim": 26, "data": [26, 28], "don": 26, "t": 26, "suit": 26, "dataset": 26, "flat": 26, "most": 26, "kei": 27, "takewai": 27, "semver": 27, "rule": 27, "avoid": 27, "manual": [27, 34, 39], "updat": [27, 36, 40], "number": 27, "semant": 27, "releas": 27, "control": [27, 37], "base": [27, 39], "bump": 27, "offer": 27, "increment": 27, "pro": 27, "con": 27, "hatch_vc": 27, "3": [27, 33, 35, 36, 38, 39, 40], "scm": 27, "tag": 27, "setuptools_scm": 27, "4": [27, 33, 35, 36, 38, 39, 40], "autom": 29, "framework": 29, "pytest": 29, "across": 29, "oper": 29, "system": 29, "ll": 29, "wild": 29, "nox": 29, "venv": 29, "mamba": 29, "unit": 30, "compar": 30, "pull": [31, 38], "request": [31, 38], "action": 31, "edg": 32, "case": 32, "know": [32, 36], "previous": 33, "cover": 33, "lesson": 33, "directori": [33, 34], "__init__": 33, "time": [33, 39], "add_numb": 33, "modifi": 33, "adjust": 33, "classifi": [33, 40], "bare": 33, "minimum": 33, "5": [33, 35, 40], "e": 33, "pyospackag": 33, "6": [33, 35, 40], "out": 33, "congratul": [33, 38, 39], "first": 33, "footnot": [33, 34, 38, 39], "object": [34, 35, 37, 38, 39, 40], "live": 34, "put": [34, 40], "class": [34, 38, 39, 40], "fa": [34, 38, 39, 40], "solid": [34, 38, 39, 40], "hand": [34, 38, 40], "bubbl": [34, 38, 40], "wrap": [34, 38, 40], "0": 35, "titl": 35, "top": 35, "get": [35, 36], "start": 35, "provid": 35, "fulli": 35, "snippet": 35, "7": 35, "8": 35, "finish": 35, "edit": 36, "config": 36, "email": [36, 40], "show": 36, "comparison": 36, "101": 37, "consid": 37, "befor": 37, "than": 37, "just": 37, "infrastructur": 37, "issu": 37, "ticket": 37, "tracker": 37, "deploy": 37, "turn": 37, "well": 37, "scope": 37, "research": 37, "matplotlib": 37, "also": 37, "clean": 37, "readabl": 37, "yai": 37, "ha": 37, "now": 37, "work": 38, "public": [38, 39], "regular": 38, "pen": 38, "squar": 38, "grayskul": 38, "fork": 38, "clone": 38, "stage": 38, "recip": 38, "3b": 38, "bug": 38, "fix": 38, "home": 38, "url": [38, 40], "templat": 38, "checklist": 38, "tip": 38, "failur": 38, "wand": [38, 39], "magic": [38, 39], "sparkl": [38, 39], "have": [38, 39], "feedstock": 38, "our": 39, "ve": 39, "account": 39, "factor": 39, "2fa": 39, "authent": 39, "upload": 39, "token": 39, "below": 39, "valu": 39, "trust": 39, "readi": 40, "author": 40, "specifi": 40, "caution": 40, "incorrect": 40, "all": 40, "togeth": 40, "complet": 40}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 60}, "alltitles": {"Contributing Guide for the Python open source software packaging book": [[0, "contributing-guide-for-the-python-open-source-software-packaging-book"]], "How this guide structured": [[0, "how-this-guide-structured"]], "Instructions for building the documentation locally on your computer": [[0, "instructions-for-building-the-documentation-locally-on-your-computer"]], "Tools to Build and Host your Documentation": [[1, "tools-to-build-and-host-your-documentation"]], "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs": [[2, "documentation-syntax-markdown-vs-myst-vs-rst-syntax-to-create-your-docs"]], "How to publish your Python package documentation online": [[3, "how-to-publish-your-python-package-documentation-online"]], "What is Read the Docs ?": [[3, "what-is-read-the-docs"]], "What is GitHub Pages?": [[3, "what-is-github-pages"]], "Read the Docs vs GitHub Pages": [[3, "read-the-docs-vs-github-pages"]], "Using Sphinx to Build Python Package Documentation": [[4, "using-sphinx-to-build-python-package-documentation"]], "Sphinx - a static site generator": [[4, "sphinx-a-static-site-generator"]], "Sphinx sites can be customized using extensions and themes": [[4, "sphinx-sites-can-be-customized-using-extensions-and-themes"]], "Commonly used Sphinx themes": [[4, "commonly-used-sphinx-themes"]], "Optimizing your documentation so search engines (and other users) find it": [[5, "optimizing-your-documentation-so-search-engines-and-other-users-find-it"]], "Google Analytics": [[5, "google-analytics"]], "sphinx-sitemap for search engine optimization": [[5, "sphinx-sitemap-for-search-engine-optimization"]], "sphinxext.opengraph": [[5, "sphinxext-opengraph"]], "Documentation for your Open Source Python Package": [[6, "documentation-for-your-open-source-python-package"]], "Documentation is critical for your Python package\u2019s success": [[6, "documentation-is-critical-for-your-python-package-s-success"]], "Two types of Python package users": [[6, "two-types-of-python-package-users"]], "1. Basic Tool Users": [[6, "basic-tool-users"]], "2. Potential tool contributors": [[6, "potential-tool-contributors"]], "Documentation elements that pyOpenSci looks for reviewing a Python package": [[6, "documentation-elements-that-pyopensci-looks-for-reviewing-a-python-package"]], "What\u2019s next in this Python package documentation section?": [[6, "what-s-next-in-this-python-package-documentation-section"]], "Todo": [[6, "id1"], [17, "id1"], [20, "id1"], [20, "id4"], [23, "id1"], [29, "id1"], [29, "id2"], [30, "id1"], [31, "id1"], [33, "id1"], [33, "id7"], [33, "id8"], [36, "id1"], [37, "id1"], [39, "id1"], [39, "id3"], [39, "id4"], [39, "id5"], [40, "id1"]], "The CODE_OF_CONDUCT file - Python Packaging": [[7, "the-code-of-conduct-file-python-packaging"]], "Example CODE_OF_CONDUCT files": [[7, null]], "Why you need a CODE_OF_CONDUCT": [[7, "why-you-need-a-code-of-conduct"]], "Contributing File in your Python Open Source Package": [[8, "contributing-file-in-your-python-open-source-package"]], "What a CONTRIBUTING.md file should contain": [[8, "what-a-contributing-md-file-should-contain"]], "Example contributing files": [[8, null]], "What the development guide for your Python package should contain": [[9, "what-the-development-guide-for-your-python-package-should-contain"]], "Why a development guide is important": [[9, "why-a-development-guide-is-important"]], "Documentation Files That Should be in your Python Package Repository": [[10, "documentation-files-that-should-be-in-your-python-package-repository"]], "License files for scientific Python open source software": [[11, "license-files-for-scientific-python-open-source-software"]], "What is a Open Source License file?": [[11, "what-is-a-open-source-license-file"]], "Why licenses are important": [[11, "why-licenses-are-important"]], "Where to store your license": [[11, "where-to-store-your-license"]], "Use open permissive licenses when possible": [[11, "use-open-permissive-licenses-when-possible"]], "How to choose a license": [[11, "how-to-choose-a-license"]], "License recommendations from the SciPy package": [[11, null]], "Important: make sure that you closely follow the guidelines outlines by the License that you chose": [[11, "important-make-sure-that-you-closely-follow-the-guidelines-outlines-by-the-license-that-you-chose"]], "An example of how a license determine how code can be reused": [[11, null]], "What about software citation?": [[11, "what-about-software-citation"]], "README File Guidelines and Resources": [[12, "readme-file-guidelines-and-resources"]], "What your README.md file should contain": [[12, "what-your-readme-md-file-should-contain"]], "\u2714\ufe0f Your package\u2019s name": [[12, "your-package-s-name"]], "\u2714\ufe0f Badges for current package version, continuous integration and test coverage": [[12, "badges-for-current-package-version-continuous-integration-and-test-coverage"]], "\u2714\ufe0f A short, easy-to-understand description of what your package does": [[12, "a-short-easy-to-understand-description-of-what-your-package-does"]], "\u2714\ufe0f Installation instructions": [[12, "installation-instructions"]], "\u2714\ufe0f Document any additional setup required": [[12, "document-any-additional-setup-required"]], "\u2714\ufe0f Brief demonstration of how to use the package": [[12, "brief-demonstration-of-how-to-use-the-package"]], "\u2714\ufe0f Descriptive links to package documentation, short tutorials": [[12, "descriptive-links-to-package-documentation-short-tutorials"]], "Too Much Of A Good Thing": [[12, null]], "\u2714\ufe0f A Community Section with Links to Contributing Guide, Code of Conduct": [[12, "a-community-section-with-links-to-contributing-guide-code-of-conduct"]], "\u2714\ufe0f Citation information": [[12, "citation-information"]], "Create tutorials in your Python package documentation": [[13, "create-tutorials-in-your-python-package-documentation"]], "Create Python package tutorials that run when you build your docs": [[13, "create-python-package-tutorials-that-run-when-you-build-your-docs"]], "sphinx gallery:": [[13, "sphinx-gallery"]], "Sphinx Gallery benefits": [[13, "sphinx-gallery-benefits"]], "Sphinx gallery challenges": [[13, "sphinx-gallery-challenges"]], "nbsphinx - tutorials using Jupyter Notebooks": [[13, "nbsphinx-tutorials-using-jupyter-notebooks"]], "Document the code in your package\u2019s API using docstrings": [[14, "document-the-code-in-your-package-s-api-using-docstrings"]], "What is an API?": [[14, "what-is-an-api"]], "What is a docstring and how does it relate to documentation?": [[14, "what-is-a-docstring-and-how-does-it-relate-to-documentation"]], "Python package API documentation": [[14, "python-package-api-documentation"]], "Three Python docstring formats and why we like NumPy style": [[14, "three-python-docstring-formats-and-why-we-like-numpy-style"]], "Docstring examples Better and Best": [[14, "docstring-examples-better-and-best"]], "Best: a docstring with example use of the function": [[14, "best-a-docstring-with-example-use-of-the-function"]], "Using doctest to run docstring examples in your package\u2019s methods and functions": [[14, "using-doctest-to-run-docstring-examples-in-your-package-s-methods-and-functions"]], "Adding type hints to your docstrings": [[14, "adding-type-hints-to-your-docstrings"]], "Why use type hints": [[14, "why-use-type-hints"]], "Beware of too much type hinting": [[14, null]], "Gradually adding type hints": [[14, "gradually-adding-type-hints"]], "Create User Facing Documentation for your Python Package": [[15, "create-user-facing-documentation-for-your-python-package"]], "Core components of user-facing Python package documentation": [[15, "core-components-of-user-facing-python-package-documentation"]], "Write usable documentation": [[15, "write-usable-documentation"]], "Four elements of a good open source documentation landing page": [[15, "four-elements-of-a-good-open-source-documentation-landing-page"]], "Writing user-facing documentation for your Python package": [[16, "writing-user-facing-documentation-for-your-python-package"]], "pyOpenSci Python Package Guide": [[17, "pyopensci-python-package-guide"]], "About this guide": [[17, null]], "new Tutorial Series: How to Create a Python Package": [[17, "new-tutorial-series-how-to-create-a-python-package"]], "Python packaging ecosystem overview & best practices": [[17, "python-packaging-ecosystem-overview-best-practices"]], "A community-created guidebook": [[17, "a-community-created-guidebook"]], "Who this guidebook is for": [[17, "who-this-guidebook-is-for"]], "Where this guide is headed": [[17, "where-this-guide-is-headed"]], "Python Package Code Style, Format and Linters": [[18, "python-package-code-style-format-and-linters"]], "Take Aways": [[18, null], [22, null]], "Use a code format tool (or tools) to make your life easier": [[18, "use-a-code-format-tool-or-tools-to-make-your-life-easier"]], "Linting vs format and style": [[18, "linting-vs-format-and-style"]], "Code Linting": [[18, "code-linting"]], "Code Formatters (and stylers)": [[18, "code-formatters-and-stylers"]], "Code format and style": [[18, "code-format-and-style"]], "Black": [[18, "black"]], "flake8 for linting code in Python packages": [[18, "flake8-for-linting-code-in-python-packages"]], "Isort": [[18, "isort"]], "Example application of isort": [[18, "example-application-of-isort"]], "Ruff": [[18, "ruff"]], "How to use code formatter in your local workflow": [[18, "how-to-use-code-formatter-in-your-local-workflow"]], "Linters, code formatters and your favorite coding tools": [[18, "linters-code-formatters-and-your-favorite-coding-tools"]], "Use pre-commit hooks to run code formatters and linters on commits": [[18, "use-pre-commit-hooks-to-run-code-formatters-and-linters-on-commits"]], "Pre-commit hook example workflow": [[18, "pre-commit-hook-example-workflow"]], "General pre commit checks": [[18, "general-pre-commit-checks"]], "Pre-commit.ci": [[18, "pre-commit-ci"]], "Setting up a git pre-commit hook": [[18, "setting-up-a-git-pre-commit-hook"]], "Summary": [[18, "summary"]], "Complex Python package builds": [[19, "complex-python-package-builds"]], "Pure Python Packages vs. packages with extensions in other languages": [[19, "pure-python-packages-vs-packages-with-extensions-in-other-languages"]], "Python Package Dependencies": [[20, "python-package-dependencies"]], "What is a package dependency?": [[20, "what-is-a-package-dependency"]], "Understanding optional vs. required dependencies": [[20, "understanding-optional-vs-required-dependencies"]], "Required (or core) dependencies": [[20, "required-or-core-dependencies"]], "Optional dependencies": [[20, "optional-dependencies"], [20, "id2"]], "Dependencies can be added to your pyproject.toml file": [[20, null]], "How do you declare dependencies?": [[20, "how-do-you-declare-dependencies"]], "Other ways you may see packages storing dependencies": [[20, null]], "Add required dependencies to your pyproject.toml file": [[20, "add-required-dependencies-to-your-pyproject-toml-file"]], "A dependency example": [[20, null]], "Create optional dependency groups": [[20, "create-optional-dependency-groups"]], "Installing packages from GitHub / Gitlab": [[20, null]], "Additional dependency resources": [[20, null]], "Install dependency groups": [[20, "install-dependency-groups"]], "Using python -m pip install vs. pip install": [[20, null]], "For zsh shell users": [[20, null]], "Combining sets of dependencies": [[20, "combining-sets-of-dependencies"]], "Where does conda fit in?": [[20, null]], "Support conda users with environment.yml files": [[20, "support-conda-users-with-environment-yml-files"]], "A note for conda users": [[20, null]], "Dependencies in Read the Docs": [[20, "dependencies-in-read-the-docs"]], "Read the Docs and Python packages": [[20, null]], "Python package structure information": [[21, "python-package-structure-information"]], "What you will learn here": [[21, "what-you-will-learn-here"]], "Guidelines for pyOpenSci\u2019s packaging recommendations": [[21, "guidelines-for-pyopensci-s-packaging-recommendations"]], "Suggestions in this guide are not pyOpenSci review requirements": [[21, null]], "Publishing Your Package In A Community Repository: PyPI or Anaconda Cloud": [[22, "publishing-your-package-in-a-community-repository-pypi-or-anaconda-cloud"]], "What is PyPI": [[22, "what-is-pypi"]], "What is Anaconda Cloud and conda?": [[22, "what-is-anaconda-cloud-and-conda"]], "A brief history of conda\u2019s evolution": [[22, null]], "conda channels": [[22, "conda-channels"]], "conda channels, PyPI, conda, pip - Where to publish your package": [[22, "conda-channels-pypi-conda-pip-where-to-publish-your-package"]], "Managing Python package dependency conflicts": [[22, "managing-python-package-dependency-conflicts"]], "Take-aways: If you can, publish on both PyPI and conda-forge to accommodate more users of your package": [[22, "take-aways-if-you-can-publish-on-both-pypi-and-conda-forge-to-accommodate-more-users-of-your-package"]], "Additional resources": [[22, null]], "How to submit to conda-forge": [[22, "how-to-submit-to-conda-forge"]], "Maintaining your conda-forge package repository": [[22, "maintaining-your-conda-forge-package-repository"]], "Use a pyproject.toml file for your package configuration & metadata": [[23, "use-a-pyproject-toml-file-for-your-package-configuration-metadata"]], "Important pyproject.toml take aways": [[23, null]], "About the pyproject.toml file": [[23, "about-the-pyproject-toml-file"]], "What happened to setup.py & how do i migrate to pyproject.toml?": [[23, null]], "About the .toml format": [[23, "about-the-toml-format"], [40, "about-the-toml-format"]], "How the pyproject.toml is used when you build a package": [[23, "how-the-pyproject-toml-is-used-when-you-build-a-package"]], "Benefits of using a pyproject.toml file": [[23, "benefits-of-using-a-pyproject-toml-file"]], "Setup.py is still useful for complex package builds": [[23, null]], "Optional vs. Required pyproject.toml file fields": [[23, "optional-vs-required-pyproject-toml-file-fields"]], "Required fields for the [project] table": [[23, "required-fields-for-the-project-table"]], "Optional fields to include in the [project] table": [[23, "optional-fields-to-include-in-the-project-table"]], "Advanced options in the pyproject.toml file": [[23, "advanced-options-in-the-pyproject-toml-file"]], "Add dependencies to your pyproject.toml file": [[23, "add-dependencies-to-your-pyproject-toml-file"]], "Recursive dependencies": [[23, null]], "Example pyproject.toml for building using hatchling": [[23, "example-pyproject-toml-for-building-using-hatchling"]], "Example pyproject.toml for building using setuptools": [[23, "example-pyproject-toml-for-building-using-setuptools"]], "Python Packaging Tools": [[24, "python-packaging-tools"]], "Tools for building your package": [[24, "tools-for-building-your-package"]], "Tools that we review here": [[24, "tools-that-we-review-here"]], "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)": [[24, "summary-of-tools-hatch-vs-pdm-vs-poetry-and-setuptools"]], "Build front-end vs. build back-end tools": [[24, "build-front-end-vs-build-back-end-tools"]], "Build back-ends": [[24, "build-back-ends"]], "Python package build front-ends": [[24, "python-package-build-front-ends"]], "Example build steps that can be simplified using a front-end tool": [[24, "example-build-steps-that-can-be-simplified-using-a-front-end-tool"]], "Choosing a build back-end": [[24, "choosing-a-build-back-end"]], "Build back-end support for non pure-python packages": [[24, "build-back-end-support-for-non-pure-python-packages"]], "An ecosystem of Python build tools": [[24, "an-ecosystem-of-python-build-tools"]], "We do not suggest using setuptools": [[24, null]], "Chose a build workflow tool": [[24, "chose-a-build-workflow-tool"]], "Python packaging tools summary": [[24, "python-packaging-tools-summary"]], "Package tool features table": [[24, "package-tool-features-table"]], "PDM": [[24, "pdm"]], "PDM support for C and C++ extensions": [[24, null]], "PDM Features": [[24, "pdm-features"]], "PDM vs. Poetry": [[24, null]], "Challenges with PDM": [[24, "challenges-with-pdm"]], "Flit": [[24, "flit"]], "Flit Features": [[24, "flit-features"]], "Learn more about flit": [[24, null]], "Why you might not want to use Flit": [[24, "why-you-might-not-want-to-use-flit"]], "Hatch": [[24, "hatch"]], "Hatch features": [[24, "hatch-features"], [36, "hatch-features"]], "Why you might not want to use Hatch": [[24, "why-you-might-not-want-to-use-hatch"]], "Poetry": [[24, "poetry"]], "Poetry features": [[24, "poetry-features"]], "Challenges with Poetry": [[24, "challenges-with-poetry"]], "Challenges with Poetry dependency pinning": [[24, null]], "Using Setuptools Back-end for Python Packaging with Build Front-end": [[24, "using-setuptools-back-end-for-python-packaging-with-build-front-end"]], "Setuptools Features": [[24, "setuptools-features"]], "Challenges using setuptools": [[24, "challenges-using-setuptools"]], "Learn about Building a Python Package": [[25, "learn-about-building-a-python-package"]], "What is building a Python package?": [[25, "what-is-building-a-python-package"]], "Project metadata and PyPI": [[25, "project-metadata-and-pypi"]], "What happened to setup.py and setup.cfg for metadata?": [[25, null]], "An example - xclim": [[25, "an-example-xclim"]], "How to create the distribution format that PyPI and Pip expects?": [[25, "how-to-create-the-distribution-format-that-pypi-and-pip-expects"]], "Source Distribution (sdist)": [[25, "source-distribution-sdist"]], "GitHub archive vs sdist": [[25, null]], "Wheel (.whl files):": [[25, "wheel-whl-files"]], "Python Package Structure for Scientific Python Projects": [[26, "python-package-structure-for-scientific-python-projects"]], "pyOpenSci will never require a specific package structure for peer review": [[26, null]], "Example scientific packages that use src/package layout": [[26, null]], "The src/ layout and testing": [[26, "the-src-layout-and-testing"]], "How Python discovers and prioritizes importing modules": [[26, null]], "Sometimes tests are needed in a distribution": [[26, "sometimes-tests-are-needed-in-a-distribution"]], "Challenges with including tests and data in a package wheel": [[26, null]], "Don\u2019t include test suite datasets in your package": [[26, "don-t-include-test-suite-datasets-in-your-package"]], "About the flat Python package layout": [[26, "about-the-flat-python-package-layout"]], "Why most scientific Python packages do not use source": [[26, null]], "What does the flat layout structure look like?": [[26, "what-does-the-flat-layout-structure-look-like"]], "Benefits of using the flat layout in your Python package": [[26, "benefits-of-using-the-flat-layout-in-your-python-package"]], "Core scientific Python packages that use the flat layout": [[26, null]], "Creating New Versions of Your Python Package": [[27, "creating-new-versions-of-your-python-package"]], "Key Takeways": [[27, null]], "A note about versioning": [[27, null]], "SemVer rules": [[27, "semver-rules"]], "Avoid manually updating Python package version numbers if you can": [[27, "avoid-manually-updating-python-package-version-numbers-if-you-can"]], "Tools to manage versions for your Python package": [[27, "tools-to-manage-versions-for-your-python-package"]], "Semantic release, vs version control based vs manual version bumping": [[27, "semantic-release-vs-version-control-based-vs-manual-version-bumping"]], "Tools for bumping Python package versions": [[27, "tools-for-bumping-python-package-versions"]], "Tool 1: Hatch and other build tools that offer incremental versioning": [[27, "tool-1-hatch-and-other-build-tools-that-offer-incremental-versioning"]], "Hatch (or other tools like PDM) Pros": [[27, "hatch-or-other-tools-like-pdm-pros"]], "Hatch (or other tools like PDM) Cons": [[27, "hatch-or-other-tools-like-pdm-cons"]], "Tool 2: Hatch_vcs & hatchling build back-end": [[27, "tool-2-hatch-vcs-hatchling-build-back-end"]], "Hatch example setup in your pyproject.toml": [[27, "hatch-example-setup-in-your-pyproject-toml"]], "hatch_vcs Pros": [[27, "hatch-vcs-pros"]], "hatch_vcs Cons": [[27, "hatch-vcs-cons"]], "Tool 3: setuptools-scm versioning using git tags": [[27, "tool-3-setuptools-scm-versioning-using-git-tags"]], "setuptools_scm Cons": [[27, "setuptools-scm-cons"]], "Tool 4: Python semantic release": [[27, "tool-4-python-semantic-release"]], "Python Semantic Release Pros": [[27, "python-semantic-release-pros"]], "Python Semantic Release Cons": [[27, "python-semantic-release-cons"]], "Tests and data for your Python package": [[28, "tests-and-data-for-your-python-package"]], "Run Python package tests": [[29, "run-python-package-tests"]], "Tools to run your tests": [[29, "tools-to-run-your-tests"]], "Table: Testing & Automation Tool": [[29, "id3"]], "What testing framework / package should I use to run tests?": [[29, "what-testing-framework-package-should-i-use-to-run-tests"]], "Run tests using pytest": [[29, "run-tests-using-pytest"]], "Tests across operating systems": [[29, null]], "Tools to automate running your tests": [[29, "tools-to-automate-running-your-tests"]], "Other automation tools you\u2019ll see in the wild": [[29, null]], "Run tests across Python versions with nox": [[29, "run-tests-across-python-versions-with-nox"]], "Test Environments": [[29, "test-environments"]], "Nox with venv environments": [[29, "nox-with-venv-environments"]], "Nox with conda / mamba": [[29, "nox-with-conda-mamba"]], "Test Types for Python packages": [[30, "test-types-for-python-packages"]], "Three types of tests: Unit, Integration & Functional Tests": [[30, "three-types-of-tests-unit-integration-functional-tests"]], "Unit Tests": [[30, "unit-tests"]], "Integration tests": [[30, "integration-tests"]], "End-to-end (functional) tests": [[30, "end-to-end-functional-tests"]], "Comparing unit, integration and end-to-end tests": [[30, "comparing-unit-integration-and-end-to-end-tests"]], "Run tests with Continuous Integration": [[31, "run-tests-with-continuous-integration"]], "CI & pull requests": [[31, "ci-pull-requests"]], "Example GitHub action that runs tests": [[31, "example-github-action-that-runs-tests"]], "Write tests for your Python package": [[32, "write-tests-for-your-python-package"]], "Why write tests for your package?": [[32, "why-write-tests-for-your-package"]], "Tests for user edge cases": [[32, "tests-for-user-edge-cases"]], "Test examples": [[32, null]], "How do I know what type of tests to write?": [[32, "how-do-i-know-what-type-of-tests-to-write"]], "Make your Python code installable": [[33, "make-your-python-code-installable"]], "What we previously covered": [[33, null]], "About this lesson": [[33, null]], "About the Python package directory structure": [[33, "about-the-python-package-directory-structure"]], "About the basic package directory structure": [[33, "about-the-basic-package-directory-structure"]], "What is an __init__.py file?": [[33, "what-is-an-init-py-file"]], "What is a pyproject.toml file?": [[33, "what-is-a-pyproject-toml-file"], [40, "what-is-a-pyproject-toml-file"]], "Why the pyproject.toml file is important": [[33, null]], "Time to create your Python package!": [[33, "time-to-create-your-python-package"]], "Step 1: Set Up the Package Directory Structure": [[33, "step-1-set-up-the-package-directory-structure"]], "Hatch and project names": [[33, null]], "Step 2: Add code to your package": [[33, "step-2-add-code-to-your-package"]], "Python modules and the __init__.py file": [[33, null]], "Step 3: Add code to your add_numbers.py module": [[33, "step-3-add-code-to-your-add-numbers-py-module"]], "Step 4: Modify metadata in your pyproject.toml file": [[33, "step-4-modify-metadata-in-your-pyproject-toml-file"]], "Brief overview of the TOML file": [[33, null]], "Adjust project classifiers": [[33, "adjust-project-classifiers"]], "The bare minimum needed in a pyproject.toml file": [[33, null]], "Step 5: Install your package locally": [[33, "step-5-install-your-package-locally"]], "What does pip install -e . do?": [[33, null]], "Look for pyospackage in your environment": [[33, "look-for-pyospackage-in-your-environment"]], "Step 6: Test out your new package": [[33, "step-6-test-out-your-new-package"]], "Installing packages from GitHub": [[33, null]], "Congratulations! You created your first Python package": [[33, "congratulations-you-created-your-first-python-package"]], "Footnotes": [[33, "footnotes"], [34, "footnotes"], [38, "footnotes"], [39, "footnotes"]], "Add a LICENSE & CODE_OF_CONDUCT to your Python package": [[34, "add-a-license-code-of-conduct-to-your-python-package"]], "Learning objectives": [[34, null], [35, null]], "What is a license?": [[34, "what-is-a-license"]], "What license should you use?": [[34, "what-license-should-you-use"]], "Licenses for the scientific Python ecosystem": [[34, null]], "Where should the LICENSE file live": [[34, "where-should-the-license-file-live"]], "How to add a LICENSE file to your package directory": [[34, "how-to-add-a-license-file-to-your-package-directory"]], "How to add a LICENSE to your package - the manual way": [[34, "how-to-add-a-license-to-your-package-the-manual-way"]], "An overview of LICENSES in the scientific Python ecosystem": [[34, null]], "What is a code of conduct file?": [[34, "what-is-a-code-of-conduct-file"]], "What to put in your code of conduct file": [[34, "what-to-put-in-your-code-of-conduct-file"]], "How to add a CODE_OF_CONDUCT file to your package directory": [[34, "how-to-add-a-code-of-conduct-file-to-your-package-directory"]], "Additional Code of Conduct resources": [[34, null]], " Wrap up": [[34, "wrap-up"], [38, "wrap-up"], [40, "wrap-up"]], "Add a README file to your Python package": [[35, "add-a-readme-file-to-your-python-package"]], "What is a README file?": [[35, "what-is-a-readme-file"]], "Create a README.md file for your package": [[35, "create-a-readme-md-file-for-your-package"]], "Step 0: Create a README file": [[35, "step-0-create-a-readme-file"]], "Step 1: Add the name of your package as the README title": [[35, "step-1-add-the-name-of-your-package-as-the-readme-title"]], "Step 2: add badges to the top of your README file": [[35, "step-2-add-badges-to-the-top-of-your-readme-file"]], "Step 3: Add a description of what your package does": [[35, "step-3-add-a-description-of-what-your-package-does"]], "Step 4: Add package installation instructions": [[35, "step-4-add-package-installation-instructions"]], "Step 5: Any additional setup": [[35, "step-5-any-additional-setup"]], "Step 6: Add a get started section": [[35, "step-6-add-a-get-started-section"]], "Provide a fully functional code snippet if possible": [[35, null]], "Step 7: Community section": [[35, "step-7-community-section"]], "Step 8: Citation information": [[35, "step-8-citation-information"]], "The finished README file": [[35, "the-finished-readme-file"]], "Get to know hatch": [[36, "get-to-know-hatch"]], "Install Hatch": [[36, "install-hatch"]], "Configure hatch": [[36, "configure-hatch"]], "Step 1: Open and edit your config.toml file": [[36, "step-1-open-and-edit-your-config-toml-file"]], "Step 2 - update your email and name": [[36, "step-2-update-your-email-and-name"]], "Step 3": [[36, "step-3"]], "Step 4: Close the config file and run hatch config show": [[36, "step-4-close-the-config-file-and-run-hatch-config-show"]], "Comparison to other tools": [[36, null]], "What\u2019s next": [[36, "what-s-next"]], "Python packaging 101": [[37, "python-packaging-101"]], "Who are these tutorials for?": [[37, "who-are-these-tutorials-for"]], "Learning Objectives": [[37, null], [38, null], [39, null], [40, null]], "What is a Python package?": [[37, "what-is-a-python-package"]], "Python packages are installable": [[37, "python-packages-are-installable"]], "Why create a Python package?": [[37, "why-create-a-python-package"]], "What to consider before you create a package": [[37, "what-to-consider-before-you-create-a-package"]], "The elements of a Python package": [[37, "the-elements-of-a-python-package"]], "What pyOpenSci looks for in a package": [[37, null]], "Packages are more than just code - Infrastructure": [[37, "packages-are-more-than-just-code-infrastructure"]], "Version control and storing your package on GitHub or GitLab": [[37, "version-control-and-storing-your-package-on-github-or-gitlab"]], "GitHub & GitLab vs. Git": [[37, null]], "Issues or Ticket Trackers": [[37, "issues-or-ticket-trackers"]], "Continuous integration and continuous deployment": [[37, "continuous-integration-and-continuous-deployment"]], "When should you turn your code into a Python package?": [[37, "when-should-you-turn-your-code-into-a-python-package"]], "Packages that you expect others to use should be well-scoped": [[37, "packages-that-you-expect-others-to-use-should-be-well-scoped"]], "How does this relate to code for a research project?": [[37, null]], "Matplotlib as an example": [[37, null]], "Code should also be clean & readable & documented": [[37, "code-should-also-be-clean-readable-documented"]], "Making your package installable - publishing to PyPI & conda-forge": [[37, "making-your-package-installable-publishing-to-pypi-conda-forge"]], "Python packages and environments": [[37, "python-packages-and-environments"]], "Publishing a package to PyPI / Conda-Forge": [[37, "publishing-a-package-to-pypi-conda-forge"]], "Yay, your package has users! Now what?": [[37, "yay-your-package-has-users-now-what"]], "Support for contributors and maintainers": [[37, null]], "What\u2019s next?": [[37, "what-s-next"]], "Publish your Python package that is on PyPI to conda-forge": [[38, "publish-your-python-package-that-is-on-pypi-to-conda-forge"]], "What is conda-forge?": [[38, "what-is-conda-forge"]], "Why publish to conda-forge": [[38, "why-publish-to-conda-forge"]], "How publishing to conda-forge works": [[38, "how-publishing-to-conda-forge-works"]], "Conda-forge publication steps": [[38, "conda-forge-publication-steps"]], "Maintaining a conda-forge package": [[38, "maintaining-a-conda-forge-package"]], " How to Publish your package on conda-forge": [[38, "how-to-publish-your-package-on-conda-forge"]], "Step 1: Install grayskull": [[38, "step-1-install-grayskull"]], "Step 2: Fork and clone the conda-forge staged-recipes repository": [[38, "step-2-fork-and-clone-the-conda-forge-staged-recipes-repository"]], "Step 3: Create your conda-forge recipe": [[38, "step-3-create-your-conda-forge-recipe"]], "Step 3b: Bug fix - add a home url to the about: section": [[38, "step-3b-bug-fix-add-a-home-url-to-the-about-section"]], "Step 4: tests for conda-forge": [[38, "step-4-tests-for-conda-forge"]], "Step 4: Submit a pull request to the staged-recipes repository": [[38, "step-4-submit-a-pull-request-to-the-staged-recipes-repository"]], "Pull request template checklist tips": [[38, null]], "conda-forge staged recipes and CI failures": [[38, null]], " Congratulations - you have added your package to conda-forge.": [[38, "congratulations-you-have-added-your-package-to-conda-forge"]], "Maintaining your conda-forge feedstock": [[38, "maintaining-your-conda-forge-feedstock"]], "Publish your Python package to PyPI": [[39, "publish-your-python-package-to-pypi"]], "Test PyPI vs PyPI": [[39, "test-pypi-vs-pypi"]], "4 Steps for publishing a Python package on PyPI": [[39, "steps-for-publishing-a-python-package-on-pypi"]], "Learn more about building Python packages in our guide": [[39, null]], "Step 1: Create a Python package development environment": [[39, "step-1-create-a-python-package-development-environment"]], "Hatch and environments": [[39, "hatch-and-environments"]], "Step 2: Build your package\u2019s sdist and wheel distributions": [[39, "step-2-build-your-package-s-sdist-and-wheel-distributions"]], "Learn more about building a Python package": [[39, null]], " Congratulations - you\u2019ve created your Python package distribution files ": [[39, "congratulations-you-ve-created-your-python-package-distribution-files"]], "Step 3. Setup your test PyPI account": [[39, "step-3-setup-your-test-pypi-account"]], "Test PyPI vs. PyPI": [[39, null]], "Setup 2-factor (2FA) authentication": [[39, null]], "Step 4. Create a package upload token": [[39, "step-4-create-a-package-upload-token"]], "Why create package-specific tokens?": [[39, null]], "Follow the steps below to create your token.": [[39, "follow-the-steps-below-to-create-your-token"]], "Upload to PyPI using Hatch": [[39, "upload-to-pypi-using-hatch"]], "Install your package from test PyPI": [[39, "install-your-package-from-test-pypi"]], "Time to install your package": [[39, "time-to-install-your-package"]], "The value of end-to-end tools like hatch, flit and poetry": [[39, null]], "Package-specific token vs trusted publisher": [[39, "package-specific-token-vs-trusted-publisher"]], "OPTIONAL: If you want to use a manual token-based publication workflow": [[39, "optional-if-you-want-to-use-a-manual-token-based-publication-workflow"]], "You have published your package to (test) PyPI!": [[39, "you-have-published-your-package-to-test-pypi"]], "Make your Python package PyPI ready - pyproject.toml": [[40, "make-your-python-package-pypi-ready-pyproject-toml"]], "What is the pyproject.toml used for?": [[40, "what-is-the-pyproject-toml-used-for"]], "How is pyproject.toml metadata used?": [[40, "how-is-pyproject-toml-metadata-used"]], "How to update your pyproject.toml file": [[40, "how-to-update-your-pyproject-toml-file"]], "More on hatchling": [[40, null]], "Step 1: Add Author, maintainer and project description": [[40, "step-1-add-author-maintainer-and-project-description"]], "Author names & emails": [[40, null]], "Step 2: Add README and license": [[40, "step-2-add-readme-and-license"]], "Step 3: Specify Python version with requires-python": [[40, "step-3-specify-python-version-with-requires-python"]], "Step 4: Specify Dependencies": [[40, "step-4-specify-dependencies"]], "Pin dependencies with caution": [[40, null]], "Step 5: Add PyPI classifiers": [[40, "step-5-add-pypi-classifiers"]], "What happens when you use incorrect classifiers?": [[40, null]], "Step 6: Add the [project.urls] table": [[40, "step-6-add-the-project-urls-table"]], "Putting it all together - your completed pyproject.toml file": [[40, "putting-it-all-together-your-completed-pyproject-toml-file"]], "Example pyproject.toml files": [[40, "example-pyproject-toml-files"]], "Publish a new version of your package to PyPI": [[40, "publish-a-new-version-of-your-package-to-pypi"]], "Next (optional) step - publishing to conda-forge": [[40, "next-optional-step-publishing-to-conda-forge"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["CONTRIBUTING", "documentation/hosting-tools/intro", "documentation/hosting-tools/myst-markdown-rst-doc-syntax", "documentation/hosting-tools/publish-documentation-online", "documentation/hosting-tools/sphinx-python-package-documentation-tools", "documentation/hosting-tools/website-hosting-optimizing-your-docs", "documentation/index", "documentation/repository-files/code-of-conduct-file", "documentation/repository-files/contributing-file", "documentation/repository-files/development-guide", "documentation/repository-files/intro", "documentation/repository-files/license-files", "documentation/repository-files/readme-file-best-practices", "documentation/write-user-documentation/create-package-tutorials", "documentation/write-user-documentation/document-your-code-api-docstrings", "documentation/write-user-documentation/get-started", "documentation/write-user-documentation/intro", "index", "package-structure-code/code-style-linting-format", "package-structure-code/complex-python-package-builds", "package-structure-code/declare-dependencies", "package-structure-code/intro", "package-structure-code/publish-python-package-pypi-conda", "package-structure-code/pyproject-toml-python-package-metadata", "package-structure-code/python-package-build-tools", "package-structure-code/python-package-distribution-files-sdist-wheel", "package-structure-code/python-package-structure", "package-structure-code/python-package-versions", "tests/index", "tests/run-tests", "tests/test-types", "tests/tests-ci", "tests/write-tests", "tutorials/1-installable-code", "tutorials/add-license-coc", "tutorials/add-readme", "tutorials/get-to-know-hatch", "tutorials/intro", "tutorials/publish-conda-forge", "tutorials/publish-pypi", "tutorials/pyproject-toml"], "filenames": ["CONTRIBUTING.md", "documentation/hosting-tools/intro.md", "documentation/hosting-tools/myst-markdown-rst-doc-syntax.md", "documentation/hosting-tools/publish-documentation-online.md", "documentation/hosting-tools/sphinx-python-package-documentation-tools.md", "documentation/hosting-tools/website-hosting-optimizing-your-docs.md", "documentation/index.md", "documentation/repository-files/code-of-conduct-file.md", "documentation/repository-files/contributing-file.md", "documentation/repository-files/development-guide.md", "documentation/repository-files/intro.md", "documentation/repository-files/license-files.md", "documentation/repository-files/readme-file-best-practices.md", "documentation/write-user-documentation/create-package-tutorials.md", "documentation/write-user-documentation/document-your-code-api-docstrings.md", "documentation/write-user-documentation/get-started.md", "documentation/write-user-documentation/intro.md", "index.md", "package-structure-code/code-style-linting-format.md", "package-structure-code/complex-python-package-builds.md", "package-structure-code/declare-dependencies.md", "package-structure-code/intro.md", "package-structure-code/publish-python-package-pypi-conda.md", "package-structure-code/pyproject-toml-python-package-metadata.md", "package-structure-code/python-package-build-tools.md", "package-structure-code/python-package-distribution-files-sdist-wheel.md", "package-structure-code/python-package-structure.md", "package-structure-code/python-package-versions.md", "tests/index.md", "tests/run-tests.md", "tests/test-types.md", "tests/tests-ci.md", "tests/write-tests.md", "tutorials/1-installable-code.md", "tutorials/add-license-coc.md", "tutorials/add-readme.md", "tutorials/get-to-know-hatch.md", "tutorials/intro.md", "tutorials/publish-conda-forge.md", "tutorials/publish-pypi.md", "tutorials/pyproject-toml.md"], "titles": ["Contributing Guide for the Python open source software packaging book", "Tools to Build and Host your Documentation", "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs", "How to publish your Python package documentation online", "Using Sphinx to Build Python Package Documentation", "Optimizing your documentation so search engines (and other users) find it", "Documentation for your Open Source Python Package", "The CODE_OF_CONDUCT file - Python Packaging", "Contributing File in your Python Open Source Package", "What the development guide for your Python package should contain", "Documentation Files That Should be in your Python Package Repository", "License files for scientific Python open source software", "README File Guidelines and Resources", "Create tutorials in your Python package documentation", "Document the code in your package\u2019s API using docstrings", "Create User Facing Documentation for your Python Package", "Writing user-facing documentation for your Python package", "pyOpenSci Python Package Guide", "Python Package Code Style, Format and Linters", "Complex Python package builds", "Python Package Dependencies", "Python package structure information", "Publishing Your Package In A Community Repository: PyPI or Anaconda Cloud", "Use a pyproject.toml file for your package configuration & metadata", "Python Packaging Tools", "Learn about Building a Python Package", "Python Package Structure for Scientific Python Projects", "Creating New Versions of Your Python Package", "Tests and data for your Python package", "Run Python package tests", "Test Types for Python packages", "Run tests with Continuous Integration", "Write tests for your Python package", "Make your Python code installable", "Add a LICENSE & CODE_OF_CONDUCT to your Python package", "Add a README file to your Python package", "Get to know hatch", "Python packaging 101", "Publish your Python package that is on PyPI to conda-forge", "Publish your Python package to PyPI", "Make your Python package PyPI ready - pyproject.toml"], "terms": {"i": [0, 1, 2, 4, 5, 7, 10, 12, 13, 15, 18, 19, 21, 24, 26, 27, 28, 30, 31, 36], "commun": [0, 4, 5, 6, 7, 10, 11, 15, 21, 24, 26, 33, 34, 37, 38, 40], "resourc": [0, 17, 19, 23, 37, 40], "we": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29, 30, 34, 35, 36, 37, 38, 39, 40], "welcom": [0, 4, 6, 8, 17, 33, 36, 37], "form": [0, 29, 30, 37], "issu": [0, 5, 6, 8, 15, 17, 18, 19, 24, 26, 29, 30, 32, 33, 35, 39, 40], "pull": [0, 3, 8, 9, 13, 18, 20, 22, 32, 34, 37], "request": [0, 3, 8, 9, 13, 18, 22, 24, 32, 37, 40], "If": [0, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "you": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 25, 26, 28, 30, 31, 32, 35, 36], "have": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40], "an": [0, 2, 5, 6, 9, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31, 32, 35, 38, 39, 40], "idea": [0, 17, 37], "someth": [0, 6, 20, 25, 32, 33, 35, 36, 37, 38, 39, 40], "should": [0, 6, 7, 11, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 28, 30, 31, 32, 33, 35, 36, 38, 39, 40], "includ": [0, 1, 3, 4, 6, 7, 8, 9, 12, 13, 14, 15, 17, 18, 20, 22, 24, 25, 27, 33, 34, 35, 36, 37, 38, 40], "pleas": [0, 6, 12, 19, 21, 36, 38], "here": [0, 4, 6, 7, 12, 15, 16, 17, 18, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "find": [0, 2, 6, 12, 14, 15, 17, 18, 22, 23, 24, 25, 27, 29, 35, 37, 38, 39, 40], "typo": 0, "feel": [0, 14], "free": [0, 3, 4, 5], "submit": [0, 5, 6, 8, 9, 11, 12, 18, 20, 21, 31, 37], "modifi": [0, 11, 13, 18, 27, 37, 38, 40], "text": [0, 2, 7, 9, 11, 13, 14, 27, 33, 34, 35, 36, 38], "directli": [0, 18, 20, 22, 23, 24, 25, 26, 33, 34, 37, 39], "Or": [0, 6, 15, 20, 22, 29, 35, 37], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40], "less": [0, 12, 13, 18, 24, 30, 32], "comfort": [0, 2, 7, 36], "want": [0, 2, 3, 4, 5, 7, 11, 12, 13, 14, 17, 18, 19, 20, 22, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40], "see": [0, 4, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 32, 33, 35, 36, 37, 38, 39, 40], "larger": [0, 26, 37], "chang": [0, 6, 9, 17, 18, 24, 26, 27, 31, 32, 37, 38], "content": [0, 5, 6, 12, 17, 25, 27, 33, 34, 35, 36, 37], "first": [0, 12, 18, 21, 23, 24, 25, 26, 35, 36, 37, 38, 39, 40], "most": [0, 1, 2, 4, 5, 21, 22, 23, 24, 25, 27, 29, 33, 34, 37, 38, 39, 40], "repositori": [0, 3, 6, 7, 8, 9, 11, 12, 17, 18, 20, 23, 24, 25, 26, 27, 31, 33, 34, 35, 37, 39, 40], "sphinx": [0, 1, 2, 14, 15, 16, 20, 23, 39], "engin": 0, "built": [0, 5, 18, 22, 23, 24, 25, 27, 29, 30, 33, 38, 39, 40], "us": [0, 1, 2, 3, 5, 6, 7, 9, 10, 15, 17, 19, 21, 22, 25, 28, 30, 31, 32, 33, 35, 36, 38], "theme": [0, 5, 23, 37, 39], "myst": [0, 1, 4, 15], "syntax": [0, 1, 4, 15, 18, 20, 23, 25, 29, 33, 40], "creat": [0, 3, 4, 7, 9, 11, 12, 14, 16, 18, 21, 22, 23, 24, 26, 29, 30, 31, 34, 36, 40], "each": [0, 5, 6, 7, 13, 14, 15, 18, 21, 23, 24, 25, 29, 30, 32, 34, 37, 38, 40], "page": [0, 4, 5, 12, 13, 14, 17, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "wish": [0, 3, 6, 9, 18, 19, 23, 24, 25, 29, 31, 33, 34, 38, 39, 40], "work": [0, 3, 9, 13, 14, 17, 18, 20, 22, 23, 24, 26, 27, 29, 30, 31, 32, 33, 35, 37, 39, 40], "need": [0, 2, 3, 6, 9, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40], "fork": 0, "clone": 0, "The": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 34, 38, 40], "easiest": [0, 21], "wai": [0, 1, 3, 12, 15, 18, 21, 23, 24, 25, 27, 29, 30, 32, 33, 35, 37, 39, 40], "nox": [0, 20, 24, 28, 31, 33, 37], "tool": [0, 2, 4, 5, 7, 11, 12, 13, 14, 15, 17, 19, 20, 21, 22, 23, 25, 26, 28, 33, 34, 35, 37, 38, 40], "quickli": [0, 3, 12, 13, 14, 15, 32, 40], "environ": [0, 3, 9, 13, 18, 22, 24, 25, 26, 30, 31, 36, 38, 40], "run": [0, 3, 4, 9, 17, 20, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 39, 40], "command": [0, 14, 18, 20, 23, 24, 27, 29, 30, 33, 36, 37, 38, 39], "within": [0, 12, 14, 15, 18, 20, 21, 22, 23, 26, 27, 29, 33, 34, 35, 37, 38, 40], "them": [0, 6, 12, 14, 18, 20, 23, 24, 30, 33, 35, 37, 38, 39, 40], "ensur": [0, 11, 13, 14, 17, 18, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40], "ha": [0, 2, 9, 11, 12, 13, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 38, 39, 40], "all": [0, 6, 10, 11, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39], "depend": [0, 6, 17, 18, 19, 25, 26, 27, 29, 31, 33, 37, 38, 39], "To": [0, 11, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "do": [0, 3, 5, 11, 12, 14, 15, 18, 22, 25, 27, 29, 30, 34, 36, 37, 38, 39, 40], "so": [0, 6, 12, 18, 20, 21, 22, 24, 25, 30, 33, 36, 37, 38, 39, 40], "follow": [0, 5, 9, 10, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 36, 38, 40], "step": [0, 14, 15, 19, 22, 25, 26, 27, 29, 30, 31, 37], "instal": [0, 6, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 31, 34, 40], "pip": [0, 18, 23, 24, 29, 31, 35, 36, 37, 38, 39, 40], "": [0, 2, 3, 4, 7, 8, 9, 11, 13, 15, 16, 18, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 40], "doc": [0, 11, 12, 14, 17, 23, 24, 26, 29, 33, 39], "folder": [0, 21, 26, 38], "specifi": [0, 9, 12, 13, 14, 15, 18, 20, 23, 24, 29, 31, 33, 34], "noxfil": [0, 29], "py": [0, 5, 13, 14, 18, 20, 26, 27, 29, 35, 36, 37, 38, 39], "configur": [0, 13, 18, 24, 25, 26, 27, 33, 40], "output": [0, 13, 14, 18, 25, 29, 37, 38], "_build": [0, 13], "html": [0, 2, 4, 13, 39], "live": [0, 9, 13, 17, 21, 22, 26, 29, 33, 37], "updat": [0, 6, 7, 9, 17, 18, 22, 23, 24, 33, 34, 35, 37, 38, 39], "when": [0, 1, 5, 9, 10, 12, 14, 15, 18, 20, 21, 22, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 38, 39], "file": [0, 2, 3, 4, 5, 6, 9, 13, 14, 15, 17, 18, 21, 22, 24, 26, 27, 29, 31, 37, 38], "common": [1, 4, 11, 12, 20, 21, 24, 25, 29, 33, 35, 40], "python": [1, 2, 12, 23, 31, 36], "ecosystem": [1, 2, 4, 11, 12, 14, 18, 20, 21, 22, 25, 26, 27, 29, 36, 38, 39, 40], "current": [1, 4, 5, 20, 21, 24, 25, 26, 27, 29, 33, 35, 38, 39, 40], "howev": [1, 2, 3, 4, 5, 6, 11, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 35, 36, 37, 38, 39, 40], "some": [1, 3, 5, 7, 9, 11, 12, 13, 14, 15, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37, 38, 40], "maintain": [1, 3, 7, 9, 11, 12, 14, 17, 18, 20, 21, 23, 24, 25, 26, 27, 31, 32, 34, 35, 36, 39], "like": [1, 5, 6, 8, 12, 13, 17, 18, 20, 22, 23, 24, 25, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "mkdoc": [1, 4], "It": [1, 2, 5, 6, 7, 8, 9, 12, 13, 14, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "up": [1, 6, 9, 12, 14, 20, 24, 26, 27, 28, 29, 30, 31, 36, 37, 39], "platform": [1, 10, 20, 23, 25, 28, 34, 35, 37], "prefer": [1, 2, 4, 6, 13, 18, 24, 27, 33, 38, 40], "In": [1, 6, 7, 10, 12, 14, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "thi": [1, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 38, 39, 40], "section": [1, 10, 13, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 39, 40], "introduc": [1, 24, 30, 36, 37], "talk": [1, 11, 16, 20], "about": [1, 2, 6, 8, 13, 14, 15, 16, 18, 19, 20, 21, 22, 28, 29, 30, 31, 34, 35, 36, 37], "variou": [1, 21, 22, 28, 29, 31, 32, 37, 38, 40], "option": [1, 2, 3, 5, 11, 12, 17, 21, 22, 24, 27, 29, 35, 36], "can": [1, 2, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "write": [1, 2, 4, 6, 12, 13, 14, 17, 18, 24, 27, 28, 29, 30, 37], "rst": [1, 4, 13], "also": [1, 3, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40], "publish": [1, 12, 15, 17, 20, 21, 23, 24, 25, 27, 33, 34, 35, 36], "onlin": [1, 10, 11, 12, 22, 28, 29, 31, 35, 37], "might": [1, 2, 6, 7, 12, 14, 15, 16, 18, 20, 21, 22, 23, 26, 27, 29, 30, 32, 33, 35, 36, 37, 38, 40], "help": [1, 5, 6, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40], "optim": 1, "websit": [1, 2, 3, 4, 5, 6, 9, 11, 12, 15, 23, 25, 26, 33, 34, 38, 39, 40], "There": [2, 12, 13, 14, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, 37, 38, 39, 40], "three": [2, 6, 19, 20, 27, 28, 29, 34], "commonli": [2, 3, 6, 18, 24, 25, 26, 27, 29, 34, 38], "easi": [2, 13, 15, 23, 24, 25, 27, 35, 40], "learn": [2, 11, 17, 18, 20, 22, 26, 28, 29, 30, 31, 33, 36], "default": [2, 13, 18, 20, 22, 24, 26, 29, 31, 33, 36, 38, 39, 40], "jupyt": [2, 26, 35], "notebook": [2, 26, 35], "add": [2, 4, 5, 11, 12, 13, 14, 17, 18, 19, 21, 22, 24, 25, 26, 27, 29, 30, 31, 32, 37, 39], "allow": [2, 3, 5, 9, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "render": [2, 13, 40], "limit": [2, 22, 24, 25, 39], "For": [2, 13, 14, 18, 19, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37, 38, 39, 40], "instanc": [2, 14, 18, 19, 24, 25, 27, 29, 32, 33, 36], "refer": [2, 3, 11, 14, 15, 18, 20, 21, 24, 25, 27, 30, 32, 33, 34, 37, 38, 40], "color": 2, "call": [2, 8, 14, 18, 19, 20, 22, 23, 25, 27, 29, 33, 34, 37, 38, 39], "out": [2, 9, 11, 13, 18, 21, 22, 23, 24, 25, 26, 34, 35, 36, 37, 38, 39, 40], "block": [2, 18], "other": [2, 3, 4, 6, 7, 10, 11, 12, 18, 21, 22, 23, 24, 25, 26, 30, 32, 33, 34, 35, 38, 39, 40], "custom": [2, 3, 11, 19, 24, 36], "element": [2, 5, 10, 11, 13, 14, 16, 23, 28, 30, 33, 35, 38, 40], "either": [2, 11, 19, 20, 23, 24, 25, 29, 38], "restructur": 2, "nativ": [2, 4], "support": [2, 3, 4, 5, 6, 13, 14, 15, 17, 19, 21, 22, 23, 25, 26, 27, 29, 30, 33, 34, 36, 38, 39, 40], "wa": [2, 18, 20, 22, 23, 25, 27, 32, 38, 39, 40], "mani": [2, 3, 5, 7, 10, 11, 13, 15, 18, 19, 21, 22, 24, 25, 26, 27, 33, 35, 38, 40], "year": [2, 17, 20, 22, 23, 30, 40], "recent": [2, 20, 22, 23, 40], "risen": 2, "top": [2, 12, 13, 18, 33, 34, 39, 40], "favorit": [2, 33, 36, 38], "given": [2, 15, 26, 27, 32, 34], "flexibl": [2, 21, 24], "combin": [2, 13], "vanilla": 2, "nice": [2, 9, 13, 20, 23, 29, 40], "becaus": [2, 11, 14, 18, 20, 22, 23, 24, 25, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40], "offer": [2, 3, 5, 24, 29, 36, 37], "both": [2, 6, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40], "rich": 2, "function": [2, 4, 6, 13, 15, 16, 18, 19, 20, 24, 25, 26, 27, 28, 29, 32, 33, 37, 40], "simpl": [2, 6, 12, 14, 15, 18, 19, 21, 22, 23, 24, 26, 33, 39], "while": [2, 4, 5, 9, 11, 18, 22, 23, 24, 25, 26, 27, 31, 33, 35, 36, 37, 39, 40], "chose": [2, 5, 14, 18, 19, 20, 36, 40], "ani": [2, 8, 9, 11, 15, 18, 20, 22, 24, 25, 27, 29, 33, 36, 37, 38, 39, 40], "list": [2, 5, 6, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25, 29, 31, 33, 37, 38, 39, 40], "abov": [2, 9, 10, 12, 14, 15, 18, 20, 23, 24, 25, 26, 27, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40], "suggest": [2, 3, 6, 11, 14, 18, 19, 20, 23, 26, 27, 33, 34, 35, 38, 39, 40], "simpler": [2, 11, 19, 20, 27], "thu": [2, 12, 14, 20, 22, 24, 25, 26, 27, 32, 34, 37, 38, 39, 40], "easier": [2, 4, 11, 13, 14, 16, 22, 23, 24, 29, 32, 36, 37, 39, 40], "simplic": 2, "make": [2, 5, 9, 13, 14, 15, 16, 17, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 38, 39], "more": [2, 3, 5, 6, 11, 12, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 38], "peopl": [2, 5, 6, 7, 11, 15, 20, 22, 23, 26, 27, 31, 32, 34, 35, 37, 40], "contribut": [2, 6, 7, 9, 11, 14, 15, 17, 18, 20, 23, 25, 26, 31, 32, 35, 37], "core": [2, 5, 11, 14, 17, 18, 21, 22, 23, 24, 25, 30, 33, 34, 35, 37, 40], "packag": [2, 5, 31, 36], "readm": [2, 6, 8, 10, 15, 17, 23, 24, 25, 26, 33, 34, 38], "md": [2, 6, 7, 9, 13, 15, 23, 25, 26, 33, 34, 37, 40], "alreadi": [2, 24, 25, 26, 29, 33, 34, 35, 38, 39], "format": [2, 3, 9, 13, 17, 20, 21, 22, 27, 33, 37, 38, 39], "github": [2, 6, 10, 11, 12, 13, 15, 17, 18, 19, 22, 23, 27, 28, 29, 30, 32, 34, 35, 38, 39, 40], "wide": [2, 14, 17, 27, 39], "scientif": [2, 4, 12, 14, 18, 20, 21, 22, 24, 27, 29, 30, 37, 38, 40], "fenc": 2, "setup": [3, 9, 13, 18, 19, 20, 21, 24, 28, 29, 31, 33, 36, 38, 40], "host": [3, 20, 23, 26, 35, 38], "servic": [3, 20, 38], "two": [3, 13, 14, 15, 20, 22, 23, 25, 26, 32, 33, 38, 39, 40], "below": [3, 6, 10, 11, 12, 13, 14, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 31, 32, 33, 35, 36, 37, 38, 40], "yourself": [3, 7, 26, 37], "anoth": [3, 10, 12, 13, 14, 19, 20, 22, 24, 30, 36, 37, 38], "project": [3, 11, 12, 15, 18, 20, 21, 22, 24, 27, 28, 29, 32, 34, 35, 36, 38, 39], "fulli": [3, 24, 27, 40], "featur": [3, 9, 15, 18, 19, 20, 21, 26, 27, 29, 31, 32, 33, 37], "its": [3, 6, 14, 15, 18, 20, 23, 24, 25, 29, 30, 32, 33, 34, 35, 37, 40], "paid": 3, "tier": 3, "autom": [3, 18, 20, 27, 28, 33, 37, 38, 39], "build": [3, 6, 9, 12, 14, 17, 20, 21, 22, 26, 29, 31, 33, 34, 35, 37, 38, 40], "turn": [3, 19, 27, 39], "integr": [3, 9, 20, 22, 25, 28, 29, 38], "where": [3, 13, 15, 18, 21, 23, 24, 27, 29, 30, 32, 33, 38, 39, 40], "view": [3, 4, 6, 14, 17, 20, 23, 24, 33, 34, 39], "progress": 3, "success": 3, "failur": [3, 32], "version": [3, 6, 14, 17, 18, 20, 21, 22, 23, 24, 25, 26, 28, 31, 33, 34, 35, 38, 39], "which": [3, 4, 6, 7, 11, 12, 14, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 37, 38, 39, 40], "user": [3, 4, 7, 8, 9, 11, 12, 13, 14, 17, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40], "older": [3, 24, 40], "tag": [3, 5, 20, 23, 24, 33, 35, 38, 40], "thei": [3, 5, 6, 7, 9, 11, 12, 13, 15, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40], "download": [3, 13, 25, 37, 38, 39], "pdf": 3, "readthedoc": [3, 20], "yaml": [3, 18, 20, 22, 38, 40], "web": [3, 5, 24, 39], "local": [3, 9, 17, 20, 22, 24, 26, 27, 28, 29, 31, 34, 36, 37, 38, 39], "continu": [3, 9, 20, 22, 28, 29, 30, 32, 34, 38, 40], "push": [3, 22, 27, 31, 33, 37], "branch": [3, 31, 33, 34, 38], "great": [3, 12, 14, 20, 21, 24, 29, 35, 37, 39], "deploy": [3, 20], "bit": [3, 30, 36, 38], "deploi": 3, "account": [3, 38], "entir": [3, 5, 18, 25, 30, 37, 38, 39], "process": [3, 9, 11, 14, 17, 18, 20, 21, 22, 23, 25, 28, 29, 35, 37, 38, 39, 40], "don": [3, 6, 12, 14, 18, 20, 24, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "t": [3, 6, 12, 14, 18, 20, 22, 23, 24, 25, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40], "On": [4, 13, 20, 22, 25, 29, 39], "discuss": [4, 6, 9, 14, 15, 18, 19, 20, 22, 24, 25, 26, 27, 29, 34, 36, 39, 40], "your": [4, 7, 17, 19, 21, 25, 30, 31], "face": [4, 6, 14, 26, 37], "explor": [4, 13, 21, 36], "gain": [4, 17, 18, 39], "popular": [4, 5, 24, 29, 33, 36], "exampl": [4, 6, 10, 12, 13, 15, 22, 29, 30, 33, 35, 38, 39], "love": 4, "geopanda": [4, 14, 15, 20, 25, 29, 33], "land": [4, 12, 13, 23, 25, 34, 35, 38, 39, 40], "verd": [4, 8, 14], "code": [4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 36, 38, 39, 40], "our": [4, 6, 11, 17, 19, 20, 21, 23, 24, 25, 26, 30, 33, 34, 35, 36, 37, 38, 40], "A": [4, 6, 8, 9, 11, 13, 14, 15, 18, 21, 23, 24, 25, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40], "base": [4, 5, 6, 9, 13, 14, 18, 21, 23, 24, 29, 30, 31, 32, 33, 37, 38, 40], "upon": [4, 20, 21, 22, 24, 26, 27, 29, 37, 40], "set": [4, 5, 6, 9, 13, 17, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40], "templat": [4, 11, 35, 36], "serv": [4, 12, 24, 29, 30, 32, 40], "mean": [4, 11, 14, 20, 22, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 37, 38, 39], "modif": 4, "fly": 4, "written": [4, 15, 19, 20, 21, 22, 23, 24, 32, 37, 38, 40], "extend": [4, 18], "few": [4, 12, 18, 19, 21, 24, 25, 26, 32, 33, 35, 36, 37, 40], "appli": [4, 12, 14, 18, 27, 38], "quick": [4, 12, 15, 18, 24, 33, 35], "beauti": [4, 20], "automat": [4, 11, 18, 20, 25, 27, 29, 32, 37, 39], "class": [4, 13, 14, 15, 16, 30, 32, 37], "api": [4, 13, 15, 16, 23, 27, 39], "from": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 35, 36, 37, 38, 40], "docstr": [4, 9, 15, 18, 33, 37], "autodoc": [4, 14, 16], "test": [4, 6, 9, 13, 14, 17, 20, 21, 22, 23, 24, 25, 27, 34, 35, 36, 37, 40], "doctest": 4, "parser": 4, "whatev": [4, 25, 29, 31], "pydata": [4, 5, 23], "book": [4, 5], "furo": 4, "interest": [5, 8, 17, 18, 37, 40], "mai": [5, 7, 9, 13, 14, 15, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 35, 37, 38, 39, 40], "extens": [5, 13, 14, 16, 17, 20, 21, 22, 23, 25, 27, 29, 36, 37, 38, 39], "compliant": 5, "european": 5, "gener": [5, 11, 14, 15, 17, 19, 20, 24, 25, 27, 28, 29, 34, 38, 40], "data": [5, 6, 13, 14, 20, 22, 24, 25, 30, 33, 34, 36, 37], "protect": [5, 7, 11, 34], "regul": 5, "gdpr": 5, "compon": [5, 19, 30, 34, 37], "one": [5, 8, 14, 18, 20, 21, 23, 24, 25, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40], "let": [5, 11, 12, 15, 18, 20, 23, 25, 29, 32, 33, 35, 36, 37, 38], "know": [5, 6, 12, 14, 17, 24, 27, 29, 34, 35, 38], "site": [5, 12, 19], "collect": [5, 12, 18, 30, 37], "consent": 5, "possibl": [5, 15, 18, 30, 40], "infrastructur": [5, 6, 18, 20, 28], "around": [5, 7, 12, 17, 18, 21, 22, 27, 37, 40], "close": [5, 18, 27, 32, 34, 39], "slowli": 5, "shift": [5, 23], "awai": 5, "open": [5, 17, 18, 19, 21, 22, 24, 26, 33, 34, 35, 37, 38, 39, 40], "plausibl": 5, "cloudflar": 5, "matomo": 5, "pyopensci": [5, 9, 11, 12, 18, 20, 22, 23, 25, 27, 30, 33, 34, 35, 36, 38, 39, 40], "look": [5, 10, 13, 18, 20, 21, 23, 24, 25, 29, 32, 35, 36, 38, 39, 40], "sourc": [5, 18, 21, 22, 27, 33, 34, 35, 37, 38, 39, 40], "develop": [5, 6, 8, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 33, 35, 37, 40], "doe": [5, 13, 18, 24, 25, 27, 30, 32, 38, 39, 40], "sphinxcontrib": 5, "gtagj": 5, "try": [5, 11, 12, 21, 22, 29, 33, 35, 36, 38, 39, 40], "move": [5, 10, 12, 20, 24, 26, 40], "complianc": 5, "privaci": 5, "still": [5, 6, 20, 24, 27, 32, 37], "import": [5, 6, 7, 12, 14, 18, 20, 21, 24, 25, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40], "And": [5, 11, 13, 14, 18, 20, 21, 22, 24, 25, 38, 39, 40], "xml": 5, "index": [5, 13, 25, 26, 36, 37], "over": [5, 12, 17, 24, 26, 32, 37, 38], "time": [5, 9, 12, 13, 14, 18, 19, 22, 23, 24, 26, 27, 30, 32, 34, 35, 36, 37, 38, 40], "visibl": [5, 34, 40], "lightweight": 5, "requir": [5, 6, 9, 11, 14, 18, 19, 22, 24, 25, 27, 29, 32, 33, 35, 37, 38, 39], "conf": [5, 13, 14], "url": [5, 33, 39], "metadata": [5, 17, 20, 21, 22, 24, 26, 27, 34, 36, 37, 38, 39], "protocol": [5, 21], "provid": [5, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 37, 38, 39, 40], "preview": [5, 34], "share": [5, 11, 21, 33, 37, 38], "social": 5, "media": 5, "twitter": 5, "mastodon": 5, "even": [5, 14, 18, 20, 24, 27, 31, 32, 40], "slack": 5, "discours": [5, 17, 19], "note": [6, 15, 19, 24, 25, 26, 29, 30, 33, 35, 37, 38, 39, 40], "those": [6, 13, 14, 15, 18, 20, 21, 22, 23, 24, 25, 26, 27, 32, 35, 37, 38, 40], "As": [6, 14, 18, 19, 23, 24, 25, 26, 27, 32, 33, 35, 37, 39, 40], "evolv": [6, 17, 21, 22, 32], "guid": [6, 8, 10, 14, 15, 19, 20, 23, 24, 26, 27, 29, 33, 34, 35, 37, 40], "peer": [6, 11, 17, 18, 21, 27, 35, 37], "focus": [6, 13, 18, 19, 22, 37], "itself": [6, 7, 12, 18, 21, 37], "qualiti": [6, 12, 14, 18, 37], "cours": [6, 36], "valuabl": [6, 9, 18, 33, 37], "how": [6, 7, 8, 9, 10, 15, 16, 21, 24, 27, 28, 29, 30, 31, 33, 35, 36, 39], "get": [6, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 26, 29, 33, 37, 38, 40], "task": [6, 14, 18, 20, 23, 24, 29, 30, 35, 37], "done": [6, 18, 19, 33, 34, 39], "understand": [6, 11, 14, 17, 18, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 37, 38, 40], "workflow": [6, 9, 14, 15, 17, 19, 20, 21, 25, 26, 27, 29, 30, 31, 35, 37], "won": [6, 18, 24, 26, 29, 32, 33, 35, 36], "further": [6, 14, 19, 35, 37], "explicitli": [6, 24], "target": [6, 35], "who": [6, 15, 16, 21, 22, 23, 25, 26, 35, 38, 39, 40], "new": [6, 9, 11, 13, 14, 18, 21, 22, 24, 26, 30, 31, 32, 34, 35, 37, 38, 39], "er": 6, "scienc": [6, 9, 17], "expert": [6, 15], "programm": [6, 14, 15], "But": [6, 24, 25, 27, 30, 37, 39], "background": [6, 12], "softwar": [6, 20, 22, 25, 30, 31, 32, 34, 35, 37, 40], "These": [6, 7, 13, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 33, 34, 37, 39, 40], "start": [6, 11, 12, 13, 14, 15, 17, 18, 21, 23, 24, 26, 29, 30, 33, 34, 36, 37, 38, 39], "inform": [6, 8, 9, 20, 23, 25, 26, 29, 33, 36, 37, 38, 39, 40], "cite": [6, 11, 12, 35], "give": [6, 18, 30, 32], "credit": [6, 33], "research": 6, "applic": [6, 12, 20, 30, 35, 36, 37, 39, 40], "licens": [6, 8, 10, 12, 17, 23, 25, 26, 33, 35, 36, 37, 38], "oper": [6, 13, 14, 18, 23, 24, 25, 27, 28, 31, 37, 40], "subset": 6, "experienc": 6, "engag": [6, 7, 35], "abl": [6, 23, 25, 27, 29, 31, 32, 37], "bug": [6, 7, 27, 32, 37, 40], "fix": [6, 7, 18, 24, 27, 31, 37], "just": [6, 9, 11, 19, 21, 24, 25, 26, 33, 35, 36, 39], "spell": [6, 40], "error": [6, 18, 23, 27, 30, 32, 33, 38, 40], "tutori": [6, 14, 15, 16, 22, 23, 26, 30, 33, 34, 35, 36, 38, 40], "thing": [6, 8, 9, 17, 18, 24, 25, 32, 33, 34, 35, 37, 38, 39, 40], "d": [6, 8, 12, 17, 18, 23, 24, 29, 30, 33, 36, 37], "guidelin": [6, 8, 9, 18, 27, 34, 40], "clarifi": [6, 17], "rememb": [6, 18, 20, 35, 37, 38, 39], "definit": [6, 14, 18], "broad": [6, 15, 20, 22, 33, 34, 37], "could": [6, 18, 19, 24, 25, 27, 29, 30, 32, 35, 37, 38, 39], "report": [6, 29, 37, 40], "cover": [6, 9, 11, 13, 16, 23, 29, 35, 38], "edg": 6, "case": [6, 9, 11, 13, 14, 15, 18, 19, 20, 23, 24, 25, 26, 27, 30, 33, 35, 37, 38, 39, 40], "discov": [6, 18, 24, 34], "structur": [6, 13, 14, 17, 18, 23, 24, 25, 32, 35, 37, 39, 40], "specif": [6, 9, 11, 14, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 35, 37, 38, 40], "found": [6, 8, 15, 18, 22, 23, 24, 26, 27, 33, 38, 40], "check": [6, 11, 13, 14, 21, 22, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "link": [6, 8, 9, 10, 13, 15, 23, 27, 29, 31, 33, 34, 35, 37, 38, 40], "consid": [6, 7, 9, 11, 12, 14, 15, 16, 20, 21, 22, 23, 24, 26, 27, 29, 30, 35, 40], "detail": [6, 15, 18, 22, 24, 26, 27, 34, 36, 38], "movingpanda": [6, 10, 12, 22], "major": [6, 24, 27], "code_of_conduct": [6, 25, 26, 35, 40], "txt": [6, 20, 23, 25, 26, 33], "screen": [6, 10, 12], "shot": [6, 10, 12], "taken": [6, 10, 12, 38, 39], "nov": [6, 10, 12], "23": [6, 10, 12, 33, 39], "2022": [6, 10, 12], "walk": [6, 16, 23, 33, 34, 37, 38], "through": [6, 11, 12, 16, 17, 23, 24, 25, 29, 33, 34, 35, 36, 37, 38, 39, 40], "best": [6, 16, 18, 21, 22, 23, 24, 26, 37], "practic": [6, 16, 21, 23, 25, 27, 29, 37, 38, 39], "alwai": [6, 18, 23, 26, 27, 33, 35, 40], "explicit": 6, "keep": [6, 7, 10, 14, 15, 20, 22, 24, 27, 35, 37], "compat": [6, 11, 24, 27, 40], "old": 6, "difficult": [6, 14, 19, 22, 24, 29], "good": [6, 14, 18, 21, 27, 29, 32, 37, 38, 40], "rule": [6, 7, 18, 40], "thumb": 6, "least": [6, 33, 40], "latest": [6, 31, 38, 39], "e": [6, 14, 18, 19, 20, 23, 24, 26, 29, 38, 39, 40], "g": [6, 18, 19, 24, 26, 29, 33, 38, 40], "3": [6, 12, 14, 18, 20, 21, 23, 24, 25, 26, 29, 31, 32, 34], "8": [6, 18, 24, 27, 33, 38, 39], "7": [6, 33], "6": [6, 14, 18, 21], "scipi": [7, 21, 26], "conduct": [7, 8, 10, 37, 38], "notic": [7, 10, 13, 14, 15, 18, 20, 23, 25, 26, 29, 33, 34, 36, 38, 39, 40], "theirs": 7, "document": [7, 9, 11, 17, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 35, 38, 40], "fatiando": [7, 8], "locat": [7, 8, 12, 18, 20, 26, 27, 29, 31, 33, 35, 38, 39], "root": [7, 8, 11, 12, 18, 26, 29, 31, 33, 34, 35, 40], "onc": [7, 11, 12, 18, 20, 22, 25, 31, 33, 34, 36, 37, 38, 39, 40], "question": [7, 8, 15, 17, 19, 22, 24, 37], "encount": [7, 22, 26], "challeng": [7, 29, 34, 40], "team": [7, 18, 22, 24, 27, 31, 35, 37, 38, 39], "order": [7, 9, 14, 18, 20, 22, 23, 25, 33, 35, 38, 39, 40], "healthi": [7, 37], "unhealthi": 7, "behavior": [7, 24, 30, 32, 34], "establish": [7, 34, 37], "what": [7, 13, 15, 17, 18, 24, 27, 30, 39], "expect": [7, 14, 20, 28, 29, 30, 31, 32, 33, 38], "term": [7, 11, 12, 15, 24, 25, 32, 35, 40], "contributor": [7, 9, 12, 13, 14, 17, 18, 20, 23, 24, 27, 28, 31, 32, 34, 35, 40], "interact": [7, 24, 33, 34, 37], "enforc": [7, 18, 27], "harm": 7, "neg": [7, 30, 34], "own": [7, 11, 24, 25, 29, 30, 37, 38, 40], "encourag": [7, 11, 17, 22, 24, 36, 40], "adopt": [7, 21, 24, 27, 34], "languag": [7, 11, 12, 15, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 34, 35, 37, 38, 40], "coven": [7, 34], "terra": 7, "geoscienc": 7, "pygmt": 8, "type": [8, 9, 13, 15, 16, 17, 18, 19, 20, 22, 24, 27, 28, 33, 34, 37, 38, 39, 40], "happen": [8, 27, 35], "someon": [8, 12, 13, 15, 20, 23, 26, 32, 35, 37, 38, 39], "ask": [8, 12, 15, 24, 34, 37, 39], "place": [8, 20, 21, 23, 24, 26, 33, 34, 35, 39, 40], "ideal": [9, 12, 13, 15, 20, 22, 24, 37, 39], "clearli": [9, 12, 35], "show": [9, 10, 12, 13, 14, 21, 24, 25, 28, 29, 30, 33, 34, 35, 39], "technic": [9, 11, 12, 15, 32, 35, 38, 40], "profici": 9, "suit": [9, 12, 13, 14, 18, 20, 21, 22, 23, 25, 29, 30, 31, 32, 36, 37, 38], "standard": [9, 18, 21, 22, 23, 24, 27, 34, 37, 40], "style": [9, 17, 21, 33, 36, 37], "approach": [9, 17, 20, 21, 24, 26, 27, 29, 40], "exist": [9, 21, 22, 26, 27, 30, 32, 33, 34, 39], "releas": [9, 17, 18, 22, 24, 25, 33, 35, 37, 38, 39, 40], "onboard": [9, 37], "inclin": 9, "thought": [9, 27], "mainten": [9, 12, 13, 26, 27, 32, 35, 37, 39], "futur": [9, 14, 19, 23, 24, 27, 32, 33, 37, 38, 39, 40], "well": [9, 10, 12, 13, 14, 15, 20, 21, 22, 24, 27, 30, 32], "skip": [9, 29, 34, 35, 40], "especi": [9, 14, 24, 26, 38], "strongli": [9, 20, 23, 24, 26, 39, 40], "recommend": [9, 17, 20, 24, 25, 26, 27, 29, 33, 34, 35, 36, 39, 40], "elig": 9, "review": [9, 10, 11, 12, 13, 17, 18, 20, 22, 27, 32, 33, 34, 35, 37, 38, 40], "opt": 9, "mozilla": 9, "lab": 9, "outlin": [9, 35], "minimum": [10, 21, 38, 40], "mention": [10, 12, 23, 24], "etc": [10, 18, 23, 33], "measur": [10, 12], "health": [10, 12], "evalu": [10, 12, 29], "avail": [10, 11, 12, 17, 18, 20, 21, 22, 24, 27, 36, 37, 38, 39], "among": 10, "level": [10, 12, 13, 14, 15, 19, 20, 21, 26, 27, 30, 33, 37], "repo": [10, 15, 17, 18, 19, 24, 27, 33, 36, 37, 38], "snyk": [10, 12], "known": [10, 18, 22, 25, 30, 32, 38], "compani": [10, 38], "tab": [10, 24, 34], "similar": [10, 12, 14, 18, 24, 25, 33, 34, 38, 39, 40], "screenshot": [10, 25], "panda": [10, 12, 20, 25, 26, 32, 33, 37, 39, 40], "lesson": [11, 32, 34, 35, 36, 37, 38, 39, 40], "gitlab": [11, 33, 34, 35, 40], "contain": [11, 14, 20, 22, 23, 25, 26, 27, 29, 33, 34, 37, 39, 40], "legal": [11, 34, 35, 37, 40], "bind": 11, "describ": [11, 14, 15, 21, 23, 25, 27, 33, 35, 40], "whether": [11, 18, 20, 23, 26, 35, 37], "adapt": [11, 25, 32], "purpos": [11, 25, 30], "read": [11, 12, 14, 15, 16, 18, 23, 24, 25, 26, 34, 37, 40], "critic": [11, 24, 34, 35], "reason": [11, 14, 20, 21, 25, 26, 27], "select": [11, 18, 19, 21, 24, 34, 36, 39, 40], "choosealicens": [11, 34, 36], "com": [11, 18, 20, 23, 30, 33, 34, 35, 36, 38, 40], "avoid": [11, 12, 18, 20, 22, 35], "unless": [11, 31, 40], "guidanc": [11, 17, 21], "council": 11, "initi": [11, 14, 18, 37, 38, 40], "osi": [11, 23, 25, 37, 40], "approv": [11, 22, 23, 25, 37, 38, 40], "copi": [11, 33, 34, 35, 38, 39], "excel": [11, 19, 24, 27], "overview": [11, 19, 20, 21, 23, 24, 26, 27, 29, 35, 38, 40], "kei": [11, 23, 33, 40], "complementari": [11, 12, 30], "highlight": [11, 12, 24, 30], "bsd": [11, 23, 34, 36, 38], "2": [11, 12, 13, 14, 20, 21, 23, 24, 25, 32, 34], "claus": [11, 34, 38], "mit": [11, 25, 33, 34, 36, 38, 40], "psf": [11, 18], "incompat": [11, 27], "gpl": 11, "apach": [11, 40], "attribut": [11, 13, 14, 15, 16, 25, 27, 30, 32], "prohibit": 11, "commerci": 11, "coordin": [11, 14, 18], "unsur": [11, 34], "tend": [11, 26], "everi": [11, 14, 17, 18, 22, 23, 31, 33, 34, 37, 38, 39], "differ": [11, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 40], "borrow": 11, "compli": 11, "stackoverflow": 11, "stack": 11, "overflow": 11, "creativ": 11, "alik": 11, "sharealik": 11, "same": [11, 18, 22, 23, 24, 25, 26, 27, 30, 32, 33, 37, 38, 39, 40], "violat": 11, "proce": 11, "caution": [11, 24], "strong": 11, "paper": 11, "blog": [11, 23, 34, 37], "public": [11, 17, 22, 23, 33, 37, 40], "tell": [11, 18, 23, 24, 25, 32, 33, 35, 38, 39, 40], "cff": 11, "topic": [11, 23, 25, 33, 40], "doi": [11, 12, 35], "zenodo": [11, 26, 35], "often": [12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 33, 35, 37, 40], "befor": [12, 14, 18, 21, 26, 30, 32, 35, 36, 38, 39], "appear": [12, 23], "pypi": [12, 17, 20, 21, 23, 24, 26, 27, 29, 33, 34, 35, 36], "anaconda": [12, 26, 38], "pandera": [12, 37], "spend": [12, 30, 38], "front": [12, 19, 21, 26, 27, 39], "high": [12, 14, 15, 18, 19, 37], "editor": [12, 18, 21, 29, 33, 36, 37, 38], "chief": 12, "revis": 12, "begin": [12, 13, 17, 18, 21, 24, 30, 35, 36, 37, 38], "meet": [12, 21], "criteria": 12, "go": [12, 24, 29, 33, 34, 35, 37, 39], "checklist": [12, 30], "explan": [12, 14, 18, 33], "4": [12, 14, 15, 18, 21, 25, 29, 32], "sentenc": [12, 14, 18], "context": [12, 14], "fit": [12, 21, 30, 32, 39], "broader": [12, 15, 17, 24, 37], "librari": [12, 15, 18, 20, 29, 36, 38, 39], "wrap": [12, 21, 22, 24], "associ": [12, 20, 23, 24, 27, 33, 35, 37, 38, 39, 40], "hint": 12, "wrapper": 12, "probabl": 12, "doesn": [12, 18, 22, 24, 25, 33, 34, 37, 38, 39], "ve": [12, 20, 24, 34, 36, 37, 38, 40], "bottom": [12, 13, 23, 33, 38], "self": [12, 14, 27, 29, 32, 37], "explanatori": 12, "better": [12, 17, 23, 24, 27, 37, 40], "draw": 12, "attent": 12, "assur": [12, 14], "design": [12, 14, 29, 35, 37, 40], "properli": [12, 14, 20, 23, 25, 30, 31, 32, 38, 40], "ad": [12, 13, 15, 16, 17, 18, 22, 23, 24, 26, 32, 33, 34, 35, 40], "statu": [12, 23, 25, 33, 40], "fail": [12, 26, 31, 32, 38], "toward": [12, 33], "brows": [12, 40], "cloud": [12, 26, 31, 37, 38], "pass": [12, 14, 18, 29, 30, 38], "accept": [12, 21, 33, 35, 37, 38, 40], "been": [12, 18, 23, 24, 25, 26, 27, 32, 33, 35, 38], "bewar": [12, 24], "overus": 12, "overload": 12, "potenti": [12, 13, 18, 24, 26, 27, 28, 31, 37], "At": [12, 32, 33, 35, 37, 38, 39, 40], "1": [12, 13, 14, 18, 20, 21, 23, 24, 25, 29, 32, 34, 37], "state": [12, 15, 24, 35], "goal": [12, 15, 21, 30, 37, 39, 40], "varieti": 12, "vari": 12, "school": [12, 15], "equival": [12, 18, 27], "appropri": 12, "maxim": 12, "access": [12, 15, 22, 25, 26, 27, 29, 33, 35, 37, 39], "sure": [12, 14, 18, 26, 30, 32, 34, 35, 36, 37, 38, 39, 40], "authent": [12, 35], "token": [12, 35], "complex": [12, 14, 18, 21, 22, 24, 25, 26, 31, 36, 38], "rather": [12, 13, 15, 18, 20, 23, 24, 26, 27, 29, 33, 36, 37, 38, 39], "than": [12, 13, 18, 19, 20, 23, 24, 26, 29, 32, 33, 36, 38, 39, 40], "complic": 12, "sever": [12, 14, 15, 18, 22, 23, 24, 25, 34, 36, 37], "overwhelm": 12, "plenti": 12, "present": [12, 13, 26, 32], "direct": [12, 15, 34, 37], "advanc": [12, 20, 24, 38], "final": [12, 20, 22, 24, 27, 30, 33, 35, 37, 40], "bane": 12, "sullivan": 12, "art": [12, 28], "kira": 12, "hackergrrl": 12, "finish": [13, 17, 30, 37, 38], "second": [13, 24, 33, 37], "reproduc": [13, 29, 37], "construct": 13, "act": [13, 21, 32], "via": [13, 24, 27, 38, 39], "thumbnail": 13, "plot": [13, 20, 37], "script": [13, 14, 23, 25, 37, 38], "enjoi": 13, "mimic": 13, "method": [13, 15, 16, 20, 30, 32, 37], "ie": [13, 14, 24], "ipynb": 13, "friendli": [13, 17, 24, 31, 36, 37, 38], "visual": [13, 18, 37], "grid": 13, "execut": [13, 18, 29, 38], "per": 13, "downsid": 13, "finicki": 13, "particularli": [13, 20, 24, 25, 26, 29, 37, 38, 39], "matplotlib": [13, 33], "name": [13, 15, 18, 20, 22, 23, 24, 25, 26, 27, 29, 31, 34, 37, 38, 39], "plot_": 13, "dai": [13, 27, 38], "slightli": [13, 14, 24, 26], "nuanc": [13, 19, 24], "successfulli": [13, 18, 38, 39], "directori": [13, 18, 24, 25, 26, 29, 30, 31, 35, 36, 37, 38, 39, 40], "plot_tutori": 13, "produc": 13, "build_exampl": 13, "plot_sampl": 13, "built_exampl": 13, "dir": [13, 36], "sg_execution_tim": 13, "similarli": [13, 22, 27, 30], "pro": 13, "con": 13, "By": [13, 14, 18, 24, 26, 29, 32, 34, 37, 39], "addit": [13, 14, 15, 18, 19, 21, 23, 24, 25, 27, 29, 33, 38, 40], "epilog": 13, "singl": [13, 14, 18, 20, 23, 24, 27, 29, 30, 35, 37, 40], "column": 13, "another_tutori": 13, "separ": [13, 14, 23, 24, 38], "seri": [13, 30, 33, 36, 37, 38], "onpythonpackag": 13, "stand": [14, 39], "ppli": 14, "p": 14, "rogram": 14, "nterfac": 14, "add_numb": [14, 32, 35], "bunch": [14, 30, 39], "number": [14, 20, 24, 25, 29, 32, 33, 38], "simpli": [14, 35, 37, 38, 39], "calcul": [14, 30, 32], "valu": [14, 18, 23, 25, 27, 30, 32, 33, 36, 40], "return": [14, 18, 24, 27, 30, 32, 33, 39], "consist": [14, 18, 21, 22, 24, 25, 27, 32, 33, 37], "interfac": [14, 18, 24, 29, 33, 34], "input": [14, 32, 33, 37], "usual": [14, 22], "paramet": [14, 29, 30, 33], "argument": [14, 24], "effect": 14, "automag": [14, 16, 18, 27, 34], "full": [14, 22, 24, 33], "clean": [14, 18, 22, 24, 29], "along": [14, 33], "brief": 14, "dig": 14, "down": [14, 24, 26, 33, 38, 39, 40], "click": [14, 22, 23, 24, 26, 36, 38, 39, 40], "descript": [14, 23, 27, 33], "explain": [14, 27, 32, 37], "defin": [14, 15, 20, 23, 25, 29, 33, 35, 37, 40], "string": [14, 18, 23], "int": [14, 33], "np": 14, "arrai": [14, 20, 23, 25, 32, 40], "object": [14, 33], "googl": [14, 33], "rest": [14, 20], "simplifi": [14, 22, 23, 27, 29], "contrast": 14, "harder": [14, 26, 27], "scan": [14, 18], "take": [14, 26, 37, 38, 39], "line": [14, 18, 23, 24, 27, 36, 40], "modul": [14, 18, 37, 38, 39], "napoleon": 14, "short": [14, 15, 23, 30, 33, 35], "longer": [14, 18, 24, 40], "def": [14, 29, 30, 32, 33], "extent_to_json": 14, "ext_obj": 14, "convert": [14, 25, 30, 36], "bound": [14, 24, 40], "shape": [14, 17, 38], "geojson": 14, "spatial": [14, 15, 20, 38], "crop": 14, "raster": 14, "imag": [14, 18, 34, 37], "geodatafram": 14, "extent": [14, 27], "otherwis": [14, 27, 29, 38], "minx": 14, "mini": 14, "maxx": 14, "maxi": 14, "extent_json": 14, "dictionari": [14, 40], "corner": 14, "repres": [14, 22, 23, 24, 25, 29, 30, 32, 38, 40], "gpd": 14, "earthpi": 14, "io": [14, 35, 38, 39], "path_to_exampl": 14, "load": 14, "shapefil": 14, "rmnp": 14, "read_fil": 14, "shp": 14, "convers": [14, 27, 34], "polygon": 14, "105": 14, "4935937": 14, "40": [14, 30], "1580827": 14, "correct": [14, 19, 23, 24, 25, 30, 32, 33, 34, 37, 40], "mind": [14, 15, 20, 24], "neither": [14, 33], "item": [14, 18, 25, 33, 38, 40], "replac": [14, 18, 23, 33], "alon": [14, 21], "across": [14, 18, 21, 22, 24, 25, 26, 28, 30, 31, 36, 37, 38], "system": [14, 20, 23, 24, 25, 26, 27, 28, 31, 33, 37, 39, 40], "add_m": 14, "num1": 14, "num2": 14, "sum": [14, 33], "integ": [14, 33], "saw": [14, 18], "layer": [14, 21, 24], "anum": 14, "anum2": 14, "being": [14, 17, 20, 21, 24, 33, 35, 38, 40], "debug": 14, "faster": [14, 25], "static": [14, 38, 40], "mypi": [14, 33, 40], "perform": [14, 20, 21, 23, 24, 30, 32, 35, 37], "lower": [14, 38, 40], "entranc": 14, "barrier": 14, "true": [14, 30, 36], "multipl": [14, 18, 20, 24, 27, 29, 33, 37, 38], "obviou": [14, 23, 40], "sens": [14, 27, 35], "lot": [14, 40], "increment": 14, "break": [15, 24, 27, 30, 32, 33, 37, 38], "broadli": [15, 18, 22, 37], "granular": 15, "showcas": 15, "greater": [15, 32, 40], "navig": [15, 17, 24, 33, 38, 39], "highli": 15, "audienc": [15, 23, 25, 33, 35, 37, 40], "whenev": [15, 20], "jargon": [15, 35], "instruct": [15, 34, 36, 37, 38, 39], "reader": 15, "vignett": 15, "small": [15, 18, 26, 27, 35, 38], "involv": [15, 27, 30, 37, 40], "part": [15, 18, 20, 25, 26, 28, 30, 32, 38], "store": [15, 23, 24, 25, 27, 33, 36, 38, 39, 40], "card": 15, "popul": [16, 23, 24, 25, 33, 34, 35, 38, 40], "galleri": 16, "scientist": [17, 37], "decis": [17, 18, 19, 27, 33], "piec": [17, 30, 32], "curat": 17, "surround": [17, 18, 24, 30], "coc": 17, "now": [17, 20, 22, 27, 33, 34, 35, 38, 39, 40], "join": 17, "watch": 17, "conda": [17, 18, 21, 24, 25, 33, 35, 36, 39], "forg": [17, 18, 20, 21, 25, 29, 33, 35, 39], "pyproject": [17, 18, 24, 25, 26, 29, 34, 36, 38, 39], "toml": [17, 18, 24, 25, 26, 29, 34, 38, 39], "introduct": [17, 32], "hatch": [17, 19, 23, 25, 29, 35, 38, 40], "vibrant": 17, "sdist": [17, 22, 23, 24, 33, 37, 38], "wheel": [17, 22, 23, 24, 33, 37, 38], "declar": [17, 18, 23, 29, 33, 38, 39, 40], "non": [17, 19, 22, 23, 35, 40], "pure": [17, 18, 20, 21, 23, 25, 27, 33, 38], "intro": [17, 39], "ci": [17, 27, 28, 29, 30, 32, 36, 37], "activ": [17, 18, 20, 24, 26, 27, 29, 33, 37, 38, 39, 40], "goe": 17, "beginn": [17, 24, 26, 36, 37], "accur": 17, "divers": [17, 21], "pythonista": 17, "rang": [17, 21, 24, 40], "skill": [17, 40], "expertis": 17, "anyon": [17, 21, 22, 25, 38, 39, 40], "end": [17, 18, 19, 21, 23, 25, 28, 29, 31, 37, 38, 40], "usabl": 17, "invit": 17, "forum": 17, "next": [17, 18, 24, 33, 34, 35, 38, 39], "author": [18, 20, 21, 23, 25, 33], "pep": [18, 21, 24, 27], "readabl": [18, 23, 40], "precommit": 18, "bot": [18, 27, 38], "pr": [18, 22, 37, 38], "config": 18, "save": [18, 32, 34, 38], "signific": [18, 26], "care": [18, 25], "focu": [18, 24, 29, 30, 34], "without": [18, 20, 24, 25, 29, 31, 32, 33, 37, 39], "space": [18, 26, 33, 39], "punctuat": 18, "would": [18, 26, 27, 29, 30, 32, 33, 35, 37], "brain": 18, "forinstanceifyousawasentencelikethisonewithoutani": 18, "benefit": [18, 24, 33], "daili": 18, "manual": [18, 22, 24, 33, 35, 38, 40], "consum": 18, "road": 18, "reformat": 18, "adher": [18, 24, 40], "throughout": [18, 27, 37], "inconsist": 18, "lengthi": 18, "person": [18, 37, 39, 40], "dure": [18, 20, 29], "edit": [18, 20, 23, 24, 33, 39], "implement": [18, 21, 27, 29, 33], "dive": [18, 37], "identifi": [18, 23, 24, 34, 40], "typic": [18, 30, 32], "stylist": 18, "doubl": [18, 20, 36], "quot": [18, 20], "unapologet": 18, "except": [18, 25, 39], "length": 18, "88": 18, "79": 18, "10": [18, 25, 29, 31, 33, 35, 40], "charact": [18, 33, 39], "overwritten": 18, "adjust": [18, 26], "comment": [18, 20, 38, 40], "playground": 18, "leav": [18, 24, 32, 35, 38], "worri": [18, 25, 29, 30, 38, 39, 40], "pep8": 18, "toolbox": [18, 37], "flag": [18, 29], "beyond": [18, 37], "conflict": [18, 20, 38], "miss": [18, 24, 26, 29, 30, 32, 38, 40], "after": [18, 27, 33, 35, 36, 37, 38, 40], "comma": 18, "unus": 18, "variabl": [18, 27, 33, 37], "filenam": [18, 25], "stravalib": [18, 25], "model": 18, "dev": [18, 20, 23, 29, 39], "usernam": [18, 25, 39], "comput": [18, 20, 25, 29, 33, 36, 37, 38, 39], "f401": 18, "o": [18, 20, 23, 31, 38], "29": 18, "80": 18, "e501": 18, "too": [18, 20], "long": [18, 23, 24, 27, 32, 37, 39, 40], "90": 18, "34": 18, "95": 18, "442": 18, "82": 18, "443": 18, "39": 18, "e231": 18, "whitespac": 18, "493": 18, "20": 18, "e225": 18, "496": 18, "group": [18, 23, 24, 26, 27, 37, 38], "relat": [18, 22, 29, 33, 39], "third": 18, "parti": 18, "reorder": 18, "think": [18, 20, 21, 23, 26, 29, 30, 36, 37, 38, 40], "exc": 18, "starvalib": 18, "abc": 18, "log": [18, 39], "distribut": [18, 19, 20, 22, 23, 24, 29, 33, 37, 38, 40], "extra": [18, 37, 38], "sequenc": 18, "unithelp": 18, "uh": 18, "traction": 18, "sinc": [18, 27], "aim": [18, 37, 38], "behind": [18, 39], "instead": [18, 24, 33, 39], "distinguish": 18, "hundr": 18, "fixabl": 18, "f403": 18, "fast": [18, 31], "feedback": [18, 32], "loop": 18, "larg": [18, 26, 37], "pycodestyl": 18, "w": 18, "warn": [18, 27], "f": [18, 32], "pyflak": 18, "c90": 18, "mccabe": 18, "ignor": 18, "handl": [18, 24, 25, 32], "sort": [18, 23, 25, 40], "correctli": [18, 22, 24, 26, 30, 32], "package_fold": 18, "shown": [18, 25], "vscode": [18, 24], "pycharm": [18, 24], "shortcut": 18, "demand": 18, "action": [18, 27, 28, 29, 30, 32, 38, 39], "trigger": [18, 27, 31, 37], "m": [18, 24, 27, 31, 33, 38], "messag": [18, 24, 27, 32, 38], "hit": 18, "NOT": [18, 24, 26], "re": [18, 21, 23, 29, 32, 33, 34, 39], "stage": [18, 22], "record": [18, 25, 37], "cancel": 18, "intend": [18, 23, 25, 30, 37, 38, 40], "amount": 18, "lead": [18, 22, 25, 29, 35], "merg": [18, 22, 37, 38], "trail": 18, "streamlin": [18, 24, 29], "becom": [18, 27, 32, 37, 39], "friend": 18, "comer": 18, "never": [18, 24, 27, 30], "c": [18, 19, 21, 22, 35, 38], "cofig": 18, "http": [18, 20, 30, 33, 34, 35, 38, 39, 40], "pycqa": 18, "rev": 18, "5": [18, 21, 30, 32, 37], "11": [18, 25, 26, 29, 31, 33, 40], "id": [18, 24, 29], "misc": 18, "v4": [18, 31], "0": [18, 20, 24, 25, 27, 29, 30, 32, 33, 38, 39, 40], "ref": [18, 35], "autoformat": 18, "newlin": 18, "onli": [18, 19, 20, 22, 23, 24, 25, 27, 29, 31, 33, 37, 38, 39, 40], "fixer": 18, "insensit": 18, "filesystem": 18, "maco": [18, 29, 31], "hf": 18, "window": [18, 20, 25, 29, 31, 33, 36, 38], "fat": 18, "auto": [18, 24], "22": 18, "12": [18, 29, 33, 39], "language_vers": 18, "python3": [18, 24, 29], "codo": 18, "quarter": 18, "weekli": 18, "remov": [18, 23, 24, 33], "aren": [18, 26, 33, 38], "autoupdate_schedul": 18, "quarterli": 18, "readi": [18, 22, 25, 30, 33, 37, 38, 39], "regardless": [18, 22], "manag": [18, 20, 23, 24, 25, 29, 37, 38, 39], "reduc": [18, 20, 24], "effort": [18, 21, 26, 37], "compil": [19, 24, 25, 26], "thorough": 19, "classifi": [19, 23, 25], "categori": [19, 23, 25, 29, 40], "back": [19, 23, 25, 33, 35, 37, 39, 40], "reli": [19, 24, 27, 30], "setuptool": [19, 20, 25], "hatchl": [19, 24, 25, 29, 33, 38, 39], "pdm": [19, 23, 25, 36], "choic": [19, 24, 27, 29, 40], "fortran": [19, 24], "gdal": [19, 20, 22, 35], "scikit": [19, 24, 26], "meson": [19, 24], "106": 20, "issuecom": 20, "1844278487": 20, "jeremiah": [20, 40], "did": [20, 22, 30, 33], "inventori": 20, "realli": [20, 22, 37, 39, 40], "comprehens": [20, 30, 37], "pullrequestreview": 20, "1766663571": 20, "jonni": 20, "why": [20, 21, 22, 28, 34], "extern": 20, "improv": [20, 32], "codebas": [20, 37], "tabl": [20, 25, 33, 36], "Not": [20, 27], "pytest": [20, 23, 26, 30, 31], "linter": [20, 21, 37, 38, 40], "flake8": [20, 21, 23, 37], "ruff": [20, 21, 40], "formatt": [20, 23, 37, 40], "black": [20, 21, 23, 37, 40], "tox": [20, 24, 29, 37], "basic": [20, 24, 34, 37, 38], "previous": 20, "u": [20, 21, 24, 36, 37, 40], "cfg": [20, 23, 33, 36], "examplepi": [20, 23], "email": [20, 23, 33], "org": [20, 22, 23, 33, 34, 35, 36, 38, 39, 40], "rioxarrai": 20, "necessari": 20, "minim": [20, 22, 23, 38, 40], "must": [20, 38, 40], "fewer": 20, "likelihood": 20, "mismatch": 20, "pretend": [20, 30], "plotm": 20, "numpi": [20, 21, 25, 26, 32, 33, 37, 39, 40], "seaborn": 20, "styliz": 20, "alongsid": 20, "lint": [20, 23, 38], "cleanup": 20, "sub": [20, 23], "dep1": 20, "dep2": 20, "git": [20, 23, 24, 25, 33, 34, 38], "my_depend": 20, "server": [20, 39], "mydepend": 20, "secur": [20, 39], "point": [20, 23, 30, 32, 33, 35, 38, 40], "commit": [20, 24, 27, 33], "hash": 20, "upload": [20, 24, 25, 26, 29, 31, 37], "cov": [20, 23, 29], "pydata_sphinx_them": 20, "pypa": [20, 24, 25, 26, 39, 40], "plu": 20, "come": [20, 24, 26, 29, 33, 35, 39, 40], "prior": [20, 22, 23, 33], "anyth": 20, "newer": [20, 21, 24], "mac": [20, 25, 29, 31, 33, 38, 39], "bash": [20, 31, 33, 38], "unquot": 20, "bracket": [20, 23, 33, 40], "guidebook": [20, 34, 40], "packagenam": [20, 33, 35, 38], "twine": [20, 24], "assum": [20, 27, 29, 33, 37], "plan": [20, 21, 24, 38, 39], "recip": [20, 22, 37], "grayskul": [20, 37, 39], "mode": [20, 23, 24, 33, 36, 39], "risk": [20, 24], "geospati": [20, 22], "altern": [20, 35, 39], "dep": [20, 38], "path": [20, 26, 33, 36, 39], "extra_requir": 20, "subgroup": 20, "poetri": [20, 23, 25, 36, 40], "hidden": [20, 27], "TO": 20, "confus": [21, 24, 25], "modern": [21, 23, 24, 27, 29], "src": [21, 33, 36], "layout": [21, 33, 36], "flat": 21, "No": [21, 24], "matter": [21, 39], "knowledg": [21, 24, 38], "decid": [21, 22, 24, 37, 38, 40], "filter": [21, 23, 25, 40], "straight": [21, 22, 37], "forward": [21, 22, 37], "channel": [21, 25, 38, 39, 40], "semver": 21, "numer": [21, 23, 24, 26, 37], "calver": [21, 24, 27], "date": [21, 24, 27, 37], "pick": [21, 22, 24, 40], "blue": 21, "diagram": [21, 24], "bare": [21, 40], "expand": 21, "align": [21, 23, 24], "enhanc": [21, 37, 40], "spec": 21, "program": [21, 23, 24, 25, 30, 33, 40], "lend": 21, "abil": 21, "hear": 21, "glue": 21, "made": [21, 27, 31], "intent": [21, 32], "scope": [21, 35, 39, 40], "bioconda": [22, 38], "between": [22, 24, 37, 40], "rebuild": [22, 25, 38], "biggest": 22, "wherea": [22, 25, 37, 40], "tar": [22, 25, 38, 39], "gz": [22, 25, 38, 39], "zip": [22, 25], "whl": [22, 24, 39], "bundl": [22, 25, 38], "privat": 22, "ago": [22, 40], "earli": [22, 33], "were": [22, 24], "mechan": 22, "origin": [22, 23, 30, 40], "cross": [22, 35], "julia": 22, "r": [22, 24, 39, 40], "mix": [22, 38], "fledg": 22, "hous": 22, "driven": 22, "biomed": 22, "emerg": 22, "unlik": [22, 26, 29, 38], "wonder": [22, 32, 37], "importantli": 22, "right": [22, 32, 38], "answer": [22, 37], "everyth": [22, 25, 29, 37, 38, 40], "speak": 22, "smaller": [22, 24, 26, 30, 37], "chanc": 22, "yield": 22, "stabl": [22, 40], "complement": [22, 30], "anticip": 22, "terminologi": 22, "glossari": 22, "feedstock": 22, "kick": 22, "off": 22, "complet": [22, 24, 30, 33, 34, 36, 38, 39], "notif": 22, "happi": 22, "runtim": 22, "match": [22, 38], "valid": [23, 39, 40], "invalid": [23, 40], "rais": [23, 40], "isn": [23, 39], "august": 23, "2017": 23, "much": [23, 24, 29], "backend": [23, 24, 25, 27, 29, 33, 37, 40], "flit": [23, 25, 27, 36], "tom": [23, 40], "pair": [23, 40], "particular": [23, 29, 30], "squar": [23, 33, 40], "xclim": 23, "translat": [23, 25, 38], "print": [23, 25, 36], "organ": [23, 24, 25, 29, 33, 35, 37, 39, 40], "human": [23, 27, 40], "caus": [23, 25, 40], "problem": [23, 35], "scm": 23, "determin": [23, 27, 40], "dynam": [23, 24, 33, 35, 40], "clear": [23, 24, 26, 32, 33, 35], "x": [23, 24, 25, 27, 38, 40], "sometim": [23, 27, 29, 32, 37, 40], "choos": [23, 33, 34, 40], "random": 23, "experi": [23, 24, 30], "projectnam": 23, "keyword": [23, 27, 33], "word": [23, 27, 33, 39], "search": [23, 26, 39], "her": 23, "entri": 23, "shell": [23, 31, 33, 34, 36, 38, 39], "One": [23, 27, 33, 40], "control": [23, 24], "setuptooms_scm": 23, "tradition": 23, "Then": [23, 35, 37, 39, 40], "post": [23, 25, 34, 37, 38, 40], "independ": 23, "swap": 23, "setuptools_scm": [23, 24, 25], "61": 23, "build_meta": 23, "survei": 24, "oppos": 24, "upper": [24, 40], "overrid": 24, "discord": 24, "lock": 24, "matrix": [24, 29, 31], "winner": 24, "stick": 24, "testpypi": [24, 38, 39], "dist": [24, 25, 39], "main": [24, 27, 31, 33, 36, 38, 39], "plugin": [24, 27, 29, 36], "undocu": 24, "until": [24, 38], "result": [24, 32, 33], "n": 24, "000": [24, 26], "seen": [24, 26], "domain": [24, 36, 37], "heavili": 24, "snapshot": 24, "ye": [24, 34], "hook": [24, 27], "enough": [24, 37], "appreci": [24, 26], "summar": 24, "bump": 24, "bu": 24, "factor": 24, "semant": [24, 26], "receiv": [24, 38], "pyd": 24, "app": [24, 39], "virtual": [24, 29, 33, 39], "__pypackages__": 24, "init": [24, 35], "patch": [24, 27], "minor": [24, 25, 27], "strict": 24, "constraint": [24, 32], "came": 24, "Its": 24, "individu": [24, 29, 30, 37], "gap": 24, "frill": 24, "symlink": 24, "track": [24, 27, 35, 37, 38], "unifi": 24, "makefil": [24, 25], "drop": [24, 40], "switch": 24, "hatch_vc": [24, 25], "creation": 24, "uniqu": [24, 29, 39], "easili": [24, 29, 32, 38, 39], "burden": [24, 26], "compar": [24, 32, 36, 40], "recogn": [24, 33, 38], "upcom": [24, 33, 34, 37], "problemat": [24, 32], "quit": 24, "symbol": 24, "breakout": 24, "address": [24, 32, 37, 39], "9": [24, 27, 29, 30, 31, 33, 39], "matur": [24, 25, 40], "2009": 24, "earlier": 24, "largest": 24, "accord": 24, "customiz": 24, "backward": [24, 27, 40], "compatibli": 24, "pylanc": 24, "comparison": 24, "awar": [24, 40], "exclud": 24, "manifest": [24, 25], "subsequ": [25, 39], "figur": [25, 38, 39], "convent": [25, 27, 33, 34], "product": [25, 33, 40], "beta": [25, 33, 40], "indic": [25, 40], "displai": 25, "theori": 25, "frame": 25, "belong": [25, 39], "raw": 25, "onto": [25, 38], "veri": [25, 27, 38], "unbuilt": [25, 39], "ourc": 25, "ribut": 25, "impli": [25, 27], "compress": 25, "network": 25, "normal": [25, 26, 27], "tarbal": [25, 38], "post2": 25, "__init__": [25, 26], "conftest": 25, "strava_api_stub": 25, "test_client": 25, "unit": [25, 28, 31], "test_attribut": 25, "auth_respond": 25, "ini": 25, "util": 25, "_version": [25, 27], "_version_gener": 25, "egg": 25, "info": [25, 33], "pkg": 25, "dependency_link": 25, "top_level": 25, "changelog": [25, 26], "yml": [25, 31], "whose": 25, "binari": 25, "machin": [25, 37, 40], "pre": [25, 27, 39], "malici": 25, "inject": [25, 38], "py3": [25, 39], "none": [25, 38, 39], "linux": [25, 29, 31, 38, 39], "processor": 25, "architectur": [25, 38], "unpack": 25, "unzip": 25, "client": 25, "advantag": [26, 30], "tremend": 26, "proof": 26, "mypackagereponam": 26, "mypackag": 26, "modulea": 26, "moduleb": 26, "chapter": [26, 27], "sourmash": 26, "bokeh": 26, "openscm": 26, "awkward": 26, "poliastro": 26, "against": 26, "outsid": [26, 31, 32, 37], "size": 26, "storag": 26, "400": 26, "forc": 26, "prioriti": 26, "pythonsafepath": 26, "Be": [26, 35, 37, 38, 39], "accompani": 26, "slow": 26, "discourag": [26, 35], "figshar": 26, "pooch": 26, "increas": [26, 27], "toll": 26, "deal": 26, "thousand": [26, 37, 40], "respect": 26, "had": [26, 30], "worth": 26, "cost": 26, "primari": [26, 27, 38, 40], "characterist": 26, "file1": 26, "histor": 26, "engrain": 26, "danger": 26, "xarrai": [26, 29, 40], "invest": 26, "equat": 27, "hatch_vsc": 27, "hand": 27, "440": 27, "assign": [27, 40], "Being": 27, "express": [27, 37], "deprec": 27, "polici": 27, "manner": 27, "label": 27, "bump2vers": 27, "chosen": [27, 33, 34], "ex": 27, "With": [27, 29, 37], "truth": 27, "elimin": 27, "vc": 27, "anywher": [27, 39], "hard": 27, "enter": [27, 36, 39], "slower": 27, "attribute_warn": 27, "mod_plot": 27, "athlet": 27, "feat": 27, "add_convers": 27, "hasn": 27, "2020": 27, "troubleshoot": [27, 38], "cleaner": 27, "histori": [27, 33, 37, 40], "wrong": 27, "graphic": 28, "isol": [29, 30, 36, 38], "confid": [29, 32, 39], "randomli": 29, "due": 29, "unexpectedli": [29, 37], "oversight": 29, "essenti": 29, "aid": 29, "plai": 29, "last": [29, 34, 38, 40], "replic": 29, "runner": 29, "analyz": 29, "coverag": [29, 31], "codecov": [29, 31], "conveni": 29, "breakpoint": 29, "toggl": 29, "test_modul": 29, "plasmapi": 29, "capabl": 29, "versatil": 29, "ti": 29, "familiar": [29, 30, 33], "Will": 29, "virtualenv": [29, 39], "interfer": 29, "promot": 29, "pyospackag": [29, 30, 31, 35, 38, 39, 40], "session": [29, 33], "decor": 29, "shorten": 29, "therefor": 29, "four": 29, "venv_backend": 29, "test_mamba": 29, "conda_instal": 29, "stronger": 30, "verifi": 30, "examin": 30, "puzzl": [30, 32], "broken": [30, 35], "togeth": [30, 32, 33, 38], "temperatur": 30, "celsiu": 30, "fahrenheit": 30, "degre": 30, "That": [30, 34, 38, 40], "celsius_to_fahrenheit": 30, "float": 30, "32": 30, "temperature_convert": 30, "test_celsius_to_fahrenheit": 30, "freez": 30, "water": 30, "assert": [30, 32], "approx": 30, "ab": 30, "01": 30, "boil": 30, "100": [30, 38], "212": 30, "connect": [30, 38], "whole": 30, "pictur": 30, "spreadsheet": 30, "averag": 30, "period": [30, 40], "behav": [30, 32], "fahr_to_celsiu": 30, "calc_annual_mean": 30, "df": 30, "robust": 30, "yearly_mean": 30, "groupbi": 30, "final_mean": 30, "certain": [30, 37], "simul": 30, "real": [30, 38, 39], "life": 30, "catch": [30, 32], "put": 30, "deliv": 30, "smooth": 30, "disadvantag": 30, "fine": [30, 32], "grain": 30, "natur": 30, "occur": [30, 32, 37, 38], "portion": [30, 34], "refactor": [30, 32], "didn": 30, "energi": 30, "bring": 30, "framework": [30, 32], "invalu": 31, "pull_request": 31, "job": [31, 37], "strategi": 31, "fals": [31, 36], "ubuntu": 31, "checkout": [31, 38], "upgrad": 31, "v3": 31, "safeti": 32, "net": 32, "spot": 32, "rectifi": 32, "affect": 32, "instil": 32, "alter": 32, "mistak": 32, "accident": 32, "broke": 32, "imagin": 32, "magic": 32, "button": [32, 39], "collabor": [32, 39], "everyon": [32, 40], "stai": 32, "suppos": 32, "fearless": 32, "empow": 32, "eas": 32, "unexpect": 32, "outlier": 32, "enabl": 32, "impair": 32, "datafram": 32, "suppli": 32, "gracefulli": 32, "situat": 32, "frustrat": 32, "unexplain": 32, "carpentri": [32, 33], "sai": 32, "b": [32, 33, 38], "test_add_numb": 32, "got": [32, 38], "result2": 32, "result3": 32, "nick": 32, "murphi": 32, "outcom": 32, "special": 32, "closer": 32, "boundari": [32, 40], "equal": 32, "001": 32, "999": 32, "previou": [33, 34, 35, 38, 39, 40], "remot": 33, "v": [33, 40], "consol": 33, "zsh": 33, "worthi": 33, "misconcept": 33, "pervas": 33, "ll": [33, 34, 36, 37, 39], "treat": 33, "empti": [33, 35], "testm": 33, "nor": 33, "termin": [33, 36, 38], "cd": [33, 37, 38], "lowercas": 33, "letter": 33, "_": 33, "pyo": [33, 35], "pyos_packag": 33, "ok": [33, 38, 40], "dash": [33, 39], "underscor": 33, "__about__": 33, "subdirectori": 33, "scratch": 33, "epytext": 33, "yet": [33, 34, 35, 36, 39, 40], "add_num": [33, 35], "denot": [33, 35], "sign": [33, 35], "hold": 33, "relationship": 33, "leah": [33, 36], "wasser": [33, 36], "cpython": 33, "unknown": 33, "delet": [33, 40], "later": [33, 35, 36, 39], "fill": [33, 35, 37], "uncom": 33, "admonit": 33, "impact": [33, 39], "firstnam": [33, 36, 40], "lastnam": [33, 36, 40], "youremail": 33, "flesh": 33, "rare": 33, "gitbash": 33, "venv": [33, 39], "pyosdev": 33, "env": [33, 36, 39], "mambaforg": 33, "obtain": 33, "leahawass": [33, 39], "build_edit": 33, "envt": [33, 39], "caveat": 33, "restart": 33, "regularli": [33, 39], "arrow": 33, "mamba": 33, "markdown": [33, 34, 35], "markupsaf": 33, "msgpack": 33, "2021": 33, "24": 33, "yourusernam": 33, "prompt": [33, 39], "copyright": 33, "branch_or_tag": 33, "forget": 33, "substitut": 33, "epydoc": 33, "reus": [34, 37], "permiss": [34, 36, 39], "accommod": 34, "sunpi": 34, "gui": 34, "past": [34, 35, 39], "touch": 34, "ones": 34, "side": 34, "sync": 34, "summari": [34, 38], "grow": [34, 35, 37, 39], "referenc": 34, "moder": 34, "visit": 34, "agre": 34, "fundament": 34, "opensourc": 34, "solv": 35, "header": [35, 36], "h1": 35, "vet": 35, "joss": 35, "shield": 35, "haven": 35, "briefli": [35, 40], "demonstr": 35, "demo": [35, 40], "send": 35, "journal": 35, "partnership": 35, "5281": 35, "8365068": 35, "svg": 35, "tinyurl": 35, "y22nb8up": 35, "115": 35, "todo": 35, "perfect": [35, 39], "trust": 35, "misus": 35, "pipx": [36, 38, 39], "browser": [36, 39], "cach": [36, 39], "spdx": 36, "h": 36, "generaliz": 37, "divid": 37, "consider": 37, "relev": [37, 40], "concern": 37, "regard": 37, "baselin": 37, "besid": 37, "under": 37, "undo": 37, "publicli": 37, "event": 37, "somewher": 37, "lifecycl": 37, "soon": 37, "realiz": 37, "pipelin": 37, "tricki": 37, "compendium": 37, "transpar": 37, "analys": 37, "studi": 37, "compendia": 37, "pack": 37, "crowsetta": 37, "annot": 37, "anim": 37, "vocal": 37, "bioacoust": 37, "spectrum": 37, "concis": 37, "repeat": 37, "ever": 37, "remain": 37, "entail": 38, "gone": 38, "submiss": 38, "eventu": 38, "volunt": 38, "attempt": 38, "offici": [38, 39], "ou": 38, "l": 38, "pyenv": [38, 39], "recov": 38, "00": 38, "mib": 38, "var": 38, "r8": 38, "3vljpqb55psbgb1ghc2qsn700000gn": 38, "du0sf_a4": 38, "distutil": 38, "elaps": 38, "databas": 38, "percentag": 38, "97": 38, "low": 38, "red": 38, "green": 38, "lwasser": 38, "internet": 38, "grab": 38, "wherev": [38, 40], "meta": 38, "sha256": 38, "43ec82da3a10752a5dbf2f0ef742e357803a3ddb400005f87e86534685bfb8a7": 38, "noarch": 38, "vv": 38, "dev_url": 38, "license_fil": 38, "hi": 38, "proper": 38, "patient": 38, "respond": 38, "titl": 38, "meaning": 38, "my_nifty_packag": 38, "vendor": 38, "ship": 38, "cfep": 38, "18": 38, "01e31f5521973710d0d91b15a94491d4f8f8f54566322110098c0f2381dd09ab": 38, "git_url": 38, "confirm": 38, "willing": 38, "acknowledg": 38, "troubl": 38, "ping": 38, "wait": 38, "struggl": 38, "gemgi": 38, "newli": [38, 39], "shortli": 38, "yourpackag": 38, "blogpost": 38, "emphas": 39, "gitignor": 39, "migrat": 39, "global": 39, "warehous": 39, "standalon": 39, "mk7f5y0t": 39, "2i2c": 39, "bin": 39, "26": 39, "dateutil": 39, "pytz": 39, "2023": [39, 40], "post1": 39, "six": 39, "16": 39, "tzdata": 39, "exit": 39, "two2iqr3": 39, "v0": 39, "took": 39, "43": 39, "scene": 39, "safe": [39, 40], "stress": 39, "password": 39, "login": 39, "pyospackage_yournameher": 39, "box": 39, "backup": 39, "devic": 39, "phish": 39, "els": 39, "januari": 39, "2024": 39, "scroll": 39, "OR": 39, "abunchofrandomcharactersher": 39, "credenti": 39, "__token__": 39, "perman": 39, "pyospkg": 39, "youpackagenameher": 39, "teach": 39, "twofa": 39, "apitoken": 39, "followup": 39, "again": [39, 40], "world": 39, "takeawai": 40, "field": 40, "json": 40, "retriev": 40, "checker": 40, "deviat": 40, "ten": 40, "depth": 40, "bone": 40, "quirk": 40, "overlap": 40, "diverg": 40, "prescrib": 40, "carefulli": 40, "lowest": 40, "pydant": 40, "ruamel": 40, "17": 40, "21": 40, "cautiou": 40, "precis": 40, "resolv": 40, "absolut": 40, "reject": 40, "homepag": 40, "dotenv": 40, "www": 40, "pyosmeta": 40, "appendix": 40, "admin": 40, "alpha": 40, "bsd3": 40, "corpor": 40, "BE": 40, "home": 40, "tracker": 40, "fund": 40, "taxpasta": 40, "republish": 40, "daniel": 40, "feldroi": 40, "08": 40, "cheatsheet": 40}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"contribut": [0, 8, 12], "guid": [0, 9, 12, 17, 21, 39], "python": [0, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "open": [0, 6, 8, 11, 15, 36], "sourc": [0, 6, 8, 11, 15, 25, 26], "softwar": [0, 11], "packag": [0, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40], "book": 0, "how": [0, 3, 11, 12, 14, 17, 18, 20, 22, 23, 25, 26, 32, 34, 37, 38, 40], "thi": [0, 6, 17, 21, 33, 37], "structur": [0, 21, 26, 33], "instruct": [0, 12, 35], "build": [0, 1, 4, 13, 19, 23, 24, 25, 27, 39], "document": [0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14, 15, 16, 37], "local": [0, 18, 33], "your": [0, 1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 23, 24, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40], "comput": 0, "tool": [1, 6, 18, 24, 27, 29, 36, 39], "host": 1, "syntax": 2, "markdown": 2, "v": [2, 3, 18, 19, 20, 23, 24, 25, 27, 37, 39], "myst": 2, "rst": 2, "creat": [2, 13, 15, 17, 20, 25, 27, 33, 35, 37, 38, 39], "doc": [2, 3, 13, 20], "publish": [3, 22, 37, 38, 39, 40], "onlin": 3, "what": [3, 6, 8, 9, 11, 12, 14, 20, 21, 22, 23, 25, 26, 29, 32, 33, 34, 35, 36, 37, 38, 40], "i": [3, 6, 9, 11, 14, 17, 20, 22, 23, 25, 29, 32, 33, 34, 35, 37, 38, 39, 40], "read": [3, 20], "github": [3, 20, 25, 31, 33, 37], "page": [3, 15], "us": [4, 11, 12, 13, 14, 18, 20, 23, 24, 26, 27, 29, 34, 37, 39, 40], "sphinx": [4, 5, 13], "static": 4, "site": 4, "gener": [4, 18], "can": [4, 11, 20, 22, 24, 27], "custom": 4, "extens": [4, 19, 24], "theme": 4, "commonli": 4, "optim": 5, "so": 5, "search": 5, "engin": 5, "other": [5, 19, 20, 27, 29, 36, 37], "user": [5, 6, 15, 16, 20, 22, 32, 37], "find": 5, "googl": 5, "analyt": 5, "sitemap": 5, "sphinxext": 5, "opengraph": 5, "critic": 6, "": [6, 12, 14, 21, 22, 36, 37, 39], "success": 6, "two": 6, "type": [6, 14, 30, 32], "1": [6, 27, 33, 35, 36, 38, 39, 40], "basic": [6, 33], "2": [6, 27, 33, 35, 36, 38, 39, 40], "potenti": 6, "contributor": [6, 37], "element": [6, 15, 37], "pyopensci": [6, 17, 21, 26, 37], "look": [6, 26, 33, 37], "review": [6, 21, 24, 26], "next": [6, 36, 37, 40], "section": [6, 12, 35, 38], "todo": [6, 17, 20, 23, 29, 30, 31, 33, 36, 37, 39, 40], "The": [7, 26, 33, 35, 37, 39], "code_of_conduct": [7, 34], "file": [7, 8, 10, 11, 12, 20, 23, 25, 33, 34, 35, 36, 39, 40], "exampl": [7, 8, 11, 14, 18, 20, 23, 24, 25, 26, 27, 31, 32, 37, 40], "why": [7, 9, 11, 14, 24, 26, 32, 33, 37, 38, 39], "you": [7, 11, 13, 20, 21, 22, 23, 24, 27, 29, 33, 34, 37, 38, 39, 40], "need": [7, 26, 33], "md": [8, 12, 35], "should": [8, 9, 10, 12, 29, 34, 37], "contain": [8, 9, 12], "develop": [9, 39], "import": [9, 11, 23, 26, 33], "That": 10, "repositori": [10, 22, 38], "licens": [11, 34, 40], "scientif": [11, 26, 34], "ar": [11, 21, 26, 37], "where": [11, 17, 20, 22, 34], "store": [11, 20, 37], "permiss": 11, "when": [11, 13, 23, 37, 40], "possibl": [11, 35], "choos": [11, 24], "recommend": [11, 21], "from": [11, 20, 33, 39], "scipi": 11, "make": [11, 18, 33, 37, 40], "sure": 11, "close": [11, 36], "follow": [11, 39], "guidelin": [11, 12, 21], "outlin": 11, "chose": [11, 24], "an": [11, 14, 24, 25, 33, 34, 37], "determin": 11, "code": [11, 12, 14, 18, 33, 34, 35, 37], "reus": 11, "about": [11, 17, 23, 24, 25, 26, 27, 33, 38, 39, 40], "citat": [11, 12, 35], "readm": [12, 35, 40], "resourc": [12, 20, 22, 34], "name": [12, 33, 35, 36, 40], "badg": [12, 35], "current": 12, "version": [12, 27, 29, 37, 40], "continu": [12, 31, 37], "integr": [12, 30, 31, 37], "test": [12, 26, 28, 29, 30, 31, 32, 33, 38, 39], "coverag": 12, "A": [12, 17, 20, 22, 27], "short": 12, "easi": 12, "understand": [12, 20], "descript": [12, 35, 40], "doe": [12, 14, 20, 26, 33, 35, 37], "instal": [12, 20, 33, 35, 36, 37, 38, 39], "ani": [12, 35], "addit": [12, 20, 22, 34, 35], "setup": [12, 23, 25, 27, 35, 39], "requir": [12, 20, 21, 23, 26, 40], "brief": [12, 22, 33], "demonstr": 12, "link": 12, "tutori": [12, 13, 17, 37], "too": [12, 14], "much": [12, 14], "Of": 12, "good": [12, 15], "thing": 12, "commun": [12, 17, 22, 35], "conduct": [12, 34], "inform": [12, 21, 35], "run": [13, 14, 18, 29, 31, 36], "galleri": 13, "benefit": [13, 23, 26], "challeng": [13, 24, 26], "nbsphinx": 13, "jupyt": 13, "notebook": 13, "api": 14, "docstr": 14, "relat": [14, 37], "three": [14, 30], "format": [14, 18, 23, 25, 40], "we": [14, 24, 33], "like": [14, 26, 27, 39], "numpi": 14, "style": [14, 18], "better": 14, "best": [14, 17], "function": [14, 30, 35], "doctest": 14, "method": 14, "ad": [14, 20, 38], "hint": 14, "bewar": 14, "gradual": 14, "face": [15, 16], "core": [15, 20, 26], "compon": 15, "write": [15, 16, 32], "usabl": 15, "four": 15, "land": 15, "new": [17, 27, 33, 40], "seri": 17, "ecosystem": [17, 24, 34], "overview": [17, 33, 34], "practic": 17, "guidebook": 17, "who": [17, 37], "head": 17, "linter": 18, "take": [18, 22, 23], "awai": [18, 22, 23], "life": 18, "easier": 18, "lint": 18, "formatt": 18, "styler": 18, "black": 18, "flake8": 18, "isort": 18, "applic": 18, "ruff": 18, "workflow": [18, 24, 39], "favorit": 18, "pre": 18, "commit": 18, "hook": 18, "check": 18, "ci": [18, 31, 38], "set": [18, 20, 33], "up": [18, 33, 34, 35, 38, 40], "git": [18, 27, 37], "summari": [18, 24], "complex": [19, 23], "pure": [19, 24], "languag": 19, "depend": [20, 22, 23, 24, 40], "option": [20, 23, 39, 40], "pyproject": [20, 23, 27, 33, 40], "toml": [20, 23, 27, 33, 36, 40], "do": [20, 23, 24, 26, 32, 33], "declar": 20, "wai": [20, 34], "mai": 20, "see": [20, 29], "add": [20, 23, 33, 34, 35, 38, 40], "group": 20, "gitlab": [20, 37], "m": 20, "pip": [20, 22, 25, 33], "For": 20, "zsh": 20, "shell": 20, "combin": 20, "conda": [20, 22, 29, 37, 38, 40], "fit": 20, "support": [20, 24, 37], "environ": [20, 29, 33, 37, 39], "yml": 20, "note": [20, 27], "learn": [21, 24, 25, 34, 35, 37, 38, 39, 40], "here": [21, 24], "suggest": [21, 24], "In": 22, "pypi": [22, 25, 37, 38, 39, 40], "anaconda": 22, "cloud": 22, "histori": 22, "evolut": 22, "channel": 22, "manag": [22, 27], "conflict": 22, "If": [22, 39], "both": 22, "forg": [22, 37, 38, 40], "accommod": 22, "more": [22, 24, 37, 39, 40], "submit": [22, 38], "maintain": [22, 37, 38, 40], "configur": [23, 36], "metadata": [23, 25, 33, 40], "happen": [23, 25, 40], "py": [23, 25, 33], "migrat": 23, "still": 23, "field": 23, "project": [23, 25, 26, 33, 37, 40], "tabl": [23, 24, 29, 40], "includ": [23, 26], "advanc": 23, "recurs": 23, "hatchl": [23, 27, 40], "setuptool": [23, 24, 27], "hatch": [24, 27, 33, 36, 39], "pdm": [24, 27], "poetri": [24, 39], "front": 24, "end": [24, 27, 30, 39], "back": [24, 27], "step": [24, 33, 35, 36, 38, 39, 40], "simplifi": 24, "non": 24, "featur": [24, 36], "c": 24, "flit": [24, 39], "might": 24, "want": [24, 39], "pin": [24, 40], "cfg": 25, "xclim": 25, "distribut": [25, 26, 39], "expect": [25, 37], "sdist": [25, 39], "archiv": 25, "wheel": [25, 26, 39], "whl": 25, "never": 26, "specif": [26, 39], "peer": 26, "src": 26, "layout": 26, "discov": 26, "priorit": 26, "modul": [26, 33], "sometim": 26, "data": [26, 28], "don": 26, "t": 26, "suit": 26, "dataset": 26, "flat": 26, "most": 26, "kei": 27, "takewai": 27, "semver": 27, "rule": 27, "avoid": 27, "manual": [27, 34, 39], "updat": [27, 36, 40], "number": 27, "semant": 27, "releas": 27, "control": [27, 37], "base": [27, 39], "bump": 27, "offer": 27, "increment": 27, "pro": 27, "con": 27, "hatch_vc": 27, "3": [27, 33, 35, 36, 38, 39, 40], "scm": 27, "tag": 27, "setuptools_scm": 27, "4": [27, 33, 35, 36, 38, 39, 40], "autom": 29, "framework": 29, "pytest": 29, "across": 29, "oper": 29, "system": 29, "ll": 29, "wild": 29, "nox": 29, "venv": 29, "mamba": 29, "unit": 30, "compar": 30, "pull": [31, 38], "request": [31, 38], "action": 31, "edg": 32, "case": 32, "know": [32, 36], "previous": 33, "cover": 33, "lesson": 33, "directori": [33, 34], "__init__": 33, "time": [33, 39], "add_numb": 33, "modifi": 33, "adjust": 33, "classifi": [33, 40], "bare": 33, "minimum": 33, "5": [33, 35, 40], "e": 33, "pyospackag": 33, "6": [33, 35, 40], "out": 33, "congratul": [33, 38, 39], "first": 33, "footnot": [33, 34, 38, 39], "object": [34, 35, 37, 38, 39, 40], "live": 34, "put": [34, 40], "class": [34, 35, 38, 39, 40], "fa": [34, 35, 38, 39, 40], "solid": [34, 35, 38, 39, 40], "hand": [34, 35, 38, 40], "bubbl": [34, 35, 38, 40], "wrap": [34, 35, 38, 40], "0": 35, "titl": 35, "top": 35, "get": [35, 36], "start": 35, "provid": 35, "fulli": 35, "snippet": 35, "7": 35, "8": 35, "finish": 35, "edit": 36, "config": 36, "email": [36, 40], "show": 36, "comparison": 36, "101": 37, "consid": 37, "befor": 37, "than": 37, "just": 37, "infrastructur": 37, "issu": 37, "ticket": 37, "tracker": 37, "deploy": 37, "turn": 37, "well": 37, "scope": 37, "research": 37, "matplotlib": 37, "also": 37, "clean": 37, "readabl": 37, "yai": 37, "ha": 37, "now": 37, "work": 38, "public": [38, 39], "regular": 38, "pen": 38, "squar": 38, "grayskul": 38, "fork": 38, "clone": 38, "stage": 38, "recip": 38, "3b": 38, "bug": 38, "fix": 38, "home": 38, "url": [38, 40], "templat": 38, "checklist": 38, "tip": 38, "failur": 38, "wand": [38, 39], "magic": [38, 39], "sparkl": [38, 39], "have": [38, 39], "feedstock": 38, "our": 39, "ve": 39, "account": 39, "factor": 39, "2fa": 39, "authent": 39, "upload": 39, "token": 39, "below": 39, "valu": 39, "trust": 39, "readi": 40, "author": 40, "specifi": 40, "caution": 40, "incorrect": 40, "all": 40, "togeth": 40, "complet": 40}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 60}, "alltitles": {"Contributing Guide for the Python open source software packaging book": [[0, "contributing-guide-for-the-python-open-source-software-packaging-book"]], "How this guide structured": [[0, "how-this-guide-structured"]], "Instructions for building the documentation locally on your computer": [[0, "instructions-for-building-the-documentation-locally-on-your-computer"]], "Tools to Build and Host your Documentation": [[1, "tools-to-build-and-host-your-documentation"]], "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs": [[2, "documentation-syntax-markdown-vs-myst-vs-rst-syntax-to-create-your-docs"]], "How to publish your Python package documentation online": [[3, "how-to-publish-your-python-package-documentation-online"]], "What is Read the Docs ?": [[3, "what-is-read-the-docs"]], "What is GitHub Pages?": [[3, "what-is-github-pages"]], "Read the Docs vs GitHub Pages": [[3, "read-the-docs-vs-github-pages"]], "Using Sphinx to Build Python Package Documentation": [[4, "using-sphinx-to-build-python-package-documentation"]], "Sphinx - a static site generator": [[4, "sphinx-a-static-site-generator"]], "Sphinx sites can be customized using extensions and themes": [[4, "sphinx-sites-can-be-customized-using-extensions-and-themes"]], "Commonly used Sphinx themes": [[4, "commonly-used-sphinx-themes"]], "Optimizing your documentation so search engines (and other users) find it": [[5, "optimizing-your-documentation-so-search-engines-and-other-users-find-it"]], "Google Analytics": [[5, "google-analytics"]], "sphinx-sitemap for search engine optimization": [[5, "sphinx-sitemap-for-search-engine-optimization"]], "sphinxext.opengraph": [[5, "sphinxext-opengraph"]], "Documentation for your Open Source Python Package": [[6, "documentation-for-your-open-source-python-package"]], "Documentation is critical for your Python package\u2019s success": [[6, "documentation-is-critical-for-your-python-package-s-success"]], "Two types of Python package users": [[6, "two-types-of-python-package-users"]], "1. Basic Tool Users": [[6, "basic-tool-users"]], "2. Potential tool contributors": [[6, "potential-tool-contributors"]], "Documentation elements that pyOpenSci looks for reviewing a Python package": [[6, "documentation-elements-that-pyopensci-looks-for-reviewing-a-python-package"]], "What\u2019s next in this Python package documentation section?": [[6, "what-s-next-in-this-python-package-documentation-section"]], "Todo": [[6, "id1"], [17, "id1"], [20, "id1"], [20, "id4"], [23, "id1"], [29, "id1"], [29, "id2"], [30, "id1"], [31, "id1"], [33, "id1"], [33, "id7"], [33, "id8"], [36, "id1"], [37, "id1"], [39, "id1"], [39, "id3"], [39, "id4"], [39, "id5"], [40, "id1"]], "The CODE_OF_CONDUCT file - Python Packaging": [[7, "the-code-of-conduct-file-python-packaging"]], "Example CODE_OF_CONDUCT files": [[7, null]], "Why you need a CODE_OF_CONDUCT": [[7, "why-you-need-a-code-of-conduct"]], "Contributing File in your Python Open Source Package": [[8, "contributing-file-in-your-python-open-source-package"]], "What a CONTRIBUTING.md file should contain": [[8, "what-a-contributing-md-file-should-contain"]], "Example contributing files": [[8, null]], "What the development guide for your Python package should contain": [[9, "what-the-development-guide-for-your-python-package-should-contain"]], "Why a development guide is important": [[9, "why-a-development-guide-is-important"]], "Documentation Files That Should be in your Python Package Repository": [[10, "documentation-files-that-should-be-in-your-python-package-repository"]], "License files for scientific Python open source software": [[11, "license-files-for-scientific-python-open-source-software"]], "What is a Open Source License file?": [[11, "what-is-a-open-source-license-file"]], "Why licenses are important": [[11, "why-licenses-are-important"]], "Where to store your license": [[11, "where-to-store-your-license"]], "Use open permissive licenses when possible": [[11, "use-open-permissive-licenses-when-possible"]], "How to choose a license": [[11, "how-to-choose-a-license"]], "License recommendations from the SciPy package": [[11, null]], "Important: make sure that you closely follow the guidelines outlines by the License that you chose": [[11, "important-make-sure-that-you-closely-follow-the-guidelines-outlines-by-the-license-that-you-chose"]], "An example of how a license determine how code can be reused": [[11, null]], "What about software citation?": [[11, "what-about-software-citation"]], "README File Guidelines and Resources": [[12, "readme-file-guidelines-and-resources"]], "What your README.md file should contain": [[12, "what-your-readme-md-file-should-contain"]], "\u2714\ufe0f Your package\u2019s name": [[12, "your-package-s-name"]], "\u2714\ufe0f Badges for current package version, continuous integration and test coverage": [[12, "badges-for-current-package-version-continuous-integration-and-test-coverage"]], "\u2714\ufe0f A short, easy-to-understand description of what your package does": [[12, "a-short-easy-to-understand-description-of-what-your-package-does"]], "\u2714\ufe0f Installation instructions": [[12, "installation-instructions"]], "\u2714\ufe0f Document any additional setup required": [[12, "document-any-additional-setup-required"]], "\u2714\ufe0f Brief demonstration of how to use the package": [[12, "brief-demonstration-of-how-to-use-the-package"]], "\u2714\ufe0f Descriptive links to package documentation, short tutorials": [[12, "descriptive-links-to-package-documentation-short-tutorials"]], "Too Much Of A Good Thing": [[12, null]], "\u2714\ufe0f A Community Section with Links to Contributing Guide, Code of Conduct": [[12, "a-community-section-with-links-to-contributing-guide-code-of-conduct"]], "\u2714\ufe0f Citation information": [[12, "citation-information"]], "Create tutorials in your Python package documentation": [[13, "create-tutorials-in-your-python-package-documentation"]], "Create Python package tutorials that run when you build your docs": [[13, "create-python-package-tutorials-that-run-when-you-build-your-docs"]], "sphinx gallery:": [[13, "sphinx-gallery"]], "Sphinx Gallery benefits": [[13, "sphinx-gallery-benefits"]], "Sphinx gallery challenges": [[13, "sphinx-gallery-challenges"]], "nbsphinx - tutorials using Jupyter Notebooks": [[13, "nbsphinx-tutorials-using-jupyter-notebooks"]], "Document the code in your package\u2019s API using docstrings": [[14, "document-the-code-in-your-package-s-api-using-docstrings"]], "What is an API?": [[14, "what-is-an-api"]], "What is a docstring and how does it relate to documentation?": [[14, "what-is-a-docstring-and-how-does-it-relate-to-documentation"]], "Python package API documentation": [[14, "python-package-api-documentation"]], "Three Python docstring formats and why we like NumPy style": [[14, "three-python-docstring-formats-and-why-we-like-numpy-style"]], "Docstring examples Better and Best": [[14, "docstring-examples-better-and-best"]], "Best: a docstring with example use of the function": [[14, "best-a-docstring-with-example-use-of-the-function"]], "Using doctest to run docstring examples in your package\u2019s methods and functions": [[14, "using-doctest-to-run-docstring-examples-in-your-package-s-methods-and-functions"]], "Adding type hints to your docstrings": [[14, "adding-type-hints-to-your-docstrings"]], "Why use type hints": [[14, "why-use-type-hints"]], "Beware of too much type hinting": [[14, null]], "Gradually adding type hints": [[14, "gradually-adding-type-hints"]], "Create User Facing Documentation for your Python Package": [[15, "create-user-facing-documentation-for-your-python-package"]], "Core components of user-facing Python package documentation": [[15, "core-components-of-user-facing-python-package-documentation"]], "Write usable documentation": [[15, "write-usable-documentation"]], "Four elements of a good open source documentation landing page": [[15, "four-elements-of-a-good-open-source-documentation-landing-page"]], "Writing user-facing documentation for your Python package": [[16, "writing-user-facing-documentation-for-your-python-package"]], "pyOpenSci Python Package Guide": [[17, "pyopensci-python-package-guide"]], "About this guide": [[17, null]], "new Tutorial Series: How to Create a Python Package": [[17, "new-tutorial-series-how-to-create-a-python-package"]], "Python packaging ecosystem overview & best practices": [[17, "python-packaging-ecosystem-overview-best-practices"]], "A community-created guidebook": [[17, "a-community-created-guidebook"]], "Who this guidebook is for": [[17, "who-this-guidebook-is-for"]], "Where this guide is headed": [[17, "where-this-guide-is-headed"]], "Python Package Code Style, Format and Linters": [[18, "python-package-code-style-format-and-linters"]], "Take Aways": [[18, null], [22, null]], "Use a code format tool (or tools) to make your life easier": [[18, "use-a-code-format-tool-or-tools-to-make-your-life-easier"]], "Linting vs format and style": [[18, "linting-vs-format-and-style"]], "Code Linting": [[18, "code-linting"]], "Code Formatters (and stylers)": [[18, "code-formatters-and-stylers"]], "Code format and style": [[18, "code-format-and-style"]], "Black": [[18, "black"]], "flake8 for linting code in Python packages": [[18, "flake8-for-linting-code-in-python-packages"]], "Isort": [[18, "isort"]], "Example application of isort": [[18, "example-application-of-isort"]], "Ruff": [[18, "ruff"]], "How to use code formatter in your local workflow": [[18, "how-to-use-code-formatter-in-your-local-workflow"]], "Linters, code formatters and your favorite coding tools": [[18, "linters-code-formatters-and-your-favorite-coding-tools"]], "Use pre-commit hooks to run code formatters and linters on commits": [[18, "use-pre-commit-hooks-to-run-code-formatters-and-linters-on-commits"]], "Pre-commit hook example workflow": [[18, "pre-commit-hook-example-workflow"]], "General pre commit checks": [[18, "general-pre-commit-checks"]], "Pre-commit.ci": [[18, "pre-commit-ci"]], "Setting up a git pre-commit hook": [[18, "setting-up-a-git-pre-commit-hook"]], "Summary": [[18, "summary"]], "Complex Python package builds": [[19, "complex-python-package-builds"]], "Pure Python Packages vs. packages with extensions in other languages": [[19, "pure-python-packages-vs-packages-with-extensions-in-other-languages"]], "Python Package Dependencies": [[20, "python-package-dependencies"]], "What is a package dependency?": [[20, "what-is-a-package-dependency"]], "Understanding optional vs. required dependencies": [[20, "understanding-optional-vs-required-dependencies"]], "Required (or core) dependencies": [[20, "required-or-core-dependencies"]], "Optional dependencies": [[20, "optional-dependencies"], [20, "id2"]], "Dependencies can be added to your pyproject.toml file": [[20, null]], "How do you declare dependencies?": [[20, "how-do-you-declare-dependencies"]], "Other ways you may see packages storing dependencies": [[20, null]], "Add required dependencies to your pyproject.toml file": [[20, "add-required-dependencies-to-your-pyproject-toml-file"]], "A dependency example": [[20, null]], "Create optional dependency groups": [[20, "create-optional-dependency-groups"]], "Installing packages from GitHub / Gitlab": [[20, null]], "Additional dependency resources": [[20, null]], "Install dependency groups": [[20, "install-dependency-groups"]], "Using python -m pip install vs. pip install": [[20, null]], "For zsh shell users": [[20, null]], "Combining sets of dependencies": [[20, "combining-sets-of-dependencies"]], "Where does conda fit in?": [[20, null]], "Support conda users with environment.yml files": [[20, "support-conda-users-with-environment-yml-files"]], "A note for conda users": [[20, null]], "Dependencies in Read the Docs": [[20, "dependencies-in-read-the-docs"]], "Read the Docs and Python packages": [[20, null]], "Python package structure information": [[21, "python-package-structure-information"]], "What you will learn here": [[21, "what-you-will-learn-here"]], "Guidelines for pyOpenSci\u2019s packaging recommendations": [[21, "guidelines-for-pyopensci-s-packaging-recommendations"]], "Suggestions in this guide are not pyOpenSci review requirements": [[21, null]], "Publishing Your Package In A Community Repository: PyPI or Anaconda Cloud": [[22, "publishing-your-package-in-a-community-repository-pypi-or-anaconda-cloud"]], "What is PyPI": [[22, "what-is-pypi"]], "What is Anaconda Cloud and conda?": [[22, "what-is-anaconda-cloud-and-conda"]], "A brief history of conda\u2019s evolution": [[22, null]], "conda channels": [[22, "conda-channels"]], "conda channels, PyPI, conda, pip - Where to publish your package": [[22, "conda-channels-pypi-conda-pip-where-to-publish-your-package"]], "Managing Python package dependency conflicts": [[22, "managing-python-package-dependency-conflicts"]], "Take-aways: If you can, publish on both PyPI and conda-forge to accommodate more users of your package": [[22, "take-aways-if-you-can-publish-on-both-pypi-and-conda-forge-to-accommodate-more-users-of-your-package"]], "Additional resources": [[22, null]], "How to submit to conda-forge": [[22, "how-to-submit-to-conda-forge"]], "Maintaining your conda-forge package repository": [[22, "maintaining-your-conda-forge-package-repository"]], "Use a pyproject.toml file for your package configuration & metadata": [[23, "use-a-pyproject-toml-file-for-your-package-configuration-metadata"]], "Important pyproject.toml take aways": [[23, null]], "About the pyproject.toml file": [[23, "about-the-pyproject-toml-file"]], "What happened to setup.py & how do i migrate to pyproject.toml?": [[23, null]], "About the .toml format": [[23, "about-the-toml-format"], [40, "about-the-toml-format"]], "How the pyproject.toml is used when you build a package": [[23, "how-the-pyproject-toml-is-used-when-you-build-a-package"]], "Benefits of using a pyproject.toml file": [[23, "benefits-of-using-a-pyproject-toml-file"]], "Setup.py is still useful for complex package builds": [[23, null]], "Optional vs. Required pyproject.toml file fields": [[23, "optional-vs-required-pyproject-toml-file-fields"]], "Required fields for the [project] table": [[23, "required-fields-for-the-project-table"]], "Optional fields to include in the [project] table": [[23, "optional-fields-to-include-in-the-project-table"]], "Advanced options in the pyproject.toml file": [[23, "advanced-options-in-the-pyproject-toml-file"]], "Add dependencies to your pyproject.toml file": [[23, "add-dependencies-to-your-pyproject-toml-file"]], "Recursive dependencies": [[23, null]], "Example pyproject.toml for building using hatchling": [[23, "example-pyproject-toml-for-building-using-hatchling"]], "Example pyproject.toml for building using setuptools": [[23, "example-pyproject-toml-for-building-using-setuptools"]], "Python Packaging Tools": [[24, "python-packaging-tools"]], "Tools for building your package": [[24, "tools-for-building-your-package"]], "Tools that we review here": [[24, "tools-that-we-review-here"]], "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)": [[24, "summary-of-tools-hatch-vs-pdm-vs-poetry-and-setuptools"]], "Build front-end vs. build back-end tools": [[24, "build-front-end-vs-build-back-end-tools"]], "Build back-ends": [[24, "build-back-ends"]], "Python package build front-ends": [[24, "python-package-build-front-ends"]], "Example build steps that can be simplified using a front-end tool": [[24, "example-build-steps-that-can-be-simplified-using-a-front-end-tool"]], "Choosing a build back-end": [[24, "choosing-a-build-back-end"]], "Build back-end support for non pure-python packages": [[24, "build-back-end-support-for-non-pure-python-packages"]], "An ecosystem of Python build tools": [[24, "an-ecosystem-of-python-build-tools"]], "We do not suggest using setuptools": [[24, null]], "Chose a build workflow tool": [[24, "chose-a-build-workflow-tool"]], "Python packaging tools summary": [[24, "python-packaging-tools-summary"]], "Package tool features table": [[24, "package-tool-features-table"]], "PDM": [[24, "pdm"]], "PDM support for C and C++ extensions": [[24, null]], "PDM Features": [[24, "pdm-features"]], "PDM vs. Poetry": [[24, null]], "Challenges with PDM": [[24, "challenges-with-pdm"]], "Flit": [[24, "flit"]], "Flit Features": [[24, "flit-features"]], "Learn more about flit": [[24, null]], "Why you might not want to use Flit": [[24, "why-you-might-not-want-to-use-flit"]], "Hatch": [[24, "hatch"]], "Hatch features": [[24, "hatch-features"], [36, "hatch-features"]], "Why you might not want to use Hatch": [[24, "why-you-might-not-want-to-use-hatch"]], "Poetry": [[24, "poetry"]], "Poetry features": [[24, "poetry-features"]], "Challenges with Poetry": [[24, "challenges-with-poetry"]], "Challenges with Poetry dependency pinning": [[24, null]], "Using Setuptools Back-end for Python Packaging with Build Front-end": [[24, "using-setuptools-back-end-for-python-packaging-with-build-front-end"]], "Setuptools Features": [[24, "setuptools-features"]], "Challenges using setuptools": [[24, "challenges-using-setuptools"]], "Learn about Building a Python Package": [[25, "learn-about-building-a-python-package"]], "What is building a Python package?": [[25, "what-is-building-a-python-package"]], "Project metadata and PyPI": [[25, "project-metadata-and-pypi"]], "What happened to setup.py and setup.cfg for metadata?": [[25, null]], "An example - xclim": [[25, "an-example-xclim"]], "How to create the distribution format that PyPI and Pip expects?": [[25, "how-to-create-the-distribution-format-that-pypi-and-pip-expects"]], "Source Distribution (sdist)": [[25, "source-distribution-sdist"]], "GitHub archive vs sdist": [[25, null]], "Wheel (.whl files):": [[25, "wheel-whl-files"]], "Python Package Structure for Scientific Python Projects": [[26, "python-package-structure-for-scientific-python-projects"]], "pyOpenSci will never require a specific package structure for peer review": [[26, null]], "Example scientific packages that use src/package layout": [[26, null]], "The src/ layout and testing": [[26, "the-src-layout-and-testing"]], "How Python discovers and prioritizes importing modules": [[26, null]], "Sometimes tests are needed in a distribution": [[26, "sometimes-tests-are-needed-in-a-distribution"]], "Challenges with including tests and data in a package wheel": [[26, null]], "Don\u2019t include test suite datasets in your package": [[26, "don-t-include-test-suite-datasets-in-your-package"]], "About the flat Python package layout": [[26, "about-the-flat-python-package-layout"]], "Why most scientific Python packages do not use source": [[26, null]], "What does the flat layout structure look like?": [[26, "what-does-the-flat-layout-structure-look-like"]], "Benefits of using the flat layout in your Python package": [[26, "benefits-of-using-the-flat-layout-in-your-python-package"]], "Core scientific Python packages that use the flat layout": [[26, null]], "Creating New Versions of Your Python Package": [[27, "creating-new-versions-of-your-python-package"]], "Key Takeways": [[27, null]], "A note about versioning": [[27, null]], "SemVer rules": [[27, "semver-rules"]], "Avoid manually updating Python package version numbers if you can": [[27, "avoid-manually-updating-python-package-version-numbers-if-you-can"]], "Tools to manage versions for your Python package": [[27, "tools-to-manage-versions-for-your-python-package"]], "Semantic release, vs version control based vs manual version bumping": [[27, "semantic-release-vs-version-control-based-vs-manual-version-bumping"]], "Tools for bumping Python package versions": [[27, "tools-for-bumping-python-package-versions"]], "Tool 1: Hatch and other build tools that offer incremental versioning": [[27, "tool-1-hatch-and-other-build-tools-that-offer-incremental-versioning"]], "Hatch (or other tools like PDM) Pros": [[27, "hatch-or-other-tools-like-pdm-pros"]], "Hatch (or other tools like PDM) Cons": [[27, "hatch-or-other-tools-like-pdm-cons"]], "Tool 2: Hatch_vcs & hatchling build back-end": [[27, "tool-2-hatch-vcs-hatchling-build-back-end"]], "Hatch example setup in your pyproject.toml": [[27, "hatch-example-setup-in-your-pyproject-toml"]], "hatch_vcs Pros": [[27, "hatch-vcs-pros"]], "hatch_vcs Cons": [[27, "hatch-vcs-cons"]], "Tool 3: setuptools-scm versioning using git tags": [[27, "tool-3-setuptools-scm-versioning-using-git-tags"]], "setuptools_scm Cons": [[27, "setuptools-scm-cons"]], "Tool 4: Python semantic release": [[27, "tool-4-python-semantic-release"]], "Python Semantic Release Pros": [[27, "python-semantic-release-pros"]], "Python Semantic Release Cons": [[27, "python-semantic-release-cons"]], "Tests and data for your Python package": [[28, "tests-and-data-for-your-python-package"]], "Run Python package tests": [[29, "run-python-package-tests"]], "Tools to run your tests": [[29, "tools-to-run-your-tests"]], "Table: Testing & Automation Tool": [[29, "id3"]], "What testing framework / package should I use to run tests?": [[29, "what-testing-framework-package-should-i-use-to-run-tests"]], "Run tests using pytest": [[29, "run-tests-using-pytest"]], "Tests across operating systems": [[29, null]], "Tools to automate running your tests": [[29, "tools-to-automate-running-your-tests"]], "Other automation tools you\u2019ll see in the wild": [[29, null]], "Run tests across Python versions with nox": [[29, "run-tests-across-python-versions-with-nox"]], "Test Environments": [[29, "test-environments"]], "Nox with venv environments": [[29, "nox-with-venv-environments"]], "Nox with conda / mamba": [[29, "nox-with-conda-mamba"]], "Test Types for Python packages": [[30, "test-types-for-python-packages"]], "Three types of tests: Unit, Integration & Functional Tests": [[30, "three-types-of-tests-unit-integration-functional-tests"]], "Unit Tests": [[30, "unit-tests"]], "Integration tests": [[30, "integration-tests"]], "End-to-end (functional) tests": [[30, "end-to-end-functional-tests"]], "Comparing unit, integration and end-to-end tests": [[30, "comparing-unit-integration-and-end-to-end-tests"]], "Run tests with Continuous Integration": [[31, "run-tests-with-continuous-integration"]], "CI & pull requests": [[31, "ci-pull-requests"]], "Example GitHub action that runs tests": [[31, "example-github-action-that-runs-tests"]], "Write tests for your Python package": [[32, "write-tests-for-your-python-package"]], "Why write tests for your package?": [[32, "why-write-tests-for-your-package"]], "Tests for user edge cases": [[32, "tests-for-user-edge-cases"]], "Test examples": [[32, null]], "How do I know what type of tests to write?": [[32, "how-do-i-know-what-type-of-tests-to-write"]], "Make your Python code installable": [[33, "make-your-python-code-installable"]], "What we previously covered": [[33, null]], "About this lesson": [[33, null]], "About the Python package directory structure": [[33, "about-the-python-package-directory-structure"]], "About the basic package directory structure": [[33, "about-the-basic-package-directory-structure"]], "What is an __init__.py file?": [[33, "what-is-an-init-py-file"]], "What is a pyproject.toml file?": [[33, "what-is-a-pyproject-toml-file"], [40, "what-is-a-pyproject-toml-file"]], "Why the pyproject.toml file is important": [[33, null]], "Time to create your Python package!": [[33, "time-to-create-your-python-package"]], "Step 1: Set Up the Package Directory Structure": [[33, "step-1-set-up-the-package-directory-structure"]], "Hatch and project names": [[33, null]], "Step 2: Add code to your package": [[33, "step-2-add-code-to-your-package"]], "Python modules and the __init__.py file": [[33, null]], "Step 3: Add code to your add_numbers.py module": [[33, "step-3-add-code-to-your-add-numbers-py-module"]], "Step 4: Modify metadata in your pyproject.toml file": [[33, "step-4-modify-metadata-in-your-pyproject-toml-file"]], "Brief overview of the TOML file": [[33, null]], "Adjust project classifiers": [[33, "adjust-project-classifiers"]], "The bare minimum needed in a pyproject.toml file": [[33, null]], "Step 5: Install your package locally": [[33, "step-5-install-your-package-locally"]], "What does pip install -e . do?": [[33, null]], "Look for pyospackage in your environment": [[33, "look-for-pyospackage-in-your-environment"]], "Step 6: Test out your new package": [[33, "step-6-test-out-your-new-package"]], "Installing packages from GitHub": [[33, null]], "Congratulations! You created your first Python package": [[33, "congratulations-you-created-your-first-python-package"]], "Footnotes": [[33, "footnotes"], [34, "footnotes"], [38, "footnotes"], [39, "footnotes"]], "Add a LICENSE & CODE_OF_CONDUCT to your Python package": [[34, "add-a-license-code-of-conduct-to-your-python-package"]], "Learning objectives": [[34, null], [35, null]], "What is a license?": [[34, "what-is-a-license"]], "What license should you use?": [[34, "what-license-should-you-use"]], "Licenses for the scientific Python ecosystem": [[34, null]], "Where should the LICENSE file live": [[34, "where-should-the-license-file-live"]], "How to add a LICENSE file to your package directory": [[34, "how-to-add-a-license-file-to-your-package-directory"]], "How to add a LICENSE to your package - the manual way": [[34, "how-to-add-a-license-to-your-package-the-manual-way"]], "An overview of LICENSES in the scientific Python ecosystem": [[34, null]], "What is a code of conduct file?": [[34, "what-is-a-code-of-conduct-file"]], "What to put in your code of conduct file": [[34, "what-to-put-in-your-code-of-conduct-file"]], "How to add a CODE_OF_CONDUCT file to your package directory": [[34, "how-to-add-a-code-of-conduct-file-to-your-package-directory"]], "Additional Code of Conduct resources": [[34, null]], " Wrap up": [[34, "wrap-up"], [35, "wrap-up"], [38, "wrap-up"], [40, "wrap-up"]], "Add a README file to your Python package": [[35, "add-a-readme-file-to-your-python-package"]], "What is a README file?": [[35, "what-is-a-readme-file"]], "Create a README.md file for your package": [[35, "create-a-readme-md-file-for-your-package"]], "Step 0: Create a README file": [[35, "step-0-create-a-readme-file"]], "Step 1: Add the name of your package as the README title": [[35, "step-1-add-the-name-of-your-package-as-the-readme-title"]], "Step 2: add badges to the top of your README file": [[35, "step-2-add-badges-to-the-top-of-your-readme-file"]], "Step 3: Add a description of what your package does": [[35, "step-3-add-a-description-of-what-your-package-does"]], "Step 4: Add package installation instructions": [[35, "step-4-add-package-installation-instructions"]], "Step 5: Any additional setup": [[35, "step-5-any-additional-setup"]], "Step 6: Add a get started section": [[35, "step-6-add-a-get-started-section"]], "Provide a fully functional code snippet if possible": [[35, null]], "Step 7: Community section": [[35, "step-7-community-section"]], "Step 8: Citation information": [[35, "step-8-citation-information"]], "The finished README file": [[35, "the-finished-readme-file"]], "Get to know hatch": [[36, "get-to-know-hatch"]], "Install Hatch": [[36, "install-hatch"]], "Configure hatch": [[36, "configure-hatch"]], "Step 1: Open and edit your config.toml file": [[36, "step-1-open-and-edit-your-config-toml-file"]], "Step 2 - update your email and name": [[36, "step-2-update-your-email-and-name"]], "Step 3": [[36, "step-3"]], "Step 4: Close the config file and run hatch config show": [[36, "step-4-close-the-config-file-and-run-hatch-config-show"]], "Comparison to other tools": [[36, null]], "What\u2019s next": [[36, "what-s-next"]], "Python packaging 101": [[37, "python-packaging-101"]], "Who are these tutorials for?": [[37, "who-are-these-tutorials-for"]], "Learning Objectives": [[37, null], [38, null], [39, null], [40, null]], "What is a Python package?": [[37, "what-is-a-python-package"]], "Python packages are installable": [[37, "python-packages-are-installable"]], "Why create a Python package?": [[37, "why-create-a-python-package"]], "What to consider before you create a package": [[37, "what-to-consider-before-you-create-a-package"]], "The elements of a Python package": [[37, "the-elements-of-a-python-package"]], "What pyOpenSci looks for in a package": [[37, null]], "Packages are more than just code - Infrastructure": [[37, "packages-are-more-than-just-code-infrastructure"]], "Version control and storing your package on GitHub or GitLab": [[37, "version-control-and-storing-your-package-on-github-or-gitlab"]], "GitHub & GitLab vs. Git": [[37, null]], "Issues or Ticket Trackers": [[37, "issues-or-ticket-trackers"]], "Continuous integration and continuous deployment": [[37, "continuous-integration-and-continuous-deployment"]], "When should you turn your code into a Python package?": [[37, "when-should-you-turn-your-code-into-a-python-package"]], "Packages that you expect others to use should be well-scoped": [[37, "packages-that-you-expect-others-to-use-should-be-well-scoped"]], "How does this relate to code for a research project?": [[37, null]], "Matplotlib as an example": [[37, null]], "Code should also be clean & readable & documented": [[37, "code-should-also-be-clean-readable-documented"]], "Making your package installable - publishing to PyPI & conda-forge": [[37, "making-your-package-installable-publishing-to-pypi-conda-forge"]], "Python packages and environments": [[37, "python-packages-and-environments"]], "Publishing a package to PyPI / Conda-Forge": [[37, "publishing-a-package-to-pypi-conda-forge"]], "Yay, your package has users! Now what?": [[37, "yay-your-package-has-users-now-what"]], "Support for contributors and maintainers": [[37, null]], "What\u2019s next?": [[37, "what-s-next"]], "Publish your Python package that is on PyPI to conda-forge": [[38, "publish-your-python-package-that-is-on-pypi-to-conda-forge"]], "What is conda-forge?": [[38, "what-is-conda-forge"]], "Why publish to conda-forge": [[38, "why-publish-to-conda-forge"]], "How publishing to conda-forge works": [[38, "how-publishing-to-conda-forge-works"]], "Conda-forge publication steps": [[38, "conda-forge-publication-steps"]], "Maintaining a conda-forge package": [[38, "maintaining-a-conda-forge-package"]], " How to Publish your package on conda-forge": [[38, "how-to-publish-your-package-on-conda-forge"]], "Step 1: Install grayskull": [[38, "step-1-install-grayskull"]], "Step 2: Fork and clone the conda-forge staged-recipes repository": [[38, "step-2-fork-and-clone-the-conda-forge-staged-recipes-repository"]], "Step 3: Create your conda-forge recipe": [[38, "step-3-create-your-conda-forge-recipe"]], "Step 3b: Bug fix - add a home url to the about: section": [[38, "step-3b-bug-fix-add-a-home-url-to-the-about-section"]], "Step 4: tests for conda-forge": [[38, "step-4-tests-for-conda-forge"]], "Step 4: Submit a pull request to the staged-recipes repository": [[38, "step-4-submit-a-pull-request-to-the-staged-recipes-repository"]], "Pull request template checklist tips": [[38, null]], "conda-forge staged recipes and CI failures": [[38, null]], " Congratulations - you have added your package to conda-forge.": [[38, "congratulations-you-have-added-your-package-to-conda-forge"]], "Maintaining your conda-forge feedstock": [[38, "maintaining-your-conda-forge-feedstock"]], "Publish your Python package to PyPI": [[39, "publish-your-python-package-to-pypi"]], "Test PyPI vs PyPI": [[39, "test-pypi-vs-pypi"]], "4 Steps for publishing a Python package on PyPI": [[39, "steps-for-publishing-a-python-package-on-pypi"]], "Learn more about building Python packages in our guide": [[39, null]], "Step 1: Create a Python package development environment": [[39, "step-1-create-a-python-package-development-environment"]], "Hatch and environments": [[39, "hatch-and-environments"]], "Step 2: Build your package\u2019s sdist and wheel distributions": [[39, "step-2-build-your-package-s-sdist-and-wheel-distributions"]], "Learn more about building a Python package": [[39, null]], " Congratulations - you\u2019ve created your Python package distribution files ": [[39, "congratulations-you-ve-created-your-python-package-distribution-files"]], "Step 3. Setup your test PyPI account": [[39, "step-3-setup-your-test-pypi-account"]], "Test PyPI vs. PyPI": [[39, null]], "Setup 2-factor (2FA) authentication": [[39, null]], "Step 4. Create a package upload token": [[39, "step-4-create-a-package-upload-token"]], "Why create package-specific tokens?": [[39, null]], "Follow the steps below to create your token.": [[39, "follow-the-steps-below-to-create-your-token"]], "Upload to PyPI using Hatch": [[39, "upload-to-pypi-using-hatch"]], "Install your package from test PyPI": [[39, "install-your-package-from-test-pypi"]], "Time to install your package": [[39, "time-to-install-your-package"]], "The value of end-to-end tools like hatch, flit and poetry": [[39, null]], "Package-specific token vs trusted publisher": [[39, "package-specific-token-vs-trusted-publisher"]], "OPTIONAL: If you want to use a manual token-based publication workflow": [[39, "optional-if-you-want-to-use-a-manual-token-based-publication-workflow"]], "You have published your package to (test) PyPI!": [[39, "you-have-published-your-package-to-test-pypi"]], "Make your Python package PyPI ready - pyproject.toml": [[40, "make-your-python-package-pypi-ready-pyproject-toml"]], "What is the pyproject.toml used for?": [[40, "what-is-the-pyproject-toml-used-for"]], "How is pyproject.toml metadata used?": [[40, "how-is-pyproject-toml-metadata-used"]], "How to update your pyproject.toml file": [[40, "how-to-update-your-pyproject-toml-file"]], "More on hatchling": [[40, null]], "Step 1: Add Author, maintainer and project description": [[40, "step-1-add-author-maintainer-and-project-description"]], "Author names & emails": [[40, null]], "Step 2: Add README and license": [[40, "step-2-add-readme-and-license"]], "Step 3: Specify Python version with requires-python": [[40, "step-3-specify-python-version-with-requires-python"]], "Step 4: Specify Dependencies": [[40, "step-4-specify-dependencies"]], "Pin dependencies with caution": [[40, null]], "Step 5: Add PyPI classifiers": [[40, "step-5-add-pypi-classifiers"]], "What happens when you use incorrect classifiers?": [[40, null]], "Step 6: Add the [project.urls] table": [[40, "step-6-add-the-project-urls-table"]], "Putting it all together - your completed pyproject.toml file": [[40, "putting-it-all-together-your-completed-pyproject-toml-file"]], "Example pyproject.toml files": [[40, "example-pyproject-toml-files"]], "Publish a new version of your package to PyPI": [[40, "publish-a-new-version-of-your-package-to-pypi"]], "Next (optional) step - publishing to conda-forge": [[40, "next-optional-step-publishing-to-conda-forge"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/tutorials/add-readme.html b/tutorials/add-readme.html index 74e51c30..3e372f69 100644 --- a/tutorials/add-readme.html +++ b/tutorials/add-readme.html @@ -721,28 +721,30 @@

The finished README file## Community -Add information here about contributing to your package. Be sure to add links to your `CODE_OF_CONDUCT.md` file and your development guide. For now this section might be empty. You can go back and fill it in later. +Add information here about contributing to your package. Be sure to add links to your +`CODE_OF_CONDUCT.md` file and your development guide. For now this section might be +empty. You can go back and fill it in later. ## How to cite pyosPackage citation information here - -## <i class="fa-solid fa-hands-bubbles"></i> Wrap up - -It's important to consider the information that a new user or contributor might -need when creating your `README.md` file. While there is no perfect template, + + + +
+

Wrap up#

+

It’s important to consider the information that a new user or contributor might +need when creating your README.md file. While there is no perfect template, above is a set of recommendations as you are just getting started. You may find the need for other elements to be added to this file as you further develop your -package and as a community begins to use your package. - -In the [next lesson](add-license-coc.md), you will add a LICENSE file to +package and as a community begins to use your package.

+

In the next lesson, you will add a LICENSE file to your Python package. A license file is critical as it tells users -how they legally can (and can't) use your package. It also: - -* Builds trust with your users -* Discourages misuse of your package and associated code - - +how they legally can (and can’t) use your package. It also:

+
    +
  • Builds trust with your users

  • +
  • Discourages misuse of your package and associated code

  • +
@@ -804,6 +806,7 @@

The finished README fileThe finished README file +
  • Wrap up