From 58ace8086b82addb8340f048bb10cfaa37dce431 Mon Sep 17 00:00:00 2001 From: CFZhai Date: Fri, 15 Nov 2024 21:22:28 -0600 Subject: [PATCH] updated case 2 --- .../CL-bank-training-testingPredicting.xlsx | Bin 0 -> 185863 bytes ...marketing promotions at Universal Bank.pdf | Bin 0 -> 118161 bytes content/data/Museums_in_DC.geojson | 1 - content/data/bar.vl.json | 54 -- content/data/fasta-example.fasta | 8 - content/data/iris.csv | 151 ---- content/data/matplotlib.png | Bin 26389 -> 0 bytes content/javascript.ipynb | 86 --- content/p5.ipynb | 150 ---- content/pyodide/altair.ipynb | 231 ------ content/pyodide/folium.ipynb | 154 ---- content/pyodide/interactive-widgets.ipynb | 268 ------- content/pyodide/ipycanvas.ipynb | 178 ----- content/pyodide/ipyleaflet.ipynb | 259 ------- content/pyodide/matplotlib.ipynb | 113 --- content/pyodide/plotly.ipynb | 158 ---- content/pyodide/pyb2d/0_tutorial.ipynb | 649 ---------------- content/pyodide/pyb2d/color_mixing.ipynb | 123 --- .../pyodide/pyb2d/games/angry_shapes.ipynb | 419 ---------- content/pyodide/pyb2d/games/billiard.ipynb | 299 -------- content/pyodide/pyb2d/games/goo.ipynb | 575 -------------- content/pyodide/pyb2d/games/rocket.ipynb | 282 ------- content/pyodide/pyb2d/gauss_machine.ipynb | 128 ---- content/pyodide/pyb2d/newtons_cradle.ipynb | 130 ---- content/pyodide/renderers.ipynb | 1 - content/python.ipynb | 721 ------------------ content/target_promotion.ipynb | 90 +++ 27 files changed, 90 insertions(+), 5138 deletions(-) create mode 100755 content/CL-bank-training-testingPredicting.xlsx create mode 100755 content/Targeting marketing promotions at Universal Bank.pdf delete mode 100644 content/data/Museums_in_DC.geojson delete mode 100644 content/data/bar.vl.json delete mode 100644 content/data/fasta-example.fasta delete mode 100644 content/data/iris.csv delete mode 100644 content/data/matplotlib.png delete mode 100644 content/javascript.ipynb delete mode 100644 content/p5.ipynb delete mode 100644 content/pyodide/altair.ipynb delete mode 100644 content/pyodide/folium.ipynb delete mode 100644 content/pyodide/interactive-widgets.ipynb delete mode 100644 content/pyodide/ipycanvas.ipynb delete mode 100644 content/pyodide/ipyleaflet.ipynb delete mode 100644 content/pyodide/matplotlib.ipynb delete mode 100644 content/pyodide/plotly.ipynb delete mode 100644 content/pyodide/pyb2d/0_tutorial.ipynb delete mode 100644 content/pyodide/pyb2d/color_mixing.ipynb delete mode 100644 content/pyodide/pyb2d/games/angry_shapes.ipynb delete mode 100644 content/pyodide/pyb2d/games/billiard.ipynb delete mode 100644 content/pyodide/pyb2d/games/goo.ipynb delete mode 100644 content/pyodide/pyb2d/games/rocket.ipynb delete mode 100644 content/pyodide/pyb2d/gauss_machine.ipynb delete mode 100644 content/pyodide/pyb2d/newtons_cradle.ipynb delete mode 100644 content/pyodide/renderers.ipynb delete mode 100644 content/python.ipynb create mode 100644 content/target_promotion.ipynb diff --git a/content/CL-bank-training-testingPredicting.xlsx b/content/CL-bank-training-testingPredicting.xlsx new file mode 100755 index 0000000000000000000000000000000000000000..3aee978b4e48dd36f246aabf843e7fa9b9e23116 GIT binary patch literal 185863 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

O4iUUGG~Ml4I=%fL3-(PD_b zWyl=xEDxu;gM7kw0JQnz!z{TGX;Y`+(1ilk;OeE*m)r7pfQ<))s*p0cNpjAM>SS86i;bkn- z&TZ^3Bo@{4<7NOKk}KU7uD1FlhFZL_b?Mzo>l=Bu(Zm(Iz@g@qlrxHfW13D#Skn*I z|44U}|B>!;WM)B`hcIUxg|R*dEUL-#X|OrhsCgN$FQW&4z?Nh>yr4?m$Q4XHn{Bs; z$!5Nl>J&7Mn*wi}bn3flMe7{w$*lj~!#T=*z>aznFMA64O|taFyrjP}=)}N3?z`p& zUJy+zY3gE%_IWZ-`zkS}eAVOz%T|9g)VyKTyy25-h@worh>8BoGj-(CA@-+tdr22E z=(lzR+hSAvoLg0xQ2Qq*8>P!uw8yzlRyfzY;9&kr2*fwg4%8X&f@6eIz*nTz>9V~} zdZb5U&q;q`EZ<`8cSfb#QO|oM#?YxN!UM~A-nENQ#!*)hAnHhTXS;!D_y62NP8k44 za`z@#>CL|Bg!wvwpl-0qCOk0Fp&W^g*R3)gIif*kMNZ!?vn82>$c+OFDBJwbrg)OC z7vTaEoLpDgrE${&|CX*AsrjL`)i_yk)o7a0YOO!8sU6g!3*4b+Oe~iFO#kgs#|n2W ztnDu#g3L_$-U7u6JjJ1d!S)XBol1c@#;w$Yldz0&6K;Tq$|vG^PyNF+V18duELS0` z=5NYRAQ#Ce7G;8iy(qW9!H-4E*ftvNxh`_TKV_ZJ=^=zN(r3n?_6usvk~`_CXosj< z9ALiMHSlS|Q=((2A2mB^j2GU>pr!*LBYfIU_xjb$@)s6KSLS9DOGtKVj@l!(-i2z+#j_{NFm)-_|D|!wZIr1YVp7B&vS(2Qg@idxH%iNBMoMWFGh%mM6p z3|)zHOqqOy7ogJQ_yW-CuqWs-6kv=1EVT_Ptj8-4C(^$~Klu)VEvdKR$HB>UI8YY7 zYpAF^rdjhM-hg^hcxrXWq0!V<-N5%D4?b!7$PULTbuMb*3^v6t$NwvSW%_5O!Z=E4 zs8S^f$;ofqYmtt!=TrK}EpS2S9U^bcJH7}X*c9$MN?_uDv)%fDTnM|%mkawCKBCIW zF&nol`VNg*f4ty9Nsl2*(;ZO!0#Kz#nf}+C}3pdE01U z$2b6=j5b4ys>WoilPGGj?!+Y3?nBO9N#lTX6)lZ14wVssRwRVaE03$3-O6OukA|rr zPkG8H-bv%n{cyh2D6p;Cs_JONDY5_!-e@uVFv1JA1^0|v-r`Aad3ZMeWMu>cmF@{d z8op!&&QJoBn*VcgTmHq3&9^P(T$VvCMxXLA?|E+r=3n}ws~m|oJ7Nne7%e#>C=*A| z*ll9Qi3HI(XHKG3`Zr={?VAai6AO}Bbw=&`;Th`2Bd(Mobf|4&)$RPOmrs=7 zg9Xx@7)T4LUt-c-x*j>cA=y)hey2x=r!-pAE(swZUNFdAU5enLhchp*g5D8D=N!ow z&(Q5A^w^2VckAF5T3wHHd}>;i=t5xE$77b}Wg64r&UY9fVHyf8+@te*0rplqii7cC zVGeY|UQJKmm~LLf>z7*ZL7%7*y#uLU*?M?sea#nydF!9^=lRk4?w=fexD08db)oP_ z*(qT^@o@~U?F}SvB*t;~5SWMAdSx+l{5aIZk3&0qVEoGi;*)>xiH_+SryDQTY9)sc z7Ttd?56|i!r!D~4)H-=s125y3a+R}XaSWBSNzVK~*UtI86Gh|h`Z%59(~Ri)`%PBl z(!SH_1LJJO+AbJ&@jc-l^MiCxJRL2$E*2;U!UJLg_sr zBZ}3Q0CQ%%kK~r2sBf;)W9hF=>0mLC+Bg zU>~n3zz%nQ0!krXv~mLKxMwIpJd$e});088KTe+9#7wrixO$z0Sbc7-eW6{Xd}!B# zMBn^w-eFl^lfFTuJpequrbmgn$AJ6cGMHSs8>Y6(3- zek{gksO9WE!IiXkcCqnHi9R{28ti3IQRM_iFRRLeoS|>#x~)2|G?VdJjJxL;=&80%Wc*}*y@VsqiQBJALA#rcGlu6{|>`C=Px#cJRQ&r)tl1mb6|t*qHv=Y^$r zL;60&-4&)KGDl>D*^tSsM38k7hcKq}{)@Xyy|Q?hy7Z+n_~- zF#B%kEWu!zbJ9KXE}ymyd^rSDiC6`~)TR{kDC5P;Rf)6R3rRW$Fsm)0xFbP~;T6`@ z(4PDI^e%d?#Lq&59CK!}`r*tv3+eXvjN)OH<{RwY%G6LLDte3MwH5sr?83JnPZ#RI%%VdsoB?8!$N~1)J@9*hA@yjG8 zrL4r7+npN_e)<`D*P)j3=?=D{eHTZy`f<+E5o__4Eo3MEg}I};`bM1} zQktSwV7M6@fk)^i`*;k9j|KFCLdMQmweklb$>y9CUppHg%7_`xBYTE4A*v+$F%O;_ zuQD*q`>u#p0mt<=>9W^{#u^rP0j#7=N(WiuqFFkFuoIv?honHn&2X{!^p?dWx$dxC zjUdl+h|gND3gEeB^?sTe8QK`AA1Uy122$>>={dmwF7Rr|2+y8KYy*JrCem)(Cg2Oz zEaNCu40^30FG>4s>^womIt(GgjG~x}^2tU)O-vhh$)V!vy`T}nNSe-PgZ0SSuN89E zxw;L$20ag-<}5It+5G~JDIduT<$4j^Uh~|#$b{7%X|F`yci#%8CalZqjK;jHDxe>l zwTeePmj+0^q8-MJ#>-j^^u=+Xc<3F|9BjQW+1wpOjvTFWJzZ{(VZPr4 z?Iwb-{l!r1KsCw_x&qHOop-zeI4#y6uxxlq*AC?@@spELAF{a#I6=8quAcD5;7>u6 z_c5SNKT#mpO%b{q`##~@Ngo;02UutAaiMD5elPd-PiT3B_D=>{>6_L+-_)+6Si&g- zJG(ucqQ+ZEHfn!_2c4B6 z-62$<7uvuMUQqklc#zltu6%J|`qqDB4xAnn`=%LD0`}QC0tCOIrs=}` zg!$#aciz$c6@~&5mxkUDVU+BJvQMIJwoBB z4m^j>qoK@{ixtu-Py08K@#9}&1 zLaXz>K3_j%c&}GHtXbY&td{-M*0RyA%n%?pma>Z!B%d^{c_lJr$ z#q|MM$+zC`n$KiS&wA6c(PXSrziNhI2}lVth+p_JW;0R&jLV)Bch`q9#_wiJ8M24c zai{D5(Vw~h{lv4iLh?Fn`voCV$l2Z>F7KhcOvuZTz{TSP?EslUCh^PB&CFnrv^6K$ z1v)8`8EQ`xz2Uo?(2@-ozgyEqBNCpAiH8Q1=WOjdfsPs^dUkzrp6; zfe+~wSlY?U=2wu%G7CsI)$>w-o-O*qVq!#c%(WVxXhDeU0Cq-c!rWutpGg(tZf#^; zC(KOqiiRq|Xv!~m76(J%+;#M)JPO`}TPUF@g7oH+4B@l`JKf&xtu6L!mt|XihR+PJ z7i2Gn<6e1|z{s6P2+v@unlks0u=o8-}K)gTz%X|3- ze<$mWhsLpm5w?0nL{d4&?R z1U6#kHtifx?iz}26QNs9@!+|USQ`%5E0wNlE1}bQ5DI=EYuYPPjVFfMlN%-3OCVrneH^sI96;|y4M z14qsIRPnxfaZVweFJx+XOAKYZB}IqQ5?6o(>3Cr1iGW$YRt*T*uZ9It5{hFNId?Ff z<~Z>HnuFAXeL)hw%=@)%i@&21vpIqT-gkz(ADziY9d=J1a1H?Eg-oXUcWgaU_J2Yo zG9X-xqO5&mCixB);gGl*vflXLOOgC*`+`9F7>;v{q_J4- zy?_Stk#TTD0J9r6#MT&)Cs-%Mfu=|sBw#DmL+opXG#ii}K!a907$MDxji1RXUSl1z zFAq|W7w>&xI$jxp;DPMuJ8*F(%qIZ~MIz`;HwFjz3%;^*Qb7V5J05noy+t>kxr3$H z?^^9pcJ9gjfr{A$t$s|r@cMsJqyF0;O@+Hd<(@VJ&*L(mOaY;08g6lGGksw3*(^Iq zwPNnL*dsxSnE!~Rh#=RO##L`n%#q5kvAp31NSb`VHwFkH=$C-Vna#aNp`9!QFKfSa z57313cP&{bcm0?siC>k>%60EYp5!>B(X=8^&F zOWLF|a9SV1h~AzNL}7^6ae(7fEPKAbN;rQS?!9kW+a;0x&!33Y^YM0uzzTK)9tyZ{ z@o6pe|Nki>T=Ik`Td5Y4-;4~8tw!eFF|>L4luw%wSLGLLwx|bvqJdvt0k#ug37A2A z+6bU*6&4DfGUA@%qKA`7t;)$7^1XUV2Tzbgda8zn2v<21%gUYj>Tn=!O&tn)PE4CR zlqp44O{I>^_gC!xVymN1gKs*Y#|fQ)D7A%DJ+g(YExeIh(vhj{ig@9LVbo6zsMOk> z4&@AcufAhw2G&swKl9y!E4Kd#C9p-jAl`*{63g3q1keFlnSilXJC%G1c~Te;x9!*+ zGfgmD#Oyi$Y(H2;U(mjWyzFw)ZlwMQ&C&vwZ$UKxrZo>NvKhKd?~>;>EZuZb`Gw&QJ? zSpcQ_Fob8^+LCw{RL1|@z)28(N!(nv}y-4fD`5=(=0 z$1WuxEi573xxms5OS~6!M+|iLhM0wANx!5;pSZ>G zS&@9yTuxC<;DQKljRLTGURonUVbZ0{p)dFrO6Z^HoZY?DZSBZ@|_<`Y`Q=OQOd*l^XKjN*pRW5Eo1Nz{AV*u#3;?*kO>iO778lf;5Da_t*#*i z7<19IS$m3k!O}$%=d_f5D;fvX&+c(Cv}czHL>bR9p;xWp2d&=@wh3^7lrieT(b}DM zGRD;bgGTSnb7QVglai^cPv_2|zxQTJy#g+}&tFcjdB*lU&IBL=kb!{c`g-1SFZzt8 z4Ve-KTtD;zWA3JjpRVIoY_8YF?)tmionoho{s#P&Fcgr~9krGHQl$WKBz`LiiQ|`| zXaby$AXvfG^C}dCIkvuIK6%SI;-l-cv5}xLx=r}gaWw-s=v>PghJhdiFs+TI=qC}% zg5^O9T1!tB4=FspChojS-hag?Al|!v#k`2x+(tdmN8w=7>3vy5P!G=2dmbRF=3WZK z$OZW(sS6%@of-IE-d^TbQ+4KD>XzY4E6h0)n?YUD zi}ayDfKh(=RMUW!0nNZ0SRNp*4rm5|I3%hFUGTOF_jD%Dy4nMmksJy20iiqA_ILaJ zIEk0ewY)|I&_l^3ArHv3LA=nFB^b!C8u3e-_eq!^4+I;W`i0KFa*(|fYt}8HUA`#{ z7|DZfw$)cIPF@t7@?3C~t}-)> zC*$2Y`eXWd^VD9xilP0@Rt^20lz zERm@F0Hn1A4WN2&>h}SOZ;SgSO8|Dn&$k0=Z|fU}Y&YF02B8Zz;$en-$di z_3j0-nn5^_IrDxVa3|kKv7>=}?@J8ylPk|C{md=(V;SSkRYEL->d=|S7jcVTqOCrw zKo}MsNCS@C03^Ay`M=YLfvTFpf2RXMaQc<@!RzG*D`_3#oABAX^5`sUZ&~N2<|g~} zr!pju2%*qYOTm+g9$7a1CqD*#1hYb-4siGEnO%E5OlV(ErWeg+|j z_4wjL2G1Wty{Ed9HdVJ9SgC?;_7#jBM8KpIjdDxL6tnqCOGzM~${m1iZ)r^+Hg+$J z1zWxD14|JTuN*8aUzUxJ;=Lf>` zlcLKGwFBboo-zFKK<-cn#B3TUaf&xb73IKydhB};ziH8_wffF=Vj;r{By?c~;d~tJ zt=O3hnXlMCY8o!+JA3#=Xc{uGU3uDlM#??=FVb?RVGi_+ypL4X1L|Fbg#znl#x4*- zW(B+OwQ`J=zW&qVGK+x024bErVm_u%0lP?lc88*`d&TtLUWeY@t~$_d08Y&ypr2+h z|1BlNt8@iOt>9m{FHGBSufg@x!0>b)Aogj-(q-yGt}v2LHu}u2qpd4=N_x@se+XuVdYRCLYdEW%gmEwDyH6H+Vz(5 z04P8>H;HrZBQ?zbY=u~2?&sW0)5I;``KuY61b)BS&uq^ASKk+9)0`L5Hezv@$Qesl zpBrH572lH&*gimUk1gQK+$~Am>m!FLYT)DpapzVBPv=GAmdnQ+CkVS{5;;>~=x#=> z8ld38r(0lwO`EL<0>CkGzb7Ef|Ey5?bNyf-%e}&^0*T%4`e8W9R;wD56=1!Uo-vW% zC5gokMgfgGr|%3JI23w8DHU?zgysFZ2S?JfoAh2GczA!6A`BSfdG0?a!w66{ro-S; z5mmS&H2Sy4#>PA>c`KljNWEr&d0Zg-&3V+;4>(|eLI(bY9lH>a5^q2}ymJEqxY|O0 zvavwqIcS=H^)3r1rA)vF8ciU@w1hZ|eHyUK&|=^+&xIM!J)|W-Nz2GUK&1uEFhj4< zBw(T>xa@7+M_VzhH>t|DCWx?|)_+=m4Fws7T9qTw{P)DS(s|!}Q@+5|W(-mi!-BbX zzB<~{-vI23R!flEW9>!l%ee%{?JaMBfs^zS+)svqBGbj|hY!SQ`C7}9bCkUNby9~1 zzwVXj+Jm}mVoAO#*W>C2d2cvd&sIylwTYGfpVhvI$ko_;N^LDvQ{kNf;7Ky+EKt2k_eD2%H~V*|Dbly#n-b)A z*4srSqV4Xo;&%1!W=s0+2yu5^ad+Ia*e!XEY`D9WuAlM0bM*l*h(6Pl@GeWj^{(;l zbl`l88WVgP`P|x18$7C2=6-(QJ7h1iYfe*)Oti_qkWLy*+kL=$)b^JZun)g1-tIci zj-SbZ&YOW~M8;1FkNSgCIUAD5yRoT555h&^xI!Kt8`0LC*DZ~0>z(3T)e-hyYtE7O z`Z3--vUfIO;`z=%pa(9+8{xf2bs#X^qc!JxP-oJ&7|HM^Ak|=|2(?1>SJOZZ_P$yU zbe_B@xIq2%dDCWj4;{=YY#XQ)NkGQIfl7z}y#^30@{Z=-W)XJsv5-IQuh7pt_55}* zn-eoGhfGujssyHT8yc=_%#s%=tyM5~sxq>rKhZU&z2(a&0Kkff!6p`Yj%zo>b!U-$w;{k+kybVk^bt2-fYo z6WGM)!O*bK$msDeLUVt*fzg`ls!ZYw(RY}whvM}IY{frkImy}P79z55A92Rb)MyJ^ zccUIo8u-$db2cp%z(ccqI}};HOA8{ZWiNV>{fFmdx9^1JML(CYO1}R)g%3Z4$`}~E zPr3Y+mbg9TFCF&@vt?%C-QEUh=k{j4)8^~l*{H642SLdSZ!B^d_trUi-7`$99GCJZ z(vx>m-zd)&PAEDx72X7D*xXyRoY(&OT<_;Vt`%6sEsOr5`%E6WAk}Q^V8tNv>3edu zly6kEZA>jsf3?&o%<058Rm1Mz6~dw2T0qWAFt3P#XQdM?$17WsUedwM@Al)>0VnDm z(w6GAtOyiz_baW9s`Fx_pV8VNGI_Tub&mr!((Tf~=99ylqus7Y6Ei+1yq5`F;Ieu`o0iQB^R9q1aeN3vXGvpjvLIz4_W>-40jt$K>- zaa`v^VmVQKK9x%DSxef3piJv;Gi)kyJdL&RtMehNvmLFsW}yWawGq9g#ao-DF+X>n zqi!{e4^sS{kdn)?sY}_JbrM(T3(M@Z*-QkuNOT+|FotZhW@dhcuX1mOLHB})KZ#a| z3x~TQdReya)A`M-@wWKA#we95J2#9n9{V?7`=n`+CJig5kwc_`bcu{$UF)yt@H6vR1UP^06vYr>%GzR>mU zpdgfqbNJ@+V{45UgO0hbmhFnk{KpRQhGRxw+m{r`7d6qyWEqwMrx!ImoFBB<ZoAl60(_v6t#9uK9bUDTW%>hBGAB{P3^BMuIlRCza>(dqb*OW)!M5x=M}i zB*~v`S0Iou2sEVOF^5gqHP`GR=J^ZI0GK`)smI4TYfxib$jQ-+og3^s6xQHRzVzgv zGAx%4ra5Qj|3tzgi7%Vod{FLEt-k59JN|P%5vU(`nWz?*w$>78Y}z))*i3dU#Z|j+ zVcyjB>HBDttsJ!{w)==mqn~hlWAqZ$&6=P1j_X~U4nmd=$>}{*?*vW0mYRdQXLM8U zn=LsvVQCj;el)`LIpSFmF<$r4YMiZdEM%9{Y)p{pLFv5iL4_e3_?CQrBfWYp*punE znrj>pPTZGG?^G*!mnif{AjXx9d7_mn@I{Lg`i1_hQuT)1CzYSEv>!}7>l#$4`J|uJ zy1mwC#G8SRG`-B%_*oug1=j_0HebHV6CAm6f8P2@D$Lqg>X)$;rz^f}sZrkFU5g}G z*Rl;$#qq;R(6)>xC*ReDbZ<3lbA+q<)tUC->*$gLoqIkhx3teOK!1NO!pL?Vj=NY@LcBhe`1u?ybigRbuJ^?fo?LG#M^p)TPfJdT}#BU&E*(!<|g=)_Dt-kE~1GvCrOodmy z*`5OCkJ;cOw$dw>p!f^zh*I$*dmZ>|25H8$--R7y+cfw95!nC{ujhlstA|~I`2ge{ zYemL7Ootl@_#LQ7LjEt~7QygNPl0djLcpx>j|}4rKnFV5T9gjZoeQTFm~=M2t5Y&o zD)w7EzqXGR8_Bu{O~ewJ*8JMQ)TKb!9OP&7i)OwX>*H;d3a|vdP0Uj6raUxXU&jJ$ zvHib`@OnOByEkXrb)9@I|K-n^qp=K!cCrOS{BD^>j<)1Vf?8!9ZjljP5{!phNMOb? zAJC)GSSrGqzB1&hRJ6hLi%LQ+>2|J+ND%v%@^7xiua4dM$`eEzBm`Nwe+Wula}4da zO&<&GwUP};&nyPs_jf5>t=39uKBP7)v&T$sShCP6(R&m!p9Y47q3^qeravH zWN1~XQY(*QFAs+D>jyE&46Ltu>3HlJOZDpBonV7vj=?I-DAeoda0eY=f@2?jX=r`W zY3W}(%5q?2tE))q->nT%9VYHnmyaE3E+5OYKN%#7OWUQVEirYK3EA?lHR3ZOPad3< zmBc}=eSA}l4^+Bl)p>z9o9(X}5F>5wl{ z>e&`sl9cT}t%N_gOBr7qC08H1Wbn0_lMM?GuL-2gZfCy?kN& zgp(@1T4hb2>Qtl^-&Dp>`{rY<^329Ih45PebLYBas^Y0dcTEiqoEJnoC~q@h-0%28BodfEe9s)f{s5Rm$F0*O@-e4sWj4fYQOa*=GRI+9tP?dKQ;aJipd9n4rz4@m%pyG||&N=eqWTf?^>2~`3O@SU$wKKv=; z&?s2&*-fcrxpKJZ&nL&Y>A_*J@>NYxAQV>`=Bb7O85r3 zzLa;Mjd03#xv{DvHcECGz&r5>Be1+`#q$FdU47VTt5U$ zV?126eOZbGfh~5V$36EG9CL~VFy#;%ZRxqP#)RcK6rc(A5gQ437nt6-_grmOtZS2~ z-WJZ5$Y!u6gq$|e)eGs~_o$S2#YCdZmg3R^e^rdemA-Mp4VmK`)S(qp%@B0L3Auou zBWC!MF}o7+EP*Z(|6FV1bx-i;{%Y+@f@GwPLUmi7>#oq>$7y_ z8IN)V+Q!Sy&-B5Ioq;y;E|6$PCT{T=g_dKuAvDCoirvFr8#VM!si^wHS3)69Z|cw9 zt5Memk?a>7v)Ey0rEoGX2kaavVA2`=h;JMScoqb8DD#X#CToOj6fl>!GvtPTMlP7( zSt8MHVg;fF7$raqhL5VF8Gd&~)A;B?@cTTkfPRj$%AKXr&o zQ$E-QVl8p)MWgvQ4=DH#vC^n~O??(ir=dhZ$4^9W)7A>mQEnRt81z1S0D#OX6d=Y6 zUcee*e=3}urA}hSep&W#3SatzMI11U45DWvYB_evoOjKd0SrfBbNKBEG{h4D0CRJh zmwfZA1_MyEP7ZuuGw2FpFf2#C?78LXCy$P#lP->=-;%oi2{*V*T3|mq_Yn!C&wu*U z%NV#FJ`R8ol?yaHRleWvpFhBL64Cp*&E$E0$iYV9^Nt&Gva@|%#Pi5gs)cCRBew~B z@C1c^DSM-Z^R+*87eGj!2@zv+AFWJ@N>E_~bfQs(deAmn=^#p^^>?wGNm!@ z0_Dy`47;Z2GEJ=>b>Lin@7?+i#Fqa2SN_|}bV#_(0>&s;+8c$wMT8rEw^uCC-h5Rm ztJ~)rTGXv>*WODf_3@6X;B$XUiOg||1%2+97a52#GQ($VgYxjGlTD`ME%0C|x%9)u7Tleq6^U>8c*Cc@WRUpnu2Ay&VJex4rcqEowrm9m0lgxmS z;4@*f_Y{&ho&-Li@#XegoVF3)S=%nQJH;yI3t6Kk@}1r+{BuJMy>c_mL)}WHVAeS= z2R2`=N{RR4`r|7ZlIFQWK~nhkPv_rb!|2}D))>0YZ@SLO7G|7^t3s4-v!sx&_}$GQ z;3!*b*}n%Dz}#oGU1gg4w((I`@Nht>0K^~|SEXpI6Y)zt z|F6*T1=;?+LSifaye$MQ^?+(bMMe~vYtmrD6Uz*=zRwic?rj3pA}}CIf$7IYIy!9` znmg2?pBVSU0Vem6TvldMZS?h3t5R`iqYzq@i~YvCqU|m*0sTe|2y#hK`*K#sRNDr#j>!<>s zp&jTgT)oQF8-=+mme13k)pD*iW69Q}r|w@&oz|5QJXHS@&{M~{1b8y=12ZU_=CjE@ zL-B{M^zadOZqmMq*FLZ101YvAigX7shk&U>0JC%C?}4?l^d7Z>4`J=$#_RzqE~J$z z_|_2HcK6P!%|#4EDg0DE{DbZH0_+*Bh{4FThQinvf z2wUQzU=?H>*t0W1B3ApK@_n>2n#^5Qn8d9Bg$7$%z6?5hTp4fzjDe(O^%`D$2`mBt*OG1$oN#X9&fYzISF@2v zs&b9{?WCnB==a~wp!u=|<3JT(!NZIODnmK2FZ(ua#2Qh5jc|%FFhO*K{6W70y^svJ zQ*YHr0eLN+}L&d1azCJTZJc6XcFN z!>f*nuGt1`?BTsFXS0z9yIXO$D{I6jvApCzmEbc_En<0* z4iEPLxtzY%v@DMg(^WG1(|-4 zm1n9N8#CRc={4h5aCx+-QvxR1a;8-Ifk(u=+kCvV4#^Siy#RubK9V-}HEs7y-VnYQ zW~ma@f^H{zhJCNK=Qfvt=8&D>z|-^xU&R%icZC+_Fi1|-QfGZ?Bt|m*u==E@+1+%D zSoaIsNET?y-9XyVU-vExBa-XVaX^9uNSBN==$4FOG7QfrB(lLD1gNqJ#;Gap1B48h-8JAM*v_qB%&ah~Z0A^lZ zroC=j=5F^DDH-P`HqxC$NKkr6ha;{= z94SZA-x`3^V`^^m-P6`Yz2#$exSzWWrO5PRP}Qrew+D1)hdk}>L{6U#0?BS$P6{j9 zOWoaiR^~Gz+|07sm2$=k$t4FB9pO!ngXoZ_^bC=wx-ELk4ULsrrV6PkAF;|TCTUe z8>x7U&A4-d=VD1d!bmAR3|Vgiwk+48-7iH{skd9t(R_yAl_Iq#lSGaW*DI3Dj^Dn& zRmnduWgK)S`F;&DE|k48zQb{F=y0aUaJ$03V&-s%V;BaK?PZ@XNfEl=uL$STe3ic& z0)tU^6H2v|K`H9{Gb`hHtTFcPns4I--Ak0!=!4T-|4H*f_B(YuXz+7E|Fg&a%yai6 z6^0p`Uo;x!P0tU021j&O<~R>VbHN-7=S12VBClPK&=!CJgxiWDxb472T#j?C5Dk(E z4N71v5msQh!@WSUa$1t4Bp&k8dE=v1-DKLQ67#*i_kP>GB42nUJ}4xpCusJbT}W7w zdve+5nn?jXhqJ%B#k?7+i+4Ywg7!BsqC$xHx6zZC3=0{+e}o67+3n4NK8jST1VM~7 z{hm+Y%k@XOh)^NTR;pS%5YI9S=klnvm{cp}yaG!?RUP9X+vQfkzgD%zwwTp5|Ou)?!;Q7N4+dI$V8!a|?Dxv!B~|J3KVxD8la8Ak{(q!KK8GL-GQ;u7c2aMVW+hTP*b&s+kT~Hz&g-j}h3fIt9 z3(w<>ze1{ItK^b((ONTwt% zN(cWrD?U53Pi&}^4+7e+fU0{9nOq|yS2!`G7J7C<$J4>;^LGQ5*53H7-kw!Q^Z76& zA9~N(gKQ3e)~{emXS&vVzenf#^2Mr$O#@z($FK>8QY#RVmn>!chMt*;mv?$FbwT&u zxE(p*fJbj#N=ScOeu?&D5h3|KCU6F9_^|y?fWn(D5$E}#&ar8DAclJWtNm}GW#Tu0 zKsgtuFwA@<)xBa9vk$R0305sut@WrDd6Xj%(PH!J~rf}Fzu z2*=MmBs?Y@43YVj02`0o<3hh;WBKrMJ`g-!I^DysA7!K@>d@>3A<`Tvoem1bnE|HW z*E6;nLEQ zExvcHJk6lyyJc0S`a9`TV$9v=@NdDV$APosLxFmYgof;YW|@Uea*z$Y2R}}wML!w( z)x2%{1q*{8v{_s%I?em_E!?%@BbE5rCpD`QA8Yf*om`q^Ke*9#Y&qJJD|_|E$k7{= z%~D3qY0;x3z-q>@E>Kp(rCp zLq5;M!wNXO0&!Prev9Zt-g$eTUmxk1{<*QyJi9@u!g(ur&tobyFWh3r3sN$Dp|TVU z;a5HRk#6U0Qoin26+M$NHo3zm)t9@=oj35dy9=kg^PWNyqZ_whtv9IS0i%@6yUsg8 zG&HokJ503qN|;!bXgFwiz;|Y}n>aS}L*SDE1{xYG@Za5**UiDn#@Wi;+{KyK$jRK+ znfKopejax_Tb}#xrSWh@%on7g`+@tU8}=4%*ksoADJ&<&r|2eNu!zfX=o2l}nF^V0 z!-wXRZj8js}!XK34s zbvTdEuRk|Rm#@nb+w|EX{)@D@^dbJYN9iZbVg`-xFlFuPfpqBNZS=8cm@^MGN+qzZ z=jVf_c34$!Ga0TH=ssc}FZZSpvJPXph4Blx(*5L!J!;TZ0%JFqj_7NcA__D|Gn-d` z$e)i5xc{-~+iy$Xwh`|#^T|F@%&(mEeq;F%G9KmKaQpaMO|DfN`v0|Jo>Hc%&#=(Y zs9Dg^=>M}~W=@~ntnDqGdBJwJZ~ya|p9lE7ld9yfDoon5kA1~}cN(kIOnqAYR@#4_ z>uiF1n0hmtgSz_d?A-f2=8@>?%+@!G_3MB4ELa~7zY1U&Sn;|TlkWWSr$3U_JtA-i zF~LKVCoe1*5uw%{uTSliFZ=CJFKBfFE zJK;3zQ_;cX&yH)27dc$~F=tyv+PJZNY(H5U;BExhSIzt>+kt4WduXO;GqIIf;<6U$ zgVawn`PF_}61P~q8);5`7+AC!JuDuhAsftZlN95uw1rOb3`;o?f|%=H-mZjnV?>u& zm*+X^FS>DmsJmXb^%>{dtFJZ=S9rBz&U~pdQe>z}jj(wtn_f=YUf-rUb`>43XQG;^ zQ!M<1U_sesB&7OOmaHcT>A?C_{Uf<8Y`P|p`=RCb4_lp7^%sK#VxIl0yS)!o6YV`h zwIYw-I{koiKh-*VlP+2A45fH>B~g3#0vvKfg{}GHT|3U9N?)$ItLYTC)vmt1y|7Ul zZE0#h`;*`*8>yxEPAlVe^SB)+0?NM=QhR-bD8gr(){~Tujfwf)gxR|NXFuypcxb!Q z%dkhZn)Uv4zyG{F*zGlHE5g}_IoWhe<|xy~-PS>TXMJ{6^Finp-t(L1=O?@c!X$~u zIUf^SZ*ciMm(RT7Y|RXnABdgfbzlzUbViG2=Em2nP`M}1uf)!aOGvQY8m_Eb3D|H^TV(6r; zG!=K5ySal^;@1^eM<`8B$LE5a)|MeizoAwf2Od5rGPd22H(qsU{;?|eMfv*a18uk1 zNl;&j)?e1DmnAd{kva{8CPDSTWfQcaSeAc0F>8EGsQIK`5H^2KLAwsp`&qh(U6YXf z2eu$2Qol?gx+hV%MSXGqEAXh9aIqw&qp8CZEtbJ!`g$2*&tQ7w<@mFmr9K?YYM<9y zoX8QOUymzi(#CsU9EUdRIe(DuZ2#!(R@e9|F2w$O8}Fh znB^zw#%T6>T+Q92Vu<+zK1ZaL>Y4ByI8Fd>rT~g@-v5bEZt%$@p>EfkoD%JCJPA|c zTV=$wb1Du^y^L6P&IYgCxxJP|F!gw$t~f2bNehsCQs5$=v0I}SZr>AsdT{rk`hw>F zLYQOSXAjP?(a_c&qM_0L|6%e!G=6c9#)-PK@wvjJKB}6x0V_Us&Og#@B=u~7u0g^@ zAB6ir0y_0Y*l%A7KrT_WJUH1Qw9-4oAdvW|S_4lllXM#m^i+2HY3_PI*n)7D#az)% z*F$I8?~ckF)=(D0w$9UMt)O*=YrO+kZM!{k&pCx}$m7+#%(m4!i>vx9mMO9oN2wr? zOZ99yO{y&7YkSWXpF?r#6N!NJtr|`*b4aEq8Cx+FMrcAH@)`z=1WKjIb&MS7|>vsJ_$|izDzO{EW zRoDe?@mM4UvkStsLE`-0)06V}K+dk+EMYML!>n{7Da1r|%UvANt?pUsf4;9cDA)E9HIs;YuyEqO*}JBZ=ChnS+f==pZ7 zGhdNLp{ply9!28`8PFvk@leq@I?)+Rz$V1k7t!oU$#43KXjcfCUjHkED7W1tc-j_F z>h1;eN^g6WrE!7lS;q1HX@nCGi30ofWoNM@oknOs)Mp&^X=Il3tylx^6(5(UTQCQL z?$#khley_B3Zehz6s(g}xMHUJY7Z$MK{jv0KM+@xZyB%}x!GZo1~OC;?nXv$8Ya{d z4}I*RA8C2o`RIqq6}fZIM!pFW^OJ)s`)# zjN2YqF3O3=+y(KJoP&XTQ^$U;E;ValO6EXWXgUARt!t!AX`L9K)bf9? zr!%?#BxPu&j@`{`UfhZ2S&Pd)u?m$--$+K9d=_jp$lmGo?{B2!oMykEzBaHOeMUK$ zGb@B%Ro(N2h;Wc)*GR^ImggU3vxtwuc>n#~t+>-P)SG!EgFeE2RY8$=V}AE_m%h_~ z2$b4*%KkPTkGbkKPC8O#W?*PtIU6x2IU?0JQikdVU6hK#T&ERDVBc)jO8)!EI+Ke# zJbEen;1;Q&u+8p-bi>x%AY~^P{_K=<)y-Y={ zFHf5|NerS>=UBZuHt1WptOs(eUB500>md^kl9N!&N>&dTu8fzINR;LWe+XJh@-eJ(@XPeLBKg0B zg@hfyQad0dUIWVN|EB`~Ph|X4;J?PShj;K%%A8}~zH#?Tm(0!!m41kCpWa6zQ3odqVbDjK^xNw-#qyGE+goNON&3-9U0-)@~YJB zbFKMk2Z>9m>)!4}`!Gq`=e7;WAHlyWh{YO%a^%H&Wp+OwKxJ-5I53`x!LHCt*^uB%^yeGuJGH;QKnZ919@RW*0kniR7 zMz(vpRI}&h_3c1tOy=F$#`4{5<|;{AsPw2(&DGJ-jppBj%h|M0qc*?0o1V#vwwAlo^|2<07$aZ5%SUS|yhhS3D8{>UION`L}E8wxM-MCGrfIU=*A>1J@@(I5SdxDI>6iJ?R{5$cXZ2?X$bOb(>yv|Z*W^& zy#;P_c<$h1cXxYGxQ#kEoo`#wMWGbzzxc7f@#%WKw?Ec%Zq(+DIvO|!K7d+U=TkxE zr?5c8^~o(;WG6P8HQiQUPkYJG^wrZ1eUxpIm$$=SLIa zwx7`CT{wPsiHc11z1`~Uxv;D7Bdus{y*}Dl=Ix3ZbQ1P*zd2Sd1K;hh4z#th-Q8?o z6&_6T8r}M0!Qw?6M`Q3c7}YUtgLQEN*~TWI5% zso31+?fki$^xetnK$~G#X2)rNTU*m@HnlW$M5y+pV*jP7m}Vbbx}`1TW}S}a#Rw0} zlAh$Wv>)W=h@au5sLrd>nbiqwetcKUU>`uxTBG^Lhy)B%>&Q zn8qQhSWX7gyX`~z(|h`d;cgF`sHNPcv_iJ6@2=(lthYcW4-5IPTM|#s`L9wY?&9vDpRU9)r)_BWzO^BbB zQX}JiV@&%MHX2003DxfU%WXn+pBrU94?SD8u$`K&jQCXdNg1xwyIG%2(qMP=v5_Wz zZ3-h-`oe&K^K<+&y;y2oJT6Nm`}mD$fF9+ZX;y=?XHj|4OJe5q1d{o&5{8{TA>$!J zQl{%G+$cm+6ZKwF?xG`MTw920Z_JJG83ky2D46ZAx)=!jhZDmgq z)hC83BcLXBE2)qwaLJ?H@?fvspP%eBge`Z~d&_vtW%_bi!qUqWN6+v^1Sw%vDiYh= z%5%>BjSYf3wo_gD6~bQt(i>c(?I$~0>`xdM3rg1(_=BZ~GY>$)^b_2{n$VA9v)kXD ze0S${qyw`DK>2Z!w#pAVErADD>fbc{Ofh*9nbb4{9fOAZzzqn``$tq8m8a7oVBFXR z=Vy9{!vevYx(DtX-<_!Uy2Y1&w&#C2={ZX0PadqS`IM4aW&5;z>*0XbdM}uJZa{WF z(ym`|)FtJ$y#uK{_i1d$XSF^)fpxCgsMCGX&l;+Zx^&tFk--A@#9w3mTlYrf&MjP| zvEGH3p{2MUEoDv@gZom*(v-w~I?ft{GOI1JfnkR#Z{u{$B$JHCBOOD>;(Ri*{;tYB z2T}g9>2n%-c;e3SRBKJ+51jem2HqKoJey^WojN1@QQRH{XjS93-45fdluKJ)xL(}W zqdgR3>^~z=n*Jt>c_hsJbnfj;xJ_SY3~C-`aip#HQW~>VvSWVm)XB3Q`_yGJ62M!d zbM*5TFUeVCw%u18?u;KsB|W6W%6=_&5I2ODA0;l*EhCIc$yW2=2a78KLA{xOKPfJU zYqwYNccT>l+$ie5=#R4fIeyRy)W`{sAJk9lx*9%stC;q6k)Why>DVdF#rF^CGerwA ze(l*C`-EzCOqW;O;Ls|;r!$xt8Z}~QQRtlTx6$s_sVv~iOq<`;npdiZd0PUCmW0y3 zWMO)UiCUr zpAlNA;$p{gknCSR18HMWG16x@Wyj73DQ3?yas}RoC+b2}&|9&Z#9wOL5~G>d*vAMB zq*0`2&|*}PMK70{ZSVeJ%vUQ&Qo=>fF*Fu)Y+W1B?D+{gBdFvvL5_g~wq? zP;2IiyVy?no34?jp{;Y!YxFGxjS9=#-lrK6J~$jLB?8{}1k2gS4;=#p_i{}ZqIm`S zFl9A|G-5tyef;ygB?E3)*@g||_|ai^qe8)%>J!6Q2i&UBC+&|`Ld9Q|3MyJ+KznD} zE&NN(f2?EH<%eqe2?zQQP5vNj{S z{m(^d^mW;-r7nY7a2)W0`neVh-|dFS14K)XPobN?A>k}wTKCV67?13Tp&e2zz!&Rc zB}#!Dl=pF=aoCNzzqX|DK<|xUB?j1xxyCk=U+9VZpc|nJj~%%!sdd6L^W0@LA)_)~ z>jX#BQnSw}%A{rSq`v$!nz3aPyj5v2^aI2?)=(;zk-7F!hB`WA}VG+((us3MH< zaeb<`fT3{+hV7DTWsQmT@1TY*?$Pfr*uy9p3>1mqDn_^{h`q_%{JwsuuVKDl^kwG| zZJc`RI$P>DHMZ&-H0=ne`!+3H`3Ss)&pd`QF+wX&Dj)y;1|a#1n_g3|g+Gf~a+gNI z0w%ANUBKs#;+oJi9f1l@^r!&NHb~5Sf9)1=(QH;pauIpN{x6~YSK@vE)vr4Ce|JtW zhDYn(s^Dwkp(I|qmL_!f)000>R^yzKI1WB5dCIh5=ceZeJ|xc!3=Sq7G^4eV%nz~PTVMqCjXx4N$;#=1uj<7PZJQa7pqo(vJrK{?!>n2b%ge^zi2tlmAJ>2-WQMkRqE@DV+WjTrPy{w?#RGr1 z_`CDW1{r~T+B@z{^e+lgY2qlIJq>p1JvIk2Kbg z*G5M3_w$$8+5q_8VEDTk zZlbp4nNCfu!huhJUFnxsjqhHM)-oEbb|^XTZ;yIDR!?-XmfG{R(YE`yvgdm)Iu>`<$@5v(ykX2?T4=Qc_$$Wf6Xr79B+o#36)bd)3WXYMe_Um62!qyv}yl&mY z=WCGHKJ040hcp)RK|Pm!y)6C}^nQmaso|U@W|E~U1w6{7p}L?9-j{ad74Hl< zU)m=SLl~MxbtI-9y#M;=$c?%vyM2oeI4uQB@$8(@_z$2yOQMxia|%-d!lxQ8;XbBz zJaRZwnm5~r9XI+!d96!kVlN~WJv?6bb_j#qVUyR7@B=xXf4Bzj2kO`US_4TtYk?S} zEHCoqVA{PxCTtmPnA%jpF-RK6um(K-kCCo3urD~$M}rb)#)&!3AzoQdn^eOG`gO|U zL4^@}Qrg>%nFrlE3i2i^WT*HhGD@qD4F31UQo~tXh1{{72tTNg2K0Z&eV)80ly6#+ z@V-H?|L^jTZ(9Ua{2MQXhwxcsM(-;)LmAk)#;m*qj?{_1amhMf*wCigZp1zVuZ7ta$jr)aKAq^2ngRNNEB!z zd1-p^+?RoJ3Ev#I=?5N(p|aMnzz5DC?UbI?|9PkHUH&+^Qy1A(ElDzF&258UPJ^*I z*a*6Ax>l+ib2vBM6Hx>J&&Ys3PT5OnsY9@isi32k5@|Z+*?!Qgj(r^*lul zW2G4LY+)Gdc4c0X>$M75<0h=Sf8P5i?JWJR=Wc#M*TnMI8E248$}((yGOy|LF3YOq z7Eg+P?H_)RaY)n33iO0hsIqGWm8 zSOP&;%oQA;;HkdX2h5MTG?0OzPl0Q674};@%dEoqYKo#aT_j@rf{GZXDqp6eWdbm|DD2n7u0S!`0 znqkK%$I0jD3gYTzo}e1yYRTb^R_VPagO|2`#ibGSRe+`;dC$N9OXADP=0DiA z&k;5Y258uCbzFR=K7{IQ*^jYXRG_iQC;&V;`CrlO0UG$bv81p@{j*hsIe9T{srle? z3iqd2vfS_E0F0xRcgLQxhUr760pT(Vh^xk4!k5B?`ey$i>QuKt3&*PrSS$$E`vvhD z+~@S>0p0Oz`ykQ(hpD#=i>mwnhXDnY5Ky`ir9)6q8tD)iVCYb37)EkvknT>Uq#1@1 zh8Y?`DF+!s7`h}SrAzTScz=J_^MAv2@#37b_u6Z%PwY8oTRls%9XVP0Z4|v)U2j~c zEs|jC8ENe6#%Kip$3zAMmhEr*zxTPM1?6QmRTao|V-6kUDKwoz+f{jXaY)rAo0ELMWpg(yuUprjd<{YwJ!DP zr1!_)_2HQ2FhU-UmOo}f2L#DcGXG1b-&K0TVJ{_!0OB0puU=N^9fo?#zDaSnk_4%T5n^Nx@i&g?1uYx9 zG0omRN334I*bV)R?2qIh$m}t&>nNGq{4f7hhWNyU4Rhyjq^k-_71YZUcz%g7mG4W; z0rH;jH7Q+bIB?Rk^ex|4uI_dA#KL#}hsN>w2Aj@RJ~!y}7+TBf+=U)@C%#Y|U91y+ z`n*l;y`;>|55F+Ki^6j(^^9CYjelAukbAlrRa>C`k_3D9pk@TAQB5lQ?R6a3^dY@W zTNJ6aZ^TW9Z;DNd&lK=e?miBfREsk9)i3k5aM$~O-M#IP{=2qnRdQehAW0t{+Y}SS zol^+;hy?V2GL^4fRlyY$;z6dm-e{}uY0#aMCEMS>#;GRAzqzs?>VSkgA_uX!+H2 z)`GTE;#XbVeJpr=8yOZCK#7w3vTUDTeS8``QD*cINTOzGp@SbaCf7t1faC!rk#OYI zL8E++3Ngl?`c(d5JF!E98XB1dl23nOk^i3g8(H0K>yN;%91hX@wTu6r{_nwp$N=EM z(5j!!jq#1e6vM6~5`-JK2$cq&d{ISaa~L*wUN*6(E~MSD{ME<4H~yb8 z%*}^w9{nP@qJ;}Y10kj=Ae53I?i_co7S>2BIYh^Gz&`S;Lwco_@6a~Zj3ocLS$Dr| zrawaGn^ktdT{N`_vML{?**!&&fxI1Z;Pw&EcVG_RK>&<-eV1NaTZj0vBD#(LyM3zR zZHgC%8~4l&(>*1C-1pM?P6kT+xX(dPxpM+doin1lBm?!<3YGRL1Ji!>PzyD9t!No!w#Hf)ty3E1ec_EaE^dhB z$P6nazP~B$m3z}Nr*+~gLK%4Ud*Paz_CyB_pFN9yj=fE{wR=eZ5@z&4LXwA9%6|Y|pPD0(RxUV~Bc1!9 zg^-UpjJ=1=pCUO*gSY_rgw(E?#hi=OGnB?ps}K0~$#}lD1Im{FE4^f(^>d-b&W;iV zhf_}t@7r>Gk6muK)lD4DA{B~9^2@9~Z0wUY-L8ST| zvFzb%Qt&sUf`IxZR(QNch-EdtHbDr1^oQ+N3y(;D|B{3W>wsw1@8YGiPB@?c*V+E@ zALqG}&-5dgGCDzISS4KR%T&xxQEPl_-`$8+6B6?{LH6ML zRU*Dvpp5>>4Jz>g{OOXln^O193Jx5(3$|CMVgU-Y@KCs!r7(CSd+p+5TGZ)_G_BzK z#dSWwWdtA*i+ePm$gH?j3qfc~7n_e1w9 zEf3pt{SCfzKrV@oQ3NlOTI3e^cl)H)hc!~Ah-(0Kki3xh|MV+fq8%YIxED|7Xe^>rA0D5pSS1!;W$Vu(%oZQU>sC=dg zmu|*1JI#lmWZ+q|f*%j@R+F&Izgh+|zDd-%@4C2n%b*Ms8nwdMgHyfmz$H)eM*tP@ zUwoYl`NU*>uqZ-AE%r$!d8-WW1^E>))x(#csYrfRA;Xr>IVr!MbK;fy!-SIK+VE^H zJFojA(9;X}P&|Ct8w7mieFUpd*vV|YDTK|0R;706v4Wzo5E6B4m@&hFy!IUzHW|Rd zQO~-)av$QY`47Li;i1*nvjvylq>I5l<48YbxZ^W5)&GjtJ=qvDMm(Bs0?%zH2p;9K zxPSfBbn%~eLn74xT76RS>hHZ7S^0D70T$4dDM7>H*DZWu=7iMzt6PMVCqEafJuIXT zCeLoWB)m+=o`$G7rVG*CVtW_BcFoI2Lp;|pw|;*&w{oIB&BmT~==3mkP{yT4+v*FxW(;87n08Zo`XOAE z2E;w{J?PfJ)=T<9mlq|oL(`MUgmz<7v+3Cik{nwCn#XEO@9W6J%~K0`bLG;a-wA#K z(F(v7)Nv?AK@rYeLBZ<#UQ={x_&7ASQm4_SREYCkt@Q{>N zIebK4!3Q~rEPCr@qI^^wThAq)zEi=MW6Rj1aEoUEP310urWRS}1Ffchijk(ZP|0@n z^PdjaKZN_(a8hm=*(MNEw<8Dm>Yq$k#UwnfEi81_F_;pdsCZY}5hLKEoC8xCxg+wY z-XCEu3wkkf_>j$+8H(E`^Pl;?zhd43`x#egXURoon^&l$6A6o||5dD!BlhIq5LWqU z9=n>HHB^GcSAUNbfy8?b$lVZm?GL-h^#&gzUiN}3+MlHTCXC04WQfElm}EKHIPyTO ziU(V4ilq!}kuS=uh$@~vM!!$?XmRHuwWDmWDjHGPK?oR|bF$fYlQcY4X^f$8{o-Ii z`zFzQA{>o%uYb}I(Na3j$XJaoM?f?8sLLg~ax(L{SL(a6KJPOqOgFgCZ?ah1K5D1! zQ7CV6yv?Fes;-&~SMU~^b2Ih$TFw*kvDYe=BmHrKK!OUyN^vqD@zI0}9N~D#rWbXy53xERV(i5OZU?j0Z>c_PUc;!QcTdl5Q(n&P*_Iw?T8dht9@96~x;k@SwfHq{)|o@dk}8i_CJM z?lvLs`SbrAiBCDT6?i*46sO9*wMy*clf$qmWq<&TCpEUIPj zOZ=tPgf}#vRpdE)?%fxpSDr1-ePmiHrlO|?(c&opd#Fh{D$w|Hfz5skRlfsuKD3pR z70zud8xQ|Hecm)mNvBsz3xO4WB>I{BJr6pd3T<@tzhC1PreOMU{gJq&&6a`$V>PY? zbYuLE#8587C4eiMR(C%-6gjL)U(XCt<{6ExlJcjT5Jo^Xr82G%#{@vVkR%V zG=_HhmVraC@$d9HeLI;H%9m1;qnkim1fOd^SkP_}XlxYl!AjRS^N?twBdiJV~&3P9&)65@vH_(I$K1}2Uv#w_(#8(sqIrdZt z8c1U>tYful=GGJu^|(y;C+S+&uv7@Ng2ONenlES&y!Ykmd7F>Eki8`bEk8r(YVj$( z`5o{r2Y*W#{p@3gkX?ML#hy= z`JJ*jyUav%k9)U+Y&T7@byBnQ%bvTUrn`te6wMHoknq4wc})v0JfUSx2W@IBN;hcIjJG*$~1YA0ZEYor-r{ zmUEEeEf~JlN*gc8$fr`QY|kfJ0%}VZ7c89HPtg7Z`RcyVn&~?N=*I zZD-Bsq}$;&FFKytc}D%uZuthlaFOX0y zl&s+b%GVBjJCjU!q^DJUl~bSX7vcdELy_1j!LP~JPCmYY6Z19mF6_gs47=KXHp{n_ zb5NG)#UpkJq_ltPj*E!+FxbO3IQp!8FqV$cd`2KrQcCxmW(X@nX)ELvMsuFC=1?P1Hsow^PP zM|R^H%OgoF&*~1Rsz6s%_ff;!2@Oe6bIW;@e5st*QT%BsX8H-Qkq3{Iqw?Tk6)=in zr>Petwq3DBDl9-!J)I@6`@o;xBVEDp>5hU4{H3YjntDaOV*?+gny0BAZ30nVO5%fx zCzO7|fzajCcECL(ChzC2Q)9}^jUf12PJ*w*6%|Y#g;_!6FP9s_t1dnF(~zcZ(w`hd zoN~n8=rx!q3TNWf45rk%o$}X}fTe&MqBrr^^;L@pL-ijtCj=Y)w&jiQ2oh7wAmn^8 z?Yya!@Gkz$wWtbK#BMkP{55y}ho9P#x`)!-Kw%qY5*3Wtaj0r+TX&z$?1&hTP8JX9 zrH=K}^9gbkFAD{^zsB37OQM1UqgQI4bU@;wf&P;Bq-f1o1!(v+RrI=@s{*wIA9KTE zo)P`#2~;CB(c4et_`+e?z}2+@)w$d?KAC9Quy66j;z@B#*g>{SC?~j7@Jq85XVv+g z^6iy@S^S8lAq=qDypb6iWPC(j_SE^kR`^69dFw2Yw~;gwovLL) zS$&TUqV&9q1OR+vAQ0J#ld^_fvT@R!Kn&>&<9QZ;_Y7L#8<#g2OAQ%Q(6f#n5GEQc z%*NJSnR&Nm3TMo0*q4aLhWgVvvb0ZTLo{=w3>*&w;Dl$O+!sv=(q-K%-{g?M*_6yAi3#+tZ7~y<5>xzP%)Jv?7 z(+N4%>}2VMJWM;=zOg`Q1K=q`X0LBUkrfmMPEHc@Z9H*F+Be$nS(=$u!-^I$)J)Ua zlMbjf?XmkqF-~z5ETSKFXs63ENnMl^?l8m)`04ENW=GZ*3O>^nIWBz3aRDSFS(23G zPo<@~7_{qN3&~zl@tmnJW@H%G4KxNz;68BxXrgF@Nt&3W&G0gHsfSaHpiY?he8vbG zwWxS?UC~3g5dcMNvG4aroD!_5F{Z*KZ^0)?7S23UKa~X!uB+O@WWOkQKo$Q7MD=T> zaR*88yQeo)DwT!#+}nNh;u^U}=YL!p^53wDrWGcEcR;G?R;{e5GkP(Rl&XqT>cUPb z>(|+Yxo!;|HTrm&LtE^LERVL8pZkaw8Mq2xT=G!qH2U$>fO?cMy5-6e$Rbe zOU6lFx5@vD$3iI$H%ZfUeDHV;-nZ7;;*qk<7cTPpA~ziuGsLIB z^p+Fx4|Hl+oX z9ea5XlZb?cF^s1?=_m%h#K?MaMa&4uYc$Jrapo@2^<;w`3k06FC-X8wI%ic!|N==T;4@LKcQC= z6&-k0m*x0Lftz&v$?9+D7Q{@){@k|iaSMkG1Y<@X;{?_SuS%rBUJcC?0&6{@LzzH6 zv>X`wnBh$v){2=518LN-TnWbSYBpOg$yO@Nl*_I=A0Mq8If9`LWnr(C>GxA1%dMYHd&p6 z=$AzrkBbkLnT8gB_7_u_Nrz-}z6ugkZPhA<^$9LIISY%W56eoRDz1KUB7L5wM%>97 z^{$0gn>)ApLy2hkg5MI2JlAP49FU#>n#5i~4~n28mF9k@ByezwFP(jZ)wcpu5Au=N zYRLFVO%&k##sv0e8yMeXYDW&{yFc->zsK}h+Yh*W=wFYK=3i`ic1)3SxzLR^6~6cK&JBKdl!jh1q>tY&D#(zh*G%|C9hG~=ESyJ?kb zNp7F-=T^=TtXfY~C-?eoN>D6xSFEzhH-C&|G-~n>shd9bnW^9dL-jT4S27|Dt|hO2 z`E^rmWt}?H$pLTHvKcrvne65-*)`BGW$}ii9l>Wzal_&XPSFO1hs+3?wYxEjgy#BC zya9hYc)kNgQ*1&{{Z~8cN7 zVaF&dKd(vX^ShQ!8j`)%ugO`%KfE(Tuk(E8!T`KDvGUBxXykE@InasP)mwwoSDw+a zj57A|lw4CKj_Ttg<^=EE5;_#-un3@w_!&OBoyVFw!L}^7_$MC2LR4Q?WfG<*OMp~e zFhWNGjBOolHv0MwT`sZ1xH1sH_Od6ZM~A&e6HQmAuF(~3rHVf>7(lN*$dwJ<{N@@8 z_UwP9n(_E5{dvQ5LwJXMS0dvGt&s3E;{b0uDl)yeuquY!mYm#{o4mpxp9835e*Q>m z*Fi<%D&M5w<8a2#5vOCNn{931Lf>3z$?0VZHeEB6!S|uYd5hVTAe`TILrlvb;~Po? zFeQUVhvclkQvBFR#S+Df^SCNF*y>%ZYm!pkq}Mq$Gf5LH=1B6f>cj>D%%!e*}fOHJbh z8Mmv8?E~Jp37I=XtpRwpJ#?-RE4fkqldG{VH=8l`K$)GaJhHBD!%EQpzPt}Jkx@m% z&tqHq@gAL(FH3_lAJ1&~s;4~ZMj8F;o|K?w&WRACYwz_Sk4n$FYm&uRv-8QCsF4J& z${6O42Tl?PVpLTx8FzNpE{t~ARtuMrv17f=l1tUGm$$?qOlU`aA@S*7Hq&F0L+L<6 zZa*}A!MpgIDr6(CD@3=D1FDhO5xn6<+njW^#a0nSB?&9FOY%I_5x-!l5P!X;*_BsW zkIMq&hcjEH*0Z53)3B(|Y|M#Vx$Z3b_<)(xGZNnQj!|le3IL(`AO6-FnPKdvz=_D4 z?&&gDqCP)2@}O9Nc1xMrI~DLj^B<##*6jt&E`yOM>I8A}zt1zt@V4wAog(Iz{da{d zEladK%3@VB#M`AZaEyTVd4EfSanHiKJfc2Qr8w_N8P2yCSciF*I1xf~3Nd^EVyf34 zPkNK@8}!}}IqC&G7SNo-f*pWK0|U~x;3vJ}>VV$(h|Bo=lKI24@I24b{}xiH3Rp-9 zQqgRI2lv0S`gLw<;3p>G?@y#J%a9&xrfFGJOce`kHE;L~0s47lBOd5R5DVVlUzMlS zjhyoSDQQeBKfp9^68hu7Q`9aEgI4)trgXu-PL!s`GVZPuSfTi}Yc1YvbXhw)KQ3h^ zw_P&oYE8sWjxj^MMl(#;oBso64g8lHy?n3Uq>FqaTvpA{ax=jC{NbIhf|W{2rr<{< zae1&VGey+kQrw?-iskEXI62+1@aOwdu9eRTl*1NZBDJgRke?AA?yI2H6w%FR^^Qk^ zqz`SrqKp5S8BPnxGV_yy=j#*m_nU38%Qa>*lWW=rQ_`wVHxkEGn0XgB#R%4FziyLu zUT9HuE{ScH#}|fI{qbx#WgH;6`pN}qGohM3Q{oP|TPIjxM>9RftYG#QSVzx%ITZfe zSZ>~#vmO1dl>A58k0y=IW+Je>;~w33MsClttLPTz_N5w&(>%=Dys2;(x|IC)*j0tk zCaIY|Pd}&#L45QL8Y8N@_eO!k83Q|}{bEaW(|F{;;{*>8NL=&U4Y~No4ui(H zhLV7eR7xX9(!`h$jFQq0e4mn}ujq-&-9LBR&qoD;RWHe!B(A=E3gfQQ^qTve(cpoW z07}^ty$kfk!xAafSC8`PAKrOAdB8043D{KhSn9m;wnC*)#*i{jLw3Puu<{3|pLOTyM*d#32w0s+H!~{ z{UkYW6fO1szQL*qP5{7%1=mj3KdM$QnKm%^tf@t z)#6$yd@82Z$0ff;rZQp-Aw|o!5D(xU4W?TfOTP^2?X>}t6#-kJfV?+KL>R(j0 z95FFL`5Q_4Rcu+r%(#dkb5<9f^qvR2>L#!e5qWgkKMYN{n#}%(gk|6i`)d~v6U$3z zo@dhuyxX(m7k>NKh;XqLIS{^wDBm$7!6qxwc#WUApR}l1>S0C9;_RG)xXSat>#_pPZE>;Apt@%Hzx4}S(4PlZ2x`s5p} z{PF+YpIIoieM%znLA#~c75hY0fIFYF#*lw^KgrW~GueMyb09M!AxH&N%%eG!X}Mv< zG4Q!p+#9pJ?4D_>G8cP_Q9=1InXS0rB(R!44Fe}itC}aA^%;j=y_r90SXk@{<6&a? z+%m?asR;bgf5@^CUB|JVPDdk*Y~v!G(#*}J{!CD=LZyX!$LCM7M#$DZ?*3&eWyFd@ zMAH=TRQB;=g|sb1^q{p|fxI?iPo^siIVv^dTlAr|CPH8dP4asTi{VwgS#=^2kT95| z0daf{2DLH-`cnkSrWZ@25U_e8JaTt6_v1ZxFM42mD38K+k3V}mox%WH9{@Mo_ka0K zmfBsmP&!+{N31O(*tP5ZT7RE5x`0t>b}TwOj>@*U_^G%TNNp>%Sb*Ho!acpcG8vsT zZkJ=LnDO{m${Fe6h_k-XfN!*|1civpe!N|dA?ssPAu3=8Ba~Z4X2OOxg5-mZ@ z;3zW6Qf{Z!23d`^K|BYxLn8Se>sxCtj{1z<9i2it3hZ=Vv?o+SnW-7*E^zC`HxvC`$|;N-THru zoU`wUW$6n%%0A>vM$`+jV0tYD$Zh9#+pamM0GvR8>&mgwjm%8ab&WIS_OkFNRYqbC z4hq}vm}T=vu!Q}CBInKL)tkc4YEm%}uoo1;*BS9+NFbt~ zcYVi0s=Ljca@49mjfd2y?nhR@QSU43nEDNcuYPz+5En9-hd1mqB#x92R*80;6AcBB zl1--tG_jf&kIDyJRykTalICxIc!zwJw>?Wn6hy}+hw1q!%ZrNjD}8)?cM`u>9@_l? z;j%%AfL*3_-7eJcA^IN|0vKm2L5H}By__!|4^82$^od?QVjxS>pZ9^vWeb|iXYVA; zH{@0NZWk3R65U8lt5G!f*r8WpVEnupWgZu7#62(LxO7JfpJRgvC+c z3n>TsM5y{sG-330K_lX*!Y46QTN7TSr`Wjk!s@y>z_C`kcC0y_3V>|~Dua@Ib@Oy? zRHtp0Wq(RM(leawTrKxYbk~F}KK5PL-RXzrvSZFR%!Idfq^l#$Cfw4G3jxqD-BOfb zOz;|w;yVbqcAHgc*+`n431g7T-@dkpBoc7O4u!{Zh;k{?xI0mgvscq5@UWjO8~Dl_Mc6db!`*6kDA?nH)F1r(;~z#OUP#w|3*K2_O`D4&&E3)|G@gCAvFWDEv2sNfn3~3b`WjA%CMIx z1LB(ppd}U41b^x{n-OG{Sa;WpP`CvU<&%@b1D_0$?`LET)-bNagmiY6_hmKKRp}k@sDp z!B|(`VCrbTLGj83gMFj!&Z-Wa^pbN4<>z{ga(Siw_zQyoBaZNcwJ$5^kDM-=LVxh2H4$DxFTD0c6O~ggq`G~H#puMevpm}p2Zw* zJ4=w>g?Zbv#oCja4Yc+QJ%+cy;zq9E3FDxqr{3b-n5kPuseJa{&&LWWl(Yto?8%j$ zpB7p7qkrFl(L0M!w9pdq4GyQ#R`t81S3!mzxmL&Tp#H4*VZ1hPNe1Neuoj ze4SA%OyzSK@eVB3sypy%WZoQBEi7BBY*Z;MaEb3*d?CxKIR8!w)k0}q`bxtLB&s=+ zsVMW?uj$LDmW8Oi^R%a(oDwW`V7=8RS7d9R8z$O&RuzhDnLr@4nKDCnmDk7`#n>^u zLhLVh6H&&7D#SHMz*m0-giLDaIOHD>SRGlY^7t}sq^u33Xg)OH^jy)4+dN#A6@tm* zg98W00vK#6q{H%gk_^YAHwt$pM;b_MHF9d3p`>g@wVUI!%ffjt#;%YUoB2dv76}@w zKPJpp89gcb4-HJ(%tXab+z=J#**(1#1vBqmi2IM-PF_rPn7uf6XWUBRs&#&?vQQ&y zUpI(6TSg#3JA*tGY;D5+>#HwI6Nf6+_fYl&OLY_mT7z`<{47Dz@^Uj$!ZvT$ZTB8t zMC5I)_`RhpzTyA4r2>h}M7Fg_#Cha9x$Q{pVe4rFTO08`0(nfMXnp z<_JmiQQ<^EwO^6&wJ4o|ew2scj_x$k#-YEV3p{r1PfVQ)SjN$Mka`!BKwc**j(Y)o zIRwfEXT(SFH5rZCfe5D{W%STnck5}xnT3lZs+nfT%to_o&m1%B@#%P9bCzjr+Q(OdU6awZLI^Ysw7 z;_JQuF^kYxL6v!q1?>Ot;!0#B5W5gs;{J~NH>b1@ts5|<+w!DnS9`M;tK8X-r|}-V z^^;)-n=rYimVv0iK-`(0j~87y%n~D1(ly5^G$2pjz@iwEiNhF@cl4LH1Gb8_onOZV zHtu?BF1h-i(#o~(+9o$%U&-knozYll?xZ_6BMTBExH*2irY*wq(ZapegNg6{6nF`H zGhsm^)@4Tp4B(ltb?88aij*v3wk@Hb>ctX9_I{KxPze%DU1LQp$iP=l&I~a^m=D7C zU0zk<4E4*l{S-uH>@I;y`B|q`(1B8MFPnqiZ&SuX5ysx)Ru$Cz_MDlfU~e>qW~ve{ zHz%Wj(%BNgJfilLD%bVLo7Pe=gkd)hPJLfD+!3uU*vt@ge$oN^)EXZ*Fq1~R34+|4 z_k|wPj+|%@bnr)O)Gchm1R+U*>`qP{K4y;R%lLj4AN_%YNkJvf#A13lhFmXqA+t#- zz{;_65rmvCJK+?>OjE`v=Ch=jM8KOS*j+2QHCrT5d|1ZF(2f+8p#FX=uhIU#BRRvDe);7;-Se5lxruKda|~ z_ZI0@)q7LdkTAoZ$F4_pSde-!?Izt<$6@rv-2J)7{m8A5UBMKYOv0fF>8iZMm@Aj&Ym;M z)M{=*_73c(z2r1nW+SMc&_=lWRl`tXSK*Q1I|9uW2#>(%_89_;w0=8`9+8cTWhOB? zi3b+3htC?g8tid0cD;mKubi1lT80uiF1O!}pyL=1)-I$>Cz*D%^4O5*JiL*UcM(n! zIb%tRdU6$}*s|6OOY6BQSrXW1Y`gw>ND}des&yY(BOzNq47DAR_cuVOd){FrL>HbT zsn0WDGH(%xQGnSmceG!ZO@sy_cdisvE=wXN_R<~w`IZFfw-qe9o{4mvwSL3jqnTJx z+ScqA>~!GQ{k^&P1WJ-Rae8ipUbKuqrq>Go5T}o(P{;#`fL}V<2(YKq3_hC8T;RBz z7wXU2|3U0p6w!V-JC=9<>3q&PV;oR)9g)W8jAONMzSrJyh1!9)fNJ5Y;^5f`3YS>v zN_-Tx%}w_FYDxlh<^73u@@*b1kSsiCI#$d1+=L!bG|ZkeSi@TosM*{(LSWE%z@YQQ z@CfI43BM%BKd+$~@av}~KrK1XeD3>!rg!=kh~8M>>TNrfG;KTFot-fzi|Ej-Y6ET+ zw^{7Q79xqyG2UFOvTP`4(nV&oaF3vw6(r>Hyx>ST=HS!__v1tWQoH$k)VlSA66k+u zmzht3E}UT+2$hxof>cD?oGma0B47-MIC|PmQW=;)l4?`u#o15Fno7PUN zgjUW%-=b@>B>nlb5cW3*HeLDsC}Lj#i=JQ&8!Pf-JQb<9SD<5YQ=Fay)BhJNv@03~{4dB;nGarbOHhj!&uV@94jGU~j>YO4e3vwFO|Evfjy=OgNEw9NK>K&Q=Y<)wR)mZn2uYxgA zvFbn^rzMD>=nEX%{PvlopcW|JU#T4NUd zR%bRi(*_!DsGfnsvucBwF!>oy?j>#StRYlu~`LBZFy1KH|< zfml?Dj_UF&_0KZ#*%8{eAzq?sXi&*L_3HsF`?RcX>Z?xAG2w}<27rj%U5{jMNX;I)F zABh3Is*6NY-(MC@!v-1#kU3kZKfca%rDRh7L&3k@8&45$pusxz;zbpn6ZPWVe2(5D zV}WehKs3}L4kUha;p~t)j$y9;baJid9dO2WGPpZ!>+a_7v$9mvAyp9MsP#_lwA&`qN_f$d8bUH=^>P9C#Qq5-8Y=m)CXIii}66Ww@EQArm!|p zX_j7&hKUDrOEA^_V_L?Wtj37DFC}I+x&6x{%puIj1%$K*xr7;`aXOBLx#R(=6w{d+ z&|JpMA~D9|J;}c0#%roS54_99)C}CAG0=Roqvw7L&!P4_`l8n-{+B3mYGbgFVKlzU zLvd8P_I%M>rX;gR2E8w2>~HL+AgfI&o}|^`i~W4g^c<{b>l{5E=4CiHDN6~XpoF=w zleA0-DxLtM!&ZK5yQ#fNR(Ow%!=Bhq08;MkCaXL!{ZDOiMr%xDAgPoD5mGb6MZ5S# zn{O>johvU{&HFou=?*|y;kJV6V?Td*z|j$Mj%IgJUG%p;r zx6S?6&hTE;WD#c4g5>z0Ow+{RidAd`p6U6L$?4WGoW5udTD~mpFSni}L8K>8ZPHfCi9UKDNmHf4pXoWZm5j>`^R&iR_Ras4s>`)fH8qT!iKAG#cwjh> zR$C($nU0l~`bc%oC>O>vW0l}g85Fk3>E5aAH>N_F0hV#%j5YbIE0aTa zU1XF0u-{Xe;TN=F(Oo7*Ip|)^{E?j<^HuV)R}9Qh0eBgpjuoqVm#+z$yH_I2{!)JI zhCEp2wdIg$Fpt?cYad^i5hQI@dCeC-$LB?!4#pxcDa>X+JcMc%C4SO=TX#&FcU~21 z96#Z=o_F?(c`~)?jD<<#f-us3rrC0B$K-MY${gUHhy+82h z7Mb~s9SA`149%)4@_tR+ZfJ!j+q>*+VF|OO2U$S>lbEz4=m&_Uq|Xx5(ct%`;m>I& zejbOAWdFFF+Q)Fuy}jQ{yUutz?tt6^W?~@#`}su=VCW`a^o9cmGnZC%E(3ypztZ$i z7LE%05Su`okAlL+Hi#!mHlEI#&-JlGtbKuchejKW_8!2MkN2CBG%P?1V4WPJQMBKm zviM%>bYX@Jt37308ZFofLeeuZ!8@ik_jdG0p9ydYkNH%ZxE}A7fscg*Q^mjD1>PiZ z^$_6$;G07Jq*UhQ4Va`Jx7_|Kf#n?%>N}=FMPBqrm#Koc(wiPjo9t z;X^%MJI}r6Z%ye$7n`d`rP8uHNMA4s`ago0@rhl$=HfM7b}M+!m>7om=~e;)P&Y+E z5Mef>S}4>hjT(FYMdY}}iF7K~pzuyd3S$dx@aA8E_Ophpr-p9&wO{r(TATG6a+Mc4 z@NUk17pGO*&zcElCN0S{K1C-fT7cLM*6$wBwy;nUH^;AKE1|j+|7`I>z7|HtO05X` zeXN2?jD1W&ahT4l+{pmjLRUcQ2Dr%9(ceCX0Pfy_;YYPh#;gzj`6btHSxeHKIN?sq ztnuN)M+1Tr7i_BHc@9NTu2zxhxYunbr8{kE^D1|H*xr~hsgK@U+n6u zQy=?1ThPBPoV00=@j7F(r5T+hp)?!w{$Mi4U&8Bc)K+S$3kJ&-T`=rj@b?DQ0nNOAT;?_QiL z6qv$>366^z1t1??EaRT3Q_-9ALtAL2%LC|rgL>NbiFy^x1>DL)G8xG;B5H3&4Lhxj zfA*H%V!mPl?l(%5TT-IM6YFFFe2+t8T83I|9##m49Qr;pY+Q4W(-O~xu3kLUmx$9V zNKFw=7cRdvtrD;w`6Mw@1ecO>g#UgvFeM+Jjx3B-$Ch2d=__-!9yl4u*te>U`4EqS zDQ5Js3bovxdNt)NAk;%P44szsCNskGRd2mCLg@Ta%MTJnetm^BU$4`nJAkbd0tbq( zResE8LXQdt;U%3*fUdS=_F;)H@9@E@&&NLBDRmA8boTMZI~hh9Avvs`cnDALg|+x> zR<72nuI~7&HX~MG3L(H0V2^6p5u3la9Nx@|W?ZOfqJkQgtVJG;^%|X8orDoI3-B+*F?-1lD8tU95{3W22vpzCJEgfBfNx`xC$< zE{ci-&(mj+OJ{z^z7~t-SL64y-K8?ScU&r7yf7s815Ty+p{JWM9-~=}Fq`Ws?QNw^ zg_|*bFq@+#p%41SE$nZlpCHYz#JIl2={BM1q-nkBZS0!S$_om(p*g ztx{G#m|xagwxG*u5r5gYjwwaFS@zI0cB&%`BR1nM2$IMbw+tgN8O57(uUM{4`Rh~b z$4d|;`r!t@9uc<+jR84ssRgsx4L2MY_1Uln0}aLA8a%v1ugao1f}5RuMLvaaqHjkz zfi7ypj;k-tR+W!w=o+&u;Nl+Io5XtvT219+e#AoMX2%H?0zVvKcp{fL43(l>HGObu zUbMpzj}=x8T#1`+%e)$#*cu$75qs+<;I+M-fM8;Qr^esevxY9PVnO9S@5$!);f zHc%NUYYC{p$h9sX8c+T_Mh+>PNaux?z}IK1N3TBQ*^}m2%w2q#px7*Y9gog>Fq_8> z<;$}gl9enUt)S0K2bZRjLo&Yx2Nb5T}mB zp~#Pbe>^0ZP&aqPS+uoS`GD(7%QLUF)j=~+fwu=lh9%rCi!a>8?^cyKY104}8fTX& zcxYNSR4n+FK}|swVG&<1#OICeTW%);r3W3}zaT{tuLX;XcE7l- z82n7SZ_Qb23Vw=CG9qW!2;1k|NaW&}Xs(%$#Vg^fDMC=d)8z_OmZK}*Y{pmqmY7kw zbYOO)soCyTG0(8Fb!IYie{Q`mRKs}T3UGOrIC7)sjn;Ll{l|aXM!3%%oxqBH1FeL}y%a3)7nB)WI>Y@Ha~$e;Gt>&4-wv9aHdg9+ z*_)rya5e|dXn3B1Y6Wc$Un}_m;LGNkHiC$Eo7!3!aWR!&ApV9Y%#C?3wYh5@Z7J5A z&6LD^e9dDGM|2m&y`oNNn}la~8hROyn!Q zaw%0BhovuW10~{Rpf=xusat@JLorRsZ*NUw09?(y^~H@XTr&7z?38v@;OKyKRe+x6 zuNPy2*|-Fujo|*cAQ@x)%$;r6N!f14@vr$oV^R14+-Ds%H!Tmhffl^D*2GnSl@j&O zN=XB(6weu1QPH;Diy~)xnBKe+&Bj6++7=WRxKS~i=gY)EU9*ji1P0IW&owpFWx1dS zY)2THl}}8eF)fXE;w!Qqy((zQL401M<8$s$0ZNf^FuNu8oAK<==E3aWFRgWS=Ckob zZ~}=@kEf!%a9NYY7fvz9Bh5+bES)8HdP@o>C@3JFDor%ane+VVp;Z|dE%;hrJn)|R zb+sc7?}k91$u~UbJqcW&C;I=``s%PK!*5#z1OyRKq*DaxQo6gOyH!AP7;30t=u*0s zZWuyxh6WL7rKAxMNl5_-$@}8(-20sSob%5-48uF~&HL?d@3q%j`{VaxC{wCxS@`-* zD(u#YkmLlJAZfZNoXUMlot1-~3 zUjg|$ID;nP`#vzv2)#QQXb_^v()p5?^4S1@ zBSohapkeqYRm^vTwdk9*vujct7U@I36Fqzn(1B|Us_z&b4|5Qk?`SFJ8oRH*X)a(S zS$hPk3@qgiY~X>ScjQC!L8hl!;POnSlX5 z{Pt55Z~OV~M zLd_6kM)QhuB&W%MRg)sRP3w)*K)m&1Fqq9`2s3`doqH7$YNV3Vz-X|b7>O#~h0uSd z>h#$pN^YohjyNQnaifSYTgi2!IQTm>XyyZh^ELMj4=Q;!W9HLB^OkXLNMML0% z2br&c1FeD*zHMcsdkAw848Psho+$b2wCDBSV#o9=$(6iR*H&IL>wU$r&41XEr721-24qeyoDF3zb+leGhH9n4$ehihO07&d*}8g3#qxmLd8Hbo1}io`KoMYpC}8tfUhRo1%;ZQH!2H z5J*~A`4u@qRpL=!>-^VrMQ8>R{f9R%QmqBP0^ttGkC}vJiGn)ipe<3ZBm<3kfkAI- z?neF*DzbS;HqcB6LnK`N2(0R$F4~2wA zsw&iZ5A`y1|M5zdv4|1SR(?Tly1t}}H7(R>xZh{u!f=94*?F27eI+7UeHUNV#B8Cp zt;`U5$wy83aPQ*7myQ*uLOm7zv2Y{8-lg`H?F!$qW9>2~R{i;84qMatlWp1Ko$2^3 z-x`*|K)rO%v}-CivIg5Bbi9M3aBMt2;(S{;_wlMzs2=EWNp$|vBFI=Srcnimutuhe z$lSm^9tNT#GZkZk=P20Plbb&0ISi^)QWpU4wpm2!S=duIrhFkR8xt($7b;bqGv|kG zGwFg*kVYS{ZyaTe^EcRV`fon5mO?i4QNuj!URncwVz04>Mz@|09YoY`?80$Xl~`BP z$liU^=8{c(L&vGnb{4T;PXvM?OfG<@X4D5JyluEXj;{sY<$P_d#=F{xDK)g#3-rGQ zKYyV7*2$#Q-7;mf_39i)5L&z&{;q&|#VVmB|a z-?}D<=_$>g^)0f&JraTIu2UwHD9X3gCCD*Oy5HCb`to#!0i!N9*PEyDL+i*0d)29Y zDtXfG?sFT3FY#L!YD4JJj78BGxNF-2S2>l{OJ8Sy(DaRoK__Bj_3)*UL`fYz3WdBV34X=mFXACQSkTJeUjaU%8hcZUIJ6dYk(bt=>WAr=(= ztLCN&Kl|}rsYoMN2i2|}^3-F_8)Jq@JJ4y-&uX1Ki^S;aEM4o?TOgMuH=nOQVCQ{G z9b*bB(q4ErzipF{=hksvTP8md6S2_vC@*IaP&5ONheF9+e?Z}oCmsbC;CZ(?-I#S-2s~z9}tMI1Qum7v~6%uLm zr^2!)2l{>OXk4FVcia)7xK3N5*E=b{zw9+0SF4XgFCfm4?~@VPF~TgMXmO)TogwsT zq9JM%Uev~OoBpwwT@bj$O3Wjrjatuo+Z#6GR`I4wCIGseajIo*f~iVHTLaUAlUfJ) z%{2(4&AXiXL^>%oBRfCfeMd<>!_gng|MDaU+{5v(#QO19qIbBUhHHC&*XdcT5m4=b z(g%<&xYHB^n<+A{dH|~cRp^6N)&^}Cxt+rDg+M;t}=3)<`Q{4l3 zo5zb<>31z|9hzC2ntn)qlqwF3$2YF5g0N;_RvD0jj$SI`O>sAt8OInvM4qwsQM;Ft zH9LKY)ux9v9}c(Y1;F>4kcZw*gZme*f^c*kZ&b@_1rtk2%PX?1 zfJxy#45tFQp0)vYzC9p&3EkLhM;|AXj}|np1B`XmzWXHA2kCmQU6~^#$VUaLIHt&8 z2S-T|{O-fxGLIC+dN%P?X$6qZwOm~YvI#}0=^kSFEsQ3ya(P7p)A$Z#gR1pwNU8p1Jmhx{&jSXySmY)^*3bgu~sr=(UZ7&+96qf4!+5oSm73%anZI&sGSYuaSz zL-;2&GY6&(PL90#V66HeSG6zV9w@Xd54sz%&3XP{gX?>-k?swF`po*-cL3;@Ky;R? z(D6)@ojM~48%6(i71LIL0!q6%eiChW<5?rA5O-=_DlmagtdD%FiFelQb4IleSy ziJ&IWqJ)HQJ}3ji=_?x#d62?JTa-83iBv%J6%eY(cs;&7lZMA&_$>FYo{Y{FiS;p5 zu}-*5q(ALb8dR7R2*Sy62kj_Y}AWTx+8@zG?>Mg$-w$D%z|Q?Sq!{coK&vRkmIX zpoVMq;_qZ{YfJZh1#onJ_dBJ)01Xi^^LM>(V zqk&*i@HXxznf3-7sXi&(Ix2fWSFDqn(q6P^U%0M0eKxo;51?f$xXz2R1w{8=l}AWA z0h~bB3X4tzl>I8Xq&8Y#3McKvp4nyYWVm<1Ns8EHI(oBs*We|?Ebh8;CGl2I&lu7J zC{2Y1QJZXYN|kgb`T0=?*QjU+Oll);>9~i$$4WMA0NJIb6m4j+kOe_b;KY4ig%r`1 z)kNPA_|Z0nMj`}by;6-jp5(d`e_r0~el2imokzqop3AVrUut3Zr7h2RVbugsN1Hy^ z_q%?2P%@)MvsFyIMM=F?JSH(XCEc;IRpHxn%vXlXTZU_;H$J$iA;-s%Z0p1^^-v+E zTUzfdG)MnMZkX-1fInRn1j>>xVTDCGCN5GsFs)p8({d)+eY~wXZ^~fzfXPFc-MI zCHV7yG9j=<0&JgUTD(zaWD2UXVzlw6s!!D1Q)qwTMNvtNCzL7aQwl;n_Bqhs1a4Yw z0b3r#^BcTk8>1p~GAzya9gQjD84I)vg|tgUfbX~=^7UV1@@DU{Bk8Sx%_Y5#?f4%$ zj~~CSTz2n$9Md1)&G82|^l>vSAZ4`E>|Rj1&I=hKZn z%!{Ce8zB!qab>$3za)2R*>jcCh3r))fuFrJN5p4WrS^;gDOP%joR-vQDN<*m0Nr zaDgj?DPFch0+z&XHJ6QWiiPQ^RZ!327II@~97XHJe66&I`xIY;$0POgy&FQv04GEl zg772Z@^fnM8MdmcTrA!YvY6KuoYc;D36zt1*dX0+ArvnHmjrJlnP zLrYg{6+j78=dZK(AQrf_ai%49l+FvGj~Ma=VmA}I^1G`kLDI!qQA zAB#epUW)xQ9Q~h3&qG|xCliebd+-)!{lQ&}oT3WDEhQTwqBDq6 z7n(PEIs!BiM#j|MH+HNB5U1vWew)or*>#T%{%C+^ro9)VcJCzEPlWJFour;O*6#*Y zR}%j|NUd)?G1+E>Vu_4-)4V6W=5DQRjd|{%UEa{!!p#DMv`ad0B;{KS|AMnGF*`K#qQfqu zt-f%5c5;1D)o~3uosxlSUV8~&ol9LE1zdHkU!PV5T=WK9<#b%{>`pB~uP+y`_7|^C z7O#(`K73s-)CW2Tf!^K6Pg|V{yo<%hxom3DJC`NcAH=s((5&D1Z#1i`vf)|4*UX{! zDdluJ)`fnxsjeV>vP`n2*Xn)OyAlT6)p?3qv(G(v9c>%1nMf9VM*|TNdxyF@0~G z+90hR0YArgXp&HyBUAXxHywRU($wZ#8J326qoAOFV-Tz$lo*^fhB>wvjqiV8X4;&r zP=M+AJZ5uzP&O7%^ODpi%TxQr9Y|G1O7?JlD3R&HSq?>cp~5iiw)_x|HPC)|*#Y+L z1iFiD%ZucJD8DSU!5Qe6DsHIWzmFy^No%BYjGL>_$gB z&ZRxm0_a;{Qj65%oHc0Z)M0q7VpTgiqM0(OmahJojRalYdFpv2V!xG7Q~(j~X`Aci zUKsrPEr+NKh7>HbtXT)e8w%W-7-ael-+oBfGue(XR01rL@R*X`6gE?p!& zUSeIPnPv0}r?8>xTG+ub@+ItA`qxLdhs9~Z1_|ljW*z|A@bU61`E6S zrSuNpgW^ko?>#)fbZVB8G5q-D78ZYebk#kEi*>b9XXiP&rk2IS)sr$?Z}?Tc!XgZl z$DJu!wd_j_FW@V_n^Oq<=>%BR;X^0urp<`%Pt0HA`4f-eKhdKm6Xj1j+G|6aNu|o& zf6g9Y><-bRZ{hdP;1z&6iY5E4OYjp=vm+q%(Nxk&z=lHDKQeFpgT)J-!h;&g%z`4G zgmZ~InoolmK*#??lQRK3*oqOl~jU~Or<~{p8?hZcO2E3HwXvX_!uRb zhB}(K_^l^?&ypN!zJzqlCMrRajdQV1(5u?G<=pG5F^mP!9Hx?4*5hp+bl#bYJ+*IY zUCT3vje;A$t#JWx?#|fxj-&00=vI{{B%jFo)b#{=+3K#ODnQyUu-Sp(cdWFK-R8#9 zp$zuGYTbxBjtKD#lvXOoXZXIWp_)p427eT1(h$ULM?NKE0kC5-skEoFNvT4XmX3KQ z11v`&CpK(@9jdF*|7`jIh$zs0%xBLE5SOj0RvE(7pSUgI>1@SkT{%Ac>u7tyyPM13 ze;+A^7--9=3Bqf8I;l*$`#nY-el+dwBilDUUkj!;fRBfV&9q~Q$;#cBbY+yKH$I|< z&V6X1K~nK6+3~x!BdPTY)2L5R>I6Ts7*m7rk)m{b0Gbg;FKsZnp>WfNRh2OJ{sg05qclrUrAY>O`6F?IYQhrUnqFMIJNm2pLI%2ht~EuKQkx*l z47dY)(8ui1Y&|Un{TqW#Z6fOiY*g`Sso;g>T{=0s&0E<6##&`d3uz8BAu&B%;iA`6 ze}~;D`o8q683;skmEQ;!6|qL_mx{&`y}(6dv?;x9{ZMCwBRziNqmE7dw~g-uFo>2$ zi0Ut=YJRq{jk|8v8V!1zLy}J{cZXWLCkBgbAfY!%{!f1$!*!vZ1RPL5Wz!0UI$D8Og16CEOEGAN!7Im`ewx}DF;YA&WHHB2Ruj&h zc-Ei&)$sGI+DLwL6#%2yNo93Qy-a_ar4Qt12ogxlPbOMdPPzE%@b|KIJM-TWYAEln!`c+ ziYIadcHgs^T}-(IPW|3`*$yenhZ$)u5toz3PUwJ3Kmf2Ya(Yag?-k|r#v!-JYqRp< zq1#Vw`b3|6;h>ob5>b=2;c0CZa~Hh-pZ;w~Q8q%}oRZvlAE|FJEvhBnVLRkTZ#N0i8`*kU z=evu3R-ApNIN``mT=7)RF9&aL$nDs7-zVR!;#`*-Dnd|QKUr?C*Fj2S;j-q8JJG%03&CmkW#&?O=)&*f^rcM z?u@1l^?>Y{Ky@B@Biv1b7UcZH1&JH&;3{WsTqU{IOa#&9YgLqpi1Oo=9XIdVsg$eN-j&8*jc>9le@0dT_JKps!)J1b{Xx|5hH z5I?ei>Gv^g9j3FfNMGOBJgSJ@f(kO~pUoYZ1^2A*dOtqhTL=biW~q{bcX0`21ZVMJ z!Vk?SgH>YIo4b_l=g=;|15Ve3ccl7=JlFi_3n4RvK?xY*Sim`;em|aXGDdg)?%&sV zr#Jfk8%Te!n(g;)mw|r?Y-khA(xQNy%izq}Fz1Oj8b#n`i^Z=8AODvGtAhhlnq}jC zuPor6w&$heBzk36`}A=m!^f%wGXxG4kT{b*b``YMS05kK^p5V~B-XivH&>ARwFG4?d_3TWY7&wG`>}O5O#L;D+Y+7m0es1TV4?zV>3bnR~&L9NgM8AqcyM@A`Xr zM%xM9@G!Ghf`G^Q!)X=5ZskQ#6pJAJm%T~xeZ%yqqD>cG>67yrS-DbIU~z5hf`K2+ z8Pkhh05UYOWistRQL-qO5&D;}(Z*<@fg@@8s|DO?rI%#q8{ zp7Vl}cQgs+eip}W`&fx92F35xDAXG`Z58vh9ew^(n$dh+NO+_I-Ja7>O=zg$XGb0g z8Ylu2?5=_0e_wr$HFI*M^})&LjoLj}bHkzj=%*5Gt_Z3uzJs&W##^``f?xBEV4A2`Y-`%a+tJfpsm2Ib?-<a#_ zqdq@B)eWx_A($xE1_pctWw@#ra8Z8)jZF=LViWtWenX%*UEY*CSq`gM_^Um1CBcDB z<2cjX6{qR*W8i*Ps)TH*jzWv}nl=7v%v<=6G{C7(wu_8>S_twr{>?i*hEzHwHN0W& zH`TkEZpN@)WWoGvD^yI_+u9~dvp7CKWwOv}!$oP@gl;AL4EhR={8KOFsc`qeoH-e6 z)9MC!n1Y$1OHz$KSgXIJEZug}{9%eu&Lv^A07&RwOWz=e zYs#*VI}}}kn?#F7j47|AmgC~T<=Hatb7zSjjRFTm`e((G(m5((Yboc4ZkM(3(KuP6 zSzAwZQo3?2Uq4eT{63>qRu}>0O!z1G0|x}?RY4s8*XqrRQML{0Z)K^UoSv6s*bBN* zcyBfaCA%VW_!_)7e?XhqOeS$IfO#eqI8jj~8vg{t5)Fh42w@XP7ku9%jjpE*(LqWB z$9#g}(Cpm^x{LlfG7!BxKaY0$sW$-jaJs=BsmcHZ?A9W6=`+C9H%XNdysI<`Mm_aV zq&2^g|>=#2^u`lv-J`T244XT+)gwRfe%j0teothN$ox56NumHF$U91HczT#$p(MV zAAt0O3;f$A!V6h|v3@UG5z_-4u*2Nf^eJ_L@Kz3ymMG*9;@!Xe@eaRvuPv-~$%()^ zQ-|@)cIl(!?@%&>4qsibEkhr#H7B^cV&6hsB%rcNWGmp*A`|zwmR;#fL_>5ZRHAQW z>Hu=`TY~LG=)IOuzoZ=eAEc99%NLBxQsDMpd;C4fnOL7a4<+KWL-=4P|eVS=pB&io=yGbOsZD|Ujgr(m9PP{A4~$Y3QmAdLe|0(RLqa~kTs{)<$P=#?a15Ki{qFF14HI~Btl1Oa8V-d{|bC{Cf8842Lj_EFm z7QnpS#=YcI`E+rv|GD4}X04`6C?|S@S~x#c!kTE)^;tO~d@f+}S;@e{VZpo6NK~;1 zGG`#|^LG22sY`KWYDb17g8-QnrTJn``&f0M#C+q$J!=mRF@^B$2pd^CZXN_moX0X_ zE#%DlPnf2ceEm^zZgU;UKjic3->~Wf48-_L00{Fd_pO$!E4ix74&f+*fc4SHb;}fU^ zI)VUT@go9D%!onD3 z_W3lbmB_-xvO;rtoeasxAQTcO0kan%hcP3wE=CFkcHuU_-LBm-K?iTvjRZzWOb(M2d$ae0H&iWM#-RQ1U zChN_R?`ObT$Eykq&L}XT0GD|az*sutQTv;84S%|)7G%-M;~`|qs)xgEVg zB_A9t(@mqR10Na=>cz`?%#C~@`=0G+4S6+4d==8w69 zw&z@BkCUPphd=y~y8|vKm9Jl-Wa}GxxM-V8=g@s~!1WJK7}2*RFa(g~(6$UjU#ck0 z1*){*-HdaYjnR*W*%~Nf%sd(~axI9gQ@2N7O3CCYt2E{vH;BsT)=Yf^j`Vt2Pt4DzW;u;%(?1;+>C}2QEIl9CwUlAPGd9kE*5X^H@s- zi`6%k{GGi7^Go&WGR@_+=Ojr%@Y?JE?g*AqhCc(>PKG#>T8qH-vwH?io`2xC%^Cl8 zH@z0o7USw8b~HmUkrk_U1_oIC@iR0-zyQlH1zyw+mM%C0_E@?jh{xD7uKdfHHU{=t@5u!9mgIBP?c%Zm9f8S_LBq-( zD(N1<`vqnVeIrSYgaP7e-_C|x+gCjXk*|-%*N?u=_92P4Cc}+ZU9@ZJK|Xn$H0qZ_w!gbe;7*%@BCSvsVsaWmu1R3eJZ zu191#%sqN&o-F0W3@JZPh>C}tSeLdZP^`=_^6U-iq`n(4wff#t#Q8#Jm331bm$Zo6 z09*f`T&2>2SB6I9I&exdR|b{kAD(N&?`qjp5mG>^2pP6eK{?!?@W0HZ>VDn!jkTlx zBYVWHzoN%x@YR*U8jOCFB>}T`FA^=SV!Et1f=I*e^S|O+sSIN8iyLg+4pm47@p@Z- zLEl*_oyeQ1_!F#+?_SM;z^gL7I(|@=-WFS#Q`%3XIMWW8QZ1d9VR4)6@`E5xYyXN!`*O9Lsqaq~bL9~d7C1?1d z!gnL_Ynj;l(6eiVjvzq{4^Hto^3e`fAavrEP2r56x2CvB^%?{<(o}15yr+uRGJs)S zK~Vr`jNodiNZVndyXIAr32BPeEDfrV(KH7RU_Rr)Xb8!~z?1R94ES&}&!+DZ z(fE!^RI`L5)<`1C6+NzURIwAHgOxfx@jx&cNQLgnj8pn12dPQO3WD2+;}~K`UiY~f z9khmI_rNS(USiprurBWHSxY@kar1dwE`SrF<7lSJ zYL8X*cS>7A+|CEO_o~7#1{=V8f%{B%S|Tki)9) zS-l@*Ri;;*(p3J=78U)t7485YX+DIPU?QhB=t2LCa_)`H76hWM2CT;jqKcN50rl$E zLGo@~`cH!oR*!&=5x0ly#3jH{o%#;1%*;ZBnuJu(OAr${6s~kZo+OdZy1Ao)G$9w^ zr~-#+=9(Kne~ShF;ZSlQ1NIa zQ=MUq8~HiJ5K3z|h`7XG?r;@AK8Sz|-5CR)xm958IUD^D4(VfCreM`FljX?VG4mT` z9;65@Ir?CbpoXY|^PTrr8O4HwTgyz59QJQYxwj@MH>F>SCNV<>a|Qif_^O~?Gt%#q z>l0*((o?`AfTi4gtd|D@e>c{5d#lK8%hx%M>aQA1_S(g-&! rqV9sBFJqW8ip*c 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 X($}H@XlD?J6}T*cM`1W1DuVt6!7qkn literal 0 HcmV?d00001 diff --git a/content/Targeting marketing promotions at Universal Bank.pdf b/content/Targeting marketing promotions at Universal Bank.pdf new file mode 100755 index 0000000000000000000000000000000000000000..8a77bbc1e0f4290c5c43b2dd08d3167685f1e787 GIT binary patch literal 118161 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 B`+@)f literal 0 HcmV?d00001 diff --git a/content/data/Museums_in_DC.geojson b/content/data/Museums_in_DC.geojson deleted file mode 100644 index a20a9e6..0000000 --- a/content/data/Museums_in_DC.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"OBJECTID":1,"ADDRESS":"716 MONROE STREET NE","NAME":"AMERICAN POETRY MUSEUM","ADDRESS_ID":309744,"LEGALNAME":"HERITAGE US","ALTNAME":"AMERICAN POETRY MUSEUM","WEBURL":" http://americanpoetrymuseum.org/"},"geometry":{"type":"Point","coordinates":[-76.995003703568,38.9328428790235]}},{"type":"Feature","properties":{"OBJECTID":2,"ADDRESS":"719 6TH STREET NW","NAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ADDRESS_ID":238949,"LEGALNAME":"CORCORAN GALLERY OF ART","ALTNAME":" ","WEBURL":"http://gahmusa.org/"},"geometry":{"type":"Point","coordinates":[-77.01958878310639,38.89911061096782]}},{"type":"Feature","properties":{"OBJECTID":3,"ADDRESS":"1307 NEW HAMPSHIRE AVENUE NW","NAME":"HEURICH HOUSE FOUNDATION","ADDRESS_ID":241060,"LEGALNAME":"U.S. DEPARTMENT OF THE INTERIOR MUSEUM","ALTNAME":"HEURICH HOUSE FOUNDATION","WEBURL":"HTTP://HEURICHHOUSE.ORG"},"geometry":{"type":"Point","coordinates":[-77.04460619923155,38.908030206509885]}},{"type":"Feature","properties":{"OBJECTID":4,"ADDRESS":"950 INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AFRICAN ART","ADDRESS_ID":293262,"LEGALNAME":"BUILDING PRESERVATION FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN ART","WEBURL":"HTTP://AFRICA.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02550917725944,38.88796214949963]}},{"type":"Feature","properties":{"OBJECTID":5,"ADDRESS":"740 JACKSON PLACE NW","NAME":"THE WHITE HOUSE ENDOWMENT TRUST","ADDRESS_ID":218748,"LEGALNAME":"NATIONAL BUILDING MUSEUM","ALTNAME":"THE WHITE HOUSE ENDOWMENT TRUST","WEBURL":"HTTP://WWW.WHITEHOUSEHISTORY.ORG"},"geometry":{"type":"Point","coordinates":[-77.03820629325264,38.899842529027275]}},{"type":"Feature","properties":{"OBJECTID":6,"ADDRESS":"921 PENNSYLVANIA AVENUE SE","NAME":"OLD NAVAL HOSPITAL FOUNDATION","ADDRESS_ID":82564,"LEGALNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI","ALTNAME":"OLD NAVAL HOSPITAL FOUNDATION","WEBURL":"http://hillcenterdc.org/home/"},"geometry":{"type":"Point","coordinates":[-76.99314290714912,38.8829885933721]}},{"type":"Feature","properties":{"OBJECTID":7,"ADDRESS":"2201 C STREET NW","NAME":"DIPLOMATIC ROOMS FOUNDATION","ADDRESS_ID":243360,"LEGALNAME":"NATIONAL PLASTICS MUSEUM INC","ALTNAME":"DIPLOMATIC ROOMS FOUNDATION","WEBURL":"https://diplomaticrooms.state.gov/home.aspx"},"geometry":{"type":"Point","coordinates":[-77.04831079505838,38.894135140073566]}},{"type":"Feature","properties":{"OBJECTID":8,"ADDRESS":"4400 MASSACHUSETTS AVENUE NW","NAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","ADDRESS_ID":223994,"LEGALNAME":"VERNISSAGE FOUNDATION","ALTNAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","WEBURL":"HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/"},"geometry":{"type":"Point","coordinates":[-77.08841712551974,38.9390892139132]}},{"type":"Feature","properties":{"OBJECTID":9,"ADDRESS":"2320 S STREET NW","NAME":"TEXTILE MUSEUM","ADDRESS_ID":243164,"LEGALNAME":"SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER","ALTNAME":"TEXTILE MUSEUM","WEBURL":"HTTP://WWW.TEXTILEMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0464284034822,38.89880233850966]}},{"type":"Feature","properties":{"OBJECTID":10,"ADDRESS":"1145 17TH STREET NW","NAME":"NATIONAL GEOGRAPHIC MUSEUM","ADDRESS_ID":290192,"LEGALNAME":"CAPITOL HILL RESTORATION SOCIETY INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NATIONALGEOGRAPHIC.COM"},"geometry":{"type":"Point","coordinates":[-77.03815544194862,38.90519711304962]}},{"type":"Feature","properties":{"OBJECTID":11,"ADDRESS":"3501 NEW YORK AVENUE NE","NAME":"THE NATIONAL BONSAI & PENJING MUSEUM","ADDRESS_ID":293238,"LEGALNAME":"NATIONAL BONSAI FOUNDATION","ALTNAME":" ","WEBURL":"https://www.bonsai-nbf.org/contact-us/"},"geometry":{"type":"Point","coordinates":[-76.96989266812075,38.91241055669072]}},{"type":"Feature","properties":{"OBJECTID":12,"ADDRESS":"2020 O STREET NW","NAME":"O STREET MUSEUM","ADDRESS_ID":243057,"LEGALNAME":"LEPIDOPTERISTS SOCIETY","ALTNAME":" ","WEBURL":"http://www.omuseum.org/museum/"},"geometry":{"type":"Point","coordinates":[-77.04592748104784,38.90839101941751]}},{"type":"Feature","properties":{"OBJECTID":13,"ADDRESS":"2101 CONSTITUTION AVENUE NW","NAME":"NATIONAL ACADEMY OF SCIENCES","ADDRESS_ID":242716,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM","ALTNAME":"NATIONAL ACADEMY OF SCIENCES","WEBURL":"WWW.NATIONALACADEMIES.ORG/NAS/ARTS"},"geometry":{"type":"Point","coordinates":[-77.0476448925699,38.89296693766957]}},{"type":"Feature","properties":{"OBJECTID":14,"ADDRESS":"2401 FOXHALL ROAD NW","NAME":"KREEGER MUSEUM","ADDRESS_ID":271251,"LEGALNAME":"CONGRESSIONAL CEMETERY","ALTNAME":"KREEGER MUSEUM","WEBURL":"HTTP://WWW.KREEGERMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.08878098790044,38.92191197499568]}},{"type":"Feature","properties":{"OBJECTID":15,"ADDRESS":"1250 NEW YORK AVENUE NW","NAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","ADDRESS_ID":279010,"LEGALNAME":"NATIONAL MUSEUM OF HEALTH AND MEDICINE","ALTNAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","WEBURL":"HTTP://WWW.NMWA.ORG"},"geometry":{"type":"Point","coordinates":[-77.029163689541,38.90005647268176]}},{"type":"Feature","properties":{"OBJECTID":16,"ADDRESS":"900 JEFFERSON DRIVE SW","NAME":"ARTS AND INDUSTRIES BUILDING","ADDRESS_ID":293260,"LEGALNAME":"ANACOSTIA COMMUNITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.si.edu/Museums/arts-and-industries-building"},"geometry":{"type":"Point","coordinates":[-77.02446647929001,38.888201004559114]}},{"type":"Feature","properties":{"OBJECTID":17,"ADDRESS":"736 SICARD STREET SE","NAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","ADDRESS_ID":311896,"LEGALNAME":"BLACK SPORTS LEGENDS FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","WEBURL":"http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm"},"geometry":{"type":"Point","coordinates":[-76.99526950368147,38.87303084860059]}},{"type":"Feature","properties":{"OBJECTID":18,"ADDRESS":"500 17TH STREET NW","NAME":"CORCORAN GALLERY OF ART","ADDRESS_ID":279802,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK","ALTNAME":"CORCORAN GALLERY OF ART","WEBURL":"http://www.corcoran.org/"},"geometry":{"type":"Point","coordinates":[-77.0397427304576,38.895854463821884]}},{"type":"Feature","properties":{"OBJECTID":19,"ADDRESS":"2017 I STREET NW","NAME":"THE ARTS CLUB OF WASHINGTON","ADDRESS_ID":285527,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ALTNAME":"THE ARTS CLUB OF WASHINGTON","WEBURL":"HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04573426864144,38.90157618582308]}},{"type":"Feature","properties":{"OBJECTID":20,"ADDRESS":"701 3RD STREET NW","NAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ADDRESS_ID":293253,"LEGALNAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ALTNAME":" ","WEBURL":"http://www.jhsgw.org/"},"geometry":{"type":"Point","coordinates":[-77.01493675564363,38.89857205791096]}},{"type":"Feature","properties":{"OBJECTID":21,"ADDRESS":"320 A STREET NE","NAME":"FREDERICK DOUGLASS MUSEUM","ADDRESS_ID":38979,"LEGALNAME":"COSMOS CLUB HISTORIC PRESERVATION FOUNDATION","ALTNAME":" ","WEBURL":"http://www3.nahc.org/fd/"},"geometry":{"type":"Point","coordinates":[-77.00110470253333,38.891131915241964]}},{"type":"Feature","properties":{"OBJECTID":22,"ADDRESS":"1334 G STREET NW","NAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","ADDRESS_ID":240658,"LEGALNAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ALTNAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","WEBURL":"http://www.armeniangenocidemuseum.org/"},"geometry":{"type":"Point","coordinates":[-77.03108432435003,38.89804891426683]}},{"type":"Feature","properties":{"OBJECTID":23,"ADDRESS":"1799 NEW YORK AVENUE NW","NAME":"OCTAGON MUSEUM","ADDRESS_ID":218490,"LEGALNAME":"AMERICAN RED CROSS MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.THEOCTAGON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04141820048949,38.89635375607101]}},{"type":"Feature","properties":{"OBJECTID":24,"ADDRESS":"1901 FORT PLACE SE","NAME":"ANACOSTIA COMMUNITY MUSEUM","ADDRESS_ID":286524,"LEGALNAME":"FAUNA & FLORA INTERNATIONAL INC","ALTNAME":"ANACOSTIA COMMUNITY MUSEUM","WEBURL":"HTTP://ANACOSTIA.SI.EDU"},"geometry":{"type":"Point","coordinates":[-76.97678467186984,38.8565826636904]}},{"type":"Feature","properties":{"OBJECTID":25,"ADDRESS":"2312 CALIFORNIA STREET NW","NAME":"NATIONAL MUSEUM OF THE JEWISH PEOPLE","ADDRESS_ID":234961,"LEGALNAME":"GREENSEED COMMUNITY GARDEN LAND TRUST","ALTNAME":" ","WEBURL":"http://www.nsideas.com/archive/nmjh/"},"geometry":{"type":"Point","coordinates":[-77.05118108814123,38.91537084189858]}},{"type":"Feature","properties":{"OBJECTID":26,"ADDRESS":"430 17TH STREET NW","NAME":"AMERICAN RED CROSS MUSEUM","ADDRESS_ID":300987,"LEGALNAME":"DOUBLE M MANAGEMENT","ALTNAME":"AMERICAN RED CROSS MUSEUM","WEBURL":"http://www.redcross.org/"},"geometry":{"type":"Point","coordinates":[-77.04020705622152,38.89482654014118]}},{"type":"Feature","properties":{"OBJECTID":27,"ADDRESS":"1600 21ST STREET NW","NAME":"THE PHILLIPS COLLECTION","ADDRESS_ID":243333,"LEGALNAME":"SMITHSONIAN INSTITUTION, RENWICK GALLERY","ALTNAME":"THE PHILLIPS COLLECTION","WEBURL":"HTTP://WWW.PHILLIPSCOLLECTION.ORG"},"geometry":{"type":"Point","coordinates":[-77.04685454590388,38.91150979086159]}},{"type":"Feature","properties":{"OBJECTID":28,"ADDRESS":"800 F STREET NW","NAME":"INTERNATIONAL SPY MUSEUM","ADDRESS_ID":238378,"LEGALNAME":"CONFEDERATE MEMORIAL HALL ASSOCIATION","ALTNAME":"INTERNATIONAL SPY MUSEUM","WEBURL":"HTTP://WWW.SPYMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.02328618491306,38.896986480912865]}},{"type":"Feature","properties":{"OBJECTID":29,"ADDRESS":"100 RAOUL WALLENBERG PLACE SW","NAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","ADDRESS_ID":293186,"LEGALNAME":"NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION","ALTNAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","WEBURL":"HTTP://WWW.USHMM.ORG"},"geometry":{"type":"Point","coordinates":[-77.03268853739414,38.88668873773371]}},{"type":"Feature","properties":{"OBJECTID":30,"ADDRESS":"801 K STREET NW","NAME":"HISTORICAL SOCIETY OF WASHINGTON DC","ADDRESS_ID":238956,"LEGALNAME":"Historical Society of Washington, D.C","ALTNAME":" ","WEBURL":"http://www.dchistory.org/"},"geometry":{"type":"Point","coordinates":[-77.02294505078932,38.90262956584554]}},{"type":"Feature","properties":{"OBJECTID":31,"ADDRESS":"1849 C STREET NW","NAME":"INTERIOR MUSEUM","ADDRESS_ID":293214,"LEGALNAME":"VICE PRESIDENTS RESIDENCE FOUNDATION","ALTNAME":"INTERIOR MUSEUM","WEBURL":"HTTP://WWW.DOI.GOV/INTERIORMUSEUM"},"geometry":{"type":"Point","coordinates":[-77.04260256434321,38.89445283458921]}},{"type":"Feature","properties":{"OBJECTID":32,"ADDRESS":"4155 LINNEAN AVENUE NW","NAME":"HILLWOOD MUSEUM & GARDENS","ADDRESS_ID":284839,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART","ALTNAME":"HILLWOOD MUSEUM & GARDENS","WEBURL":"WWW.HILLWOODMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0526196505072,38.94364171194315]}},{"type":"Feature","properties":{"OBJECTID":33,"ADDRESS":"1318 VERMONT AVENUE NW","NAME":"BETHUNE MEMORIAL MUSEUM","ADDRESS_ID":225385,"LEGALNAME":"NATIONAL MUSEUM OF WOMEN IN THE ARTS INC","ALTNAME":" ","WEBURL":"http://www.nps.gov/mamc/index.htm"},"geometry":{"type":"Point","coordinates":[-77.03086564182146,38.90817580546652]}},{"type":"Feature","properties":{"OBJECTID":34,"ADDRESS":"1500 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY","ADDRESS_ID":242324,"LEGALNAME":"KREEGER MUSEUM","ALTNAME":" ","WEBURL":"http://nmcal.org/nmcah_exhibition_in_washington.html"},"geometry":{"type":"Point","coordinates":[-77.03551120800971,38.90651019329394]}},{"type":"Feature","properties":{"OBJECTID":35,"ADDRESS":"1 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL GUARD MEMORIAL MUSEUM","ADDRESS_ID":238009,"LEGALNAME":"CARL SCHMITT FOUNDATION INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NGEF.ORG"},"geometry":{"type":"Point","coordinates":[-77.00956143652462,38.89812580681995]}},{"type":"Feature","properties":{"OBJECTID":36,"ADDRESS":"1811 R STREET NW","NAME":"NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY","ADDRESS_ID":243292,"LEGALNAME":"CITY TAVERN PRESERVATION FOUNDATION","ALTNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY","WEBURL":"http://www.nmajmh.org/"},"geometry":{"type":"Point","coordinates":[-77.04211577477285,38.91282059721026]}},{"type":"Feature","properties":{"OBJECTID":37,"ADDRESS":"3900 HAREWOOD ROAD NE","NAME":"POPE JOHN PAUL II CULTURAL CENTER","ADDRESS_ID":288031,"LEGALNAME":"AMERICAN POETRY MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.JP2CC.ORG"},"geometry":{"type":"Point","coordinates":[-77.00466710351098,38.93776654366721]}},{"type":"Feature","properties":{"OBJECTID":38,"ADDRESS":"700 PENNSYLVANIA AVENUE NW","NAME":"NATIONAL ARCHIVES MUSEUM","ADDRESS_ID":293251,"LEGALNAME":"PHILLIPS COLLECTION","ALTNAME":"NATIONAL ARCHIVES MUSEUM","WEBURL":"https://www.archives.gov/dc-metro/washington/"},"geometry":{"type":"Point","coordinates":[-77.0228592459719,38.89285370583677]}},{"type":"Feature","properties":{"OBJECTID":39,"ADDRESS":"201 18TH STREET NW","NAME":"ART MUSEUM OF THE AMERICAS","ADDRESS_ID":294191,"LEGALNAME":"Art Museum of the Americas","ALTNAME":" ","WEBURL":"http://www.museum.oas.org/"},"geometry":{"type":"Point","coordinates":[-77.04147388756545,38.892799844291474]}},{"type":"Feature","properties":{"OBJECTID":40,"ADDRESS":"9 HILLYER COURT NW","NAME":"INTERNATIONAL ARTS & ARTISTS","ADDRESS_ID":279975,"LEGALNAME":"THE INTERNATIONAL SPY MUSEUM","ALTNAME":"INTERNATIONAL ARTS & ARTISTS","WEBURL":"WWW.ARTSANDARTISTS.ORG"},"geometry":{"type":"Point","coordinates":[-77.04730884101534,38.91222144699389]}},{"type":"Feature","properties":{"OBJECTID":41,"ADDRESS":"2 MASSACHUSETTS AVENUE NE","NAME":"NATIONAL POSTAL MUSEUM","ADDRESS_ID":293217,"LEGALNAME":"BEAD SOCIETY OF GREATER WASHINGTON","ALTNAME":"NATIONAL POSTAL MUSEUM","WEBURL":"HTTP://POSTALMUSEUM.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.00819124512859,38.8981463599396]}},{"type":"Feature","properties":{"OBJECTID":42,"ADDRESS":"1519 MONROE STREET NW","NAME":"POWHATAN MUSEUM","ADDRESS_ID":234557,"LEGALNAME":"AMERICAN UNIVERSITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.powhatanmuseum.com/"},"geometry":{"type":"Point","coordinates":[-77.03550660261739,38.93243814726252]}},{"type":"Feature","properties":{"OBJECTID":43,"ADDRESS":"144 CONSTITUTION AVENUE NE","NAME":"SEWALL-BELMONT HOUSE AND MUSEUM","ADDRESS_ID":286201,"LEGALNAME":"AMERICAN MUSEUM OF PEACE INC","ALTNAME":" ","WEBURL":"HTTP://WWW.SEWALLBELMONT.ORG"},"geometry":{"type":"Point","coordinates":[-77.00375845550963,38.89219466787653]}},{"type":"Feature","properties":{"OBJECTID":44,"ADDRESS":"802 MASSACHUSETTS AVENUE NE","NAME":"SHOOK MUSEUM FOUNDATION","ADDRESS_ID":79669,"LEGALNAME":"GREENPEACE FUND","ALTNAME":" ","WEBURL":"SHOOKMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-76.9944246526475,38.891834530779185]}},{"type":"Feature","properties":{"OBJECTID":45,"ADDRESS":"1400 CONSTITUTION AVENUE NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","ADDRESS_ID":310702,"LEGALNAME":"B'NAI B'RITH KLUTZNICK MUSEUM","ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","WEBURL":"http://www.mnh.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02591603234607,38.89121850995097]}},{"type":"Feature","properties":{"OBJECTID":46,"ADDRESS":"500 HOWARD PLACE NW","NAME":"HOWARD UNIVERSITY MUSEUM","ADDRESS_ID":243398,"LEGALNAME":"COLLECTONS STRIES AMRCN MSLIMS","ALTNAME":" ","WEBURL":"http://www.coas.howard.edu/msrc/museum.html"},"geometry":{"type":"Point","coordinates":[-77.0196991986925,38.922360224748935]}},{"type":"Feature","properties":{"OBJECTID":47,"ADDRESS":"8TH STREET NW AND F ST NW","NAME":"NATIONAL PORTRAIT GALLERY","ADDRESS_ID":294248,"LEGALNAME":"BOHEMIA ARTS","ALTNAME":"NATIONAL PORTRAIT GALLERY","WEBURL":"HTTP://WWW.NPG.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.02295571583119,38.89815890118559]}},{"type":"Feature","properties":{"OBJECTID":48,"ADDRESS":"14TH STREET NW AND CONSTITUTION AVENUE NW","NAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ADDRESS_ID":903110,"LEGALNAME":"AMERICANS FOR BATTLEFIELD PRESERVATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","WEBURL":"HTTP://WWW.NMAAHC.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.03271597832732,38.89119983415094]}},{"type":"Feature","properties":{"OBJECTID":49,"ADDRESS":"4TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AMERICAN INDIAN","ADDRESS_ID":294429,"LEGALNAME":"BLAIR HOUSE RESTORATION FUND","ALTNAME":" ","WEBURL":"WWW.NMAI.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.01672595283219,38.88826561652]}},{"type":"Feature","properties":{"OBJECTID":50,"ADDRESS":"6TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL AIR AND SPACE MUSEUM","ADDRESS_ID":301565,"LEGALNAME":"BETHUNE MEMORIAL MUSEUM","ALTNAME":"NATIONAL AIR AND SPACE MUSEUM","WEBURL":"HTTP://WWW.NASM.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.01979999825605,38.888161175521944]}},{"type":"Feature","properties":{"OBJECTID":51,"ADDRESS":"7THB STREET AND INDEPENDENCE AVENUE SW","NAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","ADDRESS_ID":294428,"LEGALNAME":"D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES","ALTNAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","WEBURL":"HTTP://HIRSHHORN.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02294902891254,38.88843565656003]}},{"type":"Feature","properties":{"OBJECTID":52,"ADDRESS":"MADISON DRIVE NW AND 12TH STREET NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","ADDRESS_ID":293200,"LEGALNAME":null,"ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","WEBURL":"HTTP://AMERICANHISTORY.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.03005156534492,38.89123181993075]}},{"type":"Feature","properties":{"OBJECTID":53,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - EAST BUILDING","ADDRESS_ID":293209,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html"},"geometry":{"type":"Point","coordinates":[-77.01668919569053,38.89125721273486]}},{"type":"Feature","properties":{"OBJECTID":54,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - WEST BUILDING","ADDRESS_ID":293249,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html"},"geometry":{"type":"Point","coordinates":[-77.01989150273015,38.891313914429645]}},{"type":"Feature","properties":{"OBJECTID":55,"ADDRESS":"1000 JEFFERSON DRIVE SW","NAME":"SMITHSONIAN INSTITUTION - CASTLE","ADDRESS_ID":293187,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.si.edu/Museums/smithsonian-institution-building"},"geometry":{"type":"Point","coordinates":[-77.02597189316775,38.88879577572046]}},{"type":"Feature","properties":{"OBJECTID":56,"ADDRESS":"1050 INDEPENDENCE AVENUE SW","NAME":"SACKLER GALLERY","ADDRESS_ID":293191,"LEGALNAME":"ARTHUR M. SACKLER GALLERY","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02645343758842,38.88796502751886]}},{"type":"Feature","properties":{"OBJECTID":57,"ADDRESS":"JEFFERSON DRIVE SW AND 12TH STREET SW","NAME":"FREER GALLERY","ADDRESS_ID":294417,"LEGALNAME":"FREER GALLERY OF ART","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02736845485786,38.8882746680144]}}]} \ No newline at end of file diff --git a/content/data/bar.vl.json b/content/data/bar.vl.json deleted file mode 100644 index f5b7b37..0000000 --- a/content/data/bar.vl.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "data": { - "values": [ - { - "a": "A", - "b": 28 - }, - { - "a": "B", - "b": 55 - }, - { - "a": "C", - "b": 43 - }, - { - "a": "D", - "b": 91 - }, - { - "a": "E", - "b": 81 - }, - { - "a": "F", - "b": 53 - }, - { - "a": "G", - "b": 19 - }, - { - "a": "H", - "b": 87 - }, - { - "a": "I", - "b": 52 - } - ] - }, - "description": "A simple bar chart with embedded data.", - "encoding": { - "x": { - "field": "a", - "type": "ordinal" - }, - "y": { - "field": "b", - "type": "quantitative" - } - }, - "mark": "bar" -} diff --git a/content/data/fasta-example.fasta b/content/data/fasta-example.fasta deleted file mode 100644 index cfcbad5..0000000 --- a/content/data/fasta-example.fasta +++ /dev/null @@ -1,8 +0,0 @@ ->SEQUENCE_1 -MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG -LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK -IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL -MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL ->SEQUENCE_2 -SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI -ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH \ No newline at end of file diff --git a/content/data/iris.csv b/content/data/iris.csv deleted file mode 100644 index 43ff582..0000000 --- a/content/data/iris.csv +++ /dev/null @@ -1,151 +0,0 @@ -sepal_length,sepal_width,petal_length,petal_width,species -5.1,3.5,1.4,0.2,se -4.9,3,1.4,0.2,setosa -4.7,3.2,1.3,0.2,setosa -4.6,3.1,1.5,0.2,setosa -5,3.6,1.4,0.2,setosa -5.4,3.9,1.7,0.4,setosa -4.6,3.4,1.4,0.3,setosa -5,3.4,1.5,0.2,setosa -4.4,2.9,1.4,0.2,setosa -4.9,3.1,1.5,0.1,setosa -5.4,3.7,1.5,0.2,setosa -4.8,3.4,1.6,0.2,setosa -4.8,3,1.4,0.1,setosa -4.3,3,1.1,0.1,setosa -5.8,4,1.2,0.2,setosa -5.7,4.4,1.5,0.4,setosa -5.4,3.9,1.3,0.4,setosa -5.1,3.5,1.4,0.3,setosa -5.7,3.8,1.7,0.3,setosa -5.1,3.8,1.5,0.3,setosa -5.4,3.4,1.7,0.2,setosa -5.1,3.7,1.5,0.4,setosa -4.6,3.6,1,0.2,setosa -5.1,3.3,1.7,0.5,setosa -4.8,3.4,1.9,0.2,setosa -5,3,1.6,0.2,setosa -5,3.4,1.6,0.4,setosa -5.2,3.5,1.5,0.2,setosa -5.2,3.4,1.4,0.2,setosa -4.7,3.2,1.6,0.2,setosa -4.8,3.1,1.6,0.2,setosa -5.4,3.4,1.5,0.4,setosa -5.2,4.1,1.5,0.1,setosa -5.5,4.2,1.4,0.2,setosa -4.9,3.1,1.5,0.1,setosa -5,3.2,1.2,0.2,setosa -5.5,3.5,1.3,0.2,setosa -4.9,3.1,1.5,0.1,setosa -4.4,3,1.3,0.2,setosa -5.1,3.4,1.5,0.2,setosa -5,3.5,1.3,0.3,setosa -4.5,2.3,1.3,0.3,setosa -4.4,3.2,1.3,0.2,setosa -5,3.5,1.6,0.6,setosa -5.1,3.8,1.9,0.4,setosa -4.8,3,1.4,0.3,setosa -5.1,3.8,1.6,0.2,setosa -4.6,3.2,1.4,0.2,setosa -5.3,3.7,1.5,0.2,setosa -5,3.3,1.4,0.2,setosa -7,3.2,4.7,1.4,versicolor -6.4,3.2,4.5,1.5,versicolor -6.9,3.1,4.9,1.5,versicolor -5.5,2.3,4,1.3,versicolor -6.5,2.8,4.6,1.5,versicolor -5.7,2.8,4.5,1.3,versicolor -6.3,3.3,4.7,1.6,versicolor -4.9,2.4,3.3,1,versicolor -6.6,2.9,4.6,1.3,versicolor -5.2,2.7,3.9,1.4,versicolor -5,2,3.5,1,versicolor -5.9,3,4.2,1.5,versicolor -6,2.2,4,1,versicolor -6.1,2.9,4.7,1.4,versicolor -5.6,2.9,3.6,1.3,versicolor -6.7,3.1,4.4,1.4,versicolor -5.6,3,4.5,1.5,versicolor -5.8,2.7,4.1,1,versicolor -6.2,2.2,4.5,1.5,versicolor -5.6,2.5,3.9,1.1,versicolor -5.9,3.2,4.8,1.8,versicolor -6.1,2.8,4,1.3,versicolor -6.3,2.5,4.9,1.5,versicolor -6.1,2.8,4.7,1.2,versicolor -6.4,2.9,4.3,1.3,versicolor -6.6,3,4.4,1.4,versicolor -6.8,2.8,4.8,1.4,versicolor -6.7,3,5,1.7,versicolor -6,2.9,4.5,1.5,versicolor -5.7,2.6,3.5,1,versicolor -5.5,2.4,3.8,1.1,versicolor -5.5,2.4,3.7,1,versicolor -5.8,2.7,3.9,1.2,versicolor -6,2.7,5.1,1.6,versicolor -5.4,3,4.5,1.5,versicolor -6,3.4,4.5,1.6,versicolor -6.7,3.1,4.7,1.5,versicolor -6.3,2.3,4.4,1.3,versicolor -5.6,3,4.1,1.3,versicolor -5.5,2.5,4,1.3,versicolor -5.5,2.6,4.4,1.2,versicolor -6.1,3,4.6,1.4,versicolor -5.8,2.6,4,1.2,versicolor -5,2.3,3.3,1,versicolor -5.6,2.7,4.2,1.3,versicolor -5.7,3,4.2,1.2,versicolor -5.7,2.9,4.2,1.3,versicolor -6.2,2.9,4.3,1.3,versicolor -5.1,2.5,3,1.1,versicolor -5.7,2.8,4.1,1.3,versicolor -6.3,3.3,6,2.5,virginica -5.8,2.7,5.1,1.9,virginica -7.1,3,5.9,2.1,virginica -6.3,2.9,5.6,1.8,virginica -6.5,3,5.8,2.2,virginica -7.6,3,6.6,2.1,virginica -4.9,2.5,4.5,1.7,virginica -7.3,2.9,6.3,1.8,virginica -6.7,2.5,5.8,1.8,virginica -7.2,3.6,6.1,2.5,virginica -6.5,3.2,5.1,2,virginica -6.4,2.7,5.3,1.9,virginica -6.8,3,5.5,2.1,virginica -5.7,2.5,5,2,virginica -5.8,2.8,5.1,2.4,virginica -6.4,3.2,5.3,2.3,virginica -6.5,3,5.5,1.8,virginica -7.7,3.8,6.7,2.2,virginica -7.7,2.6,6.9,2.3,virginica -6,2.2,5,1.5,virginica -6.9,3.2,5.7,2.3,virginica -5.6,2.8,4.9,2,virginica -7.7,2.8,6.7,2,virginica -6.3,2.7,4.9,1.8,virginica -6.7,3.3,5.7,2.1,virginica -7.2,3.2,6,1.8,virginica -6.2,2.8,4.8,1.8,virginica -6.1,3,4.9,1.8,virginica -6.4,2.8,5.6,2.1,virginica -7.2,3,5.8,1.6,virginica -7.4,2.8,6.1,1.9,virginica -7.9,3.8,6.4,2,virginica -6.4,2.8,5.6,2.2,virginica -6.3,2.8,5.1,1.5,virginica -6.1,2.6,5.6,1.4,virginica -7.7,3,6.1,2.3,virginica -6.3,3.4,5.6,2.4,virginica -6.4,3.1,5.5,1.8,virginica -6,3,4.8,1.8,virginica -6.9,3.1,5.4,2.1,virginica -6.7,3.1,5.6,2.4,virginica -6.9,3.1,5.1,2.3,virginica -5.8,2.7,5.1,1.9,virginica -6.8,3.2,5.9,2.3,virginica -6.7,3.3,5.7,2.5,virginica -6.7,3,5.2,2.3,virginica -6.3,2.5,5,1.9,virginica -6.5,3,5.2,2,virginica -6.2,3.4,5.4,2.3,virginica -5.9,3,5.1,1.8,virginica diff --git a/content/data/matplotlib.png b/content/data/matplotlib.png deleted file mode 100644 index a7fcb1d03f3ee020033c74fee4d808b660ed3582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26389 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 nn}7WMAMJ(z58wR90`KoNq5IX% {\n console.log('done');\n}, delay);", - "metadata": { - "trusted": true - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "source": "var str = \"hello world\"\nstr.split('').forEach(c => {\n console.log(c)\n})", - "metadata": { - "trusted": true - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": "## Markdown cells", - "metadata": {} - }, - { - "cell_type": "markdown", - "source": "Lorenz system of differential equations\n\n$$\n\\begin{aligned}\n\\dot{x} & = \\sigma(y-x) \\\\\n\\dot{y} & = \\rho x - y - xz \\\\\n\\dot{z} & = -\\beta z + xy\n\\end{aligned}\n$$\n", - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/content/p5.ipynb b/content/p5.ipynb deleted file mode 100644 index 78be9cb..0000000 --- a/content/p5.ipynb +++ /dev/null @@ -1,150 +0,0 @@ -{ - "metadata":{ - "kernelspec":{ - "name":"p5js", - "display_name":"p5.js", - "language":"javascript" - }, - "language_info":{ - "codemirror_mode":{ - "name":"javascript" - }, - "file_extension":".js", - "mimetype":"text/javascript", - "name":"p5js", - "nbconvert_exporter":"javascript", - "pygments_lexer":"javascript", - "version":"es2017" - } - }, - "nbformat_minor":4, - "nbformat":4, - "cells":[ - { - "cell_type":"markdown", - "source":"# p5 notebook\n\nA minimal Jupyter notebook UI for [p5.js](https://p5js.org) kernels.", - "metadata":{ - - } - }, - { - "cell_type":"markdown", - "source":"First let's define a couple of variables:", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"var n = 4;\nvar speed = 1;", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"markdown", - "source":"## The `setup` function\n\nThe usual p5 setup function, which creates the canvas.", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"function setup () {\n createCanvas(innerWidth, innerHeight);\n rectMode(CENTER);\n}", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"markdown", - "source":"## The `draw` function\n\nFrom the [p5.js documentation](https://p5js.org/reference/#/p5/draw):\n\n> The `draw()` function continuously executes the lines of code contained inside its block until the program is stopped or `noLoop()` is called.", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"function draw() {\n background('#ddd');\n translate(innerWidth / 2, innerHeight / 2);\n for (let i = 0; i < n; i++) {\n push();\n rotate(frameCount * speed / 1000 * (i + 1));\n fill(i * 5, i * 100, i * 150);\n const s = 200 - i * 10;\n rect(0, 0, s, s);\n pop();\n }\n}", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"markdown", - "source":"## Show the sketch\n\nNow let's show the sketch by using the `%show` magic:", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"%show", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"markdown", - "source":"## Tweak the values\n\nWe can also tweak some values in real time:", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"speed = 3", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"code", - "source":"n = 20", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - }, - { - "cell_type":"markdown", - "source":"We can also show the sketch a second time taking into account the new values:", - "metadata":{ - - } - }, - { - "cell_type":"code", - "source":"%show", - "metadata":{ - "trusted":true - }, - "execution_count":null, - "outputs":[ - - ] - } - ] -} \ No newline at end of file diff --git a/content/pyodide/altair.ipynb b/content/pyodide/altair.ipynb deleted file mode 100644 index d7b8780..0000000 --- a/content/pyodide/altair.ipynb +++ /dev/null @@ -1,231 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Altair in `JupyterLite`\n", - "\n", - "**Altair** is a declarative statistical visualization library for Python.\n", - "\n", - "Most of the examples below are from: https://altair-viz.github.io/gallery" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Import the dependencies:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%pip install -q altair" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple Bar Chart" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "import pandas as pd\n", - "\n", - "source = pd.DataFrame({\n", - " 'a': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n", - " 'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]\n", - "})\n", - "\n", - "alt.Chart(source).mark_bar().encode(\n", - " x='a',\n", - " y='b'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple Heatmap" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "# Compute x^2 + y^2 across a 2D grid\n", - "x, y = np.meshgrid(range(-5, 5), range(-5, 5))\n", - "z = x ** 2 + y ** 2\n", - "\n", - "# Convert this grid to columnar data expected by Altair\n", - "source = pd.DataFrame({'x': x.ravel(),\n", - " 'y': y.ravel(),\n", - " 'z': z.ravel()})\n", - "\n", - "alt.Chart(source).mark_rect().encode(\n", - " x='x:O',\n", - " y='y:O',\n", - " color='z:Q'\n", - ")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install the Vega Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%pip install -q vega_datasets" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Interactive Average" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "from vega_datasets import data\n", - "\n", - "source = data.seattle_weather()\n", - "brush = alt.selection(type='interval', encodings=['x'])\n", - "\n", - "bars = alt.Chart().mark_bar().encode(\n", - " x='month(date):O',\n", - " y='mean(precipitation):Q',\n", - " opacity=alt.condition(brush, alt.OpacityValue(1), alt.OpacityValue(0.7)),\n", - ").add_selection(\n", - " brush\n", - ")\n", - "\n", - "line = alt.Chart().mark_rule(color='firebrick').encode(\n", - " y='mean(precipitation):Q',\n", - " size=alt.SizeValue(3)\n", - ").transform_filter(\n", - " brush\n", - ")\n", - "\n", - "alt.layer(bars, line, data=source)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Locations of US Airports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "from vega_datasets import data\n", - "\n", - "airports = data.airports.url\n", - "states = alt.topo_feature(data.us_10m.url, feature='states')\n", - "\n", - "# US states background\n", - "background = alt.Chart(states).mark_geoshape(\n", - " fill='lightgray',\n", - " stroke='white'\n", - ").properties(\n", - " width=500,\n", - " height=300\n", - ").project('albersUsa')\n", - "\n", - "# airport positions on background\n", - "points = alt.Chart(airports).transform_aggregate(\n", - " latitude='mean(latitude)',\n", - " longitude='mean(longitude)',\n", - " count='count()',\n", - " groupby=['state']\n", - ").mark_circle().encode(\n", - " longitude='longitude:Q',\n", - " latitude='latitude:Q',\n", - " size=alt.Size('count:Q', title='Number of Airports'),\n", - " color=alt.value('steelblue'),\n", - " tooltip=['state:N','count:Q']\n", - ").properties(\n", - " title='Number of airports in US'\n", - ")\n", - "\n", - "background + points\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/folium.ipynb b/content/pyodide/folium.ipynb deleted file mode 100644 index 2828de0..0000000 --- a/content/pyodide/folium.ipynb +++ /dev/null @@ -1,154 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "# `folium` Interactive Map Demo\n", - "\n", - "Simple demonstration of rendering a map in a `jupyterlite` notebook.\n", - "\n", - "Note that the `folium` package has several dependencies which themselves may have dependencies.\n", - "\n", - "The following code fragement, run in a fresh Python enviroment into which `folium` has already been installed, identifies the packages that are loaded in when `folium` is loaded:\n", - "\n", - "```python\n", - "#https://stackoverflow.com/a/40381601/454773\n", - "import sys\n", - "before = [str(m) for m in sys.modules]\n", - "import folium\n", - "after = [str(m) for m in sys.modules]\n", - "set([m.split('.')[0] for m in after if not m in before and not m.startswith('_')])\n", - "```\n", - "\n", - "The loaded packages are:\n", - "\n", - "```\n", - "{'branca',\n", - " 'certifi',\n", - " 'chardet',\n", - " 'cmath',\n", - " 'csv',\n", - " 'dateutil',\n", - " 'encodings',\n", - " 'folium',\n", - " 'gzip',\n", - " 'http',\n", - " 'idna',\n", - " 'importlib',\n", - " 'jinja2',\n", - " 'markupsafe',\n", - " 'mmap',\n", - " 'numpy',\n", - " 'pandas',\n", - " 'pkg_resources',\n", - " 'pytz',\n", - " 'requests',\n", - " 'secrets',\n", - " 'stringprep',\n", - " 'urllib3',\n", - " 'zipfile'}\n", - " ```\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following packages seem to need installing in order load `folium`, along with folium itself:\n", - "\n", - "```\n", - "chardet, certifi, idna, branca, urllib3, Jinja2, requests, Markupsafe\n", - "```\n", - "\n", - "Universal wheels, with filenames of the form `PACKAGE-VERSION-py2.py3-none-any.whl` appearing in the *Download files* area of a PyPi package page ([example](https://pypi.org/project/requests/#files)] are required in order to install the package.\n", - "\n", - "One required package, [`Markupsafe`](https://pypi.org/project/Markupsafe/#files)) *did not* have a universal wheel available, so a wheel was manually built elsewhere (by hacking the [`setup.py` file](https://github.com/pallets/markupsafe/blob/main/setup.py) to force it to build the wheel in a platform and speedup free way) and pushed to a downloadable location in an [*ad hoc* wheelhouse](https://opencomputinglab.github.io/vce-wheelhouse/)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "# Install folium requirements\n", - "%pip install -q folium" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Demo of `folium` Map\n", - "\n", - "Load in the `folium` package:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import folium" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And render a demo map:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "m = folium.Map(location=[50.693848, -1.304734], zoom_start=11)\n", - "m" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/interactive-widgets.ipynb b/content/pyodide/interactive-widgets.ipynb deleted file mode 100644 index 267273d..0000000 --- a/content/pyodide/interactive-widgets.ipynb +++ /dev/null @@ -1,268 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9ca234f7-84b7-4107-9bcd-74f5a4ffd07d", - "metadata": {}, - "source": [ - "# `ipywidgets` Interactive Demo\n", - "\n", - "Simple demonstration of rendering Interactive widgets in a `jupyterlite` notebook.\n", - "\n", - "`ipywidgets` can be installed in this deployment (it provides the @jupyter-widgets/jupyterlab-manager federated extension), but you will need to make your own deployment to have access to other interactive widgets libraries." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d62fba6e", - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -q ipywidgets" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3bab23f8-de91-43c9-9cec-84f4924425fc", - "metadata": {}, - "outputs": [], - "source": [ - "from ipywidgets import IntSlider" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a15c5acb-ee72-4005-8761-5693db853f22", - "metadata": {}, - "outputs": [], - "source": [ - "slider = IntSlider()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8ba89682-e0d7-4bd2-961a-f9956850fd5a", - "metadata": {}, - "outputs": [], - "source": [ - "slider" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50510ade-668f-4477-8cb2-41574609ac73", - "metadata": {}, - "outputs": [], - "source": [ - "slider" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7bac1ed8-8c77-426b-a781-1c1a6cfad829", - "metadata": {}, - "outputs": [], - "source": [ - "slider.value" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "976a70a0-e99d-4c20-b005-f59bbba10f85", - "metadata": {}, - "outputs": [], - "source": [ - "slider.value = 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3134c76e-cffb-4701-8230-e6c4bfbbfdb9", - "metadata": {}, - "outputs": [], - "source": [ - "from ipywidgets import IntText, link" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f7b3fe0a-5695-4ef2-a573-40785e68fbae", - "metadata": {}, - "outputs": [], - "source": [ - "text = IntText()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5e2fd50e-19e0-4e20-a1f7-ad65400ec636", - "metadata": {}, - "outputs": [], - "source": [ - "text" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb3bedce-7311-48c0-aeab-8fe3aa554b92", - "metadata": {}, - "outputs": [], - "source": [ - "link((slider, 'value'), (text, 'value'));" - ] - }, - { - "cell_type": "markdown", - "id": "71b68c3e-184e-4320-9513-d0bc72800a85", - "metadata": {}, - "source": [ - "# `bqplot` Interactive Demo\n", - "\n", - "Plotting in JupyterLite\n", - "\n", - "`bqplot` can be installed in this deployment (it provides the bqplot federated extension), but you will need to make your own deployment to have access to other interactive widgets libraries." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "119eb9a3-ac98-42c3-98d4-1ac460eb75d3", - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -q bqplot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23b32857-2958-4083-b16a-ac26cd2408d4", - "metadata": {}, - "outputs": [], - "source": [ - "from bqplot import *\n", - "\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "np.random.seed(0)\n", - "\n", - "n = 100\n", - "\n", - "x = list(range(n))\n", - "y = np.cumsum(np.random.randn(n)) + 100.\n", - "\n", - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "\n", - "lines = Lines(\n", - " x=x, y=y,\n", - " scales={'x': sc_x, 'y': sc_y}\n", - ")\n", - "ax_x = Axis(scale=sc_x, label='Index')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='lines')\n", - "\n", - "Figure(marks=[lines], axes=[ax_x, ax_y], title='Lines')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ddb6b44e-06a0-4049-a79d-33ffc90d5a03", - "metadata": {}, - "outputs": [], - "source": [ - "lines.colors = ['green']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e367e7fb-b403-41aa-9629-224827ec3005", - "metadata": {}, - "outputs": [], - "source": [ - "lines.fill = 'bottom'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d4a167f3-07c4-4880-92f5-7fcdea0c61c6", - "metadata": {}, - "outputs": [], - "source": [ - "lines.marker = 'circle'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1d1342f7-ec08-4f53-84dc-d712226d9e46", - "metadata": {}, - "outputs": [], - "source": [ - "n = 100\n", - "\n", - "x = list(range(n))\n", - "y = np.cumsum(np.random.randn(n))\n", - "\n", - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "\n", - "bars = Bars(\n", - " x=x, y=y,\n", - " scales={'x': sc_x, 'y': sc_y}\n", - ")\n", - "ax_x = Axis(scale=sc_x, label='Index')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='bars')\n", - "\n", - "Figure(marks=[bars], axes=[ax_x, ax_y], title='Bars', animation_duration=1000)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f86bbcfb-5b02-4700-b8d6-f90068893b55", - "metadata": {}, - "outputs": [], - "source": [ - "bars.y = np.cumsum(np.random.randn(n))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/ipycanvas.ipynb b/content/pyodide/ipycanvas.ipynb deleted file mode 100644 index 33e1b9a..0000000 --- a/content/pyodide/ipycanvas.ipynb +++ /dev/null @@ -1,178 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ipycanvas: John Conway's Game Of Life" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Some of the following code is adapted from https://jakevdp.github.io/blog/2013/08/07/conways-game-of-life/" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%pip install -q ipycanvas" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import asyncio\n", - "\n", - "import numpy as np\n", - "\n", - "from ipycanvas import RoughCanvas, hold_canvas" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "def life_step(x):\n", - " \"\"\"Game of life step\"\"\"\n", - " nbrs_count = sum(np.roll(np.roll(x, i, 0), j, 1)\n", - " for i in (-1, 0, 1) for j in (-1, 0, 1)\n", - " if (i != 0 or j != 0))\n", - " return (nbrs_count == 3) | (x & (nbrs_count == 2))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "def draw(x, canvas, color='black'):\n", - " with hold_canvas(canvas):\n", - " canvas.clear()\n", - " canvas.fill_style = '#FFF0C9'\n", - " canvas.rough_fill_style = 'solid'\n", - " canvas.fill_rect(-10, -10, canvas.width + 10, canvas.height + 10)\n", - " canvas.rough_fill_style = 'cross-hatch'\n", - "\n", - " canvas.fill_style = color\n", - " canvas.stroke_style = color\n", - "\n", - " living_cells = np.where(x)\n", - " \n", - " rects_x = living_cells[1] * n_pixels\n", - " rects_y = living_cells[0] * n_pixels\n", - "\n", - " canvas.fill_rects(rects_x, rects_y, n_pixels)\n", - " canvas.stroke_rects(rects_x, rects_y, n_pixels)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "glider_gun =\\\n", - "[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],\n", - " [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],\n", - " [0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],\n", - " [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],\n", - " [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n", - " [1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0],\n", - " [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],\n", - " [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n", - " [0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]\n", - "\n", - "x = np.zeros((50, 70), dtype=bool)\n", - "x[1:10,1:37] = glider_gun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "n_pixels = 15\n", - "\n", - "canvas = RoughCanvas(width=x.shape[1]*n_pixels, height=x.shape[0]*n_pixels)\n", - "canvas.fill_style = '#FFF0C9'\n", - "canvas.rough_fill_style = 'solid'\n", - "canvas.fill_rect(0, 0, canvas.width, canvas.height)\n", - "\n", - "canvas" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "draw(x, canvas, '#5770B3')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "for _ in range(300):\n", - " x = life_step(x)\n", - " draw(x, canvas, '#5770B3')\n", - "\n", - " await asyncio.sleep(0.1)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/ipyleaflet.ipynb b/content/pyodide/ipyleaflet.ipynb deleted file mode 100644 index 64dcff2..0000000 --- a/content/pyodide/ipyleaflet.ipynb +++ /dev/null @@ -1,259 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -q bqplot ipyleaflet" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from urllib.request import urlopen\n", - "import json\n", - "from datetime import datetime\n", - "\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "from js import fetch\n", - "\n", - "from ipywidgets import Dropdown\n", - "\n", - "from bqplot import Lines, Figure, LinearScale, DateScale, Axis\n", - "\n", - "from ipyleaflet import Map, GeoJSON, WidgetControl" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "URL = \"https://raw.githubusercontent.com/jupyter-widgets/ipyleaflet/master/examples/nations.json\"\n", - "\n", - "res = await fetch(URL)\n", - "text = await res.text()\n", - "\n", - "data = pd.read_json(text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def clean_data(data):\n", - " for column in ['income', 'lifeExpectancy', 'population']:\n", - " data = data.drop(data[data[column].apply(len) <= 4].index)\n", - " return data\n", - "\n", - "def extrap_interp(data):\n", - " data = np.array(data)\n", - " x_range = np.arange(1800, 2009, 1.)\n", - " y_range = np.interp(x_range, data[:, 0], data[:, 1])\n", - " return y_range\n", - "\n", - "def extrap_data(data):\n", - " for column in ['income', 'lifeExpectancy', 'population']:\n", - " data[column] = data[column].apply(extrap_interp)\n", - " return data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data = clean_data(data)\n", - "data = extrap_data(data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "date_start = datetime(1800, 12, 31)\n", - "date_end = datetime(2009, 12, 31)\n", - "\n", - "date_scale = DateScale(min=date_start, max=date_end)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "date_data = pd.date_range(start=date_start, end=date_end, freq='A', normalize=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "country_name = 'Angola'\n", - "data_name = 'income'\n", - "\n", - "x_data = data[data.name == country_name][data_name].values[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x_scale = LinearScale()\n", - "\n", - "lines = Lines(x=date_data, y=x_data, scales={'x': date_scale, 'y': x_scale})\n", - "\n", - "ax_x = Axis(label='Year', scale=date_scale, num_ticks=10, tick_format='%Y')\n", - "ax_y = Axis(label=data_name.capitalize(), scale=x_scale, orientation='vertical', side='left')\n", - "\n", - "figure = Figure(axes=[ax_x, ax_y], title=country_name, marks=[lines], animation_duration=500,\n", - " layout={'max_height': '250px', 'max_width': '400px'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def update_figure(country_name, data_name):\n", - " try:\n", - " lines.y = data[data.name == country_name][data_name].values[0]\n", - " ax_y.label = data_name.capitalize()\n", - " figure.title = country_name\n", - " except IndexError:\n", - " pass" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "URL = \"https://raw.githubusercontent.com/jupyter-widgets/ipyleaflet/master/examples/countries.geo.json\"\n", - "\n", - "res = await fetch(URL)\n", - "text = await res.text()\n", - "\n", - "countries = json.loads(text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "m = Map(zoom=3)\n", - "\n", - "geo = GeoJSON(data=countries, style={'fillColor': 'white', 'weight': 0.5}, hover_style={'fillColor': '#1f77b4'}, name='Countries')\n", - "m.add_layer(geo)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "widget_control1 = WidgetControl(widget=figure, position='bottomright')\n", - "\n", - "m.add_control(widget_control1)\n", - "\n", - "def on_hover(event, feature, **kwargs):\n", - " global country_name\n", - "\n", - " country_name = feature['properties']['name']\n", - " update_figure(country_name, data_name)\n", - "\n", - "geo.on_hover(on_hover)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dropdown = Dropdown(\n", - " options=['income', 'population', 'lifeExpectancy'],\n", - " value=data_name,\n", - " description='Plotting:'\n", - ")\n", - "\n", - "def on_click(change):\n", - " global data_name\n", - "\n", - " data_name = change['new']\n", - " update_figure(country_name, data_name)\n", - "\n", - "dropdown.observe(on_click, 'value')\n", - "\n", - "widget_control2 = WidgetControl(widget=dropdown, position='bottomleft')\n", - "\n", - "m.add_control(widget_control2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "m" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/matplotlib.ipynb b/content/pyodide/matplotlib.ipynb deleted file mode 100644 index c2ec2be..0000000 --- a/content/pyodide/matplotlib.ipynb +++ /dev/null @@ -1,113 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## Matplotlib" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "x = np.linspace(0, 10, 1000)\n", - "plt.plot(x, np.sin(x));" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmgklEQVR4nO3deXxTZdo+8OskaZKuKd1baKGFQtkLRUrZkQoILoy4oDgogzg6OqPCjCPvb9R3RmcYfd3GZWQYZXDfxhVUFMsOZWspe0sXoPveJt2X5Pz+yAIVKKVNcpKc6/v55A/DSXqnwsl1zvM89yOIoiiCiIiIiGRDIXUBRERERORcDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMsMASERERCQzDIBEREREMqOSugB3ZjKZUFpaCn9/fwiCIHU5RERE1AOiKKKhoQFRUVFQKOR5L4wBsA9KS0sRHR0tdRlERETUC0VFRRgwYIDUZUiCAbAP/P39AZj/AgUEBEhcDREREfWEwWBAdHS07XtcjhgA+8A67BsQEMAASERE5GbkPH1LngPfRERERDLGAEhEREQkMwyARERERDLDAEhEREQkMwyARERERDLDAEhEREQkMwyARERERDLDAEhEREQkMwyARERERDLjFgFw586duPHGGxEVFQVBEPDVV19d8TXbt2/H+PHjodFoMGTIEGzYsOGi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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## Matplotlib: support for widgets backend" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -q ipympl" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib widget" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x = np.linspace(0, 10, 1000)\n", - "plt.plot(x, np.sin(x))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/plotly.ipynb b/content/pyodide/plotly.ipynb deleted file mode 100644 index 9716bee..0000000 --- a/content/pyodide/plotly.ipynb +++ /dev/null @@ -1,158 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Plotly in JupyterLite\n", - "\n", - "`plotly.py` is an interactive, open-source, and browser-based graphing library for Python: https://plotly.com/python/" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -q nbformat plotly" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## Basic Figure" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import plotly.graph_objects as go\n", - "fig = go.Figure()\n", - "fig.add_trace(go.Scatter(y=[2, 1, 4, 3]))\n", - "fig.add_trace(go.Bar(y=[1, 4, 3, 2]))\n", - "fig.update_layout(title = 'Hello Figure')\n", - "fig.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## Basic Table with a Pandas DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import plotly.graph_objects as go\n", - "import pandas as pd\n", - "\n", - "from js import fetch\n", - "\n", - "URL = \"https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv\"\n", - "\n", - "res = await fetch(URL)\n", - "text = await res.text()\n", - "\n", - "filename = 'data.csv'\n", - "\n", - "with open(filename, 'w') as f:\n", - " f.write(text)\n", - "\n", - "df = pd.read_csv(filename)\n", - "\n", - "fig = go.Figure(data=[go.Table(\n", - " header=dict(values=list(df.columns),\n", - " fill_color='paleturquoise',\n", - " align='left'),\n", - " cells=dict(values=[df.Rank, df.State, df.Postal, df.Population],\n", - " fill_color='lavender',\n", - " align='left'))\n", - "])\n", - "\n", - "fig.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Quiver Plot with Points" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import plotly.figure_factory as ff\n", - "import plotly.graph_objects as go\n", - "\n", - "import numpy as np\n", - "\n", - "x,y = np.meshgrid(np.arange(-2, 2, .2),\n", - " np.arange(-2, 2, .25))\n", - "z = x*np.exp(-x**2 - y**2)\n", - "v, u = np.gradient(z, .2, .2)\n", - "\n", - "# Create quiver figure\n", - "fig = ff.create_quiver(x, y, u, v,\n", - " scale=.25,\n", - " arrow_scale=.4,\n", - " name='quiver',\n", - " line_width=1)\n", - "\n", - "# Add points to figure\n", - "fig.add_trace(go.Scatter(x=[-.7, .75], y=[0,0],\n", - " mode='markers',\n", - " marker_size=12,\n", - " name='points'))\n", - "\n", - "fig.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4, - "toc-showcode": false - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/pyb2d/0_tutorial.ipynb b/content/pyodide/pyb2d/0_tutorial.ipynb deleted file mode 100644 index 3772314..0000000 --- a/content/pyodide/pyb2d/0_tutorial.ipynb +++ /dev/null @@ -1,649 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "b07a3b47-2262-4135-a1d2-52e8392b44eb", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')\n" - ] - }, - { - "cell_type": "markdown", - "id": "49c3f9ea-23ce-4c5c-b3fe-44f1cecadf20", - "metadata": {}, - "source": [ - "pyb2d is imported as b2d" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dff93359-2c68-467a-9239-478a0e550a4b", - "metadata": {}, - "outputs": [], - "source": [ - "import b2d\n", - "# import pyb2d_jupyterlite_backend\n", - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "import numpy as np\n", - "import matplotlib.pylab as plt" - ] - }, - { - "cell_type": "markdown", - "id": "bc977c4e-75ee-4349-9408-650c3dcd01e0", - "metadata": {}, - "source": [ - "# Tutorial 0: A free falling body\n", - "The first step with Box2D is the creation of the world. The world is parametrized by a gravity vector." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4ff914a6-eb18-45a1-b1ed-e8ad7ab0d298", - "metadata": {}, - "outputs": [], - "source": [ - "# the world\n", - "gravity = (0, -10)\n", - "world = b2d.World(gravity)" - ] - }, - { - "cell_type": "markdown", - "id": "3afdbb2a-e694-4779-b95e-73a5b38d34b6", - "metadata": {}, - "source": [ - "Create a circle-shaped body" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "99837a63-4628-483c-8f2d-cc4aec9cb1d5", - "metadata": {}, - "outputs": [], - "source": [ - "# the body def\n", - "body_def = b2d.BodyDef()\n", - "body_def.type = b2d.BodyType.dynamic\n", - "body_def.position = (0, 0)\n", - "\n", - "# the body\n", - "body = world.create_body(body_def)\n", - "\n", - "# shape\n", - "circle_shape = b2d.CircleShape()\n", - "circle_shape.radius = 1.0\n", - "\n", - "# the fixture\n", - "fixture_def = b2d.FixtureDef()\n", - "fixture_def.shape = circle_shape\n", - "fixture_def.density = 1.0\n", - "\n", - "# create and add the fixture to the body\n", - "fixture = body.create_fixture(fixture_def)" - ] - }, - { - "cell_type": "markdown", - "id": "bf9758a6-fb6e-4f9c-b15f-783f9488cf7e", - "metadata": {}, - "source": [ - "We can now have a look at the world: We render the world st. each meter in the Box2D world will be 100 pixels in the image:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b433892-3c82-43be-a085-eda3e4279b2c", - "metadata": {}, - "outputs": [], - "source": [ - "# from b2d.plot import render_world\n", - "b2d.plot.plot_world(world, ppm=100)" - ] - }, - { - "cell_type": "markdown", - "id": "5e1db1f1-6e47-454c-9ea9-86262d7da309", - "metadata": {}, - "source": [ - "Lets run the world for a total of 5 seconds. \n", - "Usually one wants to run the world at a certain frame rate.\n", - "With the frame rate and the total time we can compute the delta for each iteration and how many steps we need" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41a232a9-a3c5-425d-9aed-d3adb90d6314", - "metadata": {}, - "outputs": [], - "source": [ - "t = 5\n", - "fps = 40\n", - "dt = 1.0 / fps\n", - "n_steps = int(t / dt + 0.5)\n", - "print(f\"t={t} fps={fps} dt={dt} n_steps={n_steps}\")" - ] - }, - { - "cell_type": "markdown", - "id": "4d458acb-6d5c-47ba-bcbf-d15ea2cf2537", - "metadata": {}, - "source": [ - "in each step we query the bodies position and velocity and store then for later plotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4e042c7b-07a7-445f-ba04-e38173b46c0f", - "metadata": {}, - "outputs": [], - "source": [ - "positions = np.zeros([n_steps, 2])\n", - "velocites = np.zeros([n_steps, 2])\n", - "timepoints = np.zeros([n_steps])\n", - "\n", - "t_elapsed = 0.0\n", - "for i in range(n_steps):\n", - "\n", - " # get the bodies center of mass\n", - " positions[i, :] = body.world_center\n", - "\n", - " # get the bodies velocity\n", - " velocites[i, :] = body.linear_velocity\n", - "\n", - " timepoints[i] = t_elapsed\n", - "\n", - " world.step(time_step=dt, velocity_iterations=1, position_iterations=1)\n", - " t_elapsed += dt" - ] - }, - { - "cell_type": "markdown", - "id": "0ec7d66c-c979-40fa-8af3-9e99873ec105", - "metadata": {}, - "source": [ - "plot the y-position against the time. We can see that the body is falling down in an accelerating way:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "434cb907-1b76-414e-bb5e-6ea32dd1f829", - "metadata": {}, - "outputs": [], - "source": [ - "plt.plot(timepoints, positions[:, 1])\n", - "plt.ylabel('y-poistion [meter]')\n", - "plt.xlabel('t [sec]')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "b7f58954-4ea1-49f9-b0b0-7df38336860d", - "metadata": {}, - "source": [ - "as expected the x position is not changing since the gravity vector is non-zero only in the x direction" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39573eed-e6c8-45bf-8e35-4251b660ce3f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plt.plot(timepoints, positions[:, 0])\n", - "plt.ylabel('x-poistion [meter]')\n", - "plt.xlabel('t [sec]')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "cdb98dc5-3bc8-4933-91a0-a1db3afb9c34", - "metadata": {}, - "source": [ - "# Tutorial 1: A falling body in a box, more pythonic\n", - "Create a world, but in a more pythonic way, and animate the world" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d58c2639-21da-490b-8dcd-205962f63dfc", - "metadata": {}, - "outputs": [], - "source": [ - "# the world\n", - "world = b2d.world(gravity=(0, -10))\n", - "\n", - "# create the dynamic body\n", - "body = world.create_dynamic_body(\n", - " position=(5, 5),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=1), density=1, restitution=0.75),\n", - ")\n", - "\n", - "# create a box\n", - "box_shape = b2d.ChainShape()\n", - "box_shape.create_loop([(0, 0), (0, 10),(10,10),(10, 0)])\n", - "box = world.create_static_body(\n", - " position=(0, 0), fixtures=b2d.fixture_def(shape=box_shape, friction=0)\n", - ")\n", - "b2d.plot.animate_world(world, ppm=20, t=10)" - ] - }, - { - "cell_type": "markdown", - "id": "10dbb85a-84b0-4820-8fb3-6108d9c0fe00", - "metadata": {}, - "source": [ - "note that when we animate that world again, the body has already been fallen" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c919702c-7c62-4d87-bf1f-df5027d72a83", - "metadata": {}, - "outputs": [], - "source": [ - "b2d.plot.animate_world(world, ppm=20, t=2)" - ] - }, - { - "cell_type": "markdown", - "id": "7322e9c5-8608-4375-81ed-766cbb2af927", - "metadata": {}, - "source": [ - "# Tutorial 2: Interactive worlds\n", - "While animating the world already is already nice, interacting with the world is even better.\n", - "pyb2d has a framwork to interact with the world for multiple backends.\n", - "This framework is called `TestbedBase` since you can \"test\" your world in an interactive way" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97cddd47-5a88-4cae-8543-cfcdf658255a", - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "\n", - "class InteractiveExample(TestbedBase):\n", - " def __init__(self, settings=None):\n", - " super(InteractiveExample, self).__init__(settings=settings)\n", - " # create two balls\n", - " body = self.world.create_dynamic_body(position=(5, 5),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=1), density=1, restitution=0.5),\n", - " )\n", - " body = self.world.create_dynamic_body(position=(8, 5),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=1), density=1, restitution=0.8),\n", - " )\n", - " # create a box\n", - " box_shape = b2d.ChainShape()\n", - " box_shape.create_loop([(0, 0), (0, 10),(10,10),(10, 0)])\n", - " box = self.world.create_static_body(\n", - " position=(0, 0), fixtures=b2d.fixture_def(shape=box_shape, friction=0)\n", - " )\n", - " \n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [300,300]\n", - "b2d.testbed.run(InteractiveExample, backend=JupyterAsyncGui, gui_settings=s);" - ] - }, - { - "cell_type": "markdown", - "id": "64bf55d1-4117-4af0-8f1f-65de33751743", - "metadata": { - "tags": [] - }, - "source": [ - "# Tutorial 3: Joints" - ] - }, - { - "cell_type": "markdown", - "id": "07147cab-23be-4406-85f7-4b3d174e3954", - "metadata": { - "tags": [] - }, - "source": [ - "## Tutorial 3.1: Prismatic Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9a2d178d-33d7-4c51-b0ff-f66c98cac673", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "anchor_body = world.create_static_body(position=(0, 0))\n", - "b = world.create_dynamic_body(\n", - " position=(10, 10),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[2, 0.5]), density=1),\n", - " linear_damping=0.0,\n", - " angular_damping=0.0,\n", - ")\n", - "world.create_prismatic_joint(anchor_body, b, local_axis_a=(1, 1))\n", - "b2d.plot.animate_world(world, ppm=20, t=3, bounding_box=((0,0),(10,10)))" - ] - }, - { - "cell_type": "markdown", - "id": "07971d69-b2ef-4d74-8c1c-48f38dcc708c", - "metadata": { - "tags": [] - }, - "source": [ - "## Tutorial 3.2: Pully Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39b7fef2-4b4b-4904-9899-1a34f1039693", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "\n", - "\n", - "a = world.create_dynamic_body(\n", - " position=(-5, 0),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[2, 0.8]), density=1),\n", - " linear_damping=0.0,\n", - " angular_damping=0.0,\n", - ")\n", - "b = world.create_dynamic_body(\n", - " position=(5, 0),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[2, 0.5]), density=1),\n", - " linear_damping=0.0,\n", - " angular_damping=0.0,\n", - ")\n", - "world.create_pully_joint(\n", - " a,\n", - " b,\n", - " length_a=10,\n", - " length_b=10,\n", - " ground_anchor_a=(-5, 10),\n", - " ground_anchor_b=(5, 10),\n", - " local_anchor_a=(0, 0),\n", - " local_anchor_b=(0, 0),\n", - ")\n", - "b2d.plot.animate_world(world, ppm=20, t=5, bounding_box=((-10,-12),(10,12)))" - ] - }, - { - "cell_type": "markdown", - "id": "7e8fb17d-1dda-45cb-98df-6b98be5b4e6c", - "metadata": {}, - "source": [ - "## Tutorial 3.3: Revolute Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2686e5f-3fa2-412d-8a40-2e9a67123d43", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "bodies = []\n", - "b = world.create_static_body(position=(0, 15))\n", - "bodies.append(b)\n", - "for i in range(5):\n", - " b = world.create_dynamic_body(\n", - " position=(i * 4 + 2, 15),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[2, 0.5]), density=1),\n", - " linear_damping=0.0,\n", - " angular_damping=0.0,\n", - " )\n", - " bodies.append(b)\n", - "world.create_revolute_joint(\n", - " bodies[0], bodies[1], local_anchor_a=(0, 0), local_anchor_b=(-2, 0.0)\n", - ")\n", - "for i in range(1, len(bodies) - 1):\n", - " a = bodies[i]\n", - " b = bodies[i + 1]\n", - " world.create_revolute_joint(a, b, local_anchor_a=(2, 0.0), local_anchor_b=(-2, 0.0))\n", - "b2d.plot.animate_world(world, ppm=20, t=5, bounding_box=((-20,-10),(20,20)))" - ] - }, - { - "cell_type": "markdown", - "id": "9caa18f0-4eb7-4e72-8445-8f6d096d9465", - "metadata": { - "tags": [] - }, - "source": [ - "## Tutorial 3.4: Weld Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3d74fb2f-7da5-4ad7-8f21-fba1f97acee2", - "metadata": {}, - "outputs": [], - "source": [ - "# the world\n", - "world = b2d.world(gravity=(0, -10))\n", - "\n", - "\n", - "bodies = []\n", - "\n", - "# create a static body as anchor\n", - "b = world.create_static_body(\n", - " position=(0, 4), fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[0.3, 0.5]))\n", - ")\n", - "bodies.append(b)\n", - "\n", - "for i in range(4):\n", - " b = world.create_dynamic_body(\n", - " position=(i + 1.0, 4),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[0.3, 0.5]), density=0.1),\n", - " linear_damping=2.5,\n", - " angular_damping=2.5,\n", - " )\n", - " bodies.append(b)\n", - "\n", - "for i in range(len(bodies) - 1):\n", - " a = bodies[i]\n", - " b = bodies[i + 1]\n", - " world.create_weld_joint(\n", - " a,\n", - " b,\n", - " local_anchor_a=(0.5, 0.5),\n", - " local_anchor_b=(-0.5, 0.5),\n", - " damping=0.1,\n", - " reference_angle=0,\n", - " stiffness=20,\n", - " )\n", - " world.create_weld_joint(\n", - " a,\n", - " b,\n", - " local_anchor_a=(0.5, -0.5),\n", - " local_anchor_b=(-0.5, -0.5),\n", - " damping=0.1,\n", - " reference_angle=0,\n", - " stiffness=20,\n", - " )\n", - "b2d.plot.animate_world(world, ppm=20, t=5, bounding_box=((0,-5),(5,5)))" - ] - }, - { - "cell_type": "markdown", - "id": "7373461e-d1fa-4ad9-aeaa-048287839fd9", - "metadata": {}, - "source": [ - "## Tutorial 3.5: Wheel Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1eb711e0-ae53-43ed-b0c1-c0a2fe42b407", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "edge = world.create_static_body(\n", - " position=(0, 0), fixtures=b2d.fixture_def(shape=b2d.edge_shape([(-20, 0), (5, 0)]))\n", - ")\n", - "\n", - "# random slope\n", - "x = np.linspace(5, 50, 10)\n", - "y = np.random.rand(10) * 4 - 2\n", - "y[0] = 0\n", - "xy = np.stack([x, y]).T\n", - "xy = np.flip(xy, axis=0)\n", - "edge = world.create_static_body(\n", - " position=(0, 0),\n", - " fixtures=b2d.fixture_def(shape=b2d.chain_shape(xy, prev_vertex=(10, 0))),\n", - ")\n", - "# create car\n", - "left_wheel = world.create_dynamic_body(\n", - " position=(-3, 2),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=2), density=1),\n", - ")\n", - "right_wheel = world.create_dynamic_body(\n", - " position=(3, 2),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=2), density=1),\n", - ")\n", - "\n", - "chasis = world.create_dynamic_body(\n", - " position=(0, 2),\n", - " fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[3, 0.5]), density=1),\n", - ")\n", - "\n", - "wheel_joint_def = dict(\n", - " stiffness=10,\n", - " enable_motor=True,\n", - " motor_speed=-100,\n", - " max_motor_torque=100,\n", - " collide_connected=False,\n", - " enable_limit=True,\n", - " lower_translation=-0.4,\n", - " upper_translation=0.4,\n", - " local_axis_a=(0, 1),\n", - ")\n", - "world.create_wheel_joint(chasis, left_wheel, local_anchor_a=(-3, 0), **wheel_joint_def)\n", - "world.create_wheel_joint(chasis, right_wheel, local_anchor_a=(3, 0), **wheel_joint_def)\n", - "\n", - "\n", - "b2d.plot.animate_world(world, ppm=20, t=15, bounding_box=((-10,-5),(20,5)))" - ] - }, - { - "cell_type": "markdown", - "id": "d9a0fffc-ae40-47ec-b185-2a6fe0dde496", - "metadata": {}, - "source": [ - "## Tutorial 3.6: Distance Joint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3c121398-f08f-4ea0-a875-de141ba53508", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "\n", - "for i in range(10):\n", - "\n", - " # create static anchor (does not need shape/fixture)\n", - " anchor = world.create_static_body(position=(i, 0))\n", - "\n", - " # 5 below the anchor\n", - " body = world.create_dynamic_body(\n", - " position=(i, -10),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=0.4), density=0.5),\n", - " )\n", - "\n", - " # distance joints of various stiffness-es\n", - " world.create_distance_joint(anchor, body, length=10, stiffness=0.5 * (i + 1))\n", - "\n", - "b2d.plot.animate_world(world, ppm=20, t=10, bounding_box=((-2,-20),(10,0)))" - ] - }, - { - "cell_type": "markdown", - "id": "fb6afaff-8236-4206-85c7-3ba2de466ba9", - "metadata": {}, - "source": [ - "# Tutorial 4: Particles" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8f5c3b83-51d9-47cb-9b73-d5f8b0e03a76", - "metadata": {}, - "outputs": [], - "source": [ - "world = b2d.world(gravity=(0, -10))\n", - "pdef = b2d.particle_system_def(radius=0.1)\n", - "psystem = world.create_particle_system(pdef)\n", - "\n", - "emitter_pos = (0, 0)\n", - "emitter_def = b2d.RandomizedLinearEmitterDef()\n", - "emitter_def.emite_rate = 400\n", - "emitter_def.lifetime = 5.1\n", - "emitter_def.size = (2, 1)\n", - "emitter_def.velocity = (6, 20)\n", - "emitter = b2d.RandomizedLinearEmitter(psystem, emitter_def)\n", - "b2d.plot.animate_world(world, ppm=20, t=10, bounding_box=((-10,-20),(20,5)), pre_step=emitter.step)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea9d7882-d3a4-45bb-b59b-cb1c9cd33990", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/pyb2d/color_mixing.ipynb b/content/pyodide/pyb2d/color_mixing.ipynb deleted file mode 100644 index 9dc274c..0000000 --- a/content/pyodide/pyb2d/color_mixing.ipynb +++ /dev/null @@ -1,123 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "import random\n", - "import numpy\n", - "import b2d\n", - "\n", - "class ColorMixing(TestbedBase):\n", - "\n", - " name = \"ColorMixing\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(ColorMixing, self).__init__(settings=settings)\n", - " dimensions = [30, 30]\n", - "\n", - " # the outer box\n", - " box_shape = b2d.ChainShape()\n", - " box_shape.create_loop(\n", - " [\n", - " (0, 0),\n", - " (0, dimensions[1]),\n", - " (dimensions[0], dimensions[1]),\n", - " (dimensions[0], 0),\n", - " ]\n", - " )\n", - " box = self.world.create_static_body(position=(0, 0), shape=box_shape)\n", - "\n", - " fixtureA = b2d.fixture_def(\n", - " shape=b2d.circle_shape(1), density=2.2, friction=0.2, restitution=0.5\n", - " )\n", - " body = self.world.create_dynamic_body(position=(13, 10), fixtures=fixtureA)\n", - "\n", - " pdef = b2d.particle_system_def(\n", - " viscous_strength=0.9,\n", - " spring_strength=0.0,\n", - " damping_strength=0.5,\n", - " pressure_strength=0.5,\n", - " color_mixing_strength=0.008,\n", - " density=2,\n", - " )\n", - " psystem = self.world.create_particle_system(pdef)\n", - " psystem.radius = 0.3\n", - " psystem.damping = 1.0\n", - "\n", - " colors = [\n", - " (255, 0, 0, 255),\n", - " (0, 255, 0, 255),\n", - " (0, 0, 255, 255),\n", - " (255, 255, 0, 255),\n", - " ]\n", - " posiitons = [(6, 10), (20, 10), (20, 20), (6, 20)]\n", - " for color, pos in zip(colors, posiitons):\n", - "\n", - " shape = b2d.polygon_shape(box=(5, 5), center=pos, angle=0)\n", - " pgDef = b2d.particle_group_def(\n", - " flags=b2d.ParticleFlag.waterParticle\n", - " | b2d.ParticleFlag.colorMixingParticle,\n", - " # group_flags=b2d.ParticleGroupFlag.solidParticleGroup,\n", - " shape=shape,\n", - " strength=1.0,\n", - " color=color,\n", - " )\n", - " group = psystem.create_particle_group(pgDef)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [1000,500]\n", - "s.scale = 8\n", - "s.fps = 40\n", - "\n", - "tb = b2d.testbed.run(ColorMixing, backend=JupyterAsyncGui, gui_settings=s)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/pyb2d/games/angry_shapes.ipynb b/content/pyodide/pyb2d/games/angry_shapes.ipynb deleted file mode 100644 index cb199ef..0000000 --- a/content/pyodide/pyb2d/games/angry_shapes.ipynb +++ /dev/null @@ -1,419 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "2859de40-f927-4790-b192-c5b0531058f7", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8ac3e93b-3e9e-4cd7-a183-0214b0dcb513", - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "import math\n", - "import numpy\n", - "import b2d\n", - "\n", - "class AngryShapes(TestbedBase):\n", - "\n", - " name = \"AngryShapes\"\n", - "\n", - " class Settings(TestbedBase.Settings):\n", - " substeps: int = 2\n", - "\n", - " def draw_segment(self, p1, p2, color, line_width=1):\n", - " screen_p1 = self._point(self.world_to_screen(p1))\n", - " screen_p2 = self._point(self.world_to_screen(p2))\n", - " screen_color = self._uint8_color(color)\n", - " screen_line_width = self._line_width(line_width)\n", - "\n", - " cv.line(self._image, screen_p1, screen_p2, screen_color, screen_line_width)\n", - "\n", - " def draw_polygon(self, vertices, color, line_width=1):\n", - " # todo add C++ function for this\n", - " screen_vertices = numpy.array(\n", - " [self._point(self.world_to_screen(v)) for v in vertices], dtype=\"int32\"\n", - " )\n", - " screen_color = self._uint8_color(color)\n", - " screen_line_width = self._line_width(line_width)\n", - "\n", - " cv.polylines(\n", - " self._image, [screen_vertices], True, screen_color, screen_line_width, 8\n", - " )\n", - "\n", - " def draw_solid_polygon(self, vertices, color):\n", - " # todo add C++ function for this\n", - " screen_vertices = numpy.array(\n", - " [self._point(self.world_to_screen(v)) for v in vertices], dtype=\"int32\"\n", - " )\n", - " screen_color = self._uint8_color(color)\n", - "\n", - " cv.fillPoly(self._image, [screen_vertices], screen_color, 8)\n", - "\n", - " def __init__(self, settings=None):\n", - " super(AngryShapes, self).__init__(settings=settings)\n", - "\n", - " self.targets = []\n", - " self.projectiles = []\n", - " self.marked_for_destruction = []\n", - " self.emitter = None\n", - "\n", - " # particle system\n", - " pdef = b2d.particle_system_def(\n", - " viscous_strength=0.9,\n", - " spring_strength=0.0,\n", - " damping_strength=100.5,\n", - " pressure_strength=1.0,\n", - " color_mixing_strength=0.05,\n", - " density=0.1,\n", - " )\n", - "\n", - " self.psystem = self.world.create_particle_system(pdef)\n", - " self.psystem.radius = 1\n", - " self.psystem.damping = 0.5\n", - "\n", - " self.build_outer_box()\n", - " self.build_castle()\n", - " self.build_launcher()\n", - " self.arm_launcher()\n", - " self.build_explosives()\n", - "\n", - " def build_outer_box(self):\n", - " # the outer box\n", - "\n", - " shape = b2d.edge_shape([(100, 0), (600, 0)])\n", - " box = self.world.create_static_body(\n", - " position=(0, 0), fixtures=b2d.fixture_def(shape=shape, friction=1)\n", - " )\n", - "\n", - " def build_target(self, pos):\n", - " t = self.world.create_dynamic_body(\n", - " position=pos,\n", - " fixtures=[\n", - " b2d.fixture_def(shape=b2d.circle_shape(radius=4), density=1.0),\n", - " b2d.fixture_def(\n", - " shape=b2d.circle_shape(radius=2, pos=(3, 3)), density=1.0\n", - " ),\n", - " b2d.fixture_def(\n", - " shape=b2d.circle_shape(radius=2, pos=(-3, 3)), density=1.0\n", - " ),\n", - " ],\n", - " linear_damping=0,\n", - " angular_damping=0,\n", - " user_data=\"target\",\n", - " )\n", - " self.targets.append(t)\n", - "\n", - " def build_castle(self):\n", - " def build_pyramid(offset, bar_shape, n):\n", - " def build_brick(pos, size):\n", - " hsize = [s / 2 for s in size]\n", - " self.world.create_dynamic_body(\n", - " position=(\n", - " pos[0] + hsize[0] + offset[0],\n", - " pos[1] + hsize[1] + offset[1],\n", - " ),\n", - " fixtures=b2d.fixture_def(\n", - " shape=b2d.polygon_shape(box=hsize), density=8\n", - " ),\n", - " user_data=\"brick\",\n", - " )\n", - "\n", - " bar_length = bar_shape[0]\n", - " bar_width = bar_shape[1]\n", - "\n", - " nxm = n\n", - " for y in range(nxm):\n", - " py = y * (bar_length + bar_width)\n", - " nx = nxm - y\n", - " for x in range(nx):\n", - " px = x * bar_length + y * (bar_length) / 2.0\n", - " if y + 1 < nxm - 1:\n", - " if x == 0:\n", - " px += bar_width / 2\n", - " if x + 1 == nx:\n", - " px -= bar_width / 2\n", - "\n", - " build_brick((px, py), (bar_width, bar_length))\n", - " if x < nx - 1:\n", - " self.build_target(\n", - " pos=(\n", - " px + offset[0] + bar_length / 2,\n", - " py + offset[1] + bar_width,\n", - " )\n", - " )\n", - " build_brick(\n", - " (px + bar_width / 2, py + bar_length),\n", - " (bar_length, bar_width),\n", - " )\n", - "\n", - " build_pyramid(offset=(100, 0), bar_shape=[40, 4], n=4)\n", - " build_pyramid(offset=(400, 0), bar_shape=[30, 3], n=4)\n", - "\n", - " def build_launcher(self):\n", - "\n", - " self.launcher_anchor_pos = (30, 0)\n", - " self.launcher_anchor = self.world.create_static_body(\n", - " position=self.launcher_anchor_pos\n", - " )\n", - "\n", - " def arm_launcher(self):\n", - " self.reload_time = None\n", - " self.is_armed = True\n", - " self.projectile_radius = 3\n", - " projectile_pos = (self.launcher_anchor_pos[0], self.launcher_anchor_pos[1] / 2)\n", - "\n", - " self.projectile = self.world.create_dynamic_body(\n", - " position=projectile_pos,\n", - " fixtures=b2d.fixture_def(\n", - " shape=b2d.circle_shape(radius=self.projectile_radius), density=100.0\n", - " ),\n", - " linear_damping=0,\n", - " angular_damping=0,\n", - " user_data=\"projectile\",\n", - " )\n", - " self.projectiles.append(self.projectile)\n", - " self.projectile_joint = self.world.create_distance_joint(\n", - " self.launcher_anchor, self.projectile, length=1, stiffness=10000\n", - " )\n", - " self.mouse_joint = None\n", - "\n", - " def build_explosives(self):\n", - " self.explosives = []\n", - "\n", - " def on_mouse_down(self, p):\n", - " if self.is_armed:\n", - " body = self.world.find_body(pos=p)\n", - " if body is not None and body.user_data is not None:\n", - " print(\"got body\")\n", - " if body.user_data == \"projectile\":\n", - " print(\"got projectile\")\n", - " kwargs = dict(\n", - " body_a=self.groundbody,\n", - " body_b=body,\n", - " target=p,\n", - " max_force=50000.0 * body.mass,\n", - " stiffness=10000.0,\n", - " )\n", - "\n", - " self.mouse_joint = self.world.create_mouse_joint(**kwargs)\n", - " body.awake = True\n", - " return True\n", - "\n", - " return False\n", - "\n", - " def on_mouse_move(self, p):\n", - " if self.is_armed:\n", - " if self.mouse_joint is not None:\n", - " self.mouse_joint.target = p\n", - " return True\n", - " return False\n", - "\n", - " def on_mouse_up(self, p):\n", - " if self.is_armed:\n", - " if self.mouse_joint is not None:\n", - " self.world.destroy_joint(self.mouse_joint)\n", - " if self.projectile_joint is not None:\n", - " self.world.destroy_joint(self.projectile_joint)\n", - " self.projectile_joint = None\n", - " self.mouse_joint = None\n", - " delta = self.launcher_anchor.position - b2d.vec2(p)\n", - " scaled_delta = delta * 50000.0\n", - " print(scaled_delta)\n", - "\n", - " self.projectile.apply_linear_impulse_to_center(scaled_delta, True)\n", - " self.reload_time = self.elapsed_time + 1.0\n", - " self.is_armed = False\n", - " return False\n", - "\n", - " def begin_contact(self, contact):\n", - " body_a = contact.body_a\n", - " body_b = contact.body_b\n", - " ud_a = body_a.user_data\n", - " ud_b = body_b.user_data\n", - " if ud_b == \"projectile\":\n", - " body_a, body_b = body_b, body_a\n", - " ud_a, ud_b = ud_b, ud_a\n", - " if ud_a == \"projectile\":\n", - "\n", - " if ud_b == \"target\" or ud_b == \"brick\":\n", - " self.marked_for_destruction.append(body_a)\n", - " emitter_def = b2d.RandomizedRadialEmitterDef()\n", - " emitter_def.emite_rate = 20000\n", - " emitter_def.lifetime = 0.7\n", - " emitter_def.enabled = True\n", - " emitter_def.inner_radius = 0.0\n", - " emitter_def.outer_radius = 1.0\n", - " emitter_def.velocity_magnitude = 1000.0\n", - " emitter_def.start_angle = 0\n", - " emitter_def.stop_angle = math.pi\n", - " emitter_def.transform = b2d.Transform(body_a.position, b2d.Rot(0))\n", - " self.emitter = b2d.RandomizedRadialEmitter(self.psystem, emitter_def)\n", - " self.emitter_die_time = self.elapsed_time + 0.02\n", - "\n", - " def pre_step(self, dt):\n", - "\n", - " if self.reload_time is not None:\n", - " if self.elapsed_time >= self.reload_time:\n", - " self.arm_launcher()\n", - "\n", - " # delete contact bodies\n", - " for body in self.marked_for_destruction:\n", - " if body in self.projectiles:\n", - " self.projectiles.remove(body)\n", - " self.world.destroy_body(body)\n", - " if body == self.projectile:\n", - " self.reload_time = self.elapsed_time + 1.0\n", - " self.marked_for_destruction = []\n", - "\n", - " # delete bodies which have fallen down\n", - " for body in self.world.bodies:\n", - " if body.position.y < -100:\n", - " if body.user_data == \"projectile\":\n", - " self.projectiles.remove(body)\n", - " if body.user_data == \"target\":\n", - " self.targets.remove(body)\n", - " self.world.destroy_body(body)\n", - "\n", - " # emmiter\n", - " if self.emitter is not None:\n", - " self.emitter.step(dt)\n", - " if self.elapsed_time >= self.emitter_die_time:\n", - " self.emitter = None\n", - "\n", - " def draw_target(self, target):\n", - " center = target.position\n", - " center_l = target.get_world_point((-3, 3))\n", - " center_r = target.get_world_point((3, 3))\n", - " eye_left = target.get_world_point((-1, 1))\n", - " eye_right = target.get_world_point((1, 1))\n", - " pink = [c / 255 for c in (248, 24, 148)]\n", - "\n", - " self.debug_draw.draw_solid_circle(\n", - " center=center, radius=4, axis=None, color=pink\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " center=center_l, radius=2, axis=None, color=pink\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " center=center_r, radius=2, axis=None, color=pink\n", - " )\n", - "\n", - " # schnautze\n", - " nose_center = target.get_world_point((0, -1))\n", - " nose_center_l = target.get_world_point((-0.3, -1))\n", - " nose_center_r = target.get_world_point((0.3, -1))\n", - "\n", - " self.debug_draw.draw_circle(\n", - " center=nose_center,\n", - " radius=2,\n", - " # axis=None,\n", - " color=(1, 1, 1),\n", - " line_width=0.2,\n", - " )\n", - " # eyes\n", - " for nose_center in [nose_center_l, nose_center_r]:\n", - " self.debug_draw.draw_solid_circle(\n", - " center=nose_center, radius=0.6, axis=None, color=(1, 1, 1)\n", - " )\n", - " # eyes\n", - " for eye_center in [eye_left, eye_right]:\n", - " self.debug_draw.draw_solid_circle(\n", - " center=eye_center, radius=1, axis=None, color=(1, 1, 1)\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " center=eye_center, radius=0.7, axis=None, color=(0, 0, 0)\n", - " )\n", - "\n", - " def draw_projectile(self, projectile):\n", - "\n", - " center = projectile.position\n", - " # center_l = target.get_world_point((-3,3))\n", - " # center_r = target.get_world_point(( 3,3))\n", - " eye_left = projectile.get_world_point((-1, 1))\n", - " eye_right = projectile.get_world_point((1, 1))\n", - "\n", - " self.debug_draw.draw_solid_circle(\n", - " center=center,\n", - " radius=self.projectile_radius * 1.1,\n", - " axis=None,\n", - " color=(1, 0, 0),\n", - " )\n", - "\n", - " # eyes\n", - " for eye_center in [eye_left, eye_right]:\n", - " self.debug_draw.draw_solid_circle(\n", - " center=eye_center, radius=1, axis=None, color=(1, 1, 1)\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " center=eye_center, radius=0.7, axis=None, color=(0, 0, 0)\n", - " )\n", - "\n", - " def post_debug_draw(self):\n", - " for target in self.targets:\n", - " self.draw_target(target)\n", - "\n", - " for projectile in self.projectiles:\n", - " self.draw_projectile(projectile)" - ] - }, - { - "cell_type": "markdown", - "id": "6df7c8b9-216b-4fd2-8ee8-aeec294e149d", - "metadata": {}, - "source": [ - "# Controlls\n", - "* To play this game, click and drag the red ball and release it to shot it.\n", - "* Use the mouse-wheel to zoom in/out, a\n", - "* Click and drag in the empty space to translate the view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "df412e76-7a9a-4e1d-8bc7-c02e222e10dc", - "metadata": {}, - "outputs": [], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [1000,500]\n", - "s.scale = 2\n", - "s.translate = [100,100]\n", - "tb = b2d.testbed.run(AngryShapes, backend=JupyterAsyncGui, gui_settings=s);" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/pyb2d/games/billiard.ipynb b/content/pyodide/pyb2d/games/billiard.ipynb deleted file mode 100644 index 13fff3a..0000000 --- a/content/pyodide/pyb2d/games/billiard.ipynb +++ /dev/null @@ -1,299 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy\n", - "import b2d\n", - "import math\n", - "import random\n", - "\n", - "from b2d.testbed import TestbedBase\n", - "\n", - "class Billiard(TestbedBase):\n", - "\n", - " name = \"Billiard\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(Billiard, self).__init__(gravity=(0, 0), settings=settings)\n", - " dimensions = [30, 50]\n", - " self.dimensions = dimensions\n", - "\n", - " # the outer box\n", - " box_shape = b2d.ChainShape()\n", - " box_shape.create_loop(\n", - " [\n", - " (0, 0),\n", - " (0, dimensions[1]),\n", - " (dimensions[0], dimensions[1]),\n", - " (dimensions[0], 0),\n", - " ]\n", - " )\n", - " self.ball_radius = 1\n", - " box = self.world.create_static_body(\n", - " position=(0, 0), fixtures=b2d.fixture_def(shape=box_shape, friction=0)\n", - " )\n", - "\n", - " self.place_balls()\n", - " self.place_pockets()\n", - "\n", - " # mouse interaction\n", - " self._selected_ball = None\n", - " self._selected_ball_pos = None\n", - " self._last_pos = None\n", - "\n", - " # balls to be destroyed in the next step\n", - " # since they are in the pocket\n", - " self._to_be_destroyed = []\n", - "\n", - " def place_pockets(self):\n", - " pocket_radius = 1\n", - " self.pockets = []\n", - "\n", - " def place_pocket(position):\n", - " pocket_shape = b2d.circle_shape(radius=pocket_radius / 3)\n", - " pocket = self.world.create_static_body(\n", - " position=position,\n", - " fixtures=b2d.fixture_def(shape=pocket_shape, is_sensor=True),\n", - " user_data=(\"pocket\", None),\n", - " )\n", - " self.pockets.append(pocket)\n", - "\n", - " d = pocket_radius / 2\n", - "\n", - " place_pocket(position=(0 + d, 0 + d))\n", - " place_pocket(position=(self.dimensions[0] - d, 0 + d))\n", - "\n", - " place_pocket(position=(0 + d, self.dimensions[1] / 2))\n", - " place_pocket(position=(self.dimensions[0] - d, self.dimensions[1] / 2))\n", - "\n", - " place_pocket(position=(0 + d, self.dimensions[1] - d))\n", - " place_pocket(position=(self.dimensions[0] - d, self.dimensions[1] - d))\n", - "\n", - " def place_balls(self):\n", - " self.balls = []\n", - "\n", - " base_colors = [\n", - " (1, 1, 0),\n", - " (0, 0, 1),\n", - " (1, 0, 0),\n", - " (1, 0, 1),\n", - " (1, 0.6, 0),\n", - " (0, 1, 0),\n", - " (0.7, 0.4, 0.4),\n", - " ]\n", - " colors = []\n", - " for color in base_colors:\n", - " # ``full`` ball\n", - " colors.append((color, color))\n", - " # ``half`` ball (half white)\n", - " colors.append((color, (1, 1, 1)))\n", - "\n", - " random.shuffle(colors)\n", - " colors.insert(4, ((0, 0, 0), (0, 0, 0))) # black\n", - "\n", - " n_y = 5\n", - " c_x = self.dimensions[0] / 2\n", - " diameter = (self.ball_radius * 2) * 1.01\n", - "\n", - " bi = 0\n", - " for y in range(n_y):\n", - "\n", - " py = y * diameter * 0.5 * math.sqrt(3)\n", - " n_x = y + 1\n", - " ox = diameter * (n_y - y) / 2\n", - " for x in range(y + 1):\n", - " position = (x * diameter + 10 + ox, py + 30)\n", - " self.create_billard_ball(position=position, color=colors[bi])\n", - " bi += 1\n", - "\n", - " self.create_billard_ball(position=(c_x, 10), color=((1, 1, 1), (1, 1, 1)))\n", - "\n", - " def create_billard_ball(self, position, color):\n", - "\n", - " ball = self.world.create_dynamic_body(\n", - " position=position,\n", - " fixtures=b2d.fixture_def(\n", - " shape=b2d.circle_shape(radius=self.ball_radius),\n", - " density=1.0,\n", - " restitution=0.8,\n", - " ),\n", - " linear_damping=0.8,\n", - " user_data=(\"ball\", color),\n", - " fixed_rotation=True,\n", - " )\n", - " self.balls.append(ball)\n", - "\n", - " def begin_contact(self, contact):\n", - " body_a = contact.body_a\n", - " body_b = contact.body_b\n", - "\n", - " ud_a = body_a.user_data\n", - " ud_b = body_b.user_data\n", - " if ud_a is None or ud_b is None:\n", - " return\n", - "\n", - " if ud_b[0] == \"ball\":\n", - " body_a, body_b = body_b, body_a\n", - " ud_a, ud_b = ud_b, ud_a\n", - "\n", - " if ud_a[0] == \"ball\" and ud_b[0] == \"pocket\":\n", - " self._to_be_destroyed.append(body_a)\n", - "\n", - " def pre_step(self, dt):\n", - " for b in self._to_be_destroyed:\n", - " self.balls.remove(b)\n", - " self.world.destroy_body(b)\n", - " self._to_be_destroyed = []\n", - "\n", - " def ball_at_position(self, pos):\n", - " body = self.world.find_body(pos)\n", - " if body is not None:\n", - " user_data = body.user_data\n", - " if user_data is not None and user_data[0] == \"ball\":\n", - " return body\n", - " return None\n", - "\n", - " def on_mouse_down(self, pos):\n", - " body = self.ball_at_position(pos)\n", - " if body is not None:\n", - " self._selected_ball = body\n", - " self._selected_ball_pos = pos\n", - " return True\n", - "\n", - " return False\n", - "\n", - " def on_mouse_move(self, pos):\n", - " if self._selected_ball is not None:\n", - " self._last_pos = pos\n", - " return True\n", - " return False\n", - "\n", - " def on_mouse_up(self, pos):\n", - " if self._selected_ball is not None:\n", - " self._last_pos = pos\n", - " # if the mouse is in the starting ball itself we do nothing\n", - " if self.ball_at_position(pos) != self._selected_ball:\n", - " delta = b2d.vec2(self._selected_ball_pos) - b2d.vec2(self._last_pos)\n", - " delta *= 100.0\n", - " self._selected_ball.apply_linear_impulse(\n", - " delta, self._selected_ball_pos, True\n", - " )\n", - " self._selected_ball = None\n", - " self._selected_ball_pos = None\n", - " self._last_pos = None\n", - " return False\n", - "\n", - " def post_debug_draw(self):\n", - "\n", - " for pocket in self.pockets:\n", - " self.debug_draw.draw_solid_circle(\n", - " pocket.position, self.ball_radius, (1, 0), (1, 1, 1)\n", - " )\n", - "\n", - " for ball in self.balls:\n", - " _, (color0, color1) = ball.user_data\n", - "\n", - " self.debug_draw.draw_solid_circle(\n", - " ball.position, self.ball_radius, (1, 0), color0\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " ball.position, self.ball_radius / 2, (1, 0), color1\n", - " )\n", - " self.debug_draw.draw_circle(\n", - " ball.position, self.ball_radius, (1, 1, 1), line_width=0.1\n", - " )\n", - "\n", - " if self._selected_ball is not None:\n", - "\n", - " # draw circle around selected ball\n", - " self.debug_draw.draw_circle(\n", - " self._selected_ball.position,\n", - " self.ball_radius * 2,\n", - " (1, 1, 1),\n", - " line_width=0.2,\n", - " )\n", - "\n", - " # mark position on selected ball with red dot\n", - " self.debug_draw.draw_solid_circle(\n", - " self._selected_ball_pos, self.ball_radius * 0.2, (1, 0), (1, 0, 0)\n", - " )\n", - "\n", - " # draw the line between marked pos on ball and last pos\n", - " if self._last_pos is not None:\n", - " self.debug_draw.draw_segment(\n", - " self._selected_ball_pos, self._last_pos, (1, 1, 1), line_width=0.2\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Controlls\n", - "* To play this game, click and hold inside a billiard ball, move and release the mouse to shoot the ball.\n", - "* Use the mouse-wheel to zoom in/out, a\n", - "* Click and drag in the empty space to translate the view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "backend = JupyterAsyncGui\n", - "s = backend.Settings()\n", - "s.resolution = [500,600]\n", - "s.scale = 8\n", - "s.fps = 40\n", - "s.translate = [125,100]\n", - "b2d.testbed.run(Billiard, backend=backend, gui_settings=s);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/pyb2d/games/goo.ipynb b/content/pyodide/pyb2d/games/goo.ipynb deleted file mode 100644 index cbe018c..0000000 --- a/content/pyodide/pyb2d/games/goo.ipynb +++ /dev/null @@ -1,575 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('networkx')\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import b2d\n", - "from b2d.testbed import TestbedBase\n", - "import math\n", - "import random\n", - "import numpy\n", - "from functools import partial\n", - "import networkx\n", - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "\n", - "def best_pairwise_distance(data, f, distance):\n", - " n = len(data)\n", - " best = (None, None, float(\"inf\"))\n", - " for i in range(n - 1):\n", - " da = f(data[i])\n", - " for j in range(i + 1, n):\n", - " db = f(data[j])\n", - "\n", - " d = distance(da, db)\n", - " if d < best[2]:\n", - " best = (i, j, d)\n", - " return best\n", - "\n", - "class Level(object):\n", - " def __init__(self, testbed):\n", - " self.testbed = testbed\n", - " self.world = testbed.world\n", - "\n", - " self.gap_size = 15\n", - " self.kill_sensors_height = 0.5\n", - " self.usable_size = 20\n", - " self.h = 10\n", - " self.end_zone_height = 3\n", - "\n", - " self.outline_verts = [\n", - " (0, self.h),\n", - " (0, 2 * self.h),\n", - " (0, self.h),\n", - " (self.usable_size, self.h),\n", - " (self.usable_size, 0),\n", - " (self.usable_size + self.gap_size, 0),\n", - " (self.usable_size + self.gap_size, self.h),\n", - " (2 * self.usable_size + self.gap_size, self.h),\n", - " (2 * self.usable_size + self.gap_size, 2 * self.h),\n", - " ]\n", - "\n", - " # outline of the level\n", - " shape = b2d.chain_shape(vertices=numpy.flip(self.outline_verts, axis=0))\n", - " self.outline = self.world.create_static_body(position=(0, 0), shape=shape)\n", - "\n", - " # kill sensors\n", - " self.kill_sensor_pos = (\n", - " self.usable_size + self.gap_size / 2,\n", - " self.kill_sensors_height / 2,\n", - " )\n", - "\n", - " shape = b2d.polygon_shape(box=(self.gap_size / 2, self.kill_sensors_height / 2))\n", - " self._kill_sensor = self.world.create_static_body(\n", - " position=self.kill_sensor_pos,\n", - " fixtures=b2d.fixture_def(shape=shape, is_sensor=True),\n", - " )\n", - " self._kill_sensor.user_data = \"destroyer\"\n", - "\n", - " # end sensor\n", - " shape = b2d.polygon_shape(box=(self.usable_size / 2, self.end_zone_height / 2))\n", - " self._end_sensor = self.world.create_static_body(\n", - " position=(\n", - " 1.5 * self.usable_size + self.gap_size,\n", - " self.h + self.end_zone_height / 2,\n", - " ),\n", - " fixtures=b2d.fixture_def(shape=shape, is_sensor=True),\n", - " )\n", - " self._end_sensor.user_data = \"goal\"\n", - "\n", - " goo_radius = 1\n", - " a = self.testbed.insert_goo(\n", - " pos=(self.usable_size / 3, self.h + goo_radius), static=True\n", - " )\n", - " b = self.testbed.insert_goo(\n", - " pos=(self.usable_size * 2 / 3, self.h + goo_radius), static=True\n", - " )\n", - " c = self.testbed.insert_goo(\n", - " pos=(self.usable_size * 1 / 2, self.h + goo_radius + 4), static=False\n", - " )\n", - "\n", - " self.testbed.connect_goos(a, b)\n", - " self.testbed.connect_goos(a, c)\n", - " self.testbed.connect_goos(b, c)\n", - "\n", - " def draw(self, debug_draw):\n", - "\n", - " # draw outline\n", - " for i in range(len(self.outline_verts) - 1):\n", - " debug_draw.draw_segment(\n", - " self.outline_verts[i],\n", - " self.outline_verts[i + 1],\n", - " color=(1, 1, 0),\n", - " line_width=0.3,\n", - " )\n", - "\n", - " left = list(self.kill_sensor_pos)\n", - " left[0] -= self.gap_size / 2\n", - " left[1] += self.kill_sensors_height / 2\n", - "\n", - " right = list(self.kill_sensor_pos)\n", - " right[0] += self.gap_size / 2\n", - " right[1] += self.kill_sensors_height / 2\n", - " debug_draw.draw_segment(left, right, (1, 0, 0), line_width=0.4)\n", - "\n", - "\n", - "class FindGoos(b2d.QueryCallback):\n", - " def __init__(self):\n", - " super(FindGoos, self).__init__()\n", - " self.goos = []\n", - "\n", - " def report_fixture(self, fixture):\n", - " body = fixture.body\n", - " if body.user_data == \"goo\":\n", - " self.goos.append(body)\n", - " return True\n", - "\n", - "\n", - "class Goo(TestbedBase):\n", - "\n", - " name = \"Goo\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(Goo, self).__init__(settings=settings)\n", - "\n", - " self.goo_graph = networkx.Graph()\n", - " self.level = Level(testbed=self)\n", - "\n", - " # mouse related\n", - " self.last_mouse_pos = None\n", - " self.is_mouse_down = False\n", - " self.could_place_goo_when_mouse_was_down = False\n", - "\n", - " # callback to draw tentative placement\n", - " self.draw_callback = None\n", - "\n", - " # goos marked for destruction\n", - " self.goo_to_destroy = []\n", - "\n", - " # joints marked for destruction\n", - " self.joints_to_destroy = []\n", - " self.gamma = 0.003\n", - " self.break_threshold = 0.5\n", - "\n", - " # time point when goo can be inserted\n", - " self.insert_time_point = 0\n", - " self.insert_delay = 1.0\n", - "\n", - " # handle finishing of level\n", - " self.with_goal_contact = dict()\n", - "\n", - " # amount of seconds one has to be in the finishing zone\n", - " self.win_delay = 3.0\n", - "\n", - " # particle system will be defined an used on win!\n", - " # this is then used for some kind of fireworks\n", - " self.psystem = None\n", - " self.emitter = None\n", - " self.emitter_stop_time = None\n", - " self.emitter_start_time = None\n", - "\n", - " # trigger some fireworks on win\n", - " def on_win(self, win_body):\n", - "\n", - " if self.psystem is None:\n", - " # particle system\n", - " pdef = b2d.particle_system_def(\n", - " viscous_strength=0.9,\n", - " spring_strength=0.0,\n", - " damping_strength=100.5,\n", - " pressure_strength=1.0,\n", - " color_mixing_strength=0.05,\n", - " density=0.1,\n", - " )\n", - "\n", - " self.psystem = self.world.create_particle_system(pdef)\n", - " self.psystem.radius = 0.1\n", - " self.psystem.damping = 0.5\n", - "\n", - " emitter_def = b2d.RandomizedRadialEmitterDef()\n", - " emitter_def.emite_rate = 2000\n", - " emitter_def.lifetime = 0.9\n", - " emitter_def.enabled = True\n", - " emitter_def.inner_radius = 0.0\n", - " emitter_def.outer_radius = 0.1\n", - " emitter_def.velocity_magnitude = 1000.0\n", - " emitter_def.start_angle = 0\n", - " emitter_def.stop_angle = 2 * math.pi\n", - " emitter_def.transform = b2d.Transform(\n", - " win_body.position + b2d.vec2(0, 20), b2d.Rot(0)\n", - " )\n", - " self.emitter = b2d.RandomizedRadialEmitter(self.psystem, emitter_def)\n", - " self.emitter_stop_time = self.elapsed_time + 0.2\n", - "\n", - " def draw_goo(self, pos, angle, body=None):\n", - " self.debug_draw.draw_solid_circle(pos, 1, axis=None, color=(1, 0, 1))\n", - " self.debug_draw.draw_circle(pos, 1.1, (1, 1, 1), line_width=0.1)\n", - "\n", - " if body is not None:\n", - " centers = [\n", - " body.get_world_point((-0.3, 0.2)),\n", - " body.get_world_point((0.3, 0.2)),\n", - " ]\n", - " for center in centers:\n", - " self.debug_draw.draw_solid_circle(\n", - " center, 0.4, axis=None, color=(1, 1, 1)\n", - " )\n", - " self.debug_draw.draw_solid_circle(\n", - " center, 0.2, axis=None, color=(0, 0, 0)\n", - " )\n", - "\n", - " def draw_edge(self, pos_a, pos_b, stress):\n", - " no_stress = numpy.array([1, 1, 1])\n", - " has_stress = numpy.array([1, 0, 0])\n", - " color = (1.0 - stress) * no_stress + stress * has_stress\n", - " color = tuple([float(c) for c in color])\n", - " self.debug_draw.draw_segment(pos_a, pos_b, color=color, line_width=0.4)\n", - "\n", - " def insert_goo(self, pos, static=False):\n", - " if static:\n", - " f = self.world.create_static_body\n", - " else:\n", - " f = self.world.create_dynamic_body\n", - "\n", - " goo = f(\n", - " position=pos,\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=1), density=1),\n", - " user_data=\"goo\",\n", - " )\n", - " self.goo_graph.add_node(goo)\n", - " return goo\n", - "\n", - " def connect_goos(self, goo_a, goo_b):\n", - " length = (goo_a.position - goo_b.position).length\n", - " joint = self.world.create_distance_joint(\n", - " goo_a,\n", - " goo_b,\n", - " stiffness=500,\n", - " damping=0.1,\n", - " length=length,\n", - " user_data=dict(length=length, stress=0),\n", - " )\n", - " self.goo_graph.add_edge(goo_a, goo_b, joint=joint)\n", - "\n", - " def query_placement(self, pos):\n", - "\n", - " radius = 8\n", - "\n", - " # find all goos in around pos\n", - " pos = b2d.vec2(pos)\n", - " box = b2d.aabb(\n", - " lower_bound=pos - b2d.vec2(radius, radius),\n", - " upper_bound=pos + b2d.vec2(radius, radius),\n", - " )\n", - " query = FindGoos()\n", - " self.world.query_aabb(query, box)\n", - " goos = query.goos\n", - " n_goos = len(goos)\n", - "\n", - " if n_goos >= 2:\n", - "\n", - " # try to insert to goo as edge between\n", - " # 2 existing goos\n", - " def distance(a, b, p):\n", - " if self.goo_graph.has_edge(a[0], b[0]):\n", - " return float(\"inf\")\n", - " return numpy.linalg.norm((a[1] + b[1]) / 2 - p)\n", - "\n", - " i, j, best_dist = best_pairwise_distance(\n", - " goos,\n", - " f=lambda goo: (goo, numpy.array(goo.position)),\n", - " distance=partial(distance, p=pos),\n", - " )\n", - "\n", - " if best_dist < 0.8:\n", - "\n", - " def draw_callback():\n", - " self.draw_edge(goos[i].position, goos[j].position, stress=0)\n", - "\n", - " def insert_callack():\n", - " self.connect_goos(goos[i], goos[j])\n", - "\n", - " return True, draw_callback, insert_callack\n", - "\n", - " # try to insert the goo as brand new\n", - " # goo and connect it with 2 existing goos\n", - " f = lambda goo: (goo, (goo.position - b2d.vec2(pos)).length)\n", - "\n", - " def distance(a, b):\n", - " if not self.goo_graph.has_edge(a[0], b[0]):\n", - " return float(\"inf\")\n", - " return a[1] + b[1]\n", - "\n", - " i, j, best_dist = best_pairwise_distance(goos, f=f, distance=distance)\n", - " if best_dist < float(\"inf\"):\n", - "\n", - " def draw_callback():\n", - "\n", - " self.draw_edge(pos, goos[i].position, stress=0)\n", - " self.draw_edge(pos, goos[j].position, stress=0)\n", - " self.draw_goo(pos, angle=None)\n", - "\n", - " def insert_callack():\n", - " goo = self.insert_goo(pos=pos)\n", - " self.connect_goos(goo, goos[i])\n", - " self.connect_goos(goo, goos[j])\n", - "\n", - " return True, draw_callback, insert_callack\n", - "\n", - " return False, None, None\n", - "\n", - " def on_mouse_down(self, pos):\n", - " self.last_mouse_pos = pos\n", - " self.is_mouse_down = True\n", - " can_be_placed, draw_callback, insert_callback = self.query_placement(pos)\n", - " self.could_place_goo_when_mouse_was_down = can_be_placed\n", - " if can_be_placed:\n", - " if self.elapsed_time < self.insert_time_point:\n", - " return True\n", - " self.draw_callback = draw_callback\n", - " return True\n", - " return False\n", - "\n", - " def on_mouse_move(self, pos):\n", - " self.last_mouse_pos = pos\n", - " if self.is_mouse_down:\n", - " can_be_placed, draw_callback, insert_callback = self.query_placement(pos)\n", - " if can_be_placed:\n", - " if self.elapsed_time < self.insert_time_point:\n", - " return True\n", - " self.draw_callback = draw_callback\n", - " return True\n", - " else:\n", - " self.draw_callback = None\n", - " return self.could_place_goo_when_mouse_was_down\n", - "\n", - " def on_mouse_up(self, pos):\n", - " self.last_mouse_pos = pos\n", - " self.is_mouse_down = False\n", - " self.draw_callback = None\n", - " can_be_placed, draw_callback, insert_callback = self.query_placement(pos)\n", - " if can_be_placed:\n", - " if self.elapsed_time < self.insert_time_point:\n", - " return True\n", - " # self.draw_callback = draw_callback\n", - " insert_callback()\n", - " self.insert_time_point = self.elapsed_time + self.insert_delay\n", - " return True\n", - " return False\n", - "\n", - " def begin_contact(self, contact):\n", - " body_a = contact.body_a\n", - " body_b = contact.body_b\n", - " if body_b.user_data == \"goo\":\n", - " body_a, body_b = body_b, body_a\n", - "\n", - " user_data_a = body_a.user_data\n", - " user_data_b = body_b.user_data\n", - " if body_a.user_data == \"goo\":\n", - " if user_data_b == \"destroyer\":\n", - " self.goo_to_destroy.append(body_a)\n", - " elif user_data_b == \"goal\":\n", - " self.with_goal_contact[body_a] = self.elapsed_time + self.win_delay\n", - "\n", - " def end_contact(self, contact):\n", - " body_a = contact.body_a\n", - " body_b = contact.body_b\n", - " if body_b.user_data == \"goo\":\n", - " body_a, body_b = body_b, body_a\n", - "\n", - " user_data_a = body_a.user_data\n", - " user_data_b = body_b.user_data\n", - " if body_a.user_data == \"goo\":\n", - " if user_data_b == \"goal\":\n", - " if body_a in self.with_goal_contact:\n", - " del self.with_goal_contact[body_a]\n", - "\n", - " def pre_step(self, dt):\n", - "\n", - " # query if goo can be inserted\n", - " if (\n", - " self.is_mouse_down\n", - " and self.last_mouse_pos is not None\n", - " and self.draw_callback is None\n", - " ):\n", - " can_be_placed, draw_callback, insert_callback = self.query_placement(\n", - " self.last_mouse_pos\n", - " )\n", - " if can_be_placed and self.elapsed_time >= self.insert_time_point:\n", - " self.draw_callback = draw_callback\n", - "\n", - " # compute joint stress\n", - " for goo_a, goo_b, joint in self.goo_graph.edges(data=\"joint\"):\n", - " jd = joint.user_data\n", - "\n", - " # distance based stress\n", - " insert_length = jd[\"length\"]\n", - " length = (goo_a.position - goo_b.position).length\n", - "\n", - " d = length - insert_length\n", - " if d > 0:\n", - "\n", - " # reaction force based stress\n", - " rf = joint.get_reaction_force(30).length\n", - "\n", - " normalized_rf = 1.0 - math.exp(-rf * self.gamma)\n", - "\n", - " jd[\"stress\"] = normalized_rf / self.break_threshold\n", - " if normalized_rf > self.break_threshold:\n", - " self.joints_to_destroy.append((goo_a, goo_b, joint))\n", - "\n", - " else:\n", - " jd[\"stress\"] = 0\n", - "\n", - " for goo_a, goo_b, joint in self.joints_to_destroy:\n", - " self.goo_graph.remove_edge(u=goo_a, v=goo_b)\n", - " self.world.destroy_joint(joint)\n", - " self.joints_to_destroy = []\n", - "\n", - " # destroy goos\n", - " for goo in self.goo_to_destroy:\n", - " self.goo_graph.remove_node(goo)\n", - " self.world.destroy_body(goo)\n", - "\n", - " # destroy all with wrong degree\n", - " while True:\n", - " destroyed_any = False\n", - " to_remove = []\n", - " for goo in self.goo_graph.nodes:\n", - " if self.goo_graph.degree(goo) < 2:\n", - " destroyed_any = True\n", - " to_remove.append(goo)\n", - " if not destroyed_any:\n", - " break\n", - " for goo in to_remove:\n", - " self.goo_graph.remove_node(goo)\n", - " self.world.destroy_body(goo)\n", - " self.goo_to_destroy = []\n", - "\n", - " # check if we are done\n", - " for goo, finish_time in self.with_goal_contact.items():\n", - " if finish_time <= self.elapsed_time:\n", - " self.on_win(goo)\n", - "\n", - " if self.emitter is not None:\n", - " if self.emitter_stop_time is not None:\n", - " if self.elapsed_time > self.emitter_stop_time:\n", - " self.emitter.enabled = False\n", - " self.emitter_start_time = self.elapsed_time + 0.4\n", - " self.emitter_stop_time = None\n", - " p = list(self.emitter.position)\n", - " p[0] += (random.random() - 0.5) * 10.0\n", - " p[1] += (random.random() - 0.5) * 2.0\n", - " self.emitter.position = p\n", - " if self.emitter_start_time is not None:\n", - " if self.elapsed_time > self.emitter_start_time:\n", - " self.emitter.enabled = True\n", - " self.emitter_start_time = None\n", - " self.emitter_stop_time = self.elapsed_time + 0.2\n", - " self.emitter.step(dt)\n", - "\n", - " def post_debug_draw(self):\n", - "\n", - " self.level.draw(self.debug_draw)\n", - "\n", - " # draw mouse when mouse is down\n", - " if (\n", - " self.is_mouse_down\n", - " and self.last_mouse_pos is not None\n", - " and self.draw_callback is None\n", - " ):\n", - " d = (self.insert_time_point - self.elapsed_time) / self.insert_delay\n", - " if d > 0:\n", - " d = d * math.pi * 2\n", - " x = math.sin(d)\n", - " y = math.cos(d)\n", - " p = self.last_mouse_pos[0] + x, self.last_mouse_pos[1] + y\n", - " self.debug_draw.draw_segment(\n", - " p, self.last_mouse_pos, color=(1, 0, 0), line_width=0.2\n", - " )\n", - " self.debug_draw.draw_circle(\n", - " self.last_mouse_pos, 1, (1, 0, 0), line_width=0.2\n", - " )\n", - "\n", - " # draw the tentative placement\n", - " if self.draw_callback is not None:\n", - " self.draw_callback()\n", - "\n", - " for goo_a, goo_b, joint in self.goo_graph.edges(data=\"joint\"):\n", - " self.draw_edge(\n", - " goo_a.position, goo_b.position, stress=joint.user_data[\"stress\"]\n", - " )\n", - "\n", - " for goo in self.goo_graph:\n", - " self.draw_goo(goo.position, goo.angle, body=goo)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Controlls\n", - "* To play this game, click and drag next to the existing \"goos\"\n", - "* try to bridge the tiny gap\n", - "* Use the mouse-wheel to zoom in/out, a\n", - "* Click and drag in the empty space to translate the view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [1000,500]\n", - "s.scale = 8\n", - "tb = b2d.testbed.run(Goo, backend=JupyterAsyncGui, gui_settings=s);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/pyodide/pyb2d/games/rocket.ipynb b/content/pyodide/pyb2d/games/rocket.ipynb deleted file mode 100644 index 316e9ce..0000000 --- a/content/pyodide/pyb2d/games/rocket.ipynb +++ /dev/null @@ -1,282 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "f7b8452d-61fe-4356-8084-cac603096fef", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0bfa61e4-9817-4bea-aa66-6a660a423ae6", - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "import random\n", - "import numpy\n", - "import b2d\n", - "import math\n", - "\n", - "class Rocket(TestbedBase):\n", - "\n", - " name = \"Rocket\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(Rocket, self).__init__(gravity=(0, 0), settings=settings)\n", - "\n", - " # gravitational constant\n", - " self.gravitational_constant = 6.0\n", - "\n", - " self.planets = {}\n", - "\n", - " # home planet\n", - " home_planet = self.world.create_kinematic_body(\n", - " position=(10, 0),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=20)),\n", - " user_data=\"home_planet\",\n", - " )\n", - "\n", - " # target planet\n", - " target_planet = self.world.create_kinematic_body(\n", - " position=(100, 100),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=10)),\n", - " user_data=\"target_planet\",\n", - " )\n", - "\n", - " # black hole\n", - " black_hole = self.world.create_kinematic_body(\n", - " position=(0, 400),\n", - " fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=1)),\n", - " user_data=\"black_hole\",\n", - " )\n", - "\n", - " self.planets = {\n", - " home_planet: dict(radius=20, density=1, color=(0, 0.2, 1)),\n", - " target_planet: dict(radius=10, density=1, color=(0.7, 0.7, 0.7)),\n", - " black_hole: dict(radius=1, density=10000, color=(0.1, 0.1, 0.1)),\n", - " }\n", - "\n", - " # a tiny rocket\n", - " self.rocket = self.world.create_dynamic_body(\n", - " position=(10, 10),\n", - " fixtures=[\n", - " b2d.fixture_def(shape=b2d.polygon_shape(box=[1, 1]), density=1),\n", - " b2d.fixture_def(\n", - " shape=b2d.polygon_shape(vertices=[(-1, 1), (0, 4), (1, 1)]),\n", - " density=1,\n", - " ),\n", - " ],\n", - " angular_damping=0.5,\n", - " linear_damping=0.2,\n", - " user_data=\"rocket\",\n", - " )\n", - " # check if the rocket is gone\n", - " self.touched_black_hole = False\n", - "\n", - " # particle system\n", - " pdef = b2d.particle_system_def(\n", - " viscous_strength=0.9,\n", - " spring_strength=0.0,\n", - " damping_strength=100.5,\n", - " pressure_strength=1.0,\n", - " color_mixing_strength=0.05,\n", - " density=0.1,\n", - " )\n", - "\n", - " psystem = self.world.create_particle_system(pdef)\n", - " psystem.radius = 0.1\n", - " psystem.damping = 0.5\n", - "\n", - " self.emitters = []\n", - " self.key_map = {\"w\": 0, \"a\": 1, \"d\": 2}\n", - "\n", - " angle_width = (math.pi * 2) / 16\n", - " emitter_def = b2d.RandomizedRadialEmitterDef()\n", - " emitter_def.emite_rate = 2000\n", - " emitter_def.lifetime = 1.0\n", - " emitter_def.enabled = False\n", - " emitter_def.inner_radius = 1\n", - " emitter_def.outer_radius = 1\n", - " emitter_def.velocity_magnitude = 10.0\n", - " emitter_def.start_angle = math.pi / 2 - angle_width / 2.0\n", - " emitter_def.stop_angle = math.pi / 2 + angle_width / 2.0\n", - " emitter_def.body = self.rocket\n", - "\n", - " delta = 0.2\n", - " self.emitter_local_anchors = [\n", - " (0, -delta), # main\n", - " (-delta, -0.5), # left,\n", - " (delta, -0.5), # right\n", - " ]\n", - " self.emitter_local_rot = [math.pi, math.pi / 2, -math.pi / 2] # main\n", - "\n", - " # main trust\n", - " emitter_def.emite_rate = 2000\n", - " world_anchor = self.rocket.get_world_point(self.emitter_local_anchors[0])\n", - " emitter_def.transform = b2d.Transform(\n", - " world_anchor, b2d.Rot(self.emitter_local_rot[0])\n", - " )\n", - " emitter = b2d.RandomizedRadialEmitter(psystem, emitter_def)\n", - " self.emitters.append(emitter)\n", - "\n", - " # left\n", - " emitter_def.emite_rate = 200\n", - " world_anchor = self.rocket.get_world_point(self.emitter_local_anchors[1])\n", - " emitter_def.transform = b2d.Transform(\n", - " world_anchor, b2d.Rot(self.emitter_local_rot[1])\n", - " )\n", - " emitter = b2d.RandomizedRadialEmitter(psystem, emitter_def)\n", - " self.emitters.append(emitter)\n", - "\n", - " # right\n", - " emitter_def.emite_rate = 200\n", - " world_anchor = self.rocket.get_world_point(self.emitter_local_anchors[1])\n", - " emitter_def.transform = b2d.Transform(\n", - " world_anchor, b2d.Rot(self.emitter_local_rot[1])\n", - " )\n", - " emitter = b2d.RandomizedRadialEmitter(psystem, emitter_def)\n", - " self.emitters.append(emitter)\n", - "\n", - " def pre_step(self, dt):\n", - "\n", - " # check if the rocket has died\n", - " if self.touched_black_hole:\n", - " if self.rocket is not None:\n", - " self.world.destroy_body(self.rocket)\n", - " self.rocket = None\n", - " else:\n", - " rocket_center = self.rocket.world_center\n", - " rocket_mass = self.rocket.mass\n", - " # compute gravitational forces\n", - " net_force = numpy.zeros([2])\n", - " for planet, planet_def in self.planets.items():\n", - " radius = planet_def[\"radius\"]\n", - " planet_center = planet.position\n", - " planet_mass = planet_def[\"density\"] * radius ** 2 * math.pi\n", - " delta = rocket_center - planet_center\n", - " distance = delta.normalize()\n", - " f = (\n", - " -self.gravitational_constant\n", - " * rocket_mass\n", - " * planet_mass\n", - " / (distance * distance)\n", - " )\n", - " net_force += delta * f\n", - " f = float(net_force[0]), float(net_force[1])\n", - " self.rocket.apply_force_to_center(f)\n", - "\n", - " # run the rockets engines\n", - " for emitter, local_anchor, local_rotation in zip(\n", - " self.emitters, self.emitter_local_anchors, self.emitter_local_rot\n", - " ):\n", - " world_anchor = self.rocket.get_world_point(local_anchor)\n", - " emitter.position = world_anchor\n", - " emitter.angle = self.rocket.angle + local_rotation\n", - " emitter.step(dt)\n", - "\n", - " def begin_contact(self, contact):\n", - " body_a = contact.body_a\n", - " body_b = contact.body_b\n", - " if body_b.user_data == \"rocket\":\n", - " body_a, body_b = body_b, body_a\n", - "\n", - " user_data_a = body_a.user_data\n", - " user_data_b = body_b.user_data\n", - " if body_a.user_data == \"rocket\":\n", - " if user_data_b == \"black_hole\":\n", - " self.touched_black_hole = True\n", - "\n", - " def on_keyboard_down(self, key):\n", - " if key in self.key_map:\n", - " self.emitters[self.key_map[key]].enabled = True\n", - " return True\n", - " return False\n", - "\n", - " def on_keyboard_up(self, key):\n", - " if key in self.key_map:\n", - " self.emitters[self.key_map[key]].enabled = False\n", - " return False\n", - " return False\n", - "\n", - " def pre_debug_draw(self):\n", - " pass\n", - "\n", - " def post_debug_draw(self):\n", - " for planet, planet_def in self.planets.items():\n", - " pos = planet.position\n", - " self.debug_draw.draw_solid_circle(\n", - " pos, planet_def[\"radius\"] + 0.1, axis=None, color=planet_def[\"color\"]\n", - " )\n", - " if planet.user_data == \"black_hole\":\n", - " self.debug_draw.draw_circle(\n", - " pos, planet_def[\"radius\"] * 5, color=(1, 1, 1), line_width=0.1\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "357866b3-876e-421f-8d2a-77d6697551d3", - "metadata": {}, - "source": [ - "# Controlls\n", - "* To play this game, use 'w','a','s','d' on your keyboard to steer the rocket\n", - "* try to land on the other planet\n", - "* avoid the black hole\n", - "* Use the mouse-wheel to zoom in/out, a\n", - "* Click and drag in the empty space to translate the view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7bab75b7-cec1-4348-b95d-9ffd282ded5c", - "metadata": {}, - "outputs": [], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [1000,1000]\n", - "s.scale = 3\n", - "tb = b2d.testbed.run(Rocket, backend=JupyterAsyncGui, gui_settings=s);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "674c57c8-b5b1-45a9-b75e-5ddc487f7d9b", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/pyb2d/gauss_machine.ipynb b/content/pyodide/pyb2d/gauss_machine.ipynb deleted file mode 100644 index b7bb72c..0000000 --- a/content/pyodide/pyb2d/gauss_machine.ipynb +++ /dev/null @@ -1,128 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "39a80aae-a990-4ed8-b880-3db2e7f70f16", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9d9f8d68-0f3b-49c1-9512-e3e8344e7342", - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "import random\n", - "import numpy\n", - "import b2d\n", - "\n", - "\n", - "class GaussMachine(TestbedBase):\n", - "\n", - " name = \"Gauss Machine\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(GaussMachine, self).__init__(settings=settings)\n", - "\n", - " self.box_shape = 30, 20\n", - " box_shape = self.box_shape\n", - "\n", - " # outer box\n", - " verts = numpy.array(\n", - " [(0, box_shape[1]), (0, 0), (box_shape[0], 0), (box_shape[0], box_shape[1])]\n", - " )\n", - " shape = b2d.chain_shape(vertices=numpy.flip(verts, axis=0))\n", - " box = self.world.create_static_body(position=(0, 0), shape=shape)\n", - "\n", - " # \"bins\"\n", - " bin_height = box_shape[1] / 3\n", - " bin_width = 1\n", - " for x in range(0, box_shape[0], bin_width):\n", - " box = self.world.create_static_body(\n", - " position=(0, 0), shape=b2d.two_sided_edge_shape((x, 0), (x, bin_height))\n", - " )\n", - "\n", - " # reflectors\n", - " ref_start_y = int(bin_height + box_shape[1] / 10.0)\n", - " ref_stop_y = int(box_shape[1] * 0.9)\n", - " for x in range(0, box_shape[0] + 1):\n", - "\n", - " for y in range(ref_start_y, ref_stop_y):\n", - " s = [0.5, 0][y % 2 == 0]\n", - " shape = b2d.circle_shape(radius=0.3)\n", - " box = self.world.create_static_body(position=(x + s, y), shape=shape)\n", - "\n", - " # particle system\n", - " pdef = b2d.particle_system_def(\n", - " viscous_strength=0.9,\n", - " spring_strength=0.0,\n", - " damping_strength=100.5,\n", - " pressure_strength=1.0,\n", - " color_mixing_strength=0.05,\n", - " density=2,\n", - " )\n", - "\n", - " psystem = self.world.create_particle_system(pdef)\n", - " psystem.radius = 0.1\n", - " psystem.damping = 0.5\n", - "\n", - " # linear emitter\n", - " emitter_pos = (self.box_shape[0] / 2, self.box_shape[1] + 10)\n", - " emitter_def = b2d.RandomizedLinearEmitterDef()\n", - " emitter_def.emite_rate = 400\n", - " emitter_def.lifetime = 25\n", - " emitter_def.size = (10, 1)\n", - " emitter_def.transform = b2d.Transform(emitter_pos, b2d.Rot(0))\n", - "\n", - " self.emitter = b2d.RandomizedLinearEmitter(psystem, emitter_def)\n", - "\n", - " def pre_step(self, dt):\n", - " self.emitter.step(dt)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51e5df1b-f5e6-486a-a6c0-173597198e5d", - "metadata": {}, - "outputs": [], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [350,400]\n", - "s.scale = 11\n", - "tb = b2d.testbed.run(GaussMachine, backend=JupyterAsyncGui, gui_settings=s);" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/pyb2d/newtons_cradle.ipynb b/content/pyodide/pyb2d/newtons_cradle.ipynb deleted file mode 100644 index 9ef3ff3..0000000 --- a/content/pyodide/pyb2d/newtons_cradle.ipynb +++ /dev/null @@ -1,130 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "82ae535a-a041-40f0-8c40-e689b894b0bc", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "if \"pyodide\" in sys.modules:\n", - " import piplite\n", - " await piplite.install('pyb2d-jupyterlite-backend>=0.4.0')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "7381ff66-7924-4216-b141-8f7b15ed038a", - "metadata": {}, - "outputs": [], - "source": [ - "from b2d.testbed import TestbedBase\n", - "import b2d\n", - "\n", - "\n", - "class NewtonsCradle(TestbedBase):\n", - "\n", - " name = \"newton's cradle\"\n", - "\n", - " def __init__(self, settings=None):\n", - " super(NewtonsCradle, self).__init__(settings=settings)\n", - "\n", - " # radius of the circles\n", - " r = 1.0\n", - " # length of the rope\n", - " l = 10.0\n", - " # how many balls\n", - " n = 10\n", - "\n", - " offset = (l + r, 2 * r)\n", - " dynamic_circles = []\n", - " static_bodies = []\n", - " for i in range(n):\n", - " if i + 1 == n:\n", - " position = (offset[0] + i * 2 * r + l, offset[1] + l)\n", - " else:\n", - " position = (offset[0] + i * 2 * r, offset[1])\n", - "\n", - " circle = self.world.create_dynamic_body(\n", - " position=position,\n", - " fixtures=b2d.fixture_def(\n", - " shape=b2d.circle_shape(radius=r * 0.90),\n", - " density=1.0,\n", - " restitution=1.0,\n", - " friction=0.0,\n", - " ),\n", - " linear_damping=0.01,\n", - " angular_damping=1.0,\n", - " fixed_rotation=True,\n", - " )\n", - " dynamic_circles.append(circle)\n", - "\n", - " static_body = self.world.create_static_body(\n", - " position=(offset[0] + i * 2 * r, offset[1] + l)\n", - " )\n", - "\n", - " self.world.create_distance_joint(\n", - " static_body,\n", - " circle,\n", - " local_anchor_a=(0, 0),\n", - " local_anchor_b=(0, 0),\n", - " max_length=l,\n", - " stiffness=0,\n", - " )\n", - "\n", - " static_bodies.append(static_body)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "6f694d32-8b23-40cf-91c3-0edd6abb658d", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b24ad88f6cfd4db19fc3145000e79635", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n", - "s = JupyterAsyncGui.Settings()\n", - "s.resolution = [1000,300]\n", - "b2d.testbed.run(NewtonsCradle, backend=JupyterAsyncGui, gui_settings=s);" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/pyodide/renderers.ipynb b/content/pyodide/renderers.ipynb deleted file mode 100644 index 286490f..0000000 --- a/content/pyodide/renderers.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"metadata":{"language_info":{"codemirror_mode":{"name":"python","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8"},"kernelspec":{"name":"python","display_name":"Pyolite","language":"python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# JupyterLab Renderers","metadata":{}},{"cell_type":"markdown","source":"## FASTA","metadata":{}},{"cell_type":"code","source":"def Fasta(data=''):\n bundle = {}\n bundle['application/vnd.fasta.fasta'] = data\n bundle['text/plain'] = data\n display(bundle, raw=True)\n\nFasta(\"\"\">SEQUENCE_1\nMTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG\nLVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK\nIPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL\nMGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL\n>SEQUENCE_2\nSATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI\nATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH\"\"\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## GeoJSON","metadata":{}},{"cell_type":"code","source":"def GeoJSON(data):\n bundle = {}\n bundle['application/geo+json'] = data\n bundle['text/plain'] = data\n display(bundle, raw=True)\n \nGeoJSON({\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [125.6, 10.1]\n },\n \"properties\": {\n \"name\": \"Dinagat Islands\"\n }\n})","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]} \ No newline at end of file diff --git a/content/python.ipynb b/content/python.ipynb deleted file mode 100644 index 689e883..0000000 --- a/content/python.ipynb +++ /dev/null @@ -1,721 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "# A Python kernel backed by Pyodide\n", - "\n", - "![](https://raw.githubusercontent.com/pyodide/pyodide/master/docs/_static/img/pyodide-logo.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import pyodide_kernel\n", - "pyodide_kernel.__version__" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Simple code execution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "a = 3" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "a" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "b = 89\n", - "\n", - "def sq(x):\n", - " return x * x\n", - "\n", - "sq(b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "print" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "# Redirected streams" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import sys\n", - "\n", - "print(\"Error !!\", file=sys.stderr)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Error handling" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true, - "trusted": true - }, - "outputs": [], - "source": [ - "\"Hello\"\n", - "\n", - "def dummy_function():\n", - " import missing_module" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "dummy_function()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Code completion" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### press `tab` to see what is available in `sys` module" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from sys import " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Code inspection" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### using the question mark" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "?print" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### by pressing `shift+tab`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "print(" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Input support" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "name = await input('Enter your name: ')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "'Hello, ' + name" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Rich representation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import display, Markdown, HTML, JSON, Latex" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## HTML" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "print('Before display')\n", - "\n", - "s = '

HTML Title

'\n", - "display(HTML(s))\n", - "\n", - "print('After display')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Markdown" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "Markdown('''\n", - "# Title\n", - "\n", - "**in bold**\n", - "\n", - "~~Strikthrough~~\n", - "''')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pandas DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from string import ascii_uppercase as letters\n", - "from IPython.display import display\n", - "\n", - "df = pd.DataFrame(np.random.randint(0, 100, size=(100, len(letters))), columns=list(letters))\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show the same DataFrame " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## IPython.display module" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import clear_output, display, update_display\n", - "from asyncio import sleep" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Update display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "class Square:\n", - " color = 'PeachPuff'\n", - " def _repr_html_(self):\n", - " return '''\n", - "
\n", - "
''' % self.color\n", - "square = Square()\n", - "\n", - "display(square, display_id='some-square')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "square.color = 'OliveDrab'\n", - "update_display(square, display_id='some-square')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Clear output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "print(\"hello\")\n", - "await sleep(3)\n", - "clear_output() # will flicker when replacing \"hello\" with \"goodbye\"\n", - "print(\"goodbye\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "print(\"hello\")\n", - "await sleep(3)\n", - "clear_output(wait=True) # prevents flickering\n", - "print(\"goodbye\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Display classes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import HTML\n", - "HTML('''\n", - "
\n", - "
''')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import Math\n", - "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import Latex\n", - "Latex(r\"\"\"\\begin{eqnarray}\n", - "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", - "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n", - "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n", - "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n", - "\\end{eqnarray}\"\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import ProgressBar\n", - "\n", - "for i in ProgressBar(10):\n", - " await sleep(0.1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import JSON\n", - "JSON(['foo', {'bar': ('baz', None, 1.0, 2)}], metadata={}, expanded=True, root='test')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from IPython.display import GeoJSON\n", - "GeoJSON(\n", - " data={\n", - " \"type\": \"Feature\",\n", - " \"geometry\": {\n", - " \"type\": \"Point\",\n", - " \"coordinates\": [11.8, -45.04]\n", - " }\n", - " }, url_template=\"http://s3-eu-west-1.amazonaws.com/whereonmars.cartodb.net/{basemap_id}/{z}/{x}/{y}.png\",\n", - " layer_options={\n", - " \"basemap_id\": \"celestia_mars-shaded-16k_global\",\n", - " \"attribution\" : \"Celestia/praesepe\",\n", - " \"tms\": True,\n", - " \"minZoom\" : 0,\n", - " \"maxZoom\" : 5\n", - " }\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Network requests and JSON" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import json\n", - "from js import fetch" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "res = await fetch('https://httpbin.org/get')\n", - "text = await res.text()\n", - "obj = json.loads(text) \n", - "JSON(obj)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Sympy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "from sympy import Integral, sqrt, symbols, init_printing\n", - "\n", - "init_printing()\n", - "\n", - "x = symbols('x')\n", - "\n", - "Integral(sqrt(1 / x), x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Magics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import os\n", - "os.listdir()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%cd /home" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%pwd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "current_path = %pwd\n", - "print(current_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%%writefile test.txt\n", - "\n", - "This will create a new file. \n", - "With the text that you see here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%history" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "import time" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "trusted": true - }, - "outputs": [], - "source": [ - "%%timeit \n", - "\n", - "time.sleep(0.1)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python (Pyodide)", - "language": "python", - "name": "python" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/content/target_promotion.ipynb b/content/target_promotion.ipynb new file mode 100644 index 0000000..8d4f741 --- /dev/null +++ b/content/target_promotion.ipynb @@ -0,0 +1,90 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Marketing Analytics -- How Can a Bank Better Target Its Promotions?\n", + "\n", + "## Situation\n", + "Universal Bank (name changed) has been targeting customers with various offers for its mortgage loan products. Historically, these campaigns have had single-digit response rates (8-10%). A new Stern MSBA alumnus, Jasmin Ali, has been appointed as the CMO, and she has challenged the marketing team to improve these results. \n", + "\n", + "When told by an analyst that their campaigns “cannot do any better as the competition is in the 5-6% response rate,” Jasmin asked a simple yet insightful question: \n", + "**“Have we tried to learn anything from our past campaigns to target better?”**\n", + "\n", + "## Complication\n", + "Direct marketing analytics faces several challenges, particularly low response rates to customer promotions. For instance, if only 10% of past customers responded to a campaign, can actionable insights still be derived? \n", + "\n", + "### Key Question\n", + "Given a 1,000-person target list, who are the top 50 individuals the marketing team should invite to a special cocktail event? This event targets high-value mortgage customers with a lifetime value in the hundreds of thousands of dollars.\n", + "\n", + "## Solution Approach\n", + "To address this problem, we will:\n", + "1. Apply **binary classification models** (k-nearest neighbors, decision trees, and logistic regression) to the new dataset.\n", + "2. Identify the best-performing model and use it to score the target list.\n", + "3. Rank-order the list by likelihood of response to select the top 50 individuals.\n", + "\n", + "### Challenges\n", + "- **Imbalanced/skewed outcome class distribution:** This is common in binary classification problems such as loan defaults, corporate bankruptcies, or ad click-through rates (rare events).\n", + "- Evaluating model performance will require metrics beyond simple accuracy, including:\n", + " - Precision\n", + " - Recall\n", + " - F-Measure\n", + " - Kappa statistic\n", + "\n", + "## Technical Details\n", + "- **Deck:** Predictive modeling continued.\n", + "- **Dataset:** [Dataset1 (XLS file)]\n", + "- **python Code:** \n", + "\n", + "### Key Technical Concepts\n", + "- Predicting probabilities\n", + "- Setting custom thresholds\n", + "- Hyper-parameter tuning\n", + "- Scoring new data\n", + "- Performing cost-benefit analysis for profit maximization\n", + "\n", + "## Discussion Questions\n", + "1. **Model Explainability:** \n", + " - Should we care about explainability for this problem? \n", + " - How should we balance model accuracy with explainability?\n", + "\n", + "2. **Machine Learning vs Baseline:** \n", + " - How much better can machine learning be in selecting 50 individuals compared to the baseline response rate?\n", + "\n", + "3. **Classification Types and Cost-Benefit Analysis:** \n", + " - Are all types of classifications equally beneficial? \n", + " - Is a true positive as valuable as a true negative? \n", + " - Are false negatives as costly as false positives? \n", + " - How can we use costs, benefits, and expected value to choose the best model?\n", + "\n", + "4. **Model Deployment:** \n", + " - What data should be used during deployment?\n", + "\n", + "5. **Model Selection:** \n", + " - Which model (k-nearest neighbors, decision trees, logistic regression) should be used for the most fine-grained probability predictions?\n", + "\n", + "## References\n", + "1. Shmueli et al., *Business Analytics using R*, Wiley, 2020." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}