From f207bcbcdd77fde1a7f120f7b1b50af297f9a893 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Fri, 28 Feb 2025 19:29:52 -0800 Subject: [PATCH] Added Numpy Show, Numpy Squeeze, Pandas Feature Split To Numpy, Pt Show Size nodes. --- __init__.py | 12 +++ docs/images/pandas_feature_split.png | Bin 0 -> 117397 bytes docs/reference/node_reference.md | 4 + docs/reference/numpy_show.md | 17 +++++ docs/reference/numpy_squeeze.md | 20 +++++ .../pandas_feature_split_to_numpy.md | 24 ++++++ docs/reference/pt_show_size.md | 17 +++++ modules/numpy_wrapper/numpy_show.py | 57 ++++++++++++++ modules/numpy_wrapper/numpy_squeeze.py | 45 +++++++++++ .../pandas_feature_split_to_numpy.py | 71 ++++++++++++++++++ modules/pytorch_wrapper/pt_show_size.py | 60 +++++++++++++++ pyproject.toml | 2 +- tests/numpy_wrapper/numpy_squeeze_test.py | 58 ++++++++++++++ .../pandas_feture_split_to_numpy_test.py | 55 ++++++++++++++ web/js/{ShowSeries.js => ShowTextGeneric.js} | 4 +- 15 files changed, 443 insertions(+), 3 deletions(-) create mode 100644 docs/images/pandas_feature_split.png create mode 100644 docs/reference/numpy_show.md create mode 100644 docs/reference/numpy_squeeze.md create mode 100644 docs/reference/pandas_feature_split_to_numpy.md create mode 100644 docs/reference/pt_show_size.md create mode 100644 modules/numpy_wrapper/numpy_show.py create mode 100644 modules/numpy_wrapper/numpy_squeeze.py create mode 100644 modules/pandas_wrapper/pandas_feature_split_to_numpy.py create mode 100644 modules/pytorch_wrapper/pt_show_size.py create mode 100644 tests/numpy_wrapper/numpy_squeeze_test.py create mode 100644 tests/pandas_wrapper/pandas_feture_split_to_numpy_test.py rename web/js/{ShowSeries.js => ShowTextGeneric.js} (90%) diff --git a/__init__.py b/__init__.py index 68f9466..a4ee5b3 100644 --- a/__init__.py +++ b/__init__.py @@ -16,6 +16,8 @@ from .modules.matplotlib.mpl_pie_chart import MPLPieChart from .modules.matplotlib.mpl_scatter import MPLScatter from .modules.numpy_wrapper.numpy_float_create import NumpyFloatCreate from .modules.numpy_wrapper.numpy_int_create import NumpyIntCreate +from .modules.numpy_wrapper.numpy_show import NumpyShow +from .modules.numpy_wrapper.numpy_squeeze import NumpySqueeze from .modules.pandas_wrapper.pandas_add import PandasAdd from .modules.pandas_wrapper.pandas_add_scalar_float import PandasAddScalarFloat from .modules.pandas_wrapper.pandas_add_scalar_int import PandasAddScalarInt @@ -46,6 +48,7 @@ from .modules.pandas_wrapper.pandas_div_series import PandasDivSeries from .modules.pandas_wrapper.pandas_drop_duplicates import PandasDropDuplicates from .modules.pandas_wrapper.pandas_dropna import PandasDropNA from .modules.pandas_wrapper.pandas_exp import PandasExp +from .modules.pandas_wrapper.pandas_feature_split_to_numpy import PandasFeatureSplitToNumpy from .modules.pandas_wrapper.pandas_fillna_scalar_float import PandasFillNAScalarFloat from .modules.pandas_wrapper.pandas_fillna_scalar_int import PandasFillNAScalarInt from .modules.pandas_wrapper.pandas_group_by import PandasGroupBy @@ -178,6 +181,7 @@ from .modules.pytorch_wrapper.pt_randn import PtRandn from .modules.pytorch_wrapper.pt_remainder import PtRemainder from .modules.pytorch_wrapper.pt_reshape import PtReshape from .modules.pytorch_wrapper.pt_scatter import PtScatter +from .modules.pytorch_wrapper.pt_show_size import PtShowSize from .modules.pytorch_wrapper.pt_show_text import PtShowText from .modules.pytorch_wrapper.pt_sin import PtSin from .modules.pytorch_wrapper.pt_sinh import PtSinh @@ -228,6 +232,8 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "MPLScatter": MPLScatter, "NumpyFloatCreate": NumpyFloatCreate, "NumpyIntCreate": NumpyIntCreate, + "NumpyShow": NumpyShow, + "NumpySqueeze": NumpySqueeze, "PandasAdd": PandasAdd, "PandasAddScalarFloat": PandasAddScalarFloat, "PandasAddScalarInt": PandasAddScalarInt, @@ -258,6 +264,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PandasDropDuplicates": PandasDropDuplicates, "PandasDropNA": PandasDropNA, "PandasExp": PandasExp, + "PandasFeatureSplitToNumpy": PandasFeatureSplitToNumpy, "PandasFillNAScalarFloat": PandasFillNAScalarFloat, "PandasFillNAScalarInt": PandasFillNAScalarInt, "PandasGroupBy": PandasGroupBy, @@ -390,6 +397,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PtRemainder": PtRemainder, "PtReshape": PtReshape, "PtScatter": PtScatter, + "PtShowSize": PtShowSize, "PtShowText": PtShowText, "PtSin": PtSin, "PtSinh": PtSinh, @@ -443,6 +451,8 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "MPLScatter": "MPL Scatter Plot", "NumpyFloatCreate": "Numpy Float Create", "NumpyIntCreate": "Numpy Int Create", + "NumpyShow": "Numpy Show", + "NumpySqueeze": "Numpy Squeeze", "PandasAdd": "Pandas Add", "PandasAddScalarFloat": "Pandas Add Scalar Float", "PandasAddScalarInt": "Pandas Add Scalar Int", @@ -473,6 +483,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PandasDropDuplicates": "Pandas Drop Duplicates", "PandasDropNA": "Pandas Drop NA", "PandasExp": "Pandas Exp", + "PandasFeatureSplitToNumpy": "Pandas Feature Split To Numpy", "PandasFillNAScalarFloat": "Pandas Fill NA Scalar Float", "PandasFillNAScalarInt": "Pandas Fill NA Scalar Int", "PandasGroupBy": "Pandas Group By", @@ -605,6 +616,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PtRemainder": "Pt Remainder", "PtReshape": "Pt Reshape", "PtScatter": "Pt Scatter", + "PtShowSize": "Pt Show Size", "PtShowText": "Pt Show Text", "PtSin": "Pt Sin", "PtSinh": "Pt Sinh", diff --git a/docs/images/pandas_feature_split.png b/docs/images/pandas_feature_split.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6ffbccd29ffaa765a1c1798b6e083555f22131 GIT binary patch literal 117397 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%0A!Bu&^t7wf0Ft216$ib?9g3gWGwrFd4UM<=ZAZG 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

JhEf?blcnqD*XP`0dU)1L4Y9W2je& zDD6f_0(JA|1|tK5cS%XUARNwSEkhdxr-R@OeT zD$pGJnC?p*I+mH(uEumnt#pv;Ey$d#=a z9I7W~%OmVVAOP2hp(`TjpoU_vCPZc!82~qZNJ+UFt4FB(*x2x3heE;IyrXCfHjSO& zvDo?n1vz@x0ukt@5Q4B1Wz4w=oy~giah~rnA%kivOWiDa?!1u?^d3v%sbiDXW#B77 zb<8zAd;a|I2+LjCpB>ox+kZ5fS>;N;vZe1_XdBE0b+CVUb}*Ho5H62Sw}NCbHM2PV zJAjsJstxM%W%B+fSixJtDJYCuPbmoJ7i^sbk-@n5xJVa+Qg}ZykKvR5P)F|Gy|!V?;m@%_wu{sWXtMQMfA@=DJ?1|Cm7moS*(_f ztMKa!2fzJN{UZ6a{V!*sD$R@lC_+pqoa?tHD8FToX_Xa?23u%vOv5!C2LBXlUj!t7kMfPpJFS;gZ+AEM>_#NG6+YPbPNSrL<0(eR+9)$Y>7 zcIHe`yZL7r8yx8&B27YXqX=qK4fGvQS;Ec35%)IeFkiTkDZc!2X2u5YqGf9xrYPbw z`qNtRky|hySxBgLm>88nFfgGhn#O3gPso}Z5e^}i>Gv{wz!oRe60G}m#8};_KoKK- z{cx}hA=R6G^!47$S{Pjc!NSVn65v-gzE!dp?otttuuE7=5qcZIe+~R~r6^ zuY!t2Lb(MdbNHfb74ZzlafFNK?nKdAQgRD)yEvlUcQ(>;FZj3Q6*gV?K> zn5$~y3ql19nE(+w5bAXC@kdXc^2EFDVJMS{O%Q0aAU%u0DMly1upDct@rC3?~#xijVN_esAC zUq&|*#cV3L6-S4Aj?)mR~=mroKie8{sL@Da#R5fyqHc^l6&EJfkJ(hDK8zo*+p%Iph&gj4Vb+p?%2f z59onI4=G~9O}D=;B2Ypcg|XXG(Eo%~CAKFWJ^cj`|B+Xju0BUM+`HV|5a`OGJq}K# z1D%4J2;2mp6FhwcOf;-2mvGw9xQia0+IU-i@V->jjI}T^jYuFc1gN^90Rn(Kk-gTs zHJ~FIELI|0g%O10I~+0$-a%m}HTnU>QxqZ)G{&|OtmMVYqbUz2;141I%*@7U?0qQm zq9JW@b~HLXT=Uv!2rWaxw9ZWhAeH*lb0y!FMKNzb`Rk?&hX zr`)x?(L;Ui@MHfdnl=CTxC)TM(zuWF!CzUUV69sV1wPD$FlB_}W_10pL3EGFdoS1Q zX4+xB1DZ1#ta7R^Hmw0v#Fg@`f$iE7YNyTbGj(*x*pXaAe}G&E*Yvdgh$Kqt)MB-5 zXV{Wo>g}PU*$NU@WI9o{K&f5wpL=D2Z=)NeKPjX!l-B&GNo;L(u!@mucU$ygn%B$A zazN$ZSd#XgfBpWzb~h*Y44KVgBndO(YY5QvpNlC|bI;)7=DM!-R|w^X|NTUklZZqZ zoso_WH;&rnIw@00JQJ*Ce0=F9$T@d-t9H2suS zbSN-x9-rCnL5{!ki@pCtdtF1J>0 z?&S*RFxN?SZ!Met51gizF*vu6@akshh(7@x7XL9!9tifJ`UhtT9hSv9_qhVb148^M z$peV>Zol0r-Jd4qiKcC$d(?q=66%VvIKNjuZ#(SfUaWm!Sd8}EnrEivsf?tw+Q(%r zYZv)buKjO&lVxYA2L6^-S%LAvwwDF2gJ*+bW%Sd_C(Q+OKVTx?RAa*FDGI9 ziMXaOujWrSj#hR!u6>56+Sz|LO&lI^F#m%}lRt46k~fD?Z?&49`S%X#u=87E^l8=W zJeAHvt*Pt5cb8w&YnzUm97b@IM7Q&k53@apo^19%S~V(V2MoR5kfDY^-f^Y8H2>Va zjcIa5utiw$QI4a&E?-F^ZW+X1MV}5z|8tcg?@xeTN*XX4IC+}QQgwunKuXtMaCz+o z3ES``nb9rw_UB(RuED7IqnaH2nS7)Ml9H!d(J`mc2ZoB{)Gz(KmBK`$@`E;%ZS%GF z(Hn@5mO1v4=O6;1$M->yN5e59vS%~zhy_O~hTsb>%vAX6oB1JKw7W1e#kH7{oyddJ zuFvHa>N^SJYP;ey{9oG*>~a)kAp45>n+n|uMMWi~@VY^XN{M5=wmVU|%2gjtGtm%2 zTGd+mUt0|rp>@d4>OJRpANzl!88Vpx7DKIb1NslR0V^97D8`rGnK*vxl$5mQRO#D3 z5Wvn)QdSyOC}(KU3N!{`_1h_23&QJ%%LHG>9u*|rICrD$La1v@48oA~c6Ka$LgJSG zJ#QwbFFgLaqek86v_Zt!{wG`qjcALR_wZ%~ndQAj_%&I{KZ+qEU1>k7s(ccirepu5 z*a6$FvDip%Za{?!U?tL{Z|DNjH!~Zx77kk;(%V8s)k}0i@7N*Ow8Wb??#-C^$Cw9Z z`2@!OVYXKzbqn%mLNq?zT0wyT0wBmoj3Uv|(eW8RN~jGi+W}&*MXPiQnVhIWbZKCy z$|)qk{k!frnWRHrw+J9m^I%f;Kwn>YPR=6?wb$0^eCiz{D<;NTU;i4h+iQr~qSLx{ zl&6Hx)hH>m;9fjX+hmM zX~-Ku<`Cfx(I17_f`qojV`%3E^g0ef>C9q)QQmNsSoFo!KiQ*W83X)nonf4pi@$Uq zDfhoy&XeG0oT;V5&h{ph#6i98%odie?@=u;?iQ~5zTe0=OOKo_{IfuLq+kDN# z@+1+TEqRhswV%Go$MC7%O+6aTa@y=lC`;0tlcXuXNG-|0rQcmPK5v(P-`P=ipjujR zoyvq=E*-n33$T>tPo3rE<*AmvSBKGx55TjI0CD!6Ry@JVDhue$(82*?h>)C!2ZVz4 ziLcPsQc!pev>?tI0k<7M>YFMmF&KLH*?eftd1g1Ru*>BDXOoBghyp1a_T z3&naaqzUm*LU790KuE8s>gbq@>?Ic1Bj#n6XQ6~Wh*sblqz$;5%AH{WkYp(9m#OU) z+OIzLVqI7bgm*YkoyfS+-5t&E5NBI5MT0xvnlN}+@~FM^s|S`*_5Q+~8b_ZTomgC! zv7m4crYuh}?+GAX=1X51ly8d6tLDyE`PqMfl z7ly9M269Of5h;d6e*zq)k71k(-}dK)L(WE=x79YnK`2b!Y5p!6E)CF_7sz802u0}8=E558;PrlBMsWae^gY|BeAz0`+Jd9`Ll?Un#B{~J+=L%ruxu&G~zN6 zC+`;Exrw(3F#2GAc>*9dXupbJXQwsJVu}Gyy8+N=KHITyC|y|9D<~O23wdEOY_+-l z!H2JWjOi^lX4!+9&9dxXUWJX1RLN2g zYZyZwtfwTU#7AsgCq^FApUud5?t`P%;5gfIJi6`^u|{S&<8EjpO9Tid`Sz{s#*tmj zSNc3pCseyLIeo;aDwWx@x4vAW=P|AZVt!LqH5OB8K{)A#yDk>q8 zH?Cjzg}=c>!RYf8T(rh z$YtP%gAs=rDtO;xK^rXYP6j>}JYFDi-Ulz-fTX~7eqB7vFHOTLDf+$`kPwMX(Fjr% z=o!8t4h*Jib`i(8&&CJR+zl@d7a~(8x9gOgzG6or+1>1GuF`RT-ak=XPA9;{Zf2#q zAR_xCD6;UVd%T$@*8Jm3XMVc0=l7M$e*Ppj=QPR^x7r-S&RdB32rYbsc1WD?PXt>+ zbAQ(lHZ5F_Sm&kUj4=pWZN^j#d^a(?G}UdG3275>qF>NJIVy=XiqCl^2i?5DaF0nM zU#!FDDyXZsW^NN}9-DVq0BB@|*89Pj*o0aLVlX>B`^z+e_os{mVSnQd@lP&$d3vVc zkzff^=L(%6vw>2ax|h>ybm1fG)0)-O(;EzGThjgQ7-ayHpcbnbzjZPArLXThOyn|z zQSghzs16uuBgoxoZ3|G(vAvG^O9M2p2~%-9&*2ub!~S2Xl-tfhwTOYSsruUS^z51i zXU-b-+V!OBPSO1#hDIswRlN~o6ePj8sFbLt=ls?KuP_{gO<|5M>EB#{fbtI*DP{;T zFbe}4;)_4I%G4Q82lXSd{oF>VPMQ4qav5;mkIKph0Nt-%zT7jT3@j05)^j?~FDNJ$ z=I+YYV;_O_69-l0v*yM0A$Gsu;5hWM_Cr=$N>cK=l$0kn@UcR6E|bO-n$rFI_YcBr z)f*+|MnQw;JC|&{YWmgDyu}1HHl^Q5K;IhBI-T&kX}AHAK?>AILg1i=e&dXO%F9!S zeEJWXfhGDw)o~NWblJX!-?x8hWzqmMGCIpw4tH!=xUGBU+J^ zr0`PU07l)z9l6C>Jy}L^X-jYC?FNP0{PwnZwvt>bW7Ted+M*G5NcF~Io1>!B%|E90 z)mV4y?$=6~CnX8f%?BkjuXT^{nW-OJmQ<%;elaAZ)6%Gh?cGt9BVbl;x1V%OQ zFVhJ-GWKOKJYp@9lo!~7zl+Fu6yo;8?I zhv7i`ZHBPsDVUZ1c@a8bA9YIC88tzt=O%>sAi$FgLj|8gXJd@W=XVkyw>rVu<_Oew z9Ov5I8!X(kP@#coXg#m=uA)`N?4flz15O!mOwx^8!_Cm~Scg45Z$p-$q zmmU=!5A)>*r53*B-{Wp_{v;R1{msS2y_5Z#H5cpa8%~;N{;jaqFS+I&bpC3o&%uDw zPCQ^Krdb-&Zl%t*R~YO@UPL*W83vUeToHCxu+K;0tqBhx zofatY;0qy5#~|#~9N17#Xy9XRj|6IwHw+9uL4M_=B+zAypvWSuhLNXiHITYEG>(6M zFRt{AfghmK<;IkL=G*qe-mHz%(z9^lv)m9Rx+?4Hp(JBQL7MWc4!I>YQ z{#9sb0#IVW7!ts>H!se9KOR=rIi8XkZt#LUSP!`3m7m{xh?HCXcK^#2KyR8+u;6?| zSXcvluo08gy_|@>i*TI|;7fF3vS7gzXI>MP_yCQS*BHee{_?nw;b`ly-E51}bWf18 zfi*?_r9ufRl1L)7tsBxz-~_p68#5JESK=IUXBX`K)@5gWwq_+w#cfkPt3TMAcIpD> zE!TULpL#UC)%0#NP`VLF2tsx)K=dI34{k7Dc~%XS_imtWQDP?+CnhnGjFx+a+qYTk zxG+KbOm|n8#MU;tDcF~+{-_`vt{RiJr_3|)DydRb!b|3{Ccx+$nlm3(?IXlV4;%>O zvyLGYkx(p@e5mcZw=Ap&fdC-^2kj%mDBsI&F`4Paz-?e7$ZBckYfvdhl`o3oO$5H~Km{^MPgVeL9aG znTiPh<$*JGN11uTL4>yEu+pe2yI{YHR@qcZ$ns?3t%_lu1cSa**v3o8qW} zjtTelU7m_>)}-L0H_9ypS4^uDu8zU{ZmAk zm_rzqkiTMQ#PArri~dnGQWNvo5jxz;&d+Eu4dJtva?@g&;tAS(A6UIfYtAi*ofy>c zSae*H4L*PU#vx%0Vg6TGTo?EVJcmSl5X^MmgjZ1R{H{!pFRRB zyNdZgcG;!iLCE9e)uIxQNZ>WR2H{EVh9J6SH8XTeHcaR?yy`&OMmwa5alOZDr|Saq z6E-;WZWnXYDk@%l;`{QY&Xp{EwLYm-l(u(;u-94^+dYeXGooQu^nyy3WB0s>5LdB8 zm)N8OIuBozcl#Lx+Wlo>s{Z+aGk%7uZQ&YI{F1~C&GWh}^LtEI%iLSN+o#{1ymEx8 z%sqNXqI$!u%>I9L;WF!%t9!uB_JNyo1HK zQ$Zjj$whq+Uvs9u+;wHuk!NayJgVe%q(Es|*?RcBc&HVKW1a?Txa#BJWkjHJN5jKZ-6px-UzIw~I=-&|&P93BQ!V(XYcRI(=2+jm=}n7S(jwo+>~be; z1q_XiZ(3WYA}G+fe{$p+ae;h6700mJbzIg9MFt8X@i%(PWF&9gllpRR+db>gec?FN zH{|6PGtx;e4aBqxW@a%2NW=#rjlu)#vdLb|G7|YFarG*s<-TC_#V5j2zI#W^w@2jX zpmCqobnTnAMAw~6B%eOXUVKz}>P2MEfd_obR@a>J+vtWVNKbble;|Wtf(y3Bm>azL z69k(Qvp2Hj5b+d7%+f*26H{9fkQaRfyquW5Z&JAqq1o|+&!e*JC#?l1bh~b)|0&)` z(#G(WG{mZqg?R@N%K;dny#g-k_r^Oe6S{4P^sZwSaArSZPWkioix=Ek27}V{FVWFg zz<@;YR_!bQ#{l?J)s$WWm4|#u=n_+%dYl$5GCbm{ty8U~=-(WZqzmM@sZ-)p;}LPZ z>t5!!w9Mg=6$O2FW3b|kzRa&_|+z~NQ zW4?1fmXix+0D^7sQB!4^|8+7q5=oKcF{>1DNi9ibRdXU19ju`mC%HVw#C0hYtLq_g zbkdf@L9p=Ikv@_8dyf8LX5XX4{8?49Hm6xooZp2*uloa(*vllup8Z!f5B zdmLs8)MlA@$2tFZ-1bgj)XpLP@XT#JDzm*6Wpx(Tg>)@fg?Yks6Ac}90D$?+(5HH47(Fh)3lkr)rV0Il42$Wx3^EV?dS31!Ti zii!;%@<Ld0#1@XqYUFz$zzCj;wc-B#BoQ)@ z!5xeOL`Jf!G)-}+@7Z`~DG@%)V-ztW@hL<;k5j9#+(gzK>b&wmvQ~I?QrHMNR^WMy z_a)C6VhJ7HmMjIRm6BQ0o8MoLxY7?dsgi2=8oG76#;p$}wIHJi}hgsT*Mxt1g6G&1^AM(1=m|(|*o7jH}hK zoVBd}xT;Wp?TjwTrEH`7_b~qZ33VKV8}vIWodQ92bQIgVK38Gi&J=OcpH z7Q4ZCh7vHWZW3yx1dF8t_eH=g&}NLoiuQx8n$_+`Z?!m_K3Ke8<4z3AHwTop?V!-y zH95bK)3=KYumG_o09bwTWI_pW^yUyMy<8YAgse!2_eppk1*y*xOcQvG8=8ZS4W6*v zDiH+00i8HWBp!@D(Spx+A=c&C@`MLm92r0(ddlMw z5!aOpLR25EjvjGYTS_>XlPyXyaxKdzV_5;*)%Q%>#p@uwJ$-&_q98`|e)eR*p&qH7 zhcP8m!}(>W!8`;MR?1UQUj1Uq%f*$FaW=#BCa6-EeVhi~xifBET#oP&ss)i}@guJ< zDyr4D@3-vZL6=j9I6K+ZtBCoZ?>^vm*uC(uPichb#MTf&M@8mjaVfuG$*bKoT``fL zFERRvfBN*vv00TQa!pq^3euJI*9#)zTaIFORQ&tP*Ys$vnZ&afrZ;b%27chStPV0R z?`5BGRD@Z9@E}UpPwp$2if?4eKTH+i`DJ4Fl4fsJs!;075jBK!~!e2OC@79?dAf ztrrzJeVhn4I113D(KhyaLPf1CJ0P=nX+(<&gV2364TbVp{w zZVW=Vx&a>)*HMb-_=r#&B(k`W2*<1EHuANBI~_41Og)M;NNXQIm{a@$q3^{92?M76 zs6zK;i)lbrZ=LUY@tdl*V;}afKPu_!zOy02qtj}s%mN1*>c3MKW)z3UH%9wIX?y^t zg@I86y9$h70uO1hNdop@XE@kn*4^h^G62c#jQw5X;22a% zi%VxC2FW=Zu4L_AYGL1gz-`z5(fz~(z<%>fJb#%pPR0G=dK{H}{MnRR5+n1;s6{e8 zN0*rVGr~I(Q7^TD(42!%{jXnTy_28*{#YkCdl_}-n@4(eC?G5U9Q6E<}zg)L*nBFYsdf4hx z@9U6|_)gYz0==EHb3htqkH*b*DdCo zx2~VW`GX!?!!#fXMU;MUdSu_QzpG$i=IfYUOa&Lk5lZk`<0bSkNG%n)8#?3xG^jg_ z7qji-f0U5XvGsO_`8(BZj2_<_$P5U23Evt>dm9lS%WP?Ro@S+C zpsZ?oF~K_f^yEbfQpkNoad?p-v?b}d^si~$rxbZgfP6sQ2ps8`eD&_N;Ck)Nk?anU zrH?=D;W{BW_OPjQT-owB%o~wWVpCxkJ%?WQLKZ)X#T(HCs9-U1alZ%>S{6Tt7fj@# zo(ok9Ma!+Rs6q6{$-Rt2jH zVhaM{@uz7oM-qSMZX{7#{*#)(g-dFA2rd7SQ#Hxlm0YK9Ugp?x`H&XEkJE5I2r_OUQ$UE15aguICBiZv>Y*hp z^DbK*Vfjz6&3C;k{q~-C+ErPmP&0A_D6$CCxUB#mkWbtqHy#*~LILkWR7T4z>|%<1 zpnKf*S9NtbIHfo)Q`P|;JJ%lORvN*`uX_UsQ~Ye^MB{Ci{I;`+7&B{3>SK;F7(f{g zi24nU`x{9r#YDpQW-p(~hdX9-Y;2spmA`_Gdi0Av?jmlHMWwf%4eOv|B=+#`(yxcnW4g1D5|Q%8s4aq;)gRSa#dF zjS+R9?+&jS*y@s8OOFW2u@HcTt)srDZyDtT^5y|Mp$*aVe~f>sQ&v0TTedP5ychpG z);>Ak(XsqU=`u;=Cmp|5TtfDA)>S6wIz7{Y%t|DRht{&YqPS`XRX!c%9`+rKd>QU` z>#=sWVl`O1;t-*gkX5_V#6rw`QY@7_9#Aty8NJH3mzR` zhoQMacblSNU1`v(keBhF>Y`7jA5uDZ^gwO3mRP)wAfpcs$M(X$?47uQL&u1Gf_gt5 z%MYIbqw+>pyMCp!{T=gOwa#Sj+D#t}Zj7)<0&&1MoZ0!wh>4on+q*|C>0n(@uV?rF z!bb1Cy}ON$FunKj;7LpE+)?sc8d3I;`IB! zGCwDhzU(CV_1{r9tupp!8MgW65(86|g@?kb^je;?Gz?B(aY#`1@jc?aqP-kQJp0rC z@;_Ghg>WQ&N}21p6tWUiF4uI1D7E?SwH1Tt6T?-D!%TL(Ze(C99u9|)!$l_aikbJG z3i5u~Ov>`nqW$v67$$=F!GHWQKDS*=DC{g->secc4WuIPzw`-Ow0xgeT>yB*vT~l5 z|8wDw-v zN?gi)BF}Vda_}U2!hn#S@i@swT3E|bxwxjRc}Yb{K>Sf4X{GC~$@#lW?g`b}Qs~gS zDa>VDv%Yw|{Hj}OZ>4@9)@fPRT!ODojdTf?T|r5yeAvc)pJ2zQ>RkkcbBOI<5Ke}d zmq8!^oGJQu&Tjw$!Y;Bm?hq*g(ud5i>HXh}xG)#>U#+-N?Wo=IYNRPSH!bDDy0-)C z!Z{IiDS(Uz+F@*&R`Q>?+mjusbHqES1OBmqK>ksJ=hLumHI!y}5p%LGN<6I@+-F@X8CS&6kA^ z-IVKfZ5mdD!nRD^uP@HZQBQc!q%`s*w0?vfmb@QE0_&PsdgT=kt{3&C51LF+St+}sWm$%ni%e?Pv^udHK0 zSoU@Be`2&7v%QENwN_Cw%27{5DfFg>29qMKflpPh*PPEYeQi5wU482n&u7|sZNbX(Z;VW-4vmb-U! z^?%NB@G00xAw@wQk4RDa1o2omm{I1Z?qGG>kgBl6F3Z`m>u^ocV@4)PW3%Z*Uff=& zYeMj8MV&Piw0Gj&{NN>3X8sO~pvG%N`e0E(qz|N5NFRpgljG9>O@y4{KN?nbJio1q z+K#j=)yH(=U0Y)s&yR@QT}(AOHdp96XBQ)$4|}gn>&lpgu6=YXzf#}eCG(rcMo*sG zvf4_leKMQX8=ZevQ2k=4kliA)M*)BERI+s(@mW{%Fr-qDa$ZhAAW^UC+_yGey! zc>Y)LvD9X*Bx;WyvEQ!wlwOC2J#-7|^tA(hr24-Db&~0;3Kdd{D%S)BZZ5&Lth09TbGeYTg#qfnI#W8Zkfa#`UCy?8+6bLZ-}IracSE z(FDd9-!k&aviKfxMFL7(y&n6GD|e8d+83}kM1IwddKV=Vq&?i%F>cEjoWGOsi)&|Y zmTiu0R6r-x-tvrsGDh6QNfuwJ|+(RVXm-_-KUUFM}9qM1E48(nQ(b+?_jAU zHV?~MY`NXZoDqH!uiwo?T&5`db}`gc+_d_pzSqUXeEibrC-28?y>Rm%7bPOB4FT*+ zOV&vEl1-b2XH18wJE-Peu63;!owgBzHNmm|!6n;bG0LFgFsU7DGFcilU82$Yf?ymx zk#)Z~`gfY*T^Z%$Bma(d))P?TmWW(Hrg}Z9>9?x)!e2WRXR;}wT1xu=3|-PEp%yK9 zHCkRMOirANQQ@|12t2B!pWAl&_ZE9f`@51}0wet=D(wt(7#iue-#jvCLj93 z#XQDr$oQtCi-F!VZ+6iRBe40_DgvMX;ti4P?v~Q8i6}-0`0c(0ekr0IK`i45tQSv^ ztee(HKm|aM4a+OPD-yuIT!9{iIm4TDKKRPfL5t1l<0 z>=oR)=IN?62zZ+1AmHgjc9zuUEE|LeA9idX>iedTr|MEfIItHl9zF3Hkgh+)uSU}V zw$EoTB18F~KZ?RzF%A3ja?0J+AFajr{6E6p1Dxvq{~tdUQD!AXwxTi%*`v&?q^yJ} z8ChAG$0iD?P&Q>`XYUm%d&^$gLiWKqzvugOf4;xZ=lA_zpZ|5a?(4p9&N=V%8qe`~ zJfDvzN=a7cZp5Px7r~apx1hyu^vSrXJB4YSS=?yT>R2W3Ml}SiMlsvrpNYMJ4=P9i z5{1#hcRiEEv$%yD8>iPd@6o{b?rgv>hL-J;p3>#9`{(RZU2CuBvLLG>7)5s7qNCxr{J+;Lz@dspbd)4@Rut zfp+s{bvw~l>c6jolkz!pZz8;&#w}#?=OT-nGQq5C`d~>TnKPSV$?vL zZ-G$T;!lV83}up-uV}Gst zzbDt7eeOm`uA1bpYWMSuWa9;JnB%KY0FXp^5g^fMc;^jgJ9Eni6fYj&*Ygy9Jqz%$ z4TLm6nh!K?&}0`EdYgZ^Y8A}xgd7${S;ShM$gO&y4+TV5@oT+~-|Nawx!haZk$y#l z16$$vLlAC;U*Pyr>yp&c^Or?F4lU|sT7Bzep_4MNWJl5sI6HV6gCq_#ui=mu%fbJX zc1Oh_Txzg%D00w2;oBq?*0H~VxULML~Ce!a|CLOys|Wd28)vEW~efX`Z4 znWioZCMnvrrXi?WcG&7VEl!}!df(hz^WsdajQJn6<${SsbJ#&8Qb`J|7@soB(Qc$n@w9@7ADyghIe%EC)%V1?& z4SsmdS4reG2PNP=N?Jx|eNrK1dV1Cl`3=wC-#Dd}wwmJiz7p~4wP;H)S`J;^%lSX) zu35iiFU|qO9z=uKAL3KzS0?S;3RmBFJhURzrd9+X`k@u#I|iR1j$K^xx&u$af8KQQ zSzmxZ0cwLpr!E$-#FF!=iXy^KT2> zl*mQKjifZ72)*%k|DRn(qS+Vj^A?hPfKYjv-k=e%0;+qq@_huLI~_x?iYWe2xK^k( zKWd4S&eQ=#ZP8*d(uoJTaQO&2hH8V(YrxLV1thT%h0eSGa>?X&l>S_lcnJwoP{#Dg z=IWgi8k&A%nj(=y`f?lmnRQ8p_CBnzS37d^q_4!Pr4=cfTWadxxueO>k2eRAh&f0^ zlrTO_J;ThHLo|K1pHY9<7x_%-Wh8HeF;3SS<^JApWBef+>VypJ``#Nt0h4rgc{gOk z5%vsKSjR`2xn{S1Ajfc7lB%CEc4}(N_1Dh+esT!>jTsU0j6Fi(Si0|J!ljdh2fX^l72|Gx6OmqHJ^S zh{D-XLD$u-9d;#PDxV3T_vmYjj^f<&`YnTiQ}}SuQILst0X~uF2FW=$=ig+OB-~zn z5c#5*i-pRnhLvC0Z%H~R{6CiDA5#S95ve=vJds55LCA2J zO?aqbb>}|QZTRY)JIGD$Jh8Geb;tIxw_^<6u^Z!;QWUz)Kr{LqA1N&N$B;Q*JuCBL zJp%S)5a2mVAg@DxMJzYU;m*8Sn8fh5Ur}3`YbZNdma@^`1}jK~g`NVKUN1GU=KZXn zDvDQ5S|T)I-edziKYm5D5NDoz$O6?94Sa=e!`5XFV1nHv)5jLKuvAE329Gd* zAG!ZQx9{AEVE;b1VLs5mRwUt*B5~j;h4+V>{K$8ZO&`6)qurqe1(@vA0&ptkE%7f4 zhfsuCfLlyIwTA&Ww6yi{3F@>d8&mD`LMSBJz`NuWS6mGfC!WkVU-yoAPUK)Ugm!KMvXc z?*X4|I}y~2lnis%jOUIHBXCEP`uW`0E6?tFR_cS<02|NuGP));K2&MOJxD-)YU{sP z3{F6{@NqXnW7VslY#8z-`G5g9;wJc2lq(H#v687q8s#FkpAMh-zdO*Wjo*P!69P01 ze0K}e6r*?yz6>2Fr%QjoVS4K%Y3@h3d8p2P{23#RJGb)iL#jBVdhRyzw#f3%M@*D6 zMig2u<>Vni9#Y3~8X;v-n4`#Nme+!x!k<8dn^Yh_e*&q_fg+lRnPJGun8RC_5D5F1 z$I8XBtlInRvxcopV!9BESA`&0s0T>(4Zg+!4i9%&h52D9M1rdA30!|;SXaDdEBEeM zcuN)C)a`B+wihz190B3oh_!R>4jFt(4cqN4bBciQS+;qgxt5$vBRlmFdQlDzb^#0ijdZ=K~?a?Z>8DZ>qYMi+u z0O6mKF+PDXkVY(lHPo9RJ3<@46JL>DCAJ+4C_yU+e5g78xR}D6w4v&4qji~g37nuMQeqp=UYv{E*1x|$l9VD*Y(s1~Y%*4~ zkv04h_+`|*2>zu<>KuXi@JY4S?!hoLD3A|8ICDXXF)R@8i74%8Rd@tfV&q7=DuS(Jpm+8w0*d^yr9IRttExd;FloDmK*=3_wEdF!I8^{DHGd(&+ZAE7HsrV{QWoOY`Pb22Ag0!k3{OJ%@M2Im4GPt+^A@NUgLX#Z*je>kzCW zHHZISnT9llrHxEamx+QUCbo9F2!a~0j|2N~0mIYrx4!|8*FeEm|F_UYLS-7Ak_S9A zmWXe6c=I(*m=q;VdIDK%O~9GD`;>Evhc2qcrGIyMbmKif;5zi%F(lBXt%=&dzz{$#J1ifhrgmUNPP3R zW+gtOH-5!UVCl22*1pdY&HU}}Ebmh=q5n>a`7^uuR4|dvv zenp2DU1q~fOGM^g8lv4AD_d-H6;TPi^YqfKJ9nD-?O4};2!l6F?_9CGo-;;^Kof?L zV_bQ$0_hZY+031|MON%_rXW9UgTD8U7JT%W@++fAAq}bu=TOkzW6P-&DNd{P7@vZyB=>ozFM{Fh1Ppo zyOEnaQXd~D7*KDyn0yzzGS-z~cwk>5_1l^0Femi4`UojNCBQF!&*)uJckj7r_h=L)iiWxz^y9PWw$ej>56G`BfO!Pw*7 zK(x6Wme5xq>8Fk>_xCIxZyBWd4p$d zvTn;g_V@gAm|*rht8A#e;1}oV&A4%1T$N|d!OrL(9Y|UX3Rc8J0|$r#KL%ymOB(i2 zMkyLs8Q6UNi|o(w_CqZSGgJBLf6I%D+{wYE^>ubK_Xre${VJcX7RxFITBG-a^8kWJ z%xzo({y3m(J#9?KlM(NQ2L3I}xpW}17R{J(<`@?2N$RK8c>eqTa{h3%k!k)I;vw(CB{%OlBYo|w1ocVqKI z_xF0F2CPa(Qf<&X!W`H6tq9Nk=JCY}9A;FA>B(5E3p6;`6fs9cMqW&7$f(S4as87J-#fb!QySij5;P5xU8Hl8{rvs+OWcm<1jT_A-D~a?BPna zjPDsA;-wzk><%n+@sM(zQYc^jy}!A6O?|2J^-XA$2%>Ji4-HAji}owoPvWD6Qw@B; z(_{h738bBsL4odd-in_V6i9)F8c$ue^%0cW@3?!bW`^sMBFp4eJBF*sK^urablYs) zuSx%T&2*^?x0lYI@#XWEwq~7jvy9)>ht?7sEl>1bDk>@~Yr1Ik)DJIR&mEwt-u5RS zh{KFYq1E?;cNUa!)5`t%??4@Pz4Xxc6CH z`%+1B_Hk`rwFD6cJNNrP)ZXfLsCRx2)6RHm^WM4)OI@}1JEs2-&}$6F#87*o?v7Ho zeT}D@A@(3@>!+BcJC+&v{o=1kz6YO$CA z#nLeQ*%Z>fc0qe2DNAY)0}thht#?`B8R5?DxDwNrsy*&{uY$z+iluC%ko9Q#sDDLK zg>8u-_ouRvOJ%ML{!xXd4Rnav*DHiV%K83|(a&NvwrTO01!pWtWzQFq??JP( zrTx1&F3tA&SRTU`Oxu#<{5*@tf;X@34)Ra)o?=x|hs|(y^PTF^56>HAC2$3EMGjqe z$Y}Wz8|F-%C#^lUuO;-I8TY(lZ`y92FQ%T153QLX(ASzwNvf8CAnT-MjnhI=zm?Oo zBPfSQ*pa=}gV*Nsrcp-qS`lxd-lLuU!=ZAM%zkVA zOd8J}pX!5bUQ2KeR8jTN=uRvA2mu88C>tjpC2*oidPsn;Bvf3EN@ z#q*A(G$t5i1y-+zv-_Xr80vn%YjZeVa@XLl_2K?B2^vbWpC2p?pu0KTB)b~MU3CUV zJ>#f7EM7yS1o^O)YJ|m-#r;^QAM;}vcxSmcjoVN8UB1HeiQ?A4%!xNe6Q2oP7kGJf zS8S^HQyE?UoN9{}x|v&b@F8?XB=uL#gB<>!CPVJ6X$dZRH69Bkt`qS@g|lsfq6gm} z9xf9}Y2Lck++oRzFd!%oE?{J=OT_Yun?JPaJ=-{)X$5ri2m7t_D?{bV5Z%K0%R+)7 z`{@Y!t;LqyfKlg+Eb~*{QRoejfXUt&`-0sir;EC#W`oS!GzQ4aKZ+qI19N zMy;$M!ylZ8 z@u4SF+$nWeIge$k4ht<1N$q?0MMlIXZ^|shNuob`n73TXtx9H+T)#Q$Jm7(R^c-*O z!0>7fgH!9Dvn@sLjnByFgcYyzR_RLZVbwP)=Fn*{h9pCasQ|h}q+GT+Fy9NLy3(^W zFv|=HePQtjuVJ~j3eY&+y92c9_#nO+>b$@oKdDV7?v=uw$)B`Y=gSwzkl2{{I7F8%)9c@$$M->zP}clwK~d!mnzn&rvf;t+gs9FNRu8hl zhxI_5@XJO2{X^t)$g7B6m<7!Ks0X=Ya{NbTr8OsFy>B4_GESM3?DY_GgGluQ}G9h5WfEwW*H z3~?X3QskHX(QYhHWnVxi?9eOAtzW$Ex=h)Jici|(yN>OMCl1?`RW(k(JI~b>mr$)) zGG?3Et`&E$uk3Q1sK@7?^=#cL&!TGF;0|I;tbSI@k>uzlGD+?=2!)WXyqM7&`V;sI z-MM&OTRFnO^VhGu;shLDp4UQu-2HpH_cBgQbIddS-XqF3s3~u2zQ31nrO0VoZ-sX> z7nC`ma0~#C3T>##hj#9u$~(JvT$Bp?Diz0al%}q$PVt(p9}gA06^c ze(u}bj58eS^LsQ218`Jg$kQ6KMoYB}_vdmKD#ARqrJf%UiF*DijX&%waGl8v^JCaq z;i$=ef zl&VfY)u1q6g2Ub?V-(QYSKe7#8s94~npOB%-c6%~d9=!LSxPe}<*|a}?%-rzF++vZ z{A7nzmRsa#3f$Yz!uONT=H_-@>yYZ1owgb(R&pM34Xi#avT0ecT^w9Das8v9zWAx8 zy4O^Nl^^&>l|Z&HLxC-Qch@bd^OW77z6LAhw!?U~FK(6uR{>^NV`PTa@2E^I{i(as zy@~Ve8YZVz!<xxKI8XvJBk_>Pm%Q>sdztZ1iT$0kZW>p=(h z!3_!RkIkr{`E7|%+S!Ijq_yrwk}6H8RwCp-)+XEmt&5J1_Uf4Py)ficgRQ6u`1n5d zVbwvyGyQ`pRurz=TQttPZm8KksM1|0-CoXubmQUG<3^HvOczbOCfsc~$%WtUwH3&; zG?WW2t^HcyT|Y$QJlq`)Qsk^cbOmmPy~oAqU&cw=Zc($cCKIzLMU+Rh><$WFR@Xjm zHC|-%%*S@M4GlLIUkjj_Gjl_B^ATmOfronVyYE*t?%efBI0#HgTv8h-JfTA4tG+Jr zJdLH*#|QIrXPkva*}Iis6ivXShkm zJyt4&_gdcQoT@o0b+Exy&&G?LtJKoL*aw}^$`qVwmem}vie$$s?0z(n?7Z7b^dWeU zk`el7c^>XBhjbXPCRHsKzgRzU(2P5js$X%s8NnXiHhbY(3DJgksxk74z@L|H^YMi8 zI$fJT@pxUAx~inB0lQxt&j@4VPnlZSg#GAwm-lM8*GeOjQ+&U>0CjNv2#j*j7*dp# z4GTma5q*p~uO=JzL9L71wa$da%&U__?Sr2Ai3>vA9Ar~pH76U91xL*u`?uBa96OfK z0WdRp?m)#Sq{z}()YZk%!OuSYk7NBo)LweBIXdh zz^XSU8^re_Rad) zqub>64Sh-UIREX5UUEB6^YAWpLN!O9phBsKks6D=O4am)V z^-xkg-aUG$z`l$$?m_&g^KdC1-++@w_$soAT7Q3$?qo1Y?~0qjpfA0)4Qh?o(UOmr zIx{20c#%xk=*B?p$DAam7g|)m@*7dFN2{Ap0c6mda18w(B4gj+x4TKX8y)rT)L3oGl4uEE|yU$5O>tbtG#(9p(7Cb(`6zb7d=1C>B-esPqa#jY)h+( z5*#chkCPVCfz@ zlHFW}URIgne~gL(3WlDM&6V}oIz3z`n9Jj;sF|9 zM9lwK6`fLdzV|9H=K@wDU0BQ8XX>b|ZZdF$anumj)bgUYl~GtmCJ^#(kBRscPNA0_ zNk{?TMJ^fcxp5%7609TAGrP(pKt~o>f^4%O-7ERH-rfb<g5YB+yWHdP^QT>~ya#8f)3> zawT)t!w&y?mhq;QhrqYa3)&P-hL*hJg$@r7(=#&aIy*ak;_R#AJu&8>E=r~l#@P7n z+cy)DIZ)gO^*RAi)#A~Y_V74lv-E{ICcC@4Y+|0mr_Y?xxP99Ty3=5QLBp?SNx8Wc z(6chXvO=~L4a(`>TrInxN^%4R5<_yHo|0qWia`_>h2r8t0oh;VwHQdF&mo+#1k3RE>kR;KKL|!i(rv}Q0A3uF!xpvLIE?64UJ#HtI7mOAm;jQ#q8pwrV*yc^N z@W&uOl{f&6C=Z2Vx&{YnHwmAxoO}Xvdd$qtU7pGbv+4;eXG|RVYcOUOwp_tshBf=< z6!XMN*ioZxCn$PX#1h6|6weBcRC=C)eA8?zio=_k7-XMh_4P*ztw1Rekd>g&PLyKD=r1Vpjq&$HksOlN#Xw^iIv8m?QoMR(TRL zVK;Ab2E%(F0b8Y^UeDw|IH<#Z@nXB>czQY~GI2p7x84{2qGb3L{Esa`rHDMcY56RJ zDmpOqa514n0R%LN>1J)AKOKZ1LAjAlN{R_&TH#{DKGwlq@QJT)Zfr~{Ev1FcxJ`v< zFJId}58q(0(&ZWm3K?B}4?-5Uur=@n3AS2;!on0ZG){r^Lt@VYpO8=hAbh=jecbbB zTvNJ&>g#WOOiODp;xjTfJ_>JD>a?QQ=`!2%`}(;18Q5?XGK6Guu`d&uNCa((-pGlA zy`3K!Km6_7H9Q;w!#Iwi3|xMlefjFuLk9;c`s>zyTrI*dnc_GR(cEbJK9sV-SQ^k@ zR*VqHo|6StWSINoJ3FykN8#xOO|K14h1jlKA&Fq01g!!@V;h6Pm`V)vib%l70~jes zj;hUhP?2Xjzyor;VjG8+@9%*|GYHvGGBH8;+chu{2xAvo-P%8ZY7z9mKZO2Ndvfoi zULag-)DS@Sd}q|z_u?b+)_WTu2X_4C&6}VmI#`32l04khoSB`iwFvFmG+7!dczJsv};46I9x3Yf+$Ys-dZQOoIyPVTJbH z|sHhl$HV-E!r%v9E zeD1*XM4c}bD9Kn_UIDeNAaCy@FgxQRJSI!YKD0j4($V=eOx8lHH{7z*&tiaI$@e^T z9jSCV18VrRjEwQlVo#==D!@VoK`1kEe;h*%dP?iPn(8ts>r%d(u2tZZdt4ua2+lcB z*B17`2!N{Dakw$iW6pfx!efJhuD(8hm`-v81#Ol|)J}}ZhB>W{kwLr$$0;Q#=?DN~ z!mwrV^+j?`O7(e=K@p%s462;yc_G!JCmoF6zPtoMQ@A0_5)urc+;TMDV_O$lklqZ< zQnwu*Xn_{W4%7ytEo3$12M6l_Gf*QBipbDv?+^WxC~0Ts>&s4J(2U=rt^U@IaaTOmWG$DTTy~ul={mn-^>o;>5ZYU@dVaoS=`}8C2ZNh4!CibqI;qTwS0Fey+Qd^nPn*97z<9qGS;qTu0gAD(cW0gS| zXm`{4`ud{0;^P?s{{dAig$INwd3lt2+0;xPo3Aln4?(_P*nO9;P%qmx3x>VGsk(dj zEYi3+QneF7!5$o%4abdWPmygd;DB&d~B~2_VI|qiR=j3b21PTuIc#wQMih{?S z0M)0Pu(RManVvIDPfuIi4-5?K+hNm(@bz0qhXQN>2#IAB?;zju*$gqrE81<&ceyZR z78RWZQS)yfs4iZEDRGuJ zL1Gw%J4w4*gTof?+(_w?hWvy`+N)vmHVNaAl#~>mB8#&qob3CBg@yTrg%fnfkP~$F z_ELdmfraV`pd$83^zR44`O+ii$4-&e8%2z2!QG#O7?K-x%PVG%|8t+!t^`FhM66 z>^&?r^Y!aAu&1PSnC`K$9BT2S&1P0sjUfL5Bi)!>yL)bfme@%j=ET(0i|NwW`1!rz zUuJ&&Vi6LehOe?AItEIXb~E2jflS&l2?+_A2JL!KDm%Nm4*?DoVfX}Cfv&-~FXGvJ zuDC^IFSKMlDAclXbCba+z*5I0YGmI))kD9^^(-npE)GltjaDve@~8T_4MGpbkYr-W z5%VSJ zTpU|*GI4lL^^584bl+;t=ihINE|TziY+Q)l-8zB7^7eS|u`@m%u5W{as$&|YHnKTw zrX(M3PD23WlI}yqcc}aZ^7>J01$A|br}Z4g0)1ZTtU>}s06CNlBO2W z;G;PXvtdx#S|Q+c%=brYxYCn3!ylgm$0U2>hL7uSX`Ap`em7TF2(rDlmIkIjMH%=s zPuIb$Di~)F0DXQgWMQIqQ(t2wHW$qzhNTA4U3%{rRdNXw}q?Mgmzpfk+`&cNQW?SsH?!1r z>vFO6XfOm5?t8zYC`OxpV(F`KRd=W!522q>xYisof~W?L7F@}C*dP|-qo67K3d}Ll z+4P{unA)2B2zHqWcFy3_&%(MIOA}_+khJmfHzPhc-O%9Kdw0O--uC6Eqh{bv+#Bi`?Ce&amIwUzz0vaL~`E@j@~@r{s>~5u!*I4Jx=v4@-t&uICRa zE(KRD(L3E2Ii$o7W*=_uY^M|yo#Bas&`Kt)hdZ;rd18VY;=tJ|+@SaD zppkJmuoAK+vq{n(zzb|EMz5)jx#A9x`Z+#YQW<+R3afNJ?dp3KP{O_mW*1siHSXUh zfg>s5w#^KY#rpa>xOVcgY)!b1;BRSPHJMA?U{|^UN&=XV9@Q)HN{O88N_RS!^sd8*;sn8Dkb#=*DyQ3Tw<;tK4EM4cLnMPDP`xn%yA3*mSzunk@x#ex zU|=8_V`O!Gu3rU+o!R?tiy{c)A?7y7rBN6cqucy=hmzpD%LZ|wD2_%luwni7^iwvF zV~({C_0NFglSX#T#+CPGW1lQOhzM;~&f6feXcd+MasMWBeZp#rTF^Q92Fo8NfZ?VCbbI1BzV^tx3egv>t)BsQ{2Geg?U7z5cg4W1~JHJOE6O@KgD=_y9 z*}vuC5(-!ccssNa#Vgw(kvHq>c98UvBhOvuOVsDWLLh^T>f@pg5e@ut2;$6s5Vb*^ z55W_P*!*`$ZC(rr&ap~LGJ@-Rh?ZeGcdicp$J%C(`t+|TLwSg#L9HK@Y$!CS<^&5Z zg}^7j*P1zUkXZ=|p($Beq(IdIwgXYO_wWk&zJ9^FYt>-E6AF-qGb;EQ{^pG@d>If) zRE>GG1waCbs2rO}2!9vEdIk@Fw#0Us`N0^3j@9+YWY9*cQJkwX8gKYE3>)tWslQg7 zLk~d6f2~7PQxlBxLcRG;0Le1su`s#2t4rf0#G2bezRh2`dr9g!|^hvynsm!oQ48#_s z6clW{ycCcx%0hJGF3AKTJxFr?+uYus%FL}knK9w8Iwk=E zEXNR=Zf(s2%U-|u>eL$So$;eb1fcy?3#$(27t+Jqa1I5QIq!nO0lk&xu_`xTgM{el zTF^het)mkJ?_9s&kPN~6v17+504`F21-FF>P>6+xn+mz9u>EZ7%a(=Wl9K87PvX5H z{8U%(@G15Uq7DV<^xf^|S89iAeTdXt$maVkHV+}JBB1R5!*TsXc!k7Jz#~An4#U`= zDyc)peo2OrY+TeT_OzfOrsmtCgJ`r$s;-;7c)R=Bb8(pE_hEZ8%1q=9`w1yX%WoSR zA{qf)PWJJ{f#eK6kTSwRrn#aT_!p29W`JS06Ai0U9>_)MxRKkG7ZojbY7><^H+fLF0~ic%QaAgQnN`mk zgus)!%pmnB9aLpW7QsVQn|=t&vdA@UGA)c5+e~|(i(7Ma^rwkxA&hEitS36vMFo0v zgB8xakg5fQhK2^xT?TTA5r5>>DS--lC4WqYvU6xKm;(2!VPfSXn*n;sQC3dj$eQ}` z1*Zz#U1nB{#4CAUs96T23ML&{cI>H>P?H>an~1=T`6;0uIn(0gUjh!JSTDi=8DFn3_Z_vFN(+( zK7XWZs*YgC9Ix1wVCta7k(56w7Z6HtrNFh#q7vIM&^Nx~BYlf137n*!xw?q~tV~VYhq7W;OT2r^a9Gr|kA^!yl zM1c;K9Iz5Hl#~_{lN#gdKfaJcQF9ZqPwgZ(Jfiwlu<-)g&2G49iNbLUilHY^Y_Qu; zQT++~+d&i@i*PSOtg+rmbPjBo^nz$PnKLN#Rnrb`dB2m`2leV=;hsvGmfnpQ?;eZH z*vq++QVzMT@y!MI{%_uwvTVkbcGWgxZ6Av8G)%`y-1n$w1$R2L}ltv@U86Z1`QgzvS*b!-U-^bM*e4(QmDGZwLnx1tKh5hXv zV*tdf(=u>vHlgwbLLM0*D1FdDDz)UYkeDZSN2+-xbXaEp=}y`#$QK6vrz z?%p`=ytC*k!O9z;@uV<@Xuq#BvMB6#RXBSjXJAt{6``yJJ^-w&qa!uy`9ciuA2_8uuhd}QMvkO!L#TCZS+g@Ar5;M zm`|(+$3-K^^u9+FLztzOW-k+loX?Gt!3JH>=Ml{k>WqW~g?tc;h@i_57G5K4w@HA% z#8fJj$a+Gl{Bv=}!6vKca~z;rz*HT2knHX#rTmf*|4|g!y<;P#uE(Ioh1=clYTbf6 z1R8N_B}UC`aN|0;w7PCaJ}w=#hAhJI=so+l=Q^qm&KJM4is7FvP?v02_|rov_Zq)U zA9!x>0{#o(FL)59gAJl++JxFr39;ToS&gsG*j=&RsUBY2#c54cA`i_I0XmweeP=bO zZpN>~!L~*6K-d!1a#p~+JehMa{|QmN)UG(Gd_!UMFhhymfp&9OS9el%Qw0$$;RlVx zHAsQSk!ICA^O7A--i{iKg0)*A9RdQjD3@UuK;)n0wNX- z5i9n<<2ie=C+B%A zOMcn`lwW-?8ntK{!Jbj2Qf0u4k_Ob4r9=KSG5Pto@lWwZ3(}hWOp#1L?2D6Cy6-K*oGaXcScc)d3uTHu;5LJaLeQAx?MwT^-d zcq7M5{7|YD(rV~Wdf=+X?WB{OXSvFQ&cFG=#X4`}NyoIx-Z|lA@-0E&S;0nROS9@^ zYhCDlQ3qP#m;!^`1m{?;78dmz)C>G5)^d+9wg7~b{tt$lE5V(Z^#1yu`y$zo_BrRN z+R0-iX>;No~=khA*=LrgzV0N^9Sb!h8Uhy3Q!tNgeDd zGx1S8OQ~VTuH^Im5g-H_QQ?`Qn*P6YtSkRut|;oir!7Q(&pDmNs}nY@5SB9ALWjco zM7R9%fvc79!*-Aa*6a_}eBY#lXkW*^biRq))JZA{O~3BBTTeWQuXT!fb*OuW=JI-E zR|A*^hXe2{Fce%Z5W7O%4f69`T>lG@&_VTZeV{f*bmUV}{#o2F+yU<(?$sgZur_s} zjf0AS0WM`Azv`(NxX9$B;v-%)yMKxLB+xvKVW5^q?ptw2gZ9y?n;w!0q6d#gn;bbu zG=eHsT?!aY5^YfT(lT#9xJQPv$dXU-W>>Ocxo}(h1Tkrp29-bls-HA83JM0qta-*0 z)0JkHZdFTy-aV@IIQQfb8gPcJ9|rzFgWZkKk)3`e4?}p>jHsi{A7u8m3!9$<8!ne4 zoy5lX@`5x&{prW@cIN!SPE@K(=jb3Mva2{0YWHv=AE+)ro;x6>Tia=t*kuO4@D2Fc zK9lh>Ej<2xJHjxYk~psvL3#EpArQR~(?BNqbLa*7KphwKpkuWjD>WjOJtwbaP5tFr zfotQ_I1kf9>$DJ-rEZ`dC6fWV6t)5tlf+ zv~@gt>~yKToCfnP)-MB(8a_OhyQO!s@(Ybx;F$z8MkJOzt%l~?+mc7Szxm25%DV+!n5NTBtnH69N!s{;=XnF~Z3q4`zAXd0%&B?Vz^JMzc- zKW>+%*y`y6SH69I&{u+JJ24~Ygmz73@O`q9-m`|OPOm*EA5@ZG*~#{MoJ~mSz20O; z8q45SFtB%fpxALq3s{cHRUFI>W6;#sCk2cMvVk@+z-*86R&AaJsv4Nxmpfx_ys@*V zPiYVXuIxV-??w*fB7z~c$4gW&HN1VKK;Q9b^lk>rjE8HChO0W~I8HDA>e0+kUc ztVr$YH)md#UOn~V`wK-ywc6mXXLVi|9-Za1*BNNTpEYh_#AFR97^*XQt``_ij69jk zbHiB!2h~bjanXjXe+K?X)SskEhQjwd zl8C1KB+iy6A@=H-{2CW3w&yyl&ZUo)~U+L5L;u{>H^+|Q9uLv&_Q(}eqil8sDZO>o6>^rB}qImOnfPO4@ z!hXj6)+X94-0;@55;+dzHp5)+lmYL_#mT_xVukNOl>&VN>Nz2!R1ne!beYM*OnIQ9 z@&{F2*g=Foy!6tkT+i*x>~SBft(6Lx_kTUrKcJwo!`gJPiHg!4Z)o)=O8HK#aT?5- zkpO+)*}J3{kC7h7F;!`V0V@m{O5Ia_wjZbcIhCneHB8~ZB_fo5C}92LWmrELF&L;d%I%_o0zQ7h2#1|Vg5doEY9gJQ%1bD8xV{yL75(6v5|5| z62Rqw47?p!0|_ob;?L;C`QjG+O!1e1X2&MHUYhX!3 zODh2QFW}gaw};V2jcc}#XdqLmf0(bcmcn$%IbVdvq@n8}k_I*ss!mV^KVL#A2cRlR zzdm_*aGn3zSXBqQQ4G~#8OyPG)c52C0&p4)7{xO8X&SQ7RkT-xbNk#_Qz}l7c`zW zIaR?*oo|;9CsU?dG3;?;5!7N9<$>*+<8>HW@U^NJn#L{?q=!{LhVV&ttz!pV>Cm*v zBG)Q-od8S22REmF$Ufy735so?rsjl=l32SwLQag3E_#I&Y(*kRdNfMFB))GYt<nkFB%t=C5O7LTucp>4jZ4IU$Wc;(uf9t~Fa z9+>l=(uC|C9h7YVSSV4P0lwzzl!O5w`4FDZZPcweWt#Y%m8&xvXKrVd3Mpvrs5iUH z>SiVMrT`fTF`HJ zrD?Rn`E^1<7+~l~l>!F`5mdF{*Irb#cL~J!OAy=)P=A-24rB|#t#o!$RvPdE@e>db z00Gn|YH_&xM71~(sC>Dtrw4Tq?Rio}vzeKhSIl_AySwior5!N-0*00JYe5bLMk_fr z^|;#H@*BtD6{oD9`Lo`0FWX-Fd-O7D*|hIL_Q#V(LSE5O(|WjyE`~DZ$Ck&cOr9k7 zEcGS`(vc-6rx?8`R>8i=m$vC7QjPq)y&1h!OL5xbsW8F-H@g5CeB!!LMDB|{N>7#2 z{MYWPt$}MM^{-ydSQ<to`$ z6H-itxsAp$Fzj6KzAuNmm9=#f0HLVeKx+?}H?W8W(nV24#jnv=BZTsrh|3>#6gp~t zclSADI6&Rqi1?^$g2KHrP7FVSa{fJ12a_}bU_M1d69|6;)U33|+e8yW>)B%f9e}AO z0tJ`qSt#qBd;-&t)zZ#9c<{hN`!R$Xu%060Xx8LkGZ|^|KAgd3*4E^7#a+NHf`g}q zylT0_dykHm_BI+upz7os6ISm|g_y5gx^m?vC=zw%#q6IWJx*#sAM5DmW%BJvwg&y3 zx|`c7o}O;vjL%0HOXIAe#tp|*fx|r@ABgpT|C3f#KDzZ{bem~(vWi7g!y_TpE7q+6 zfWZTA(?uA}0mQ2c_LS7M9@ z48R0H{HB9L;n3mW(pJ06^tJ$)v6Y^`Fps(# ziM|DsYEZHSv$8AwQK!31Oev>vc%?24!r?s zl7OD-ZGNfP9j#-2lKDfu6fNPOrB8{M(Q%}bNd52ZlaFaOhC**;<{2cb0L7evMu+~x zV;|7nFI91Q3*P(UiW4VB53j%Wj!~;MtbD%SNTUHTFx1%~MP0$k6EIULZmSe9tF_4n zS|+AuI8R|}N4MWOeiC@QPVfEaWf zY(1R497%bKo5OoACX`V^)MV8U%6#%9iBPzjxgB*(M$dwe>qJ|BJd9nR!!N$Wpy2RUea%yu~gShFh;OF)?j@+HQHvmmGHWS%?zvF_HECO zoWLBTdbb5_SvUHlf>sP z$=)w9tE&_lR~#yI>ylrk!c(YG)i3wkWG;L@I1WG)#GUhKEq0DSn_z_Lm}5%e8! z)fry1E^s+08 zvACg`u4Og}#*+p7C$qe>29Ee7oNt-GWU}&Fi7wxkySJjQIZyX}sNJ(v#TsO^XC==k zv-p?xqKka|KTL<`Mf+Kz~AGL`UtL;?)L~m!u zk1(u3X1l+n9pZGj3cPiD9M*!BmLOoFP>j6Ynr4CnB%rY{!*}8bF9cDclwA4?$qqi) zsz7|H7`dj#*)Upvm+%P&QtJPl$q0WLgev^jgq;~%S?U~Ja3RF}*;O7+h95CL-y{&8Yz@P+{+|R18 zk?I1g_9^G=Mx2Vg7}-QyWSzN%(Yc;B_?tsHZ!(|vKk{6E$BX=_Vj0*=fE~fONNh8l zx|WurR|2=XiJyZcBUL_}6G-uVQKq4$6l`b36P%*)3}hu{Zh>Er&3+LBZj7vV4vhvAy*< z6oDKQbqL@Zg2YDQ(8jxB;^17dtjD0oZSZ0D^;|*M^4oge!#QHho8pMSqfsAZN}#WmkGpQh(@!ISMUH$3RP zrslVVqRRJllocFGP$5?AUXn7%o8VWa*4`-`N*}qN5Yk9UM)Xp7PRl^{p^<$n@AlrM z=u8a4WP%MBUJR9l+Jb64F&X}|OxWV*4Q@QpFFAk5^j|48wIc!dm_w4(QX7Q?1v?MP z60PaSeS%=2?ts@63$e}+#Ab#33Hii!|LOV0t#TL2Po|UvH+)ZVSa?20NsK?8+K5EK z9`>^HQtK)2tyVj!Df>Jwv-U0)3&6t-1#ZrSDp zzL4|a$BTw?mKijZ?cNS730|Y?Y}j^Yb|lqVB{uaTag;J3kaMDwn4G8|r|dz84KzYR zMu_s%E~&d=VxJHB7h5t!#opM}Cq)8oco;wX2K|Kh$uOP0!$>7J$U}dzVNk+JhcACQ zWnHR_e$MN)nziiJ2I)EOBU{ii_O;uK@gT?d^`$}B!pW?Oh zdbE_=$?r}Yr^AxLXlWF@siQaM#3AQL42X&BPP-tx9_4kwuDn}R=9FCT-Izj+2Y-r} zAbZw5c5tgBd|@`SJK3@5&N-iaZdx5%@!Q#TC$<~zc0P;lguj;Gj(udJ%0d*u&}Vg!E{p7KyGC{3k%_A8grVJ5rwhqLy~@H3t3evT59f9{ERmk?~0C!NUiFii++v<}2KtRxq$V?s5l5|x3%?Q+TW7Zx6-%pX3&R%c(IIYdNpYB)hzX$s{xDQrlmxtS(@ZvfDF#5IP zM;{O6{R@$-o)g^(_s1G^ZGyf?_DPwYC>7edos)haJ*sn!ni*cOnS1K@_J)XG>aprk zo6mIraOPRr>nIP32qT~G2Hd#EB_}yq|GsTiA8`GvXlX|ffaX3rOeeYNPWq(4o$d1S_LvzeKhNpMCX>&2_OX&xOfPupfCf=yqOxrTe)dK6NO>sdEadHNTp z2J%jr({ud&0*s|5l8Inlnwy(RMyh21kY5XofQ7;FNtru3Q#c6k>ao=0rr2w-o)_Vi zb)qv1OaKKx)Mg)#k9zi)VOdR_ZCo zR7W6yBKu)y;=(Cqk#dm_7q7lldo}Zu^SP;DsgcGW@0;6W7i}c4cH}lpM_mEJ9&^x8UB1Bt+UOw9nQ-HR}cK% z6OSj%t#;pU-IP~#;@|&Bdgu(-9=|<52Ya#&uS*NPDgF>x>%j zy}cBfBa?_x?LQaMA3>slzJm3Hi2}PTEcB~ED%HWB2@Z<5kHL+=WTYQChHS-s7`Aa% z)0l0v@V?*RcMSS&V0g|ctTh;6;%35)GCRwG$353w3J#(dNaVt1h9#VuC7>AG z61Y%AGv!rhZq0R1KVUsi%}XJL9}e+bZ~VL7{NIwGOXlR+beU}A9F>{y>jgY=6`wCVV* z@7HTNdXPFDGJb%Z>ecCCNh#v5y)s?6WVWSB@CL(oTH(gvzlrmR6M-OLONTy-1QcU853ZDxtUgDl_maF%d;M#?L znJ4Mb)Epg0pH$GldqWc8pWh}MI-kA&_hS5lf}jFDC@jP+fTNZTr~SA=Ehpj=y%OAe zH^Y0hXWpyvk7Hojh#wt3Re(WgdXloT4+j4#A587-B_FsvBy~M|>~yru@AK!k9S%91 z`26R4*Gy)kf8O796lWZaihp)r#Vhr zgbSzP+PNpj1^gfctnBQF`7r|_A#i*&l)HED>VsdxF|A#s6hc*aZ4D1`&3Vp^RG4ON z+p&WKPb{a&huP@6(J;LV_YN)Mp~c>PKTY}Yzvnk)W_H%$zk{CVs6fN0s-*-hH> zy@1e5Z~!GqaTTfxlu7tZ9{|=hMNA9aBJwBdmoF=vI(@pt*7)dAcBC3OznzL8 zuJBjKmmdm0|FJSK zqn1hJpKfjXpZ}Wm$?;TH>+AD54~G8b1^7?tSlYW=T0QB+gJZ5=9~Qf-iREVu-cu$D z7ADlN?3#4GYwK@hcDj9<-M8k-^`fEbSLdo~eZtujvT(P{Vu1wk7k@2iOkpqh4$8q{P_ z9)XbP!K|lvtOA=~0%?|x6H-MGL5XRCL+Ljko(s&y0@Mkb5 z2S)&EIA~X0Z*OiTaqYSrb?xnh_rT$e#O)2qGUFb*12wCgBzo&inl^mhOSE&DspWKw9eN<@e?y@VV3L7;Vtiytf z9_&k<*1d7wMrPo_!Mh7}HBR;G7JuqodJ$J6Tp%p-QsfZNj=CWFeeA=W%p0sUuFvK- z8-4Qd@j0o|zx?f)^xR?3ck+e_O|$b0Ptxj`)4T+1Gdb3+3x;&kHqxDzH_CwQ9j|Q~ zHYXJAt`~Hk{hCG87SSI*CS!@{H|b}qII+IwNaq<0Aa9_Kvz3R(=O^1Ead@)QLTr%d z9!MDxyb97?0e<+Mg3{9UPj~8wut6rfnw~D{f9;yPmBm8jlJ6!OE(a1-fIJe@5)>9z zieh!RPFuhfQ8s?wI9DepClu!;oqf=A-~%mMw>lchoYIbt#Nlz&`TdV#BNr7|E*o1| z2u}>Qg%%bTt{d{e&rbbJj!Z|^D?3C0*)xc)>V}4~wA$V6IiH9<@keY&hlv}^5EMjb&v31-H-heEAguG0{S8Ry&2~OE=-kJgN6cB88yf{`1fJ9v7^NBx~~0kO`{mnvLTU)C6~3EE}A6(3DabISdR8)H6!r z9+%*l_uYU@X6ELCtikV5-h-}|-LZqdDX7d0$22d4Z#l5hTGQEi2ck~&(Qho8YV^EE z*?`D*Bj11%bP$;CBcoLkdxWA)z&s$OT#6HfEhjH&&v@W=NJ&cKw2uP^{ElwX zgg%?UFmnN@iEFVum@dc2W~$G4F@!{p&z?OC4{6$o3V@-j;FgFZ9cqu*=FK>({AS4r zmMK)Hbj-}!mX_VJ5g%0TFT)4JQmwH6AuCoBCgTJo@<*o57m>18$AT@Cm2NFfdLr};UIcul}YLS!MD zh{4z)syZE9Wq$A79%f~K(4hpnYF@m!&3mRHfq}UmhXAj#_xMaNs@jD{b z;AC_%kVyD-VQv~nSZMeX0x>Eoiilzu&}4sxQpVsFq9H`$)L7~?5sJrbUH;NA0!h-( zgYxBwAc-61ti||1xaW_ONp?0iKOCY;(%a=Nb_LtQ&i@*ZL`oFN+zmJPA3A!}AAvM} zMo#g0h>FMwu3v$G3Bx}qX(x$Yk#&PGzoB5s!=R{^lzjL23_nMBs&HSt)XMJDQWT~gU za(UxP<9yK{etlBU%H3zgny*};aIe0$IjsswcevXb7#MbCZ8ijKCqWlOLvc^Nv?g;X zyjV2Uu=iYP(Ox^)USRA-;R@COO{s>#h@uA${>ZGXog@K8v8`PVvaqtMY7fAOlVY59 zxd-44F_Ba3N5AcR0{R%ILl@&T@c`w`(6NvVynl2{R9sv*o-?7!D3G>k1Jti#3WFFG zLUy6Ev(v3R&ei`8BQgtay^mA;RgNGoCLj#;k%pLIc#`C==NRkY)Ero(vg9Ep< zJv?%cObW9Gqtk+LSOG$Rf5jm1?5=^1ML!l(e9q7^l$g3heXb6C1D)7EY@e#XExirFlrn~j(DzzHr8bdpaUNofIoA{@j;#5PI8QVfBLttNk4=Lh8UT9_y~f(vZ?7 zu?YV|u{4uOzgQ=hw)=cYi9;_iEvKX4-lUxC4_nXApLK8aDU9yG7p0{dhPf_l0ETid zk3BM~adCFOpPkJG(irNv8cCcY&2o9{$Nj7 z+#Y0=gdx-tXVuuy;D^omvV%rVa7aioS$%N)F)1`ZW!ojBf3w^5`pnRXk3i|y7Di2B zR(gEmIX*c2_=qO6-7Y;xsv45y04N3I>@Yv$oNKN%R9-i~dpQkF#`y*jn9#(`ky%D zwVJ*4?(1)mlw9jG*CiloXqh{74QAl;obN5>`^Mc(=Nw;p)_X}Krkwt!6PcO}tWbDG zv+2?A7#uK_l!C@0NjC;c}Ew2^9uYryUP~KzH zyzq6Xm&VK9e%OC#^UeKmd(hA8xg4~&Pf!0%E2W_`cPPIEo`gUoEL-uFWOd;fidEsL zj9Lh)^b+u%5+tq{JLZzJu$DkPNeU1qRB-HstC^UD z;6_3$u2|rX&NU>k7+2ot*?H;;cU&{T*s9dVkoWKPa~+`O5!ek)7y?L8c(~@tlegdN znwcdT)g>cmjfDq^2A2V>XpZU*l^hHK%Q1$Fn;=fpty!aKZoZL{`0(LM;GB%p$2pK~ zMU6l#GQz?u3KquGGE9n=Q?e)9rzTqLV2A1-ypX5FasE+nWYCW+s5xK9n~W>k7bfK3 zzEf~Ai#FVDS=Z$w-$0D=KX{Sd`1#WcwgE+_d6)vACWheoc2=G`A$PsMzn@I@44fYP zd!x1ZsTXue!BI@I7Zk^bAjrLLn|C()Z$0 zw=Qb!J=Z;`Y9ont>g!)W!h8dx8qIkK9Dpcu9li|6 zcZ!XZVEDqT@5zx&JZY8E(^IrCKRW_=jZ%KM{O-h8uhs((kv0mrGT3TDj-=?)51{=q zdV82dfk(3+gjY-OD}XM){)%UP2ETwB7)2Crf;aa=D)#THhy)hgC?ms$_8oqwo@(KN z5MM{fME`YcaHh}&Nox%#vGy~+&I29M4eh^Mea>^HCk1c;pSa!R!f+Hi-}a+z;YB8e zZ=yv>?}ZQ*Epuo^x=%tu)iZ1O>Y{8lv6Plv&6%XH^fwtnsHAc zQ=5arTVN~yz6vg7-X7e?2;4_PJOUqX=ey4XG+$V#mbT6L*N!BVn5oZmQ$7#63|4-4 ze<(jMd6#RKt1?u0vRD0|8&?p1GE(4m406Q?)_2MuKLNnMYq*fc4ezH8i@EAtCo?~9 zXTR(#o017iqnj{lYO-M5>Kd_2I`FNVj@*DO$n6ofU*rLhP6$gDSU@CMuw1UmfeG*h++> zj!tlj?t2;XS7nEKf&~@!!vis2QLNZzo`v16gjvd6(l2$tyW95Udt`;q-Y2k&icJE_*4jvR@b<8}~3ntIXD5QO_|QN+@;<)-3}h7z9I=vdNHM?;oAPFF5j^e&2msP2&g2J)uxarY*bt0DiJ zWDs0Mc%Gm^b^H>%)Rvo6s51(W#&SdiQBY@BtUMS_eZ)x)zJ7iz{QMEv_fX)vd&uK8 zd{K9Rj{@?cl$4Zw;g6_YGC}b%efX8n*(mOb)g}grJ zcEcc#!I!jnj@ZP%@ZYL6rBakXUH}&WpMS+9z}h)7VGjbFDfmDvjvb2Gy>5L($8~+H z#y#&>uStA7sO|JZR{nz)XmJAh+r1`>%rX+6KE3EpJ7Bp)jwzsr5hpqi0kB!XMH+NY z=cvuDk2ap%^qWIP<}V)~bble&UVLXLA}RY)uaFibcEC`O=Fmi6YBa2>H6n>Eg?%E? zf>Kf}Fg|FUI1!T_Xs#{HI(;lxLt~+|Ws!4xfvSMg!jP-0xLa6=-Wh+s+BwcU3M-j1 zTR010JJ_k`WaqEZtQ9D_`_Ie)DGg=$>-z%eyLR~ThsQ~Qa`B=H-9#|?5eqU82M^o29`WlUgNlP*!n}u?=o#~qIO-=inusA1rOTst;QC?D2;nstiQv>*f z?uMPg$kx@u!s6|0)c%KV{TUTNZ~^F^LKunS9T*3Ig8()(6m(iDx*1awfeH^Vgys}$ zIXPFMj6(+wFjYWrnn#XAuk}Ga zOwOhjeJI?0&uv05ASTcya@bGYA+z08mjDqQW zGRtP2%EFX+-uy(%^}WJwqi;m{&P-fNaY-@5ZoV)(lnhE?m7i(-1(M&#MhJuLS8TQf zh2lQ(S}*E;d}82-ZX=zb*r$ek7DK^ul16Qy?bx27!zBEo62!_+E8w{nZHtO)k8R)6A{`2Q-TPs$Z`D6K=fV|GnB$4%}{Wz;XaGA?Nb;L zyw+Q{Z)dX0pB5=DDH)k8SmXn!*-6F@B;bRuS~p&n9iY}xY224EFk^RO#@zW8MG61T!`4Z4dE z&Zu3#LMGdut;7*p=Gc_%SyEg~dLpIe&oGcGf?5&*E&G;u=|JCDo}!na1)hkK2o?u8 z8VpK$?z5*)*PzGcGJB8X2O*>5()Epu);v5MjEn?nKLO&BLXP4BfsKYq_cJo;o=UMs zE#mfFMVpv1vy6L1f-zNS^JCXhA>gxuf(fA0{1J#6MDsB25QEJ7-oCyO%p6)wmmIf| zq_*)x8DqN~nGa<|RC7vkuWk+O`B$mMo^f*ZS1@x%xrw>QZUoImGFKj5yA11u9ExrzxBVf z4Yg7B>JHV|kxdP03BsKt%z$bg_C?WH z6`6%`m^ne7>uN!8&#O4j8CDrL6 z;>XV#FuOR&y*h%UpJw^;*!+~{ztHlfFs5+ z4v~n?Og*|Kpo`AvVv`XDrce|eLqPE}$z**oL+?+w_6oxv>3`~JIi}GSfCIcw(%}R% z*rh3=paQ^=Qdn6Tq#vYU-%(|%Dl<(DeUNz;Ts?GQ$t377_Ll>D+keP%V z)Ki^zQuj!{r_)kzeQm>}TAlex8QF2o9HZYReo5>4lzk^be%bDyPOtVc(hrjMl!QCE zWrFT$8@FuPe{v9QYDDLf;%?k9o6JO4PswCL2W^WAMn_63tKZWl0#XNFr9OU)rsNzT zp*ixoxVeLXNMc%6)6-u){J0cl1Cj}X;#{ZFO^W=Db;>1%407xR@eBYNU_k$iq<}s| z=Yx(p&>s3mntX%iN-Un2m!l4*n4GYxe)sN0?jsbaldYGS*RNlX4jq2LQs}HnsAVqQ zsy`bIjk~VaDSgr1yBB%K#ge6w(hb!2ay)d}0@1xtqg)qLFa|K01R8GFM$;aGldHAt z;I~9g3+>`Qs1WQSd)(Y|jFcd95+WRXufBl+eaA#@1giTIRHMr%FqndCb1F=ZbH{$47uz zL<>(r5D2K#NT)*z$)us6A*HYwJE1cHC;>0*VZ@9SIH9AlUAsaYD(e=77V`nZRJJ{QnQAno_ z2s%l4%_uGwrIWpup1zXvmu*o9GSuFg0q?kNGH zA_wpFISD8bcQWY=h4r-v&o3ZBK-HTU5gyVLhTmt-LEJc>7waoTAcwyA;7T7p6;E!? z(3J=$wep3w!)%iFdSX4&&1byEkL?<*+(`O*_3IW`BcXxa%>y;eT#uel@z%7w<(a3# zNph*Jt&Q!ojomZt?*WIi%g;F6XTNyxh+U52jL*H4$a9k?mhdXi!Didz-`}}QRIE_M zA@y4OGT&+Ms07eI*sE1ZOuE zeuss*%aK`q=h2v#pwKU#V+ZY+0oht#bS-*!4`)2jnt7!(+&;-S>th0EHF}?un)+2j z?mDBxo1^w_h$4%vVDuXiapgQ7FvR<{3+!(`&v^FhdzF+-bBx4)7E@+Mm8Ap>BOP{p zoZvpG*8{~B4FSn^pkjs==9Mg#`AWWPPA90@2X$$GvTpQ~pC5=}GEyS-@v2pdUMtcz zmP;_QFG&I%%2)3A#Q(OureMs1DhWsw%$B+i8bmJUD#R4CbY8vLQ zFW*yB@)oqtD(L#mZqg}#EVn5~Q5+*Z*TG1z3G)UapEP2E`?X4eGKmrfd#Fo_XUPF{=?qFcJSzx=S7Eh7N2C_MgQ!DgjaI`xI>1R{Qok0Y_BS9R_W>=h9= z_6lFG`cCR$q?#ZWB_2;DjpQ;<4GeTni!XU)7A&!pA(aEUMguGIEpY=OnX#!z@-f$%Kj{ zNAQh#2gE08N3V(r3KsPa>;?(J(iYrk9dL9@S>ENbJY{wQCEr*`-$y?(vy4xJk$Z(l zr<(=p>#iz-6=h6_jOXa5OKt3RGREANS1qgf@9H}E@rng}ykg*kt85SFR3u8?uzgm1 zM|k%>6$L_m7{fjNg?~9IsNj73HXxXzvxPMnx@;W7pHE-Nvt5wB6FXSdWKQWmL*qI# z+K3i8gqZnj?kxR*%F=8^K@JuO)JAM?G~QyXdFCl8Y3b$At>;)m%Wx%NS#_&hhs(!= zElFGYC_Nq{2^&dn6hp6-$>|OX4+{zeR{0g#E;9LisxoJ%-pg-Xz;T$4*tK6T-50nQ z&=PX5nB&xujDLNT9MmW5c9H4OH}0OpdJFBn_*!B#hsxZ2%GXvi(tSoqVx3ny8WECq zjr#g)C(*-6=w=Fno47gDTWK=C%u!f8FBD(Tplt4aFe|%KY*`E&& z>L5;pKs`r?-gjd5VXE;T+i$&Gng!lP6P?yhO>R^l6b(pzXv3x_ChH#O)ZBi9@_Tbp zzPH}9e5Nax(gM=jiEpvP_FuPBCYl*rKY$sWskl{a418UxGi=mRU6~f9ViR1Joh|bG z)Kjo%*U*^*V+EhhHk{srVwktT!dOn2Q{cnSUvDnEKA`rjbn}ae?|uJPJPC_j`0ktE z#rt6NK2`s?{iLH)F8~Mh;Xzf}g>Ao-vCT8gTlv&5_k7pe8!>l6?!3wO+)?f#bIQ`( zYdqdCociZ$(;ad6Yw8!RP(F&tHuov>BAUON551czu9)(rrNo5r%dDf3UsUVuoBY}o}E|9rJ~ zfjw^n--PgrM8D~w-T0&AUHKFTTr0RoB({ zS^i*t#1a*JtUOKAWv8u(8TB9Xd1acr8yfNBpS)uSiR<9c+LToMc*eYZo7c4CJBtLp z695$EvktFj?;Z?bI$aa@9cw%Fto_XwvuQ}$`< KYCKan@%>-*c;nvy literal 0 HcmV?d00001 diff --git a/docs/reference/node_reference.md b/docs/reference/node_reference.md index 0941656..38dd84e 100644 --- a/docs/reference/node_reference.md +++ b/docs/reference/node_reference.md @@ -89,6 +89,7 @@ | [Pandas Show Series](pandas_show_series.md) | Displays a Pandas Series as text. | | [Pandas Show Text](pandas_show_text.md) | Displays a string. | | [Pandas To String](pandas_to_string.md) | Converts a pandas DataFrame to a string representation. | +| [Pt Show Size](pt_show_size.md) | Displays PyTorch Size object as a string. | | [Pt Show Text](pt_show_text.md) | Displays PyTorch tensor as a string. Note that the tensor is partially printed out when | ## IO | Node | Description | @@ -128,6 +129,8 @@ | --- | --- | | [Numpy Float Create](numpy_float_create.md) | Creates a NumPy ndarray with 32-bit floating point precision | | [Numpy Int Create](numpy_int_create.md) | Creates a NumPy ndarray with 32-bit integer | +| [Numpy Show](numpy_show.md) | Displays a Numpy ndarray as text. | +| [Numpy Squeeze](numpy_squeeze.md) | Removes a dimension at the specified position in the input array if it is of size 1. | ## Plot | Node | Description | | --- | --- | @@ -283,6 +286,7 @@ ## Transformation | Node | Description | | --- | --- | +| [Pandas Feature Split To Numpy](pandas_feature_split_to_numpy.md) | Splits a Pandas DataFrame into feature Numpy ndarray and label Numpy ndarray. | | [Pandas Horizontal Concat](pandas_horizontal_concat.md) | Horizontally concatenates two pandas DataFrames. | | [Pandas Horizontal Split](pandas_horizontal_split.md) | Horizontally splits a Pandas DataFrame into two pandas DataFrames. | | [Pandas Join](pandas_join.md) | Merges two pandas DataFrames based on a common column. | diff --git a/docs/reference/numpy_show.md b/docs/reference/numpy_show.md new file mode 100644 index 0000000..4c5086c --- /dev/null +++ b/docs/reference/numpy_show.md @@ -0,0 +1,17 @@ +# Numpy Show +Displays a Numpy ndarray as text. + +## Input +| Name | Data type | +|---|---| +| ndarray | Ndarray | + +## Output +| Data type | +|---| +| String | + +


+Category: Numpy + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/numpy_squeeze.md b/docs/reference/numpy_squeeze.md new file mode 100644 index 0000000..8445e2e --- /dev/null +++ b/docs/reference/numpy_squeeze.md @@ -0,0 +1,20 @@ +# Numpy Squeeze +Removes a dimension at the specified position in the input array if it is of size 1. + +Specifying a tuple of dimensions is not supported. + +## Input +| Name | Data type | +|---|---| +| array | Ndarray | +| dim | Int | + +## Output +| Data type | +|---| +| Ndarray | + +
+Category: Numpy + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pandas_feature_split_to_numpy.md b/docs/reference/pandas_feature_split_to_numpy.md new file mode 100644 index 0000000..e7ce852 --- /dev/null +++ b/docs/reference/pandas_feature_split_to_numpy.md @@ -0,0 +1,24 @@ +# Pandas Feature Split To Numpy +Splits a Pandas DataFrame into feature Numpy ndarray and label Numpy ndarray. +If output_1d_label is set, label will be output as a 1d array instead of a 2d array. + +As shown in the below screenshot, this node can replace multiple nodes that are used to split Pandas DataFrame into two DataFrames, convert to NumPy, then squeeze the label data. +![Pandas Feature Split To Numpy](../images/pandas_feature_split.png) + +## Input +| Name | Data type | +|---|---| +| dataframe | DataFrame | +| label_integer_position | Int | +| output_1d_label | Boolean | + +## Output +| Data type | +|---| +| Ndarray | +| Ndarray | + +
+Category: Transformation + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pt_show_size.md b/docs/reference/pt_show_size.md new file mode 100644 index 0000000..8830fb1 --- /dev/null +++ b/docs/reference/pt_show_size.md @@ -0,0 +1,17 @@ +# Pt Show Size +Displays PyTorch Size object as a string. + +## Input +| Name | Data type | +|---|---| +| size | Ptsize | + +## Output +| Data type | +|---| +| String | + +
+Category: Display data + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/modules/numpy_wrapper/numpy_show.py b/modules/numpy_wrapper/numpy_show.py new file mode 100644 index 0000000..b0aeee3 --- /dev/null +++ b/modules/numpy_wrapper/numpy_show.py @@ -0,0 +1,57 @@ +""" +This code is based on +https://github.com/pythongosssss/ComfyUI-Custom-Scripts/blob/main/py/show_text.py + +See credit/credit.md for the full license. +""" +import numpy as np + +class NumpyShow: + """ + Displays a Numpy ndarray as text. + + category: Numpy + """ + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ndarray": ("NDARRAY", {}), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + "extra_pnginfo": "EXTRA_PNGINFO", + }, + } + + INPUT_IS_LIST = True + RETURN_TYPES = ("STRING",) + FUNCTION = "notify" + OUTPUT_NODE = True + OUTPUT_IS_LIST = (True,) + + CATEGORY = "Data Analysis" + + def notify(self, ndarray, unique_id=None, extra_pnginfo=None): + text = None + if unique_id is not None and extra_pnginfo is not None: + if not isinstance(extra_pnginfo, list): + print("Error: extra_pnginfo is not a list") + elif ( + not isinstance(extra_pnginfo[0], dict) + or "workflow" not in extra_pnginfo[0] + ): + print("Error: extra_pnginfo[0] is not a dict or missing 'workflow' key") + else: + ind = ndarray[0] + text = [str(ind)] # wrap in list + workflow = extra_pnginfo[0]["workflow"] + node = next( + (x for x in workflow["nodes"] if str(x["id"]) == str(unique_id[0])), + None, + ) + if node: + node["widgets_values"] = [text] + else: + print("unique_id or extra_pnginfo is None.") + return {"ui": {"text": text}, "result": (text,)} diff --git a/modules/numpy_wrapper/numpy_squeeze.py b/modules/numpy_wrapper/numpy_squeeze.py new file mode 100644 index 0000000..c4cfa3d --- /dev/null +++ b/modules/numpy_wrapper/numpy_squeeze.py @@ -0,0 +1,45 @@ +from typing import Any, Dict +import numpy as np + + +class NumpySqueeze: + """ + Removes a dimension at the specified position in the input array if it is of size 1. + + Specifying a tuple of dimensions is not supported. + + category: Numpy + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "array": ("NDARRAY", {}), + "dim": ("INT", {"default": -1, "min": -1, "max": 10}) + } + } + + RETURN_TYPES: tuple = ("NDARRAY",) + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + def f(self, array: np.ndarray, dim: int) -> tuple: + """ + Removes a dimension at the specified position in the input array if it is of size 1. + + Args: + array (np.ndarray): Input array. + dim (int): Dimension to remove if it is of size 1. + + Returns: + tuple: A tuple containing the transformed NumPy array. + """ + ar_out = np.squeeze(array, dim) + return (ar_out,) diff --git a/modules/pandas_wrapper/pandas_feature_split_to_numpy.py b/modules/pandas_wrapper/pandas_feature_split_to_numpy.py new file mode 100644 index 0000000..906507f --- /dev/null +++ b/modules/pandas_wrapper/pandas_feature_split_to_numpy.py @@ -0,0 +1,71 @@ +from typing import Any, Dict +import pandas as pd +import numpy as np + +class PandasFeatureSplitToNumpy: + """ + Splits a Pandas DataFrame into feature Numpy ndarray and label Numpy ndarray. + If output_1d_label is set, label will be output as a 1d array instead of a 2d array. + + As shown in the below screenshot, this node can replace multiple nodes that are used to split Pandas DataFrame into two DataFrames, convert to NumPy, then squeeze the label data. + ![Pandas Feature Split To Numpy](../images/pandas_feature_split.png) + + category: Transformation + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dataframe": ("DATAFRAME", {}), + "label_integer_position": ("INT", {"default": -1, "min": -10, "max": 1024}), + "output_1d_label": ("BOOLEAN", {"default": True}) + } + } + + RETURN_TYPES: tuple = ("NDARRAY", "NDARRAY") + RETURN_NAMES: tuple = ("feature", "label") + + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + def f(self, dataframe: pd.DataFrame, + label_integer_position: int, + output_1d_label: bool) -> tuple: + """ + Splits a Pandas DataFrame into feature Numpy ndarray and label Numpy ndarray. + + Args: + dataframe (pd.DataFrame): The DataFrame to split. + label_integer_position (int): The column integer position of the label. + output_1d_label (bool): If output_1d_label is set, label will be output as a 1d array instead of a 2d array. + + Returns: + tuple: A tuple containing the feature and label arrays. + """ + num_columns = dataframe.shape[1] + + if label_integer_position < 0: + label_integer_position += num_columns + + # Validate label_integer_position + if label_integer_position >= num_columns: + raise ValueError(f"label_integer_position {label_integer_position} is out of range for dataframe with {num_columns} columns.") + + # Extract features + np_left = dataframe.iloc[:, :label_integer_position].to_numpy() + np_right = dataframe.iloc[:, label_integer_position + 1:].to_numpy() if label_integer_position < num_columns - 1 else np.empty((len(dataframe), 0)) + np_features = np.hstack([np_left, np_right]) if np_right.shape[1] > 0 else np_left + + # Extract label + np_label = dataframe.iloc[:, label_integer_position].to_numpy() + if output_1d_label: + np_label = np_label.ravel() + + return (np_features, np_label) diff --git a/modules/pytorch_wrapper/pt_show_size.py b/modules/pytorch_wrapper/pt_show_size.py new file mode 100644 index 0000000..d8b154a --- /dev/null +++ b/modules/pytorch_wrapper/pt_show_size.py @@ -0,0 +1,60 @@ +""" +Almost all of this code was taken from +https://github.com/pythongosssss/ComfyUI-Custom-Scripts/blob/main/py/show_text.py + +See credit/credit.md for the full license. +""" +from typing import List +import torch + + +class PtShowSize: + """ + Displays PyTorch Size object as a string. + + category: Display data + """ + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "size": ("PTSIZE", {}), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + "extra_pnginfo": "EXTRA_PNGINFO", + }, + } + + INPUT_IS_LIST = True + RETURN_TYPES = ("STRING",) + FUNCTION = "notify" + OUTPUT_NODE = True + OUTPUT_IS_LIST = (True,) + + CATEGORY = "Data Analysis" + + MAX_NUM_ELEMENTS_TO_DISPLAY = 100 + + def notify(self, size: torch.Size, unique_id=None, extra_pnginfo=None): + text = str(size[0]) + + if unique_id is not None and extra_pnginfo is not None: + if not isinstance(extra_pnginfo, list): + print("Error: extra_pnginfo is not a list") + elif ( + not isinstance(extra_pnginfo[0], dict) + or "workflow" not in extra_pnginfo[0] + ): + print("Error: extra_pnginfo[0] is not a dict or missing 'workflow' key") + else: + workflow = extra_pnginfo[0]["workflow"] + node = next( + (x for x in workflow["nodes"] if str(x["id"]) == str(unique_id[0])), + None, + ) + if node: + node["widgets_values"] = [text] + else: + print("unique_id or extra_pnginfo is None.") + return {"ui": {"text": [text]}, "result": ([text],)} diff --git a/pyproject.toml b/pyproject.toml index 4a8d377..3dbe4ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "data-analysis" description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI" -version = "1.4.2" +version = "1.4.3" license = {file = "LICENSE"} [project.urls] diff --git a/tests/numpy_wrapper/numpy_squeeze_test.py b/tests/numpy_wrapper/numpy_squeeze_test.py new file mode 100644 index 0000000..1d7b10f --- /dev/null +++ b/tests/numpy_wrapper/numpy_squeeze_test.py @@ -0,0 +1,58 @@ +import os +import sys +import unittest +import numpy as np + + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from numpy_wrapper.numpy_squeeze import NumpySqueeze # Importing the NumpySqueeze class + + +class TestNumpySqueeze(unittest.TestCase): + def setUp(self): + """Set up test instance.""" + self.node = NumpySqueeze() + + # Define test cases: (input_array, dim, expected_shape) + self.test_cases = [ + # Case 1: Squeezing a singleton dimension + (np.ones((1, 3, 4)), 0, (3, 4)), # (1,3,4) -> (3,4) + (np.ones((2, 1, 4)), 1, (2, 4)), + (np.ones((100, 1)), 1, (100, )), + + # Case 2: Multiple singleton dimensions, squeezing one + (np.ones((1, 2, 1, 4)), 2, (1, 2, 4)), + + # Case 3: Squeezing a negative index + (np.ones((2, 3, 1)), -1, (2, 3)), + + # Case 4: Squeezing all size 1 dimensions + (np.ones((1, 1, 1)), 0, (1, 1)), + (np.ones((1, 1, 1)), 1, (1, 1)), + (np.ones((1, 1, 1)), 2, (1, 1)), + + # Case 5: Squeezing a 1d array with a single element to a scalar + (np.ones((1,)), 0, ()), + ] + + def test_squeeze(self): + """Test array squeeze operation on various dimensions.""" + for input_array, dim, expected_shape in self.test_cases: + with self.subTest(input_shape=input_array.shape, dim=dim): + result, = self.node.f(input_array, dim) + + # Ensure return value is a array + self.assertTrue(isinstance(result, np.ndarray), "Output is not a array") + + # Ensure result has correct shape + self.assertEqual(result.shape, expected_shape, f"Expected shape {expected_shape}, got {result.shape}") + + # Ensure result has the same dtype + self.assertEqual(result.dtype, input_array.dtype, "Dtype mismatch after squeeze operation") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pandas_wrapper/pandas_feture_split_to_numpy_test.py b/tests/pandas_wrapper/pandas_feture_split_to_numpy_test.py new file mode 100644 index 0000000..7b4f5c6 --- /dev/null +++ b/tests/pandas_wrapper/pandas_feture_split_to_numpy_test.py @@ -0,0 +1,55 @@ +import os +import sys +import unittest +import numpy as np +import pandas as pd + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from pandas_wrapper.pandas_feature_split_to_numpy import PandasFeatureSplitToNumpy + +class TestPandasFeatureSplitToNumpy(unittest.TestCase): + def setUp(self): + """Set up test data.""" + self.node = PandasFeatureSplitToNumpy() + + # Sample DataFrame + self.df = pd.DataFrame({ + 'A': [1, 2, 3], + 'B': [4, 5, 6], + 'C': [7, 8, 9] + }) + + def test_feature_split_last_column_label_0(self): + """Test splitting with the last column as the label.""" + features, labels = self.node.f(self.df, label_integer_position=0, output_1d_label=True) + + np.testing.assert_array_equal(features, np.array([[4, 7], [5, 8], [6, 9]])) + np.testing.assert_array_equal(labels, np.array([1, 2, 3])) + + def test_feature_split_last_column_label_1(self): + """Test splitting with the last column as the label.""" + features, labels = self.node.f(self.df, label_integer_position=1, output_1d_label=True) + + np.testing.assert_array_equal(features, np.array([[1, 7], [2, 8], [3, 9]])) + np.testing.assert_array_equal(labels, np.array([4, 5, 6])) + + def test_feature_split_last_column_label_2(self): + """Test splitting with the last column as the label.""" + features, labels = self.node.f(self.df, label_integer_position=2, output_1d_label=True) + + np.testing.assert_array_equal(features, np.array([[1, 4], [2, 5], [3, 6]])) + np.testing.assert_array_equal(labels, np.array([7, 8, 9])) + + def test_feature_split_last_column_label_negative_1(self): + """Test splitting with the last column as the label.""" + features, labels = self.node.f(self.df, label_integer_position=-1, output_1d_label=True) + + np.testing.assert_array_equal(features, np.array([[1, 4], [2, 5], [3, 6]])) + np.testing.assert_array_equal(labels, np.array([7, 8, 9])) + + +if __name__ == "__main__": + unittest.main() diff --git a/web/js/ShowSeries.js b/web/js/ShowTextGeneric.js similarity index 90% rename from web/js/ShowSeries.js rename to web/js/ShowTextGeneric.js index 62e3162..1a68f01 100644 --- a/web/js/ShowSeries.js +++ b/web/js/ShowTextGeneric.js @@ -10,9 +10,9 @@ import { ComfyWidgets } from "../../../scripts/widgets.js"; // Displays input text on a node app.registerExtension({ - name: "HowToSD.ShowSeries", + name: "HowToSD.ShowTextGeneric", async beforeRegisterNodeDef(nodeType, nodeData, app) { - if (["PtShowText", "PandasShowSeries"].includes(nodeData.name)) { // This needs to match NODE_CLASS_MAPPINGS in Python + if (["NumpyShow", "PtShowText", "PtShowSize", "PandasShowSeries"].includes(nodeData.name)) { // This needs to match NODE_CLASS_MAPPINGS in Python function populate(text) { if (this.widgets) { // Clear all widgets on the node