From dfe9d45bbc23feb80db17c730260544c6c556514 Mon Sep 17 00:00:00 2001 From: zhengp Date: Fri, 4 Aug 2023 10:20:04 +0800 Subject: [PATCH] add installation and example to readme file --- README.rst | 60 ++++++++++++++++++++++++++++++++++++++ images/readme_usage_0.png | Bin 0 -> 15801 bytes images/readme_usage_1.png | Bin 0 -> 35964 bytes pyproject.toml | 6 ++-- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 images/readme_usage_0.png create mode 100644 images/readme_usage_1.png diff --git a/README.rst b/README.rst index 5471528..70026f7 100644 --- a/README.rst +++ b/README.rst @@ -8,3 +8,63 @@ XSpline ======= Advanced spline package that provides b-spline bases, their derivatives and integrals. + + +Installation +------------ + +XSpline can be install via + +.. code-block:: bash + + pip install xspline>=0.1.0 + + +Requirements +------------ + +XSpline requires python 3.10 or higher. XSpline only depends on ``numpy>=1.25.1``. + + +Usage +----- + +There are two main use-cases. + +.. code-block:: python + + import numpy as np + import matplotlib.pyplot as plt + from xspline import XSpline + + spline = XSpline(knots=[0, 0.25, 0.5, 0.75, 1], degree=3) + x = np.arange(0, 1.01, 0.01) + + +one is to use XSpline as a univariate function. In this case, user must provide +coefficients for the spline bases. + +.. code-block:: python + + np.random.seed(123) + spline.coef = np.random.randn(len(spline)) + y = spline(x) + + fig, ax = plt.subplots(figsize=(8, 3)) + ax.plot(x, y) + ax.set_title("Usecase 1", loc="left") + +.. image:: images/readme_usage_0.png + :alt: usecase_1 + +The other is to obtain the design matrix for other modeling uses. + +.. code-block:: python + + design_mat = spline.get_design_mat(x) + + fig, ax = plt.subplots(figsize=(8, 3)) + ax.plot(x, design_mat) + +.. image:: images/readme_usage_1.png + :alt: usecase_2 diff --git a/images/readme_usage_0.png b/images/readme_usage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5d472501bd5ca0207415399dab1f5db3e373ce GIT binary patch literal 15801 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 b`%pa2S{G5E_#RxNhL{>!8kC$x{quhS`{E~@ literal 0 HcmV?d00001 diff --git a/images/readme_usage_1.png b/images/readme_usage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..988d692c7af15a73f0842f022ec1df6262e4976f GIT binary patch literal 35964 zcmbSybySpX_wEcscXxLqB_Js|AR#3wAc%-`*H8*bNu#KgNJ@kB0HXp@0-_93!$^oo zgVJ$s^!tA6oORYZf1I^+y}r-PJkNdad+%#s``Y_SxM`?EM$AkMfk4P~;hH882u=Y6 z0u>^}2UjLCbg*|lopp0mlEZ? z@9*#JcTGaVFTYxeDFi zt63SZ2Fw2a-bBjm$n4*J_2PsJ{{38U;D5U*T?vBOX`zqNE!oN~XRAQ6Z`R(ievsN} z_*Gv{pwn{8CkG`C?h@sNUXAOQW>GOhS75U(8U-M?$CZ@zSBp|=i=k8K{ z)^GIv@6(>YDBo2GQJA$3yFlUf<$R2$^%nIm;ZPU4T!BzsU4D==Bvms7yvbgybXh~k!# z^7&HuHIW&+e|Bcne=t-g`Qt9u0`&>ii_&*+b0EOtd*ua0>p)0siBBoMakLIHN`JHt zOK-809fPjp%`RfI~NqKWUcHuGs!YN4;#^A{87?ZaF10UFlv%1?xEtm!N1+EzyQvJ1X&x z?cGg*@><)B4qgsHZX1ta`v=Ja^CRf#$J(cV3YNmuIEs=*{+@hR?!ac?1*BZM58+cT zp<9pP5O5br^lGK&!)v z9$DvX8^;`kksrK%d{q4rVvjdn)ij#wZ1d0Y)Fqj+jTEt4d(jlpk&I6Ha(%qXk{zUn z5grcW-oy)@9P+m}svA=d+7z~{ngWmD1af^cOit{QeWLi7z5PG3nna&Ilb^Eb9)}Du z`ejP~=)a!$vn*BosVLDi!s zv}~U{o(%Ma3qABDS<(gAP2KLOi+liwBe6_JB)4p74qpk9i;skg!VJ}Be=4*AA6k#I zlweVwdJ+9r^2ZJIw2DzP=|T-hqJ@som#g{uqnu3JJi?>@BB!@_JZtn>=V&!!F@nkI z7T#5yP4?DV>ki6#nPwKJQdlJJh)iGZV@qlV$OL*i%))n_A&MEMDrgI~{HD*GGl$?&WIB&VzU&%6-(MkHHtk3B*s)&Z<6Bu5_#^KYod6_u~2^ zW<;>rjAmb|ZWP}Zq`o*}(Nwq%)1{oAvF?ZivE!IN3lnPkiZ`q-H6H0veby++A0ya* z8!l895LGVl0gbj^+*spwkmEf$bN1@|LfQML5j|~Z)Yio&bdr@sRgI5>N{?4R`bKzB zCO|c`I!bkLriN)iV;VCeoBjfw-n$C^z9tzkqB)D{S&#>=n+`OZuOGGyebK^k=&-Yn*SP+!$*V3JZ5$4H{{bwXI{Xt>^?_-V$!uP3U)vz7)w z$MF0=6N==$WOjA29x;NG zk5ly8YKpN@XpCr>{fb^{lE%41;t_ zo}xRX_nx#&{b$4?Gw~9^rnfZSTZPU+T=ZiNuT{`iFn3th{M_`n?=4FI_TW?^fNoOQ zX2QN|N5=)7K6T+Nfy-M{1iOtjv_vWN<(S7!qZp+>FiH!^acSMS(VK#DLYe=mANfpI zW%AF-B~l>gq_&$aoR5Si-4C{4ov>1qW;BA-lDG=yZufriU*e@ryp0?s2+wvT)O&^K zBC1lnKh=&xxNYcsaQ9=ssp#-VBtKYWd~Ujx(O3-{C^q5qFCP#>kMD891sX8+y zng|w9z{1F^n^Rj5@T#U8RZV+-G$mUr`7C_vQVZ7qcC`E$Rz;4$JsonfQh68r3o&xF z&mGtXZS%H5uDkx=ETk{T4c|Qj_o{T?=`14+h)#S~qEp|Z_YCQ|yA@CWu>;{JxjXCW zz$DIHdQ!OHP$Hn8i~L^vj>XKogzc@tSXOQ|qq}frxX~kJQS?||HxGqpR-yeTq+dT? zo7^?0{s%nu>C*Yxc|&Y{uMpO5TP^4pT&0VhTd6JRP060C1&!#DI<%)}_1W#~#S+wW z)lar?YUDZ^3mX3ULUMY8!PSSmp8_Qad|%@QbpFjlCRD$B+OI;c!bG>@M;AyFgbO~r z*46pDaWiIx&gE6GWIKC4CVX?1#{y-Dh*v6Tg)bJm|NKT<$EsuYdiH2~Fx6_044ZDl ze@-xH@Y)oi*%9m0O|*8>Q`^5+OVocR1bo78{&R0)*Xq^%@$|n~k^P=rO?LaiZMP4V z5hT*AZxAW^o?q+y!mCU#EdDMcOIpFnYRXy}JSBUFw~o-&c=_;O0u>yL&kAp#0^Eih zY;`C~r_)NTt@v`QdRF5!Yj2=|yZ45!{#^&z3;%x~v^C0JVacITT5J^MDH>cE9C*V1 z^&e-`Ys>gz%3kB<@pI2SBfAiM7Q*2D1&K$fA}}s)(n~C18cuWLDvqJSWSSudG1HcyhX~ z-$GYATDagfPZ`3~hGQ*vqmuXELqtrd{wVu_-w?Oku!Kcfq&+oPJQPj&Ypp>w->0Ju zHCxX$vPVC^{_nFA^DQTTpr1tpM=ZU`>T~PAP#KH{8=6MBbWU|22@P2qFZ-?kmsrm) z{Yp_aot)lQ1un@0yd^Jpx2E-y#BEX82DA*h#WQu9yO2Z5;^@$TL3MbxlrSc4~hjne;?5mD#D; ze&BdsrccQ&`KX_9?~UY-XMH((o2mJxD&03Z)@(ohCnTOfSW31(I1%azW@-d?aK#tL z9l>da<>PEh^;Jm^AAf{YV?gRMFJwBLl6T(E+eG(SL@`7^D17JQ^UoC4X6{IV=88g8Oo|7ZkTjg4Yt!K7AQB3ZvaAEfpCXtf&q_Gfe$_}Be_Wjv^mCJr&Jrk$s!euY$8d*~`crf-O>QP^gGl~RthMvANx7n8i*uO#> z5%~HbIELHdRgLKXnnBp??GT$@+J$*K_mevpx~fWIF4T zyw|!|K=743=U1PgOGWGaiP>bw-?P@bOg>a~3Pni)N5BG1zyj5`iIvFLvu%C|rG-H$ zC>p2Uz;CXr9s9nd@XO@`EToOd@(R7e4fx1X=i>tPe}?4y_TdD9tZBN_Rq#+hW~X&d z0@v_rU(6Fpa&M+9B(2PV+dPr{frPHjlOsMc`ejMpGj$qPiI@Ey=;kqx&9h)U2rHOD z1K{2^rTiO8{K|A3TSSXDRjQjdP)w*PR3@q!6@i|%r5^7?9mB3F5ZvEWxq#W?&En-= zvwJlZ3;aS3!cdQWvv&J0ZWN8ttVy9T7e(NwH@6{{w8t9Do` zaasw4^1CIxlScpHy_5nGgavw|92;yjhS`k8if`@R0C|?n$?{(&h1-u&x{LNX_z1wl_*Z{dN6#RZUO3&)&xZo$|7<=^CN5T*LN&o_fk z1of`pTyDIwBpxI2r1j~)Q2#bXXNecg7To7z#h)x(5X( z)LeSnU@M5&YVEGTR^fud`1=EV|D0toUyW?r5p07bg2WUKR;r}1>^BL3RMejD?;T4_ zp8H#EDqMbYf!7}Giem55`)f445-Fj@%UtAC0I-r!*fa1c1)ARc$)3`H4De7x4OYs2{OD~YhqQAI>{5&Y|+80v0u zN0U!Pc-5W?ujQc{)~Z0ugtpgZHcFbUob5_Az9=-5K%XS9$}OD6#F%z|^)l(JW7a() z22Di4g4tU#EmS17FH?+ORGC8r@nMx*c;Cq^VU9xL?cW{HmD`*oN{a>;`1w8!n;lwI z)*xp(aX4Jt=Efe2-Y^D!7CcLC`!LJay0N3l*q${}YQP(2NLR;}VSC8uAW%Hs3rECT zDlkB#`)$-K({GkHbynONtGC17)OH;FVu%j!c2Ly>_gvuI+S>=*Mt7A691I*BOczLu z2xiyDHdXJuQEs6`6Ub~-Bl8ssc}V@uDuw&mc%*ffp87%R)XL=RX#5<$0VJr0oa7=AMMG$(bd;&lHgK`tbrPt zOgf}{*RQ33J=&O{TLU!X~ocjw89$?AA)}EP&YZ>!v z8&$0-apKRKO-_5io!?E){`|}B!I7wVD%6YH^X*(z*cqLUan@%ne(orA9xsL0KBI=A zm8kxT$}g8&?U@1g&>Gwtf7r-0>T|sLz8~rp=65cOcLdaS?d}|3#K0TD!JPhV%l0`7 zp~Pfsl_Y)OPkPu&6d#Dm`E46^E#tVpqz+Opy_IM9h(8usIh2PX`mCQ~N;`?gyIDJH zj3%lLvmh6p6jhuV5Ef3QZ=99A5Fi^01!)72xboKG_h7x&ce@UkaN;PcQUjPTLuZ+$ z75cFi>Jo|Nh!0x0p{DB1QNlL>oY_^ODOXWyQ5Kde24q z6*G7i3MQrkX7(U@t`qRU$L|?wWc&PCoakAc*ntewo$+Ud*@?O@M=n|NMzZ86lM^{( zK|h`Drn(7`G!Z>y@{My*dw#{s8}*olwdiW_z_`qSiFLw&2;Z<6~56CiuHC7 zDTeR5Ez-1cuWqXZm8S;OtO3F+rR4(~c?Yj--{P!Z8%M3=RfXkd26UWdRh!9M1+`@c z)T&uWo#R%Bv@37dfs@$4&uxnsEE6=%$@O_KPXCmnKUlP29zVjVx^vq4go6`DRQ4!gMY6`J>!=TE?-}==O8#JS8m35=oLJ0iGa0yjli+Vg!~;hv>xnwzcid27 zv?R|ZK%fWOgAT3A8f}4h*chUf*%QLT$p@0ViCRC1)YS^=?M&fWvIR4Ie#WotBqr5O zf0GO;d;iD=-qG^v8)-=0?bQ4GHjr-oQm&d4BZuVY&|${9`%RLARw=V_r%0|w|g?S1$E)xak&VDjWD5{ z-;}35(d51TafoOTxr}vxTYULUfZ`a)NkyenTl$ z-=w^qEsIxv-^TpDvV-w$3mHmu5VpiaP%#B7U})8{PU?5rGqTSpif^x}N_`*3LJQx2 zj9oB-ML??_(kh;lduKPlU}ei+$kz;=dNjKxaLwurc1E^(7=tR%MPzLZSGnzCU`^N&)4sPIl#2?tSGcUATCj|b3%r~4@_Bog0$g5Ot>DdtcgzpXr}-RPHLU)yJ@TR(A%Vc4@CnT8C{@&H!e1uX-*F)o_;H9x7ec zRPZxMC3(5g#aXpXxb_QO;huf~P@KJ-$K z^CaKyjoHoPMG)EQA%g~k42en~Hb#f18N2gbF{8HQ*tW--7oV@Gk@QRT{K;s{a*raN zjazWWLa|1u+Yi|AJX zi!UZKX*{~=5LsNZdQ;X^Y+Dr@(37;ozl&sB-^ocL)n6g6PgTKQ=XGD(zc2OM_Ire` z^Ei6;ZrZ_Tih*bRgFEaQ*xWl>6d3ib6OVzg;~(VTJgH3P4;aKY*!ccz{^@B~fhj#g z68r^vOE!YUVnnE71nuGDru{Vxf^M7GyP~N%ApTDzJ}b=qNAF{xiK$}4(9>kZM^1xz zAT{R0<2J%jp}=6hEzF7IA)E`l^JtrPNZaR49CjYe$#=nnCY4>s`Npe51U z6E-iBwnP`bqBqYFV!ZVsQR3B6|D$c9o{aA}5_jJ}HzIA-{uU%g-Ja1{z8+<1Ou!$5 zz?~&JrTRG>Bh8U~!C=nsi2~K2M%FLcRQa_x_RKfmhnQ2O}E0u03wM&#zair1Hk|y&f3rSUi@b zODyx>q&OusX1|_wq|+a^$nNI4Wmz%PUfotfTraa3!)vhe-j5#V8HC~O+n}taiy4}= zM4o)i%$hZeu!=x&&Y+95?@mGD?EQI7+g7OC2I%;>MNL*U%^#rW2@hLZKJmd5Qs;5H z8_@YS{T!y7K#{6UH{QO6>H-!FV)zraGd+r9!INhLQPE7iVK0A&PtwkYOor#R(MMp^ z)~_=ciZs)a&uR4WETAbGH5Wz{hrhIxMDWIBt+o7;KjuF|5>lwy#r%PF*~Q%ru>Zvt zY4Y(`8`Q;osU;sP7Ro9=GSF^yQTzfd&V|{xpdg_&!ycOA->~_*i})4}h{0JEg$#lrzn1}X;^{{E|Yg@R8rBvSYxb;r^0ukJOUh5epNzi z(o_7ykQ-qiW0Y7h=M-wBGHqv(gt<=yUulKM?f0~wKS64AnSki@kW4ivPAmm}rplJ^ z8mO7nhjC5&##P?qFj5zE^dxFWkcVYd3*E>hA?MD5fu5`uNrs? z(W#7HYZohuVb_k}ge(l|LMENxKmTmiB0?yK#f?(s6d#Mg+G5KL(G&7Z+*rDzZu0tL zF^#Gr2BYS?yraZzFy8`>>zJ22Tw@8rjGM{)8YFt6ldQb{zh1^ys_GDo(Hq2VN|Y#- z6jryn!ZZhlv$?Eeg5|~UyKV(HqCO4^wfXE`%&S5Kfa8d=dUhmS>0j8kDgPKjaq=?iOTxh|WSC$Mu^~ZM zbaI#91cTjm(E$svk%r*=xTfzsD0>g(c>@`G&LU;Ell0}KgwQGQUqPPai zopIJvuAKwbC;S@DlAP=!9-j=>xY3_9kXos*?_e((Pj%hgJg4dEeQTfarm&&MF`v!* zok+dg9)m!y5nAdxQwRGiRY5=3bc`on2~C|u!y>h9=ZB(dskS=baGtOiDA{Y$e$Qo* z$3r{{_Ug^;b`Wl*EArpm5({NHRN3wT8=*=NwHqjtfT}{6k-Z#Tn}-E1@1G}D%>2U7 z4ec3k7R%5@kb6JP3@FpQjr9FMCT|akpm0yLEHw;j*z`Khe(*b(zDI*n!g$1HPh||> zmfavunBP;GO4lov6yJAqHMPJT@CELCa|qboV{X_|Q`*6|Db!KK#G*Uc8)L%S8S8lQ z!f&wMA(Hwnpg@$RBXXSMht3|UuTOe``qBx6T^N_M0|pOWP`9RR*CAwr8*#e_FGO$$ z^O#?FB_?5VM3bG}g>!1^0!q${IVr03t&Ra~;E_^mWU`E-WnAmzs1U=!vE`1V#sN-* zo{FhISCMVYz4yK@$KT~XGXb1d zc@blU3=F_>_1w;aGAA5#SraOdXd^*9sW(6~lKsKHAGS*nYh9t6CDnb?-;@N(lw16{ z6^HV|hn7Th93f*XQi}F?)=@8q#1t`pJK9thVX`L85ArhuhSr!1-UqJ;#_=MU3Q6Q= z2im*nHrP`%c{{0!?*4GRrK(v|O(JkZ@<5YUneFfz^^I0$ss2-bZ*xhhT>(8Czb~T2 zEK{#AMI=$uHq(lO_aKYC(fJ9a7-))z>sIR>?vr&ufF5OyU+b!A;*z~iH3XUrL%AS9 zFT-c2y@32}WHoiHL0y{{opth!P3V0$YzMQuu1;M$N9iir&gQ7A6dSy?g~)b=4Hr=c}vpT3NXvYW!5X zTPtO@3ezuMcEy`fevvjnV#3Y$d?9|F6Fv4i{@}RC3;_E^dU79G`o(f;T85^na6&JMTq|XN zQ-3&~yb#Su)@i#hYy=Hg?!8tVhBh`tcUFG&6<&$-A;11nqe=hG46oYv z!4%1*T^}Y}{uv?8p8yZFS;}2vc06T0ye`AEyR0yYp7kem7@{1}_@ z;%5%RhjhiamPoNy*c^TNJxw8JK{;URi1^AdQ?Ji-s358D`nsEn00vTn@$T`gEU5{s zsn{nviNpf5n}{#j3BwezMAcriYT*r#0_(pHNB<6uUq0pT>9rewzrC!2&&hzj-4eKmoqH zQS8_DNVtIRdU%zeSMkAtA{>1(=%(H0cA(DAEQ@OE35&Ee<4V#+2Fmrkmt}D^p43FP z{FES&czK2>hD*bTKR=WHKAaUUNyeK)Jc2)>aSf@KP*n&@Q)ZLl4&sXWkZ)#dTq;w* zt1O~4J*CdYjBAsQ^$E)3@{qk@DKlgzg_AM9vr0`P7+XCVI>{K8ksJ{{Ujnjcc z(E)WCN^fE2NPxE!)eEvESt>@7BMj+A=|D7Wpv3zNeQ#htgF4oque`c#m3B9Ag$`vQ zV!nfW$%n`jUf)jS^-5{J7bK4H8*eILCwXx6`#C@>x_+%NEr7%oJTE(rKMwG1L z&%hGRdFeg!TYloi15$r~FZyDS-Z^>^)Bvwz zzg^trqtdN?#2a;$(|{!cl53wF{0#){mvlYu;DQS|W|2F5W9Zr6V!U<{(CsMzP!@4E zL1{zbbC$gl=_b@JMGO9XC=TQZA)vm472Q0TKEqFcz-hB2M$VShF^D`*~ z*3JoZ$AW2nOff*g`Jjz?upGR>$H8A4Y!_pxXue}h^!e^j4+k$^(f6E>hKG>s2Y9bR z@e+$%2!Uq8cYYtznYe|?V&&`%#=iGkDR1Q^C$3oDT>cWd$+HzY@6s>ZLzm}f6C}BV z>3*jDmYRAioZ4rvEB37s@>%f4tor)39Afr(|Ew2DO1xb;L@xQ_JzZtQAStLUA!k#v znA&g;Gc8IV3|zVIZbT$dnf;L`H#EoXufHHi zkcY%w)yjP31^#C6${OH<(qbGWb=l(5daY@d3l%EeQPH0B833p$g1MYT_viEOCJNa7 zL?xgcd6U;;UZK|#0+={0Le~#8s-?5RUR;p8uUR^$YDpWX@!&#*4E-$}FA+Uq1=oK) z?ZR`1&4P?Rk+3e6L!2M=8&*K%4>@ORZBFn-%Ofh0FD6@C0*@*jKE$(-zbBKQ z;d~TTo#wdI0d%xovhpk=?1ZawF0yIEL=Ky~7NE;a2XHiyJEIF94sA?>o?ZncrIAs} z2oG$ema5WLJYr`AWc62vC%}&uDJwZqR-pP;&2>+7Ndf-jk{&n=VE}2+L%!#My=Hz0 z2N#i^DKkjlk8JPEg@9B?=XDsop@P!I%vvNIq`b-1=mp0@|BWGm$rUo4FqzUu7)|D=FYCXOy>c#gX#JrCvHxF`sR*gXaGgCOoS*d*2id~7k zH9lZ-JM~$gn+2@q_YZ1Nr`-zujNrta(0X$&^xemaSfeZBpaWF^u`A2eFR^0Lb-g-jcs=jmai(ACX?6Uc7FeZllcB4pyrBnz13^`e)l#I#QoCl z4n^?hpN)E=p3BZ&wc8kp(OdqbT`rn;czK>E|uXr zoLUty?+s)Ni4W`#m)wp-=hGsd1)=I3;?(CNZ&5C&H0i59P3Prx@jGt>>)*n$X4%V zWfK<35yd;*8O>{D7y@WLM~x0nSJ34&h8{A|1?z?hvggB`yoxM30{IPA9}hu1%I@h1 z1&9sLQCBt5TYc}CC_ll3jiZ2i!E9iu1g7uKptDgH(#F--%Lm1BZP<8;63^+9Nq%<>MF;L>kJc{X`Er>6M@pyazi48Ag zRGY#3F3=9leqTLf-MLqj62q#7DfbTtdidbW0e$G(5f>(7jx{91x1q6%#b@`}TPUda zf@OCwG~x80>=&BmIU{Kb^pOXH?<#{6SF+=0UUSHc1BxdftXvWd=o1-L&`e5{?Abnn zT;6<3TzbSb=TwdAxQX82O(2B0Va1F2evnLwrJhf(v8=z)tn%W3mVu?Noo4yGNslj{ z)E16)f6}^e0IL3i_|NQLJ$Hp14nXW;Oa`qD0p;+3oswKxt8Q4ubkqhd<)LI8)<8N) z?jEOOsNS=BUJU6n`xA_7tn@5xwD4s+AQrKL;t<`1rZ9?A0I0WkIya3_eiv^RtU>`t zb%PhFkN>vu8?-+jWho5K2W<+DHwzV{k23=bwA(p5e{V7uU{0$8y1W^RhW%lRmEdOp zYA&KWDPw(a_uw3_Mz4W2ebQ9tzN%sS=fu#tm!`0!b5V#FlP!C%Dw3!u_}r~QB;N_N zFLxJ=fIH2XA1&fzPD^^i!VuZzh(oHQrKc|wCL@?tZYf13wXXOjx^&p98wP;IWy}|} zoWAUCeY0gBrtG{b=WS5_>xie@-miMTL1@`1G_@xwa(<`GLYeNAIb2ryQ!a+#nO9!h z`d5JH#q$jY=3u3Y@i@o4b>u}+5%@qX5t<|q65w?&ss~FHv&R)vjldC|amfC}=4D6o z1ix_5h3PYxZTOxr5u~#J{LM2f_cAe_g6is?FtKfO-l;~P6Ltk0sAON%zf;~R9xOrk&v58%MUB|t0`klP5)8h}s@yVffbvGl= zUsS4U+3hF+l5%>dXCu1^@T`fn^SKjf(woAaJ7vH2;C?X%QIEk=GYh1ImvsTjWoxC; zZFq|cY6;!%GpJnOmAS&w`h`sX6I$80m00ewm%*^;N2_XAwa1%ov zWe$TuTtxjR>D2J}uQ%3lZ$Ul%Ku4;J=*<%CSorbN&fg2WTB~i49P`MDamaws- zsN-#O=}HS_+`^L&k+59Add)U!&6WWxUsgv3@>BD?&kLWKZ%H$EI1GGg`T|?Z!twM? zo-_^i<5t(l%(+_6jTU`VCOK>sUa?iZ(aA?yM!?8B;FE7E(_BVMKt@E=sz*!3>S~V9 zKq+9*LV|C6FG%N}o?t`<0t8L8?p*T*Ezp!*jayolr{}S55+~b6ZfdILUz#1YH-t`t zt#$?z*U8=QR_9$D7hOa^5Kj@Wj)YQGPKO?UNxKzWd*1BTEsbOG+ZPC;!_gTCv6$Eg|amcc*P&~524yfD;_78|9lj4^KHFk?Z(QAP5 zC7TSq$zlLZBC`0)L?}=(3;||VyjxSS3KH5K@1ob0M}o$eK$giZEs(EXkj&x_$Nmy1 z{d7F;)@P=Gvge;BiJ;!4gE;Aj72H1e^O~9h(ElYotHK=|Icxmn$n|3uSZ=^pNSO+e z68=}nwZQ|z(uW_RL|*%4-Pbl^ouc-TN0srD5g3kvQXsHT0TEn<42i$~BYTL6x|Z`y zL5)%OraW=0NDgt0%Iwv_C0>x4VrWwfV!x)lgXH?*);{RJ`4$)TF2fri&bLE#KFI0C zuSj)4zflL%9g|52+a^dWZhnL@--y87gKY9{#UqQ9_Cw`#~ z&*X9aJ1{Gda&Jao-j8ft&j-5jBJ@fQv8M^EZniHsl`c!I`42Bjksq>ZPBKi^u6vZA zL(fB`+x?sVHW1ysp426nSVqLnws1iAK!9Ts`8BL~i|?tJyga^F`{13~iZ^fH86S2F zfB;FfA95?=D|%LDIosb{pm&RZUd%6aJg zajQibvV}sPKA4`!rZqOWy4^P^9yA5jXh%b_-SNG9CH3n(AY~=d(ngZi=c*K!|-aGDHc-rh!2B1sed8!=w17T8e}KrJ(I=rm;YjZ0`5-P%wGS90k&C z3F-*5K3Nv}qeHkLg1WXEr)%@mSz@r)MWL+tp32KLr#!bT!@6BgaO9BF%bqW7#c~^> zKYOurlv|gGUOqvns*Zs~4vPSKkenKA-&|hR$+71Cb0U|}sJS!~MZf4UP*q0L(3%VJ zAer-nU<6#4+z((;Ui=M40&CU+YkkqV<42}|_ix~{viZ}e0qPYHZIk{kQsC&~KmbHR zP+H5+a6pfZCURzTC-zb=Cq~JSH?50lzTQJYOK9KB{@>$}9Ls?^OiopjKhQg@LDUVZ z+d@5#a%OAQI_dfC(rFGSLK;`-s_-@;SMl=+UI5%EqLNEIzz`uuUv}gKZ?N}f`3Qf< z&#g|k&RgT2T*@~@i@{ksf#AYkM==(STso)K$CG^-LVc;csj15ZYUTUc1J`b$e{cbs zJ5OCUe; z(t!LNlXNyrhCHt|^UdaQx~1|&@)IgHe#l92Nz4D4&>mO*p5LuE$M)$sg>wC#=&wyg46BGh`HAe$*K;o(E??=)H(|i+qL8^T7 z=OQ4YIJ=|cTTq5_9Bax5qV5MEmaFv(oM{~Pu!rS1nA{ML3^ z)J-DZJ-XWM!-;;cGfH_*nvvx57wPQV0#GCF!ErG=Xrwdii1qV z;2wddTz}X^F%%24ol0Yx3P0aLsYD_z4$}V(^*{=)dYuQ1*e6O#){4=N@>|%#v=bevyxH z*|u*7EO(@SljjAgn2zH%hqhze7WipqCn?5IjdI|aLpa%!lOe3Y-VJ(XCR#%P6U;-b4JYYXPw*UY=2(CM z<8FENBcm&Hr^4IeUi-x$R~)nk@e_xuK!xlSf2|ooL3citRCtBE=1X{9m7;aaOw2%x zGz0hOlZc*-@Yf6}ud*cVCW|`Kh}kJ1uK-O9tVr3qJ13GB^h68)@EJ&aG;TV&K*Y9& z_kSVf#XreSZ(+>8FZGsCp0Xa{g)@6~AZcu+Dqn7*=_;~2BcOwFYgRbx9QmHoZh_+B%wcTs5KPcQOKXfQiG>EgB+U z5V@G}RI3UvbO!P8S*Z<57_5d?yzV8FSHwAhG{vv^s|u{uyd?~N1@_U6mxB8gssm}k zGks@O@>GL~4I~*RpQf6JceS?wgVVd}FaRnJk@S^fE!&UXxA6RzK`}7_k>k?MzrgF7 z9mhzv;tb^gsN3R}Rr9kecLV9XSdjrF^QJTxTGI6UGC5E8$&+MmK;uI%PK0_bB_0N) zU9(#wx9$?BzNwP)DP8?*3yafJ@P~)K`w{Z!(_@8^kp3hIxrrynBfETdHjjEfL}ghp zd*pT4E_@aO0*LPNL(jepBOM|gCh zFVyERZSD4qd#WaE`6-jr8|2aB$KQC9deqz%9ooqTa_8t78|0gs0u!17BRtiqJ^4up zxOj$wsI=VP&aQhjQe~E_SOO`Qp*~}&%H95~HO!a`2pqvn*0YrN1?(y}=HtM&IzUbH z06vU?0@A2S7iY2J>&F?qR*4+q6wBKhLg4t0NsGghu2-qp1MPU|G@CfL>ZN)z z+gZHZ9NMGhy!%;X)B0j4yHWjX*B@?1$l!DKrLgzI0v?YCxpt9a%pT?Bg`69nZ|m z_jyQYWVi)+fX-*l*u!jTr!FEeKMu$LH3dhl|Ihq5e9Of7%FeV$x~F*f(%es{@5Ebv z-9VNujinxh9!F5aOd+<`91bcyU;M@yP{D%7<-&~oE`l4pHb1LFpm>HlW z{&NckWGkVi^AI{h$Za5N6>UAz>s_0h)9xxfq$nD=>8`XPmGmStz)S6y#6C~WVI`RQ ztx$i~cLM+iE3c^Q)rF12^LQ5h+yd?p&IuF;n9aCb?)O|8|F+HK^c8+1V<4BTp*WCJ zLe6KblZ0c|VHHh*G;SNDZX4w2X&nMY3z*?Kq-s{iSSxxdeaypM`ZYGEj|>{tH3JYo z%9FquH&{zSuY>dU85jNNN>XGGMm1xr`ow0TsX*vha)=ew!T7TY!4jLV^yx-f!DbW+ zp~28^w84N;Upv>6Z35^#5#O>skU5FMn~24Tlur*@l^g8qjP>$HNdJ zSlL2QlREv}@5Ou1lAD{%J6#j^6>_^H=c6b;zzu`wN1apI{LEw;H4C4NK^k^5w0$$E zHb+sSPMo(=Hl0%-I zX$3x|Kr6t8<_1JA`J1BEWD9TlXCT1YY158H@`V530H8T@Ec}(03y?I82aNg2mefW- z*P%1knH*@}fFCuf@Y4VOB~%lY4`q#Ggphl=ZVBq@RssC(QQRbf_fK#Dz)Ln^?I1+Z ze15%I;pV|;k$Xv)YM$)-?_PUftdl)D?!%d3wkP~ruvP{q5}JQ~mY0sx}xA8phxM&DOqU5`RDN#2qhlb z_M80iWt^w^2%7lUfErBjc$wP)b5r!6%|GsWSXx?yGYxu1+#Dz8Pe3Bo(F;M;;+oQ! z==oS+eI>G9J6=x5M`sztAZGW1+t4ScySN9Yl0cfh=F2egrzh;=ZN*P(2NBV7Cy@Yf z6PYCOP2W99Z+4VU(|pZw$PGsxM54aKS5r0mT|x|rz%)05$sGstyH}(~2ijweehW+4 zC3_PdDoWLLfJ$xid*#hc+FJQT54dg)A6%%Uh_{rMMPLn+Y?Za)0-cRRddjfYD zl8iNr$OTc$L3D~w1TDw${@{WpB%inE5F0hF1xuOJ3&>mnvt?J4vViVTS2>#|Xic^zzlP7mfUJttL41jhVH^%0t2|WXkXlA*G9w%iP0c{K;7`FFrv zN^JQ4^h0Cc)BHUhEwU>JsJ2P1P-b&wQ4xw%j#9}7s$V@~1~f8GJCpupNO#;@aBaDuz>t~r-D zap}X}%~>fS5Pvq@i7WR|NopE0Oraz86?(vjw=~~Bq7N%*0cBJv@bqL*db`5)7vj|D z2|=U(@Y&BcYC!B7N0)csW(g)YAx+kMgZ=a-W)NjG41 zMAYRME8J{62M?8zw$`4Z$}?VC4LcWPtZQ!fPJX&-uz!_Bed=+O+qTNT?8Ne`02DXihQZ#YQZh=OG+Av=78c-xC7sAV(^B9c*d07{Yg!qG~D7^ZmrWv*tr_A zdBL%JHp)+i+TQkwQh(R_-MOOXPa--}-;;sg`)Cs3RfwG2FjrFr!t%Ki_2P4p*yb=` zjdmUmiq+|7nhgA{m6Wk>_O z{z<~i3)|H$a7^3FxN7(#@Fj>pl7Sa0?_Y|v4uw;;Z4%p80}0P`$*DS-(L~Nm!8;hh z#b=k0K5b+WR|aAmN*!cII;r;=xUo%ko2%?ygp81pkZhOjKD-9R%^EjTz^LQT5(AbIm((1Y zqMdC3VMWl9>kvpj?#NTnzr96Z^s41&0c?$T%%nh5Cw}Tu zS?1K7!4s@5HiG>(?iu9-ew_p;g!XhkP(UEo!Yfmre_oCoyK9`)D+suPpndO*<|ChT zD}(bG=1~EQ7~}o4zxc7hS9y)ucoQl?-#yfCDYB0;;Te|%RtLGs$|qay{w+2yWpS0>K@6+QuGZ&$?~_vAQbd$feb6rDMUkJ(iy}W zD=(_Q!El02e5GPJi$lyg%yY$@B&!0CJ4v+VgXLEa-&#{IJWgBwrg`EUYuO9$RH!4ySKZ0x9Om562&CJK z`^v0|cOq2o#u|%aEhD}?70&xbZ-Iuk08S(JPZf%O1i+Ght#o*VJIYO3;%XjK-A0c& zXKJqEWh<#Z|Cte<7iEI8#%uY;!wq)vBdClCy;vwQzE$|C+duMUVOq6HfI@i>N87A9 z4<;R@Us#IiK2qS|0@SP2qPIyV@=LuU@=q#0NMwT_HP`1{DVORc6PgZs6r*3}dfVik z=Gf~bflTdq(9XyuMO@E&y%+-fN*nj!2I~s<9P75hkPXDPG`&G3dN!D$Bd@nUBl?ao z0aaNwQzeA9(%5J5MvMpe&Z>|_@}$aPQ_Cxm`{Ex+I_p#zI>WdABp*#ebIy%7z3M-> zvvQz#F<~n*blfx=MZX)8HSBHgUoyhAI|u?7sl^8p7sK3Cnsf5Z+Gz+v%qSUxTn7mACN#%`)l@rQUwVw{| zOFLZzW37bP3Sq|`X-}Z{wi{o1-h)n1d^_qrw#LkKX+Xq93pma5gqvNz!3_HO6Wt^g z7vNi=Jo(q-UyX}ZFV5AQKCxGbA){JlShke=f~;?>Ax$DJv~Xbu^cx9!?6&TBDr^V9VR|@Q}8?8w%(ICR0>{wHpQKjdBjY9i_$X27_ zs&guX^S;36w}Ij9GW*!dpFmN2>w3jCpzHMF1%y2PSrhrYeFxcW_SAuWlr%-3#)cU+ z4|z-XK5zy+$6Nnxd_6mHo&m}dEjE6apfQ~FefvdGe(c{6MD&QNXM0&^8ZUbnwi4T8 zPlJ5KT8MNBFY9&!scs`;Cm86`<5cr&Y7qH$uqkT&Zw#~i-Z$g^Avv#P1sX>rL!nQF z#PDmIR`}|T@YRu7C5>2IKSv|J8=O@^BbLs)_&?5sx@Kw+9}f4{9N7NstI~q88-w8Fk|og`tY46vCbRpEVGy>*#$9NNblGj zA9KPM@o9HG_HIX1DMSA%vs_LC8@32}VwNkV_G;Nr60!HOO`|_-A?}eJl#2S^1JG9a zwd(_WlkgK|oFPOeR-n4V@JLr$Qc?>4B-Taz^b1~S=xo``C9IQPM!-!zrCt7}mU z-r?ws(raec)3DBt%cY{yktXVr+}II7KG}BtbuBOUR|x4;$9Gv&@ffc9U8by1bE3o_1InxT_dtp_0wfruB{0K&tp=o$_iM~#s zo#$8yMDuh*XH66m80L^~ykEZ$&pgz`i>+kNAU?$vYs+*1MWlts$q`qg;0e`cCQhX8 zTb7)>5L=K$Q!n*9;E-+kg+CrpCC=4pLEc%kdt$85k5eZ1 zEEB5n(}{2P-{ExP(VOA;y(_DETN2F+!QOun6)?E-FzGqKlPBF)^)j+e7%A|Yc@C9K zz_wz67K|k#!qbA1Hnc^?JQy*(U9!59?Rwc;-0GtF5L!s0$8z_MA{@_fLP!IXxCk{;0LO4M^jaLU~JU$ zMs)bIe&0Zk17%}ifTDsztX|vJi7j%G%@Ixijdj^wpn<-A%qLi&21;EMr%F}`=xPZH zUyZveWxO%{&ewv!|2eySp!p5=nhb`SV1R*zV30b7JBLz{FnVKkAlWx?hwkH*ipgst z-w6S3*lee-m!>;&>ab35;vcf^da~6l|6@inC7Ma9ZjWqg4TbQKR3h-^e72> zFXa19X83sw!*|iAQ1QlVUy}d{XhhSCSh*tJYfKt12gjt>mtyn^&6U}$-Pqlj$WW^z(4T}ib)u@Y^9q&c3sfjaLbMp zrg|a7lhc`IJtxP`=`6u6@|WMD-`R!Qm$@SYqrmG}j^oK-apzhb+NxV}qiVV|Tb%zA zQbG8KjHWbDBQ@dFjt+S?$EnTQBE4QfA1g$DJxAEK9qP^3OkuU=DTSrJvtyJNVOGMJS=&jsa}%Ug>nkurocjQ2UTR{?pbQ=KO=;(bn*EH2*WE~k zhs$fmQnWhVn>_F~uYctJ$hb8Vc*y(h14M;?A$6hH`}zYBQZJ0ZA7eRTnZkgAVNw2- zb`&bOm6^Ym%;&nXRLdKi-ThZJs+pzw(v zy&(Gt5?j@kW8D)_Q0b_U{N6z9(z`AE{H$SPXh8}-q;0@2R&&?|1Mx)5QX@l)cpI{; zd3O+^xR@mmH0L*bKqzA?K1*A4*EOy5xZE zMI?c+Ztbz53RhY!9$z4lzEje%7?am)a>EB#Ev)G*elKz^TA9TDUGSfgZ>k+O{%(U+ zu4%e+HlVI!N_XGOcJPJBWNbOQPSoM!?u1Oq`Sz6705)+=CZBOb$7iSPmHN4)`*M(E z5EOBTSBGi#m_9!iyp`<_^TXmQetP{z&#pVG+@c@eHhL8<@o7TRJ*TSYozuW;4V^%l zoQ(jt&)8bco1bP~HSRR2UQtHG4V9UfrtA2PAFmn#`y(912s0{ zU)AaFryu=M{vKz6y&sk4WCT zo?tY^+z)8?hddR2Y>P0qx&$?(H6joxTxv~QVp6%@=hWKt??e%WLk1(aPg|EV?IGBO zijd&@2aIOqk9MYcreazHF(+1{2YlmV2ek9zNRo;fU3Lo{>DhbFP4H`<8q?B!qqd9| zN6>c!_81=Ts>c4$ev#o_R>uuwBi`^SzS76}6dr&}PYl;bX7Tio91%>-uD$o5#Hh5T z7o!IjZ84LU&+)H zwH}i~Zm9lUtFi4LUs^_GR+m>H5kKU((d?)kxMz)_xBcmAt$zNDXX|Dhf@%E54n^#~ zoN5qpgwXFsbX?GBNljeLyx9L-B0rk(x~7CT#}kjA!!Yp8Dt`czgyngOa9VZ}YcU(x zckqEd`FQ{Nc*P&fb|0NE80!JWg>N(Ofzo#9pQ(s(rPEisTzG(lg{~+yAeS=8B(JFB zie9xlRbY331dE9e{+rSLW{C)@;_ zy%Mu`4(?D4C$Gx3p)*yal5oazWoi44nevUb-;J-@eQDW#-KZZ6Po*e71qEKDQ+mN7 zm_mFHe|+!*+Y6Sk%&ZiGmRmwYLut2&cqltfGtw|3*&Kj<^=;vsKPkAJ_qP?jW zm>mKmy3U@oWG$3~L}H2So#9^=M(w%jYI2iw`hjRpQ+ebUQ8vfC>1Ul@q5F&vDY*G( zM1bvrxT6tF8+1|XDnm6Hc+XKCaZ(0ES^{m=EO7Wliyf|#iD+v1$gaT6h~#|A;T3dT zGl$HjGG?UFBSM4ZVd%j8Q?O%|iDh?~p;pHY1lpk(*76S8LZ$g@KAH=CG3vxNdr3D^ z4r+pbD#3?)!8Sp!AwE~im%>y9L;UAnHx=bPevs?^2D#pw*tiYWQQO~$8vySv4zffZ zQd}1J&eS|L1D1=qG@sEHK~Ru(TWQr(0^v7{?E{!zWS&*CP7oD z(%bUtTMcsjCEo)Ln5$A|-Rc84I! z|B`ohQ#4iVdCaHYEI*)s7(}yy=AJ>flmYH^T6mr(PlXpH%d&fEcim7VVKpC{s|yX8w~(Jz%(%;v zq2-HetRFI<#S?VCFjFLp*R|}6AB&&mu1KQ>dlG9X8_o0Dbok5@?R_&t3PYnMYE*yFIc+cFy6LI@ijT?tG1!Y}wXB$tl zB6!&7z_Qh&_rm)yL+I2C!7bCkKJwZh@^F_oWMX(;V9}Msli2<0!jtm|tr1?fBjI#J z=k&(&s(D&E_H;^kUI+)Z>&aqM88tmd{5Pp`zylA)*!h}3Ih?j3m`1NkE?MV6Vv^N@ zZszL$gMRQ!hdz*hMdPHhk~K&{z0JfM@rD{SxYAM8ZGBQD{5UPJYpfO~pET`9f!~)u zJNYl?`DTok{)2pbIAs#7k=@p(yE{LWJh$6lV)Ub>$iiV_f6GKdb>dgDb^|FvAy%P_ ze?e-gq&0BZK{vG-n1{BRuxMldn52KXFq8_q^%cu9h%pTHHa$E~?;h_6i3;QPh0w1r zKha&%t0H@YwG5*H8@S;#S>>i`7#nU=T9dJVr)oIn1UuKuFwgY3_vqgF)fEY2lIjc5 zIaj40by(^^z}R*@Q&)WSvTyi!wl-D*bq+{4M?os29Ny)3-cvi~!XP zKEEd0>#_b)U(7D3FJc@i*YwF;!a&^}j(;cGUnSA{ws76lK0Ymzw-aCu?%|XjMBeV; zE5I6my?K)e^PpVS%hO#OQ}H|f2l0KJ#(egIA|v=FPJM9s2ZI;%2=L?Teo?)Un{fHdX31!_I>3 z6mWae0SrlGE|DtxG;iRx6Y-mc{xXn=Q&8%RQCUuR!is?z(`iQ!bCABunKusZreu*$ zYc+XvUrkW;o*(@uNndY$HHa*@oS897y1R6_W@#F)=S6l*d;Te~$z?KLIjV;jUOoUb z24(TCqS#(PZTSHWD;1Wwh5ts~c;X2O&*hrfYa6g{T(EG2-X*GeP*90$ml4mU0$vi0 z^O$-n{2lQ(s;;W_@-slhu8u8U%m%@oQW$bWEiQ#p|WZ{$sd+|ErT)pV* zGrF{0>@;3&=|4E^C96E>*7udv)gUz{IzSvQ4sFD^Gkvq{R*Y8PNw~L=1A8D^uGc{J zEV#S=t}tC8-K}3wc~uCqFq=4j5g3nS&OSjv%!v5@W?PkC=dU0h)ggxAT?p72oXHb| zZdu(e^SZqki_5PRxh;SnfR_b_KA(e<9oZVz#oL zZiq;56dcnJk{nPxqw@Ya{_~r~&Vq)#51~MX@I!bd4~2h2G30UG=h%7|&Om>cpyT^G z9>qDw*FbOphI6xA$;1I5bp09WRWO4stp^&ef4&!dS2SI^H47q&4J!W$DL1I1q&0(} z^|L93ZAcj#*>*jA{%}@UM^YZmMBcH(Iky;bGyD3if+Jcdco2kXG?de(igVC}iT|fC z4n6bMAOSGcy1}6%i9O#efYr#XYajpZ#J?T2rpg^A%nC@Br+vwXYx|22){nax#3o{f z9h4wemL&Nb&d$PzONw;{DkUwTG>-cDDJ4aHiN1#31lgwtkl=MqNs%{#pcjZI9Y*YP zlt5~C4v^*HqqlN8r z-FF^_CWRwBEc$uASuGqBz*u-F%JfhvhZQ;XH&dMu3*Jl@8rt;QgI1#Kx<}8E2H#g zidi4j9_xpXOGoW4O1<#fC~fHxx|s5&+@xK^br*Gh0FR>GZQ(_@EU%KD)U?;`aeV_^Mt;IsXE$7Hv&Q0ib#Kkx{~i>g9!lmi1V5^ zFytZa!f!~#x_TO{X6dYWAuVYt;#p(8|6X(Fq~L28e zN8vaPG}`eP*&$)WZ}6V-i=VTqSX)T^@asN3B~YYPR26s~p>I{3kjQ_7a-;dDUVXu3 zSV=bp?1@>UT|$aA%(8h+7sMw9=9EwGnibFGdwYx@1#Mon;<#vqh1?Xczdm<<=?ld8 zvOw(^Fxk6<9}xP&F(`@rh;#FOrT?dx3j=IPcKT{Uv0`vWL6%rRrm_e|b$hDawdMVF zs{?Yy3gMjPTrP-~O&clg`fYyobUZqF7fm(POs>|)JBN(?;DvM1>5FUs&MVjZ(Aa=! zt>g!)8`K7%f2W)?fC+x(`MpoBmH%#AojS*2_}OL{@IA235G6z~YQAqbUsKc4dnW?I zV=?sjOqtJjPRXN&hp=FB@26pZ%U|el?*U>W);{Bns?#aQyAEY1NyptX9N3^?*yl=A zL*OUswCt)YdC`Kvp^&~sCX{Xe;wB2yfc-wVO%#Uc8kwKq>Y$Uu*P5SR^n}QZJ(-*( zDG-K_`YmFEBT+SlDHluDOe01r25yCMehE*okh;fAdV9SI&mDb%{8yX)H6GXOnZjc_}bN z4+~kCJQBpjVx=J~XWRl_M7oCPhOZEaSHf}Ey1M5m*+)cEpy$a~Bl+rrO3}E|_v_wF z?t8e?;#CX5ZB0-Va?ig!=NJ5Gl3Y!D~e}nP=`;lf4_IJ6Cx}R5G6qCZppM-KCJb98!_&|CPZz@IR##ho3Ubml7Mh$_SBM@kQM{rV0^Q~@ zmk|e4V7D0Q(Wi9!xLj5HZgYP@l$j`vA_4+pHDT;kmseB@7A^L&xIry%lMfs8w(ep* zJhEnOo+1Of>89;96j*|6Tc*W6Ym#8iAU^alfwzzGGZIY(IFl2W5I>#W<-~hARKtp_9;Qio?tOvc-55tQJ8U|zk(eA z+~bx*>mu}QV9&+f<3H$%zy!Qq?7A3SoK>Q*kfr)c39_bgfzOZ$Q{x$&sq@Ny1w*lU zro&Emp)glY8k|OWaBXX!rN45&;Z)$<p?eP*Zcaj zaToJeLFC zXX=;*0Sl-48kYWsD_lxP4$R{gz*gJ{XxqfGcepoQL4A8idl^)|3PyF>1cIoWi zBTi^czr6X{7xoS-S()yQHJZ{T69e+{+bYl7J7mk4Pv4#VMI*$Sm;%(9(CagHZ&^pcx|Rc)~rZZZ}Er@q0kC(F*QWY!sdioSUp4XT8>r z|8wXJruO~~UFQSWLFgy5Z%qW!!Ul)fN$SRBUN?BC$ld${&+1>ymYu4?Jg!2=k(qLLpX z(#>N>UHFXDnvUZci>r(=C}tZ@6G|j6relL|A;ez!QB3%wJpo`|$7l#L(JK+0ViofE zMgSJOnJ(^a8#C2wIz96v;n$H1Nrl>5X55%|UAOPyI<)?se%8FIq?@eh~F-*$Q z0Z4a$g^!m7M`K}+am*MAzw&_w8p6d^lzB<&3k2~_ZN|V7P;JV@w6}a`5wiIOHFPe| z8j@ytOXWHG_so1gT1Vx|>G#KX@nI;5?4g3D97V@bytdRb`G)^DMt3GMpnz>MXBdT9vkf)apZ0otQ#o-kj!f|(rRHBC70Y-DkPXeH@ za+lqH@gh3qByIn=utBHVnnWa2%7Hq8&mgK2;7h2dG5+Ct7yz|nRrixEZRmQPpr7If z{D7F^Obf)o9VM#p%jPb)1R3YIDQ=zXzKs*-3Ln3#vcLa%CQ+JQ_fJz#Ha*xq$b`Q5 znsuqnjrN^o+i5X^XH`4ul=~0HfK|XU-s;?H-9O%bL=$sj7gV0Rk1B#Vma4} z*RS=MGoEiAI^fg`hD<*ae>cWdp0IlPfGknpC1lo0TU7%{O}u)UI3;eIAj_R|ygFgZ zLG`On_kaW`LKk+s`T09-WvWP8RDy{wFVC|i256xX)LWA(t`Z=gv29hfg0}Ep6D~xW zR|y|eS5y%37b&r~A?;kY>B~+k3&J?w^RN&w+n;d*_?hn$w4Iq)Tyi)B0zdTHyaiMm z-A?v00)u?iFYhgt75G;JiwqG4{Ka^b_p~|4&m{?6{L3RR$uW&X8*R>OA1cZ{^6?|C zMH4G#_n82aX~SspgCu5TqZ9?k<7-g9Co}dL2I$)Ev6u@FfCKJritgK#AG@8@9^kp( zJ>^Uz9AoL&X(cSV*t)`A0{H*78go0nKr&Gzk9X}oGhZ;aPkiEIJy?>bD-|wK#P9{( z+?LE<<3qmG=N7=f4(+zI9C~qu z3qJlc=V4wro);5N)oEP}grHHl*W{tIQFj~tyCXVkXI`Qle}9LDBghF}xRQUmMHr&% zy*$bhnwi{7o2PJ4lT$V!H}bLv|LIfl9mz`G@z1LoUIMY!cgOieK)W=Bc*=b#)#+vhE|NxgmB1baq_!l4WrvI55}M&b+Z>US?~-TW&wS1g*aJX`~Tfs09j zfpVq~TrN^Df{Ptw+ID{>+nbT!hQ7Ogj;fKNc({q5vhPh_v2P+Vx$FklCJA!#7_4+*)s`kQlTOUqHJWeMI_8*s;6=Z7%sk%zS>>BeeCiMX z@Y}z2TaD&)pr!ovUeZ^Ko-XZ>>Xas$Iw2qte}~z(eFGGPFNX8*g|y6EaVrbW$rOZR z?&0S~1YZ90Y${9P;)s?b{9%F(GWq%?&|{+5w#JlwqmWpdfP(5;Kj5UsLjf7aj#&?v zd^Ly{0AqQP^Mzo|c^5&zRbL9StGVP-)29%%pkQKRp;eXGnt4aqe0mpjbaVjKdRhm4%xHK)mz)<;f_JM0JqqkA`e(S8`{d+LaI^52ma&_oxgG}ys z(9JT5q1n2F4pX3Co=7$ium2eLZ$w=nnfz6gAmX`l1ivjrvf|)j%PtbJVrI;OUcCNx z)>1vwAGxx0nX)?@k>d&b*|cnktbn`}_lsLohCAk<4^592Ncc>S4!NMbKg?}Z!{Rf> zAMZ$+tzW=O!#MDdg%8k39@V?j?n@auT{BL);kig;IQ#M$Z^n1rH$Z<>1y$*pd^*US zI@>rbGBFMGS>Z3YIV!*im|CIjHds#Q%dxK)9b~U1Yc_o%tS8e{Lh_C@Ii;{v1dn3} za(Ntsg;g_NuJiTh?3n{sH}{NG#$Ta=Zxs0O+Pno)teA~|Y$3kHMr3X+kVRDyfAg6T z>WZ)9-Vig*r}FqAL;UV}gJmE#{phK5Sgq9dm8W%e z5W3!@5;J`0whmVdE*=mHj4R_|g|TeCMGW<9f~{V^sS)~ zAm8S0pTZwbIeGzQ&d01oSn^h%<8#9cq1l6DMvxh5CV8#X#_J|9VWDVP7eql#64Rcu z)UW{>2G10olgDo%pm73^O_tX_poD0x-E3++;uJux{cYSEK{-_fv=-t#ycs}vQU-UB z43AyQf~l%nr4lXWkGZ&ZLc{iNDC?rUHhA7mfc0{N_`K>*M7=d!BQ)7cPBg`bwy^uP z3kHvMcPMOp1-C1W+|lEG31aKVLC3+$P#1hCSwLzG{*1rW@2w)~7n`plTC)}`gBtVk z9sv(lUWyiv%Rx0B-si^x(%at_TGwicW+xM<+r(3t`B$cI?||8YW`n+ilbJs^MW#3r zebYHs9n=OI2hCtmNu?aQZ8{5v5z`77QJTkxSvR*Pomkx2BqA_(G%WQ1zq2X4JtCYh z%ZS^xJ^yK0;Q@6rp>5YE%I)DFA=IXH%&I;9UMUI2#5NEQ@0#B~CO>q9X}foA7yi<> zCF-*hu5X*l@;(YnD7TMqQ%w5Sibb|Ky#rb9s%`E^%8wGR1NLH1r^piSR(P`JCn)82 zbLV%VaGMy+^Jj9X7hc?>ic-FkKfi&NaZPzR)KE`NaifmORf?Fn=YR3Z)K^@d>M~>@h8g!ZsWr7GyZ0&wLKGabg$9yg)t9Ye-x*|+4mG&4u}u< zT$@9x3(llB-$xLa09Uv#mz`M-8Ngon$-OSPCXA8;d8}-iN5eMbd*%L=vKV=)9v+6_IyS5uU(! z6iKvXkt;q!wNrc&$S$5X)c@Xk*GXW?{E$aY8e=^)Y-Z{-d$gusq(@&JmcK}ybR67@ zO7XFRQz0r}GVaSvs8oiQ==`#}^L~P4)?lf$p;phJsqtNtpLU(-slVTmPO}sgE;Btww588_%GAiG1B74^cJzQ(}R0(_XMV-<{f|a zYRERdtZ}GXkl}nYkB)0oOAnkAPvuvh^rs9f9Dd664L_PQ{oL~|4eQEcxrE_e(L36G za>qaW076szWYIc7I8p*yl0|({;7jp6<1GX!2?@h3_^U^w-1(_spTJ z-M0A{@Xd~k_0Q(7-Y##c=!xzszLRX>!esDPVf)T(Mu0PWSZE1$DK>icEaOEy4ZFJVG z1H~C-EK;80CI>7Hk|~@GuVfl)T?n*U8UP3$Uk`##Ory2-z!BD!7zUY{t3asg(B4^lE)$2oI58D=e&9>``>^b3w>{@ zKFTOezm+k~s?_1?$G_xr_fhK~s$H0phNu#+J>%b+VIn<&>8vumTg*aSzN~~cj?XGD z9Y_hwdDqdUXb!20GgLe#%^p)Q=NP9KEM3zWm0x$d;>66>7CaWpyV>jIvquwkq;EsL zjnyC1RQsf(A%t0=aT#BI$U8>>%Snr)<9ig>)qfcVQNPO5KcA0$)@SG65ZA5duS262 z2-8yIQ%Mqb8u@a+iiNwocWyG6Cp<_Ol}txs&H@l#v|cu$Ll3<~3J8%E`}N&B7JM6S z8jFTM(3xXQo0vJVpPzS`$AhA7W@%v!K>~J=deEz_h|C@pM@7fMlFd+KCbO8&k9LV48(2gKbMtnZ6*X-X1#^cK zc534m7_R1J*uCkLjrsgIq)_cPB9 zPj}&2S2JgoXT!p&-~OQ+F}?kMHDuIo0N>3Q;|*PM^epYe_ymA;Ox8PPwKwO}4gD^eUC z)gdY>D*mmfrzh~Cu+TuT)Or$sq(JNVO+!P2CC#71Q8iuvz$4`1x3D04h zU-52 zd$~paM(Y$z(Tf!83!Ql|pYCFY%2)k20&hFD?pY6@oIJIBw@SxRKELBm`4(jgW`%1# z4~tMut$u^6OuVKJHMo7t{m37pzR4Y@Ro49fa-`hupBLTsZ+n>@qhd}liv29mX zUEaxSgmg&R)2V7IpXA*rzT@9lJg`0O7nr=VQCv{o+PjOHuZ{oK@t{Ps|ER6rMzFKrtm9jcodu=a zNr`qdFU1F`yYK6W`KfPRt1{TLAkwH$tO^)FPDDO>@p(LL`+iZpZ@DGLwD3cU&8&V- zV5C`me3Sw4-Zg>zxICsU7piP-ODu_bW)IDQZ zWueLxq#Vx)QGd{R0;bl$r8(i>m-%I~*k=v8@ogn_e;2ei5;yxTnKIR-`XoBNJ{cY? zE{Q0vU^r2DC+h>tB@?ImLZ*qWgs!tBcPvQHEH_WCXhtLqz2NYCabo(_=IGD+IO!2B znbX}&>68pB-crL}imJ2@9W{Nsl*&B22$KiRL5HJ6@k57x`ll>?17Bmy-QTNYeZkTV zA=4A_3%^7f_v{87aclli`g&V>rXejO$MjFc1$^gT!Xqj2?lO-t_cU@&Oh#@T7gjzP z-O$i&LDb(aF7fNFzIGrmLVKF(PCN5?vRunzi+hhZ^AnB#?J5JLNLWk8sJ_0{L3cl1 zRmtC`jQ`ZF)Ak`BjNJ$hbDMEpD^Ne)#j(^DtQkD?qks?8?UI`-=Z= z-lSFrh|D#fQq|V!O&nU|!IfBAr{|cS>Re5m*epgxMrJ%~kwZS#W!TtmC?O+?&CyqM zMyDhB-~FM54|;XBUToFFHM82CXFfoY76()be}kv zSa;5FJoxYaQAIB4cdOxgT)j5`x{~s~HvR8mgdKGeFEzx9lI%SZ_OdIH1Iu^0N0T?x zRG)lv)1UZrSnRiZO;_57l!r-X@RuEW&Epbo6)SJf44GHy<1U7|Nz*s^uem9u!jfaM zTYHs^a=pX4G-s)6{ z5&GGg*3p@!93wPUZh6WUEo9(y8ZGoY2n7Nwka*TPVRJ4$m7iKmvMyQL{bXZH6BU#HrUBsD1JHSk0 zj%yA^Fz&XMw2C;hIa67DXFr55)P`!Ze#gWjyHp^Sv!V&^!Q1#mSFbI^6M)6pjjLev@vSE zX;`HMo^j~gd&49M!s)@=q%@c8wy>a~ zWn;LEa3BZ~BoWC|s?FT1lv>EOhus%c6J$46darL52dB-xYDRFaTu=X7(nH~FH?g#x z;PJ!7m=9DrLOC)P{bk`%PE)z61<@&6(;=DIEOR~zPbP2sTRcYSg-NK80nkfi!go9VH@G&X_9dG)0-7-lE?Q zU4!l!oAf+^zl!Rhr_fwulU)~AOxFj!$duB7PnIlH5r_}G!wf@qE; zD@LdY;EJzesD6u2$Of6s-+xjF_OHSwnATpjX_80$@1uy>c$C)R(G~hh8P%>uW`t;>AGUMkrU&p94 zO{52$rxf0eS-95O?B+%Fkt?_Eg!U=sxK_P`AWb7c)-l-0JJ9K`f8cfJfuKE6TpAo1 z%(L{7pe1xmeu_VL!_SKUCt6d*-ylcn^I!3_z>EG@QbXpwH!yf_HC>7fstoBz+Mko- z=-0$Awcx4aJ6^9Yu8PMm(w6IVIZG0@fRm!v?DM?!Qnu2nFEX0_oJ(3T_IUG}LJt@M zUO8ZLmTwnpxgQ>vy|49Y&OhtbGyXgBShkWw?{fB(Z58H+RU6KC(6^Q@;4zK?|erWVL{%yUw VaG`jdOIYydzM`f=nVi}4{}+$V7hM1V literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 38d686b..97c4cb7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "xspline" -version = "1.0.0" +version = "0.1.0" description = "Advanced spline package that provides b-spline bases, their derivatives and integrals" readme = "REDME.rst" requires-python = ">=3.10" @@ -12,7 +12,7 @@ license = { file = "LICENSE" } authors = [ { name = "IHME Math Sciences", email = "ihme.math.sciences@gmail.com" }, ] -dependencies = ["numpy"] +dependencies = ["numpy>=1.25.1"] [project.optional-dependencies] test = ["pytest"] @@ -25,4 +25,4 @@ github = "https://github.com/zhengp0/xspline" project = "xspline" author = "IHME Math Sciences" copyright = "2023, IHME Math Sciences" -version = "1.0.0" \ No newline at end of file +version = "0.1.0" \ No newline at end of file