From dbdf11e9c8cbdd39861ba2c7946caf0e135011d2 Mon Sep 17 00:00:00 2001 From: Gerhardsa0 <113539440+Gerhardsa0@users.noreply.github.com> Date: Tue, 5 Mar 2024 09:57:23 +0100 Subject: [PATCH] feat: added normal plot for time series (#550) Closes #549 ### Summary of Changes Add more plot for time series: * ```TimeSeries.plot_lineplot``` * ```TimeSeries.plot_scatterplot``` --------- Co-authored-by: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Co-authored-by: Lars Reimann --- .../data/tabular/containers/_time_series.py | 150 +++++++++- .../test_should_plot_feature.png | Bin 0 -> 22754 bytes .../test_should_plot_feature_x.png | Bin 0 -> 12852 bytes .../test_should_plot_feature_y.png | Bin 0 -> 17313 bytes .../test_should_return_table.png | Bin 0 -> 14946 bytes .../test_should_return_table_both.png | Bin 0 -> 12395 bytes .../test_should_plot_feature.png | Bin 0 -> 11415 bytes .../test_should_plot_feature_both_set.png | Bin 0 -> 12902 bytes .../test_should_plot_feature_only_x.png | Bin 0 -> 11657 bytes ...st_should_plot_feature_only_y_optional.png | Bin 0 -> 11415 bytes .../test_should_return_table.png | Bin 0 -> 11067 bytes .../_time_series/test_plot_lineplot.py | 265 ++++++++++++++++++ .../_time_series/test_plot_scatterplot.py | 265 ++++++++++++++++++ 13 files changed, 679 insertions(+), 1 deletion(-) create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_plot_feature.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_plot_feature_x.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_plot_feature_y.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_return_table.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_return_table_both.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_both_set.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_only_x.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_only_y_optional.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_return_table.png create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_lineplot.py create mode 100644 tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_scatterplot.py diff --git a/src/safeds/data/tabular/containers/_time_series.py b/src/safeds/data/tabular/containers/_time_series.py index fee39fd94..a755885e1 100644 --- a/src/safeds/data/tabular/containers/_time_series.py +++ b/src/safeds/data/tabular/containers/_time_series.py @@ -6,6 +6,7 @@ import matplotlib.pyplot as plt import pandas as pd +import seaborn as sns from safeds.data.image.containers import Image from safeds.data.tabular.containers import Column, Row, Table, TaggedTable @@ -36,7 +37,7 @@ def _from_tagged_table( Parameters ---------- - table : TaggedTable + tagged_table: TaggedTable The tagged table. time_name: str Name of the time column. @@ -906,3 +907,150 @@ def plot_lagplot(self, lag: int) -> Image: plt.close() # Prevents the figure from being displayed directly buffer.seek(0) return Image.from_bytes(buffer.read()) + + def plot_lineplot(self, x_column_name: str | None = None, y_column_name: str | None = None) -> Image: + """ + + Plot the time series target or the given column(s) as line plot. + + The function will take the time column as the default value for y_column_name and the target column as the + default value for x_column_name. + + Parameters + ---------- + x_column_name: + The column name of the column to be plotted on the x-Axis, default is the time column. + y_column_name: + The column name of the column to be plotted on the y-Axis, default is the target column. + + Returns + ------- + plot: + The plot as an image. + + Raises + ------ + NonNumericColumnError + If the time series given columns contain non-numerical values. + + UnknownColumnNameError + If one of the given names does not exist in the table + + Examples + -------- + >>> from safeds.data.tabular.containers import TimeSeries + >>> table = TimeSeries({"time":[1, 2], "target": [3, 4], "feature":[2,2]}, target_name= "target", time_name="time", feature_names=["feature"], ) + >>> image = table.plot_lineplot() + + """ + self._data.index.name = "index" + if x_column_name is not None and not self.get_column(x_column_name).type.is_numeric(): + raise NonNumericColumnError("The time series plotted column contains non-numerical columns.") + + if y_column_name is None: + y_column_name = self.target.name + + elif y_column_name not in self._data.columns: + raise UnknownColumnNameError([y_column_name]) + + if x_column_name is None: + x_column_name = self.time.name + + if not self.get_column(y_column_name).type.is_numeric(): + raise NonNumericColumnError("The time series plotted column contains non-numerical columns.") + + fig = plt.figure() + ax = sns.lineplot( + data=self._data, + x=x_column_name, + y=y_column_name, + ) + ax.set(xlabel=x_column_name, ylabel=y_column_name) + ax.set_xticks(ax.get_xticks()) + ax.set_xticklabels( + ax.get_xticklabels(), + rotation=45, + horizontalalignment="right", + ) # rotate the labels of the x Axis to prevent the chance of overlapping of the labels + plt.tight_layout() + + buffer = io.BytesIO() + fig.savefig(buffer, format="png") + plt.close() # Prevents the figure from being displayed directly + buffer.seek(0) + self._data = self._data.reset_index() + return Image.from_bytes(buffer.read()) + + def plot_scatterplot( + self, + x_column_name: str | None = None, + y_column_name: str | None = None, + ) -> Image: + """ + Plot the time series target or the given column(s) as scatter plot. + + The function will take the time column as the default value for x_column_name and the target column as the + default value for y_column_name. + + Parameters + ---------- + x_column_name: + The column name of the column to be plotted on the x-Axis. + y_column_name: + The column name of the column to be plotted on the y-Axis. + + Returns + ------- + plot: + The plot as an image. + + Raises + ------ + NonNumericColumnError + If the time series given columns contain non-numerical values. + + UnknownColumnNameError + If one of the given names does not exist in the table + + Examples + -------- + >>> from safeds.data.tabular.containers import TimeSeries + >>> table = TimeSeries({"time":[1, 2], "target": [3, 4], "feature":[2,2]}, target_name= "target", time_name="time", feature_names=["feature"], ) + >>> image = table.plot_scatterplot() + + """ + self._data.index.name = "index" + if x_column_name is not None and not self.get_column(x_column_name).type.is_numeric(): + raise NonNumericColumnError("The time series plotted column contains non-numerical columns.") + + if y_column_name is None: + y_column_name = self.target.name + elif y_column_name not in self._data.columns: + raise UnknownColumnNameError([y_column_name]) + if x_column_name is None: + x_column_name = self.time.name + + if not self.get_column(y_column_name).type.is_numeric(): + raise NonNumericColumnError("The time series plotted column contains non-numerical columns.") + + fig = plt.figure() + ax = sns.scatterplot( + data=self._data, + x=x_column_name, + y=y_column_name, + ) + ax.set(xlabel=x_column_name, ylabel=y_column_name) + ax.set_xticks(ax.get_xticks()) + ax.set_xticklabels( + ax.get_xticklabels(), + rotation=45, + horizontalalignment="right", + ) # rotate the labels of the x Axis to prevent the chance of overlapping of the labels + plt.tight_layout() + + buffer = io.BytesIO() + fig.savefig(buffer, format="png") + plt.close() # Prevents the figure from being displayed directly + buffer.seek(0) + self._data = self._data.reset_index() + return Image.from_bytes(buffer.read()) diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_plot_feature.png b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_plot_feature.png new file mode 100644 index 0000000000000000000000000000000000000000..98dbeaa93ed2438e2db93412ee9a4d3b0847be54 GIT binary patch literal 22754 zcmb?@by!v3*6yMaknUy!1|^{)A|X-|5>gVv%t38Tayz@j4<}`_suT%7Y&t%o!XmV4ujRYo8}* z=rPR9{7lcNdgHQc-&Vig?M%IXJx6;hQflr;oQl*Vot;dRlN>v9m$XYduKpC8DE#hL z>6W(l{P)hh^la)qUl~!ZV1x?(V>(WgL&}N4VA4OdBFgge@>W)iNJMyecr+OvCtQz@ zH%EBjvZyFo09=(<48?f}S35d{5o+}3OoXy<6~o>9fB&(KHUlR?sbNgD*J{(pkL03H z)t24hHsLqJDRC<+D_uN2Ln1n(R(r)hAl`p|np9L*tC|qP{k1AH-n?n*=~)R`z4ZjA z4}L1!d8TJ#;^vG!_UCHXu91(8kDq%wufSxD2uS^KaCYv+K8nwGYYppJ1Qbr_&kg@H4| zJcN+>g@xwcUWz>ZLciq|)g+Iesm6pGeCQh89H^8E zIN~{d`q-bJ<5w0wrk?9!Wo7MqXRZ2N>YiTH2QXFkJ8K5MqO~vlr?j&(gcMd6$JiVE z-Bu^05Lvk22Z2JZ*P-)eS@B(S54+}4(%jwL_}-u^n@g)d;3j--R$L*f_!NEb2{KxQ&B^s}^Ehi?teM`q~Kv!pHW2O5-UzO+gTNAwl1JqkvTh@oD zH4eQWUJrgXc^Ja+aSRuUUNzv5iS{MXbrj4HRMS`*lL)wb_ilyXLDl?1Mh1_(l2UVL z=P`D6cH(2l8uxd8PtVN}z&PEhk_-g}1&g1u;ye^+z!5_#z4>Wo&nwJaE?~WrXk#GV zM`7ao;{La|!_XaJrLe zhp|=!SATV`X;41&>3GfhO-T)K*&J0dMyy+Bh#l7WaBvyDj=!EEU&=?nZDY%6_}M+N zN+9U(R(^Cnk3f&TGBiP{00+Un#7cEufcPAncdWmH88#qXwPrX)`A(2TiH02)2`$eJ zs+3A;Xi_V*$@|2Q9f9X*mzSzxRi+hv!$3Da>E7`)BCNNS5xp4c~Y=ErWN^UwQR7Jb()J z0d!skQ*N&=85wMUr^_D1jj4s-)_(qQ~1_tj{3X8>?4;jUXymK@u^Z11G*T$ay#&vO>qp#zQ zP#Y&2hzU>@dSAS1LVqBG4VweZ35I5^91+{Qz2A|5dCy#n%_7;sqFbusCQaBNW*D!l z8GY60wJWALBXczTyr;$5L;lZeF7Fyq6T6lsRSE18VIOZpJ2JuEw@!wA+CLLPE}qYgr3=EHGP4wN zwcc>X-eEChyi2HQSe+_drSpLrq3>WP>EoM!9vm~OS|Y$sz=!LWvz6IQqH@LpUGu~T zGJYbWm#@pC2Ce%^v0jqCfC+B!I{CP0yH6K2vcrg_qYLNqh4-1y>i({yf5I7ki?6-K z7bu?*B8x1VEZ`_jUz>DhJ}g>eQ%t{1)w(c+<$1-auR)iRpLPhBE78<^sv?JH5c&HI zZ<^QttgUY`e(OwdDdx9Z8mbY3i;{mYK2Q-X+Aqg{D{%)8SyM4N=_@9H2;I58WJCPd zM$z5-77%YpP8Me3A&O;!c1t!+9}=BHA7DM;?2J=ViAVKgU1A6K>jHkG47CRiswVVy zOxWCrgOr&nw?3Cj(tNA)y5RlsA##cbUg~8YV)9t~DqbtlF`t;|8g{G8$TV7L6M~q* zK|TayXJf~X9v*)y7d=iJkv#Y)(dqg{@s{n_6^R2kPdZt2zRJ@ieR);z-dh%Se6N!%IjXN!u)bp@|LdEI+Bj8E zP|{BvWP;qI`9Yn!x%J0Hr?y~pZXL?T{tv_YS=LZg9E>O!%S72y9M<< zD}3^{OfC;4vR_fU*>=t$=NbcvH?sLWZ}3oIEsOU?Cue=m`Iv#%{t4t|W)@8y6La|T zokVJVMQsZ-LWpWI-E~tNqYe=h7e$cO^4~4dP7}hGs^YKPvG)(K(0(s`{t~X&`zSL@ z^GIH2@hciK`Z-+~wnprAv$E$Jjam0*wBBkrzfTbyI!+|R&FPE1jJRJZ5k%u92tmt5sA)U zxi_^cF*d>ovz{#*n0tQS;2aN9=%WkUW5671VILLZz@l04q8~1}gScz?D*;7QvK6}4 zs^Yu1{$4*-t{m9MCUSw*p92vts$`K~?MZan@Wrm}MtA96B_kVq;4_Nf=H~VfdVTiH zTu8mjJYFxfp|i_SB5!$PzWkAqmNrkbtC7UK@$#CN*Ap0A?C;HGbF?j&rt#m(XblYH ztKYxnE5(C+)Eyp(xyg$9UVN--?_WY-w%0Rf__+lp3d6tSgo+vRg zut(gJP$()DZheR2w>WR4y8KSL_wRL1F8uSUs*ShyW?pF?8_aWx+H4N$YX|}3?PH(c zLoHq|M55lf>0|gP65yonU}1M;Qv{1QK#esn+oO~l0maWSE=$+Q)vOvy3MLrG>)5lr zx$?1VKR|Von!{pX=#&-RsVOUmz``*6mySX9uy};wSmRsRmo}tWektDnBTtO8T`6Iv z?m}rVX{c(#%ybGnz_B^n)56w9WQP^n0|Sm7{6Du#vM7wIv_i1=f27=0YaD$nPFCAT zTA*8PO~ILi%zm27^M(~Z_VIa&&ddwFS&3G7B^UBFc8HjiTwY9E34Dti>svYzw0!62 zIcg$THF$B5ujjHub+6#Ub8@*_Td84hz}MMqEYap1+p?1Zdvo??UL5$(gPdbo-mm`R zWSwJ}M;zv3Z-~cw<6lQ+G9?~gyYl7DxlEy`Xj*iEvIQI*!eCv)xY58!@B=H$Y zULxMi(~qw@D{6sVW4eqYgOHKx*&_aBa^z*Tv!KArBw1PF{w}ZGIvx0k4vw}ciSWfs zxPZXS>@m&J1ry#!x*BC3+^G#%AF_tr%W36s_8lpmOIc}y_!YeVs=D`s)>L-b$Y~d0 zD7dzn_N916`Kqe8zn4-l0a1D)o>5i26E^k^Joq6;@aA?@TYMe`f;1cYOg(;~Zf4h( z=#+5}YlII=Du(23!AhJGuMv8i69#=*rwPw`!465kgALM1Qev(Qp%|zy!sRmCYHHWF zZ5_@61}JehVB0%UV!6#-`_k(kk|c2BK~a(L{`PF#+WLB9YZQZs+c)J47cQ6$WL(uw zQi4Kc>hd)zbcI5U;t+(!)H&ec$K$ZOH$o=}8pLjWeCf41u{cpHiM#|bJ^ap^^kbUL z8CPovY-BX^U9iKh%cglRFPdxZszme>VxE5&k(h)^MvG&Dii zv#z07ytgLKSV-yGwQEoP0ok9CBM#)acG7%pw|-4nKUVSFk0LJ%$xxXARiAPqm$qo8 zj?T`&@^W!Cb@f-;IYnlTxMVEne?0wjqr{d+J@<-fl2!YR7d`@*2e4Cm6NOH;G6LD|`-d^bPqGoG`5GMEWb4X1DbHv#mF+TBSvefbRbh19E>8;YyAFVCa9!~`RjT;8*y5oKtK*B+Z0dMvtoy(A z{4WSv3E)gAwPsE04yA(xUL{`b^UxIwja~yX z^4FMbYBDX9&7@x|unY5S4$^EN(OVt}=R1yu5T=+17QAncSi|m%@CuIaZdY4q)!P)6 z2`5yD{-an|gb9Dc9OdYuHNS|K{0_66L0tYr<(4o0H;IsvY$Lk7Fv2Ft0UaG^l8C?T^Taedu1sN8-r}li zIhEtG#hpKG!s3ttG1&QCNc#B%z|lcArQZArgRw%UUHn0)A26xd7)xl~-m25RGe`YR z<=paxQ8PyuO6D&XqZ;Y$e{cSfUw7Mg()#wrBwS?i+scDN!ky;Euf{VU!aXR^*)P?W z{E&-29w+Z%Pj4m4nQ{G!nr|(RQ5BUG9`yL=&>jYlMofbzKTStAp)Yt<`G3OuLnE!4yl(asXuwO&Bz)vBQH&59R(J@ zcO^Q>_hRdZjSn$lchM5+3&*#{Zuw9RpYx4tdY+Jg7YR`BiJ!ROvBWOt)xxP!5FC}t z+w=gBN+(QkJp3j${4ZSsWWNLG$o&T)GDW8WxbrL)cPeg(qHCj^Wj)U@`#N9i!d*c& zWDSb5?!|e45At)^(0-AB>kfTesM5?eJ+8Ms>ctuUVjI8Q6TrB&SnzbwZZw3pdz>cD zB9r;W=i9~SFA&Gre??dJGS<0LG5Wc}&d!$rLIE~%GR8AK{wt`K4yT*u}Ya!Ci`trc9note!CzppnD{gpFAb0zW1Qiwz%9 z%bATwJTvfF$AICZn#CI+C zUc}ZECClGR!;(vQN#aOov+XTo0UD*J>YoE_lHQJWEInebqWR(D0!M;4_Bh)^cVrD* zILC6|!QvF4#!YwY64aiWT@l${`E?&@csc)b`)xTOBdR4VaN-??yH3Yy^YcLPw<-0T2gbmDewOJ#-{(y&OrDO{=wRSEY1H;QRC#xU2} z&5gZze$LT04mHts5pKVF<}8R#jsfdAM*ynV+)r=&nqH#i3*7zeSPYB@a|Hy=zd<$K zUnfJ;eCwy`w#2XV$V;P7Dcf!V9JvO+_=A;A*T;cW>wN;qQ)HSdy#5&;4U=$fp1AaF zQwmXZ@s`A}Q^=i-pjhw!C-!s>#eb=e2ahO!GX8IU~zD=+st7~K8F9E{RO#Wn_<_7dni7h8fCi^`4=kf=?t$H){WmUxgl z%>`CUL2M0ILAL-?GK|Vd!yX7MqCv`2v&*KY5JVn>0SCBH0}_5q%9czn=BEdea4gpl zCn{y*+90n^g^86T$O?;I`-jVi*-+KXZ_uLGeSV_Q(J`{6^_vnB zaJ5jpK`E65HW-x@4Md-K_G*_rNa*0_Ki+n)r3D@?j%9>GVu_DMpM2no9Pz%(JUu;Y z1#YI{OReLQZ`s)Kd+p0m2l7Gph;lD2Ek8ZFR1lkHx%pG2PXLQSbR?Vf`eQJ2C4^TpvoUr zh++oxeY}XhS0`$1Cu$@J$rup^1_pe5{HamrdNdQIlc403mW**(T z>=(z`8=i?fV*~`quD?-he0$@)%XAZgTFTjD^z`&7Gn(eZQE5zGXenN;f%H{xL^SSUE8eJ$?V*t{9)?akB8 zqfa?&r)_g%wk;<9(W778d)?0^XhudxQv7prat!k!pBn*})_pKXEj>YnSE(Hn8{v1^%;ip=_7)tWZT(~8BWyxB%px+gc0P|N1lsXlOVDu9-D(36%`lvkG;{( zarrqWvAwsKl-E%I?9yFP;GKg)NEs}q8Uio)A6^zN*{>5SQE;z|2Q*kk2bN7D& zry#t({!s-e+B#$t_z^_~1)NhOc#I4TM5LsoJ&v$uYrlVAv9-0`;oE-(jK3MQ7?LI2 zPe>o_yLH;b2=+UEN=Viy82o>k&1SAS&|E zp8x)(5G>DPJ6R|7Ha|b@t`qFiVpWyi_Qe>6cyAdBn-iklEB*MZB?ZmBYS6MUJQncu z=~G5wGbEN>isY$UsKb|nS2t^YyjN@gXqMXR3YgXzvuIqAx1#imst=1RZ|Bqp5N84? zcit09$Z)OXdoTf3A*wE^mdDP$R#8|L*#+!=LcdLo(L*^i3=f;W0m-F>3mj*Hyhl^jIfAJt(`HW+Ia-^U6E%djZ z&mD{I`Lcw{U>-f!+d_m)s%XLGnxLlEGB%F3`}BrOTACf~b>aSQ3HHZ@9SMBCWvim+ z)A;SKk93X_0D24yDy?iuprW!njhuJu$r1n8{fZB%(llVK@Y5C zofZNtw_r7;WivNbsv(d!ZVREweZ?qrkN?>BLB4M{l;$#xmV$&kHye$(5*K$pBl*z0 zfygii8w)^4D!Zg>YWQp{EPI1$2t!9 zhBX(zU$_z&OpYBdvb(qEU{iQz{MGjM?XCIwdB(H0ltcMOMEv~xj+c00aOhu&+`lD2 z-jYz_@twhdg>)D45!I4VzA-_~y+2Ogckh}X>~4lfL|j%=BSZI$VhpqS@A;nX!@bq@ zg*1N)Xv2N=zKFr3y3U%j@4l6e!E?1k@oUtCw1IR(+;m*HM+$0TgCYdnyycm5UCxd9 z@83zq#l_L8b)h#cEI(gR`f%G)z^F`(MdPYGPvw=Q0m>?F`nztt_QOUHeL3+z=K#wp zFMp)Mk0UH3MDDpfc-P`CtQaNi$(P@RT@4LW&cBEaSJnoo*5#+#@^w}mK?J2z*LwP7 zb;@TeKgwrtpiyjelm*&SimtB3Hc#bVHO#a|O|PsRM=IPG$n6KSU&Ul`V;-p~zF=K- zx=?t`9|&6c?L9#>Vinq2LuvgvuRl-!Ohskos~hia5S1;GTphk2ll2^k%kO#hXcqBn zEE-DkJV0IxK$X@o{sS{?kZjR8+SB)`R~Mp5_|4>@d7SQ^p4K<&&mJZx6C<{R*;JwA zY$TGBl8%>Z^jz6xF+N&Gy;)O_rPfdB0tJ}YZ&-8 zt7G?ibBDh0iv!kBZ%@I38X1j>mal#-RYjwS&U7#(v7{ef7x_t9 z!GJfVD`>0i=QT9ygFe*Oa;`rpJI@{&t}I%qKoa~jym5Ma4++4z?6jS(aoynQ z`#d5lCi;B*hT|;fZD-BH!+G4HK$0F~#L~x3e9bjCr5Sf4m7dnk%gcw#@uMIkjV)Zg zxg=GjjP`!N4EkXxBkM05c&wOZvK4(8DtD{4E^X?oSAe7npo@a|g`OmPCA#dRK zH^#$*yXxC}MfatG>%Tk#pO1c^hdY&W&Y{Tfz{mGs^Gi`tQA3H{r?tJ+dP`vIIzE0J zYP$}DtLuE=-q_!z{W#Gb5EF7*kK%aC+j8dSZXJG(2v{u*{3QM?cD9}h4lz>_3G6=?L2e%@oDXBVaHnnHmh~P775JGyMqlcjyX=Z`qcrNE^(vk zfUn2a-ur{$gUlXY6di>tK zdpTWP=_DSQb*>YRF>-o=xVqqVn-676e&?P*_y3&sguv?r#Ma(EvZUl}MMcGv8!zJH zaR7v6>*W5D4$*^Bok<$lww~he28Z{cm`SOW;1sw(T*{W82@GrY*oS8*n%Ta=Bzooy z1q4#86&Dh(XEd~rTCVNQ!SV+gRao9U!+}DJUH>_f06=Uw2=s}4e|4TLD&8@D?*SaH z`@+Y@$;os4%!YL&5#cXB)g@Oamxky)8O%f%x!eELyc>xPPES;viQej1q1< zdIiRvzn8+5sYw!;qbP2+{>gd-wJ6I4%giM{pV)6IsD&TeWh}{M|NDF z(D9MaLE(!Ww!BbIT;+luF~I$X16GOKf@;OSFFC5tTkBH*TZ*>2eUzXit$(z>bJ(Ss zjlZm4-dZ)?)8CL8i87MdKIZ^G#2lNI*ye%`No+G@rVGa}+oCg043oals-cD%V99w( zfRaT?pHvL1)K`~dC`R8yYUz(ciNabJfoZf>iUGR)xg${W50Mf(6y3_734)#MkpeV* zPyhGrUJfV+|EnNHqsPVolv2vKK)3;&kh8JI_n{p9I)In9b^C8Qis7Sxf_LERe=9VK zgvAH9;o;!`Y`s$^KI$PwcVH5OHXRo^)fYQgc(&8n$oPt*RIU>&Vw#&@q}^$xrT<$?T*H z9L%|Vl+cscMytkre!X0gqXz4JkMm4O-z#&^x2!)XlvvPxH$VV2X@>3}_ef!==rNDr zm+C&XIMT~w4?6PQ=`V8X=^Xz~A(Pd;0Coz5YY zpsDo*I*Sbgn1xjN+XohEun}k?z|$2=a-wcHpR<9?jgdk(V(;8Q>TPK1HLNK8&ni%U z7i}6IeuiFTa&2`+=CiQJ$A<`sUPa{9qF&ywIM;#B(w5}=rP?J9Wh$FpH_wptTxORPls z3m!;p#xD9?y;mxqsi>(VP$M zX=OM<+e!G`IXaH}8&rVL@%i%>o_XJy?|zDA-+fhe_53Nmh>b4bv=`s+o`v2s%4zrd z>`dha`jJ6Hi%;*#j^ zD3sQFUXw_UFn%7Q5u5xKTA4GEN+$=A^zte$Csl&R*a{>yuXiNoj!u!S&U@+Q{*FLC z0%L4NiL*9bY^j|jo5Aq!R2wgdROPL1lVK3*ewoMoy2<5#M1efV0rLFEgE_ndP+)*8 zMqZu=)xF?(iRV#TiYs8|kBq9+m&Pb(CC{5dKEZH9EVOF)Xspp5EU4AdeI_)hR6>t@ ztKA`H7}8P4Fq*MBx$uWlDtYiyhI+~&Ig&IVlVEp?%@Va2*HvOQ8P)#AAH?ARPM4Y`w;f9;J;K z9vu;m$Kmj@3od3`M$-jVtuU;Bl*_W=#S=~uEw6D2a=#{9etwA5EbE$}Wrwl`Sb0g9 z3%@CLvf*9xF-_8j@-jSt$J2TVXe3&kL$7C#VF;jkGv%@m9D2jN({_zG)TdNhJLtui z4u9N5d@S*u-YhgX4dSP5ZZ$sCzm$R6j|?B|7b`*eEHp>bQd9G-oFEZDwAC9Y$FgE zzh+WlhYtbcJTkEQz#UB**HZf&Gi;b_F@nf={Lbe^!>m;U7?%echi`yFzm28PeSkvu z`v-*%{2?lRIR?U**YQC-78pU6 zJoK66_2`!%HSF^0NWchu{p&4Z(3huuM?&lJt`sGA`^qk(EsDQFU!7xv_JQZx3oLh5 zBPem#+}#_XjR11b#HzE<_LPJ5qZ7zd4m>?-vDTgd`|-+6*Y+%_`{?ct=YdGC6G;7Y z&O*%_|Iq-5V{9G(tzo7~iasF54(zY{@VAiVCb>c3Q_C zH9ig8F4DjJ9abS!;?`+gT63An`D|H&bPG8P8 zt;Iq@Dk(ZVPAv%(u-x-vy`wM=LE=w-2=BqOSCPDvh7gRaw*?h89{nfr2G9q<;crmK zp1362F=T7Sz&CXpRmc#&RKJh4!2vAN1}>Pm@Tex1P6-g@PPHUP-~weSE7pV?M0lM2 z?jM9S&3L`vvIn^}AO*N(_QNiSox&0U=M1(QnvA;`EGT zgTP`YcVutG z19DMFChrrA^KkJr`!`zi{dr~MicMlf_?0D|n%`?K)Qhn_$lYh8|UJv=0rNbh6rT0=NQBR4~yMlJgg?X#IsNR7|i9MD3Ld#*{!y@Qwbo zR(>Qel$)|$e-WX)&MQWw^HdHX!dT%0E?^cy_b;JHlEJrGY zNX=08MLn`#VXu#4P3Q`sIOxuqYE5mCOmxY`&kRV z`F*!zfV5F^6YYLGjQqVmfnMj*&t2Q8>l*eDB0&1E{N+YiPz;v8q*`KtCnU8SLEGOE zi-Q6kR4mXp0aUq{qktGJby?Q*LkR(dy_p6Iz?Vq(^>Cwp~#OEhgkM${CTX zw~leGt#m#!a65&=S1LPexMje=icfJ1#Fwb^I=~$sqvFd+rYIl?kpMrO(&CqeXWj~` z@uJS9e6%zkY!^i@CViDAe>m znB8hr`6ELl3_TTO>f1LSSKf_xfXhVeRB5l7Xb>ULB%~3mx{J-!S_J*yk!-y@Dr)Kn zWsaliz%=(7YX~J>5lV7EHA^|szZNB0CO$SnvwWJ~#J(ro5W6-8JoUPIr#asOO^P@Y$`ya&-R8&$FuO*2zi31~OPFg^tt+V(TpN9mFz*E8gzsJ zEwa}~K(`^p5Rop}GGJi^mG56qWm3FLoV=mr6pwq|t7S&hxAVoMlJG@I2{+i@*tiCO`vPsVO1FkcYa29suiC_hU5-OWC2>TnehfgeXc}qmNk@aPEUPZ!lXQO9D6Mp=t{l z0HUam9SRml+>ec(nSeOCbRC4g+l{f!y>#MG`{@60iHa+9}FtmqE3 z9MqMNO3(cGPl5}m3l>0?(5s$LkL7RuR0AjjoE?b(&^6`r{e1u$cmN>@1ym3~SZ`WK zfiMn^u>m5)qB)Ed{QQV--A}0Pc639}|3QgCX=;IF_?O6RVa2GIi%AN|^$ciO@j;A< zMN{c+W=KYscJ82o?;2m7WCA{7dwr70l;T)`I~{hB2fWAvHiE+{-9QZx;ePcg641}K zY;K>Vh;=zDPDUgr8kPEjlx0uC?VoTF)o5WbSHS!T#LkFuZK+Vjzp_Nm%7Mmr`Sq9e&m35k=p{c~BwKM2)%e27>f#d0az8f7 z1}gIPdV2y95&$|Cvzvt{iq3+{7)G~jL~P|Dw>KuoP*o&oA*5n7-K*oYct#c2Ku@JB z3O6W*<3=|7tYLB?B*1!7(X)ozIAIAzd3kCx!sv9M5w8A2MG@bI3$IaC8lC zi?f`V=Dfo6em>0qUuC{rfMjjR0tlC9^3~8ngs9R@r}%6$G#k7>Wxc`fj(8~7&I*GX zz0FIG6Sk}cB^x+=(crS5I3+R~-{k-rawh9kf{Aon0x+fkah+Tnx z%VaV#c{fFAR15X_UZpT7Efn>gYmRbH{=E)h^ms#m9>p5ez29h0PXkbN4kb+YynhSp zJ{Y!EB)c7uA{^2&hYmg`KIPPOIOJoku0ZS>EsiiEn>u#_ak)m*UCvH(A)FNnMDtr9 z@&^m=f^YfoNr-V|72d)g(b?Ti_kZ|okQbH*Ez<_C_l&Ww&jr{3@+H9vELh=JsL;pf zEm~Kra>AcdRv1qlu%^6DB>-nY2>*Z24We?5e>rrReAOg?Hkc9#c>bI zb8W5yCw82%-RbQtVYJtewu?>;-q=45lk9G8`xzEM1crheE7yl(lp-GxTRXc5XxP#w zCMIepY3D@45baLUmf}OMcx{q*EZM}(YOsIIaa60-{Mc+pr=F1%?M4BTII4INlt%=w z{PzbjmncgOO{ROzi*Wjqg`E607UKtbAL8rqB@FT^e@LE~jT3`WSS6Y2zJ0SA15tKn z^}QP6AmV^>=gBr`vJ_jklk=QBiHBH;-pJ&!%~4QLcx6~>A08R`sERh12cStucXu!t zY%o)&Dm@)TOG}HKx*Lbrw%*Ff!V;w+y@TIy)aEDkqcQiOM(Nfkdo2C^uFoIUb)-$JHF*=zVy_ z44SYPJr)B%^9-sJWs_@}D$2?Y&n4W2;j6cYi*Udw+DSU6Ei5ehDqJmt!@^WeR5GhQ zmZ&Fuz6%1hVHY$iYk|I$3mhm7IsoIN6OrWiKQdL4i2kLJi)681JsTePLyF4A`yZww*Dls8}7n&OKz%+Jz_&^N? zq&M|l53&7Pk^_`qwT)DQ3a@zr9k-CsH3K7~D6qAC;&{EkX-iuhNr)Vmxi#GxY3ZA& zW@qE)xRJ-tu^Zdl+r<9<{_CGKWUiVRhD1h2QiERJVs~Q+++@jVtb!|7FP~3(dkPQz zO2n%xVUZ0Dvi+}>C{XneSFm|q@9WpEL-O4ihBF)IJ?dIWyH5lny6RXG*`^q=BhFs%VOI-CWi+x3fD9-M*8-lyW&bkwD!= zm{i}17#=q0S(O_FFm~eP$*9odERmqDw@sXzpO1tVV-)nrBXIBtl?_ZU2`SVPy01_uX6?!@DWST@PX1b%%L1M^lbz61-P0#OC~XJ6!Ih0A3S23@@%ArY}! zw|8xZgkMok?g2_l`HEz z3u&*NC+pAyt$>?(3QA_a&Cg@FxNxAQnqm#|ujUHZSp-4F0oSg@UQRuUIy&KTW=<(7 zHn1If(wLm}LI9jt1(VWnad8>Ew>kdn_wP)hQaQ%i^F-iNq+FayU0Qj1f*Dy^c-xa9 zPO!7&Y;8}0S_VCvY&#^54^eJ=t(l@f=laRu&`{`rlG>Ltvz)&zYhi&oe|tCpdgAmf z;!gN4=Ug46wDr;!Jogb8-Tub-- zK7Xk2d8gDt+`*W^5Bse(yqUW+s#|s=2v$vzh#IqAW z&CSi5nwsQTrF{*EwYG$hARGm!rlxwYO$F-A=_Wrusezp@I%lxOlS;?+nbxNMel062 zE89(p&5H<$mYa|FnfvmkEa)*zSuc5Oy2r{c9YIyd z06S8=!`(_HXccyapqsmU*I3!z-!|qB4*ZWEJ<2#;fXfS;82l^>-ITC}5-J_Xt2~?9 z+7uxC>m_)m78e?#Fb?4iENbn?gvFrSD&S`}S>L zp{Wc67&yd?ho_ZwjjdzOEh2AF8WKCINrY2E3a}$^p0Hv>&YcU%%i~`j%)xVTaDeaB z4Tv1>elN5gdB+<{#`Ivd{)k;#S{ey>@BkOILa%IkQmFNFr9h-4M+_}_g* zQW8VJQI8X*MlaSUC054i{WD z7W+T&70NyFJ9bHWYha}g)S$rD@-#Ww_T#Z!{lXWtbGoN2N9K2Sc8W?%1%Hn? z-5xzyZ@B(pWQ1wbZ%+{3^&oQhmz7SAHi3|k5IkrTtO~i3l9FBI=k$S9@t3!^@9%rX zr=&!J-f^~_!@mW_D?K8r)BAH$FJODyTjchzFdC9XY`PhX{g3>59Q|c}JbnIL;Lgfd z-Vncrg+L z9Uo2=YfG(=Xh2d%lY4)ar-N4EO{xA|UH;mM`7`$Lwgih`-#VKb8!yW%C|otUR%u*) zNBy~s|Dov@u@*-^NZC}ZtODBCuctZOzcTU@e3=ej{y+oo7~uQ8v-LKwviG?JH&7T{ zfMPPfWNksPjskxQha6|0c<^cAo{r8F@0HRo!C6_iLL8k_$piEYZ_ zrrutSv(6L7!NI|{L-1}0IpXGLB%A)v*GoXaN`*#r*i6>f_We>i zI+Rgwf#mx7iz%_(6XOOk$FFBaELw<*L24>mINjcR-)H|^8i25Yfq@r$6g(y#u+!E- z42d3w3kQTC?U`EdU#6ZWZBpVmx)nh>xuFj81fd8fWPFCx}PqUUfXI`($Zp*~(v7gJC{r&ja)sR@_&a z@9|uNGzehAcN&IZ+s7XXWlIeOVJf_Y{EiJ@GMn)pA&qTXagX${mn`F7rGVI&O=kBw!u<(zKjmc+SOO=PwgCT|*RCz3keew4l+x4UNUE+|;yjPVr zzy78A)opjK!#_9E&O4?MA3si4Shs8c^aktUN6oT5IDZ#hUS6Jj&LI&(bSTIQV?lBG z&~~h%czffMMq0%?aRC7}5Kw8Q+m|i?f=dUGf;!a<1oxS>>1H$mTR@9i!^9sN@hLk9 ze+n3oE0|HlA{eB;_n%rzNJvtztzU0EL=AB>n7 zjqC`G;=PTwO^wUP?4GGc&ca5_2u}qB#gEw&6WG zAgg}>GPiy3oZ&J@76`i;Le<9K+$6wsp#-G#w%5X6$oNZxxv1#r^=!uBySK+Gr~nZ5 z?YZLdGKioh*6%7hIW$><2~OA4)}jJF6d}E@i-|c7u;n;xrW_R^ad;0Ago$+cBI>;J zVtK$T3yX{U+sBO#xQ>pF>ffm}%+%pq?-8GTsgl44Xov_w33~VW?nb~B{ZJ*MI!P@p zt&}~+rt?H9Lfeaduka@Btx5@i^cNBKUNeKJ$(rW->(~>OIhsk+(0Aj3k5ZGFV6x^dWa9tHglY^N$aUPA?jrejxE5n2+0 zfJeP`DjZ%RO5JYg3v8f*NI{Rz+SHW~NEriiM~kidds|m;ScG`*7uF8k^@r`n4XE~} zO)cbTU8qQAevVhqqqhe;})3r-j26Z?+ywu9wdvTpIyZ6xV#WFA|z?axPZLZDy&MJ9F zEg3)$7H>1kb4Y#PA8YSj-`Lootv}d$HeUu+#uazJ$ZAg=!|Kf^%xJz@rE1?4Lh>T7byNI`RA7_XE542J(uEB+y4f5lYXyfz={3 z7eW(4&nNZk*4q(D_9N-ZV#_c%OW(hL$@&8=3R_fU!b}(9l2A8&VC}2rdBqKGz&>u6wPOxF*$=TZ=M1QQ;*aB{jFV&y^SxcNh|= zS#M)Wxze%%4gB_5d8bmzt-} z&ibxR;oNp~e5J#;S=PJyzD+Rrl)Lw2TN@$xwQT3!B{=Q`uu4emi>q~C)J7i=1VB|0 zq9>prbeP-Nps1Mjf(ruqOFK#bRm+hEu|0eW$RExEkb!5k0)CucSUBl+3KW)F%W58WZOw4z^mBFCYo(^7IMg(Z? zSl*d5|F82Ppa$gnWuIN;=m?b2nou{@%B1b3wcX6!Ag#CVN(7O86JQETT3Q~3N<;UZ zU)Ct&wp#O>JVo3&HawgdjgWx%FU!gzKAXz~5PIRv0IIkPg4ZHI-Rv^efV02(#nh+z z`s|I_t@ZWO?&O@BZbG*qA&A`Dx(#P^Sm9*>3T9?za||Xqdn{e2B_)k`czJ=48Wx3i zF8Z>r5WsK%R}=0;R20BF9->gf0hQ=&`u+N{pzAYyQcUbRJ^{hfCVsZu6IOaA2$m?i zFsSt@1!0>7lzP^0{4{fPW}s4_1$;nT>hOggP8>9S{;ccn^hDZcs3L81hmMkx6OA$O z)EkHQ4=+J9TAPPJ*aAQ%q_(#9X0PYTmMCX02uV;bDZEyUk%vPU6YN{}U)&H-0kSz9 zTAvZ%Or~nd!k1gx+x2a73^&u?d)*!_Q-^idf+I;+v#R>@vK^hBohkLN)J6k|K?AaD zR6^dDag`>gD@O-4CcLcy$kQEp2c9dsRpKphvH%LdFW;riWINdlUcTf6y}o7N%gZRW zL`cC-h9qC~F`a9fg{BEA1YjOWTEue1WNa5{p`J%6ud>@rj~+ip3D-s- zN6u&j991u{{Q=xS$<9vB!om{4KlEaO?Vh$ab=mC^TsUKde!y_I))`O< zR^5Wcl4WHRv`u15+=pbWb%|C~nn_eml2%kBE}KR*mROgpkxXoA#7I!rQtBEjrDFx5 zwlioOqo|@Ql7@7fu_7$C()048?T=2UGkzF`wXgSkp7WgZoMTRQl=Dx@%Z}GM06q{t z0RuC5zHf4Nx)KBBXG-44R|1O_%(dqg4}3Fq1=rWxVpBI%N#xVylCh3maVx{PZ@p8q z;!tpzOyCoKa*y;-Qpx!f%Rk=zo@K%bZfdh-b=q1LX;+cWOp&M`ZE9&l)g*|3is6>n z-QItaZx7b*8A`M^o6R1)bwDTTyW-qmzZ?s!V9&ZpltEm+H~eN*N8iKKd1cvQ9@8U(+ndS3dPLBhnnyP&dq&D!V8D7_!=6eR4)1G%7kPW*L2Fq}4Q;pIwX~)t_Tb=PLbW|>_>x@fO|JHDpcZRj6vd;o z`{P%GQB+W23h$P)*Xg(pH=WKJr*5o9?LY3%%@QS3SH88*p*yIX*d5^p2I`)1G=DPM z@G@{IkZ8|VTn=29y{O5~D#q^;?0bwy^b931M6BUQ^Y=L>mD*{-9DGupKj2)kts6ag@n+_Lp z?vIY{z@wp*Wg5OE{vaq;HG!Nk9`q;k&(RMnfJ{QWQoZcM+bMLjePOM%nVFf;j>P>E ziG(a#APuq-#h&z1P*fN(n;|O^4-u{rIdQ_B=rP=k%FD|M!~n=|#{I=yK7<;d>iDD*W=`xBXJR(;-MG5B3uT<^{Sl9s zhIs{KdS&g$^2|K2>v~$qK`U5C9bPzX8C$G^+Gcb&?*E9ubkb#Lw{_|+nO4kctoIGF*_)b0OJq;ru=h87| zo=p|u{RCEVz&;Gr+Z7DV$mR9nMFH=|p^ zo&xItt8zgpG=ppdBIJwUQa=y^ug6Wg4Yd$H`W-0@*1*w&EtuamC@?O>K1*F}bl1^P zS1&tS3!X?rvi78o?Z|+~YV+5Ty%(Gh(a}Ko|2}cYCo$25Okc1(N!FisEG#bGg9>^X z3`Q@mI$ov^C|fo^Uz=2nFi*k^1Ox=6iNyyrB0ZJ3uYZ5WsGjO2gsGBd==(sm)O*X>gkB{`by%-az{H1ZeEsUbu` zMu^Z$+zL;G8#;d@bYeyRoV3Q>x8q$du5|NjYtvczd#>zZ>y#%)N^1~Grcop0Z`pnR=`~rhfynI2 zLvsbTi~e0TW7VI+{VLW!+d2)_Fup3Qe)~6XXPE#MFi=4};R63d8oU&22$9Q3h=9-m zFGNJBSAa?i-aKYU6bOm!B#;m)F(s1W(Jom8-`X+$Z$H^4=z;|47#K!ZCX2Nd6`vdM z1-JLZhZ;{z8LMh)G|Rkb==Z2i_uuo~N$&C3DBQDmZw(72&_DWk*FiNI8JR~tgWnM2 z-o1y1tChTce1z{Y19Q)A6?9!vRGc$^^UVGl;yE?GfB$|3%t?@DyFxqHec0gtj?Mq# zWP2S5cJm|6AICp*G-aB~<{R+w>b{R{8uc@k=dWjYlBaO{memiW_6CCmJDNK|G9oY$sp(T3RaJ~BCVir z-!6VFFAs9oX}zC(; zn?32{9k~kP>Z@%5@bxwox8=DLjuXlI zv?UB?CnjUvi{)P=wAFv%JS}9^u5|AiO_m%esWjh^EoIidS#v{=wfSyIKPJHo{ti8E zi&nL7PdTqnR|EzJCs4Dxs#N%~w&t`NrTCp)zSx|sDQI)8@to(Qp-1lAmy!>rF`Vs= zYd0Qi{XF*S&Dl(!WI3uX4?ToP90p#dViPZ3c8qJmh1%QO^SDX$wgVehYmL(D7K@myW0EcCTmK@rcM)wfv6pPwOOaTMN3n1uT7U?~x8sidf=FdGjT2qc0m z@JQ}Ght5giJ=vB>Xty0O^iK2#{>cdZae{|r$-lozj*Olh1JR`GN^Fup!j7V=!mNnK zG3Gf~h9+An*c2PGowE1QCg4q(h-3j8yj8U{@=U@)P??8En{rLwM<7W*#8fpw9Fa1Z zkCMaa&=3{`TPBfAytK*g0SdMU`!Ed(yzBxN>BeDHx(8G1m86o=*@|DTK14)?&4W%7 z$(aYR)RrJpDBuf~8rY3YbuqC-Ajac|_oSCap1gRc$W>TRgVzVp5=b95+3*JXPMH4G zD7@svFAW&sCElDo3&dP7F)klOl*2b(vH`MX#E-;)3pvaMB9L~SgVntbR8nG?d$KxQ zj3r*9bPjp;V_A#&3{XT?^f!EYx;HQ&AT}|P%g}i^&UvBT!i-Vql$cjc41_L?wGN9#$xg z1m3@)AyI0-kpj_BI_NY-p3}JA{6v?2ZntyF8<88y?rY1#@u9Xq%6<0Nu+WHLQ|hG( z+Cet_=+N+t{&=>_qOJUoU}N_r{-PzBLg)FD_fEEL!zT&TZ)sg*Mu5v@0BWRV#d$4SM65`s8{g&mXb$17_8S<|2nUX z=jJ$$YSo0D)&}a)e`>>AJ}<_`#~V& zn$6Isn&p9OQOxC0$9Bu_o2lpGvhKNXriIe5l!4^w>W zgl)n^&FE{1eW--sT5~e!^p>4eJFuFj96}UlP4F$z??wdHKq1eH?luGexj%y|!aV;3 z*)vQCnH@$H?)b({IH{yc{A!J4mr^Em;5X?lkxY(w2Qp`C+l}rctlmU(Dk(N8z9tf1 zJp2-1B9MrYC-;}m<_>AxulQYwkkSQ2MKK2Mu)=sFk&xAbmHRaqpT=%riEJW`sFF#* zl9T`&qR>oD^_p6x!Md&a7!hCh!ey~-sKnxJ zC>|jq)hR414-mq>O|@4BAsoUlSK*}&ra_j3WYZg4@)SLRlo|P+xs(z+xT>eHpsk&z zkN@Al4&W`%gS7W!VI>kN*i80feg@7Xs_Qt^MV^84Y=$}mNK`Yqu~2qEdMDy!E1TEz zJV);`2>yT{BDNXG%jT)8@ecf9u)<8(ouOdsMZ(E)Luu6F!wXJ6pJ@69*Z;BtfnF70 znH{2%(0FZ2x7So^^9t}!mIXGbxtmG5u;i40fdh$mLN7SGaA9i4fSL+$R+10=Jj9n| z0b<-G2fM$8s~`ibI7KCMVEPaYQQVwu_`U1pBvI(dx2`3F~cYzqyPP|+R zmJ_fv9_#?_0`YBr27ew|1(eCXQou@-RIFrz<@+VA9 z^_6`b40oYpWz7J0o@3p7DOB{Phzk#*@3qgLv-G=GcoK_QLl}IavHRcitp>M!O3TXT z`yR7e57vf(TYh8Rl4`YJiH=1ncU-u%aTpj&yu?=~z~k6g8fmxe%|y*S$-aX}DRSr~78&LkM{_HC-4YyY@1A{2vGu_#Q$}aUuer{D8@v2t zLo<>yf~m7rHO?hgz9LB35ud4-$ji$w4=2n{4n>58rNzc_cw8?{k$$-K<4o0Y1&KRf z>9x6zkCrAp3%~no8wlnuD^zSVql#$N8-z|3WK0oh$~bs%?N#jFqe_W-Io9iKo~^>I z1~G;OPJzz0ixXYeKVmDl^z3C~N@{CsQ=>(najrmh;WhtF7D4mpv4R_V5n{KZq5he0 ztLdM%1hH5*#``E!hTF^yHH`d-^A2~JI5j`nW4vF~wkcINOUR~$r`VQS%5LbjhJyEF z>`eSas@$#abf%DIZK!P;8_jDI(HE(!*|8_(nzjX_c zdW+ZR`7ei@Jil$*wzzO*C8d_n52@E+g_yFutXPs$_AXY*ICsI8ky(kso>z28<&80g ziII^}(qRwI_gPu=OiaUmmyuM6KMq{Ss`&|-Hm&JzL~n*K)oG zQ$a`R`x|{C6%@n7HAOq^9*W%TPJQrzLSlWXe|dQ{BM|gS*rsLa>RvRJa;QvZUTver znwd2%Sh6cEBxP~9_uVUS7LhyMPf@hJH&YnzF4S)|a!GSuoJjlh=}edV$~f3kC|}{6 zn#Xkt#P z-p$*(lQA+x&>|UhxyZKG0%F1`5C-|+mamuCn3$MAfm%Qd=LUj}N51nHV~uq9I}kiN zp4-#Xv%Vm@w$iiFqOL44;8#PC%7=(Rp8Y#OG^y}CI6szEmkhW-T=>RPzaP$GZgl3U zDg^N~w7t8Ub7#`XSaeX(7g5xffnJPpaQPy0bMs{RS4RdVdSd1Gnwgtl^8cA_)o*y1 z5hXJN_e-qBR3-a(^@jcqMrcb*-(SoxEtQejSe>{tZSXi4;h61si+lFxhZ)BA8e zBt7rfcH^_jRS@+9jh}KHe;}#eH*fi?Rz`x+Q*ZnKE31TS4{FSuw^at;=^I;Zts5p3MsXqpl zXn+ce-S5#W(JI|71!c1=qm+PPAr%F3`T}2!Rr4p1Ifn}uyBkX%?FbAE)U-ZNlK=V9 zF{N095^2WAvUdud)#La0s4u8J+4%YDQC-lK0l4p8(7t4LS+7I@eXtgbJB=kSE!_oN zLK)KjnTjK*gbsFYdkH2xno*ptn`J(n;jxwiZha1vWAv5s*#_|Hfv;ZmgFTXyum*-L zaUydwvn0SU{BdP7@F)Cl)Y4iyw*@k|rkmw@ZbgGfvnnXa z+h-L}s&R1<7&xaqm_p0){3xgV%Hm`&r9wHn&I4{?AMI$guY68GsB!FPtI)XxFP_a0 zrxnoZ_)U+LIECO#{$4woq8no5M$7l#Y$6jVn{sa&W5axaYelWW;1x8{Q)~>fRXcai zlf&xsgDrXmPHFzHUOCRzh#o(6s(ny;?db~S64Ye^b0g1g&d($iaLS7sYeskpkdO7* z1i@xIX=s{X9+uO{we3=?V?FJp2;f#=#a;vNlu4VtPQHFv{ACTiU zWpgK2J@*f|G`6KBI+S~(h4iD;kd4-%iQ>|IC; z-ZUk|ZFRf`0{HwDv~btI!b0`Dg8?Ox?Zu4u8RuVXioD(bqtYve?<5;io!|Dw8ge%Z zV3aJi{n;KOiWCA6hExp?Nm6FQo_97b!mUGMiAW}c>Fll*qrhK@0c2E(6lQ7ctF;$k zxyddHHl*?Lb}PyK$_X1Hr2sYHw#h2jbP|n5dh}wP-|8NA`!nLkeAXjHiJq#}KLjKL zV6SHNfW4K5-yhIHTvebWkae^|b{6>zQn!+G2VYrp1B^gE1}PnS1x`$*8M8qJ`EcST zV1T#>_>=ntNj7-{K45$Dwu7{8S3%3X^v4;@W)%<;B%P=syHtPc-#@{BlcgXBWP(o2_L(G5@BXS0IHQ5c&2_!90D3u(AFEU>j z-Pj9^Ol^ac@;rfSHUR4q@tYHHgen=J7h0eqyOhxB3aFsT z9@t6jOFm8C*^D$OX~gJ&_yJs*RBk0qfj^eK?R>R~D@%@m6hN#cKL~b>@t5D6x*e~k zrdG|e1@Xjz??|{T%UnvP)D=PDVz*@O^tk1AyUt#2PStH3yM;>Zam<_{ivaJ`@2{f+ z;QMR~=d}R*?Ta7|`r?`Y0C?$oxd|oC;=&+dutnz@D3f;~b#RaYo0z|BYc{q+sYJp+wES@_4=M%^MBn zl#l`ier>6(Ddmyqm zxIxjhgK64lyJA987Pv>->&_`^HR+f{60C;KmApH#DI3-plTByzoYW z*VF}Gzz0eIJw;^u6sChwbCOPK5h6628rLl;z$k;xf%a&8d(=WYYxoVm*Tmn`J2}aU zooNCDH4`^hB7ZD@xU8~F83wL?^Fhf`xcE`rvTy~AEOQ^MDd7ipTd-;`fu5Ey!+xk3 z?1V}ZUb3;l%g^3mdBoRBHNSH1>M$^uO1;1YD3W!<6tZ7?36L}}i{up8lz0quTPl#t ziYVy}MQF+O&7ZgO4Vc}o-Y#qcr)+WrvsKmA?fb94Z-%T{%zHej{A;M=kN`c6Y2*ml zEQ$wX+iWVaaY1c|fd@p=0FLg<0lQQOffWzm6YKsX+F zSrEXyQ?&TVYVfiM3R=YT*h`>yKYrv7j{@;}9Y6si?XeUT@a|BuB9k4txeE3Av<_+p zbTp>DSMbY@ypOt{PI^I&%7=YjCOva$$ydC~2lXGM2{$d-rN6Wo&|L-W7MUnOY3w|Z z>NT}LWnrZ64(zoDKfVgk*+vLd<1a8tYOWOaPr%RtsDF{2=k5Kaxs4>RhnT1@u#PcH zWJd>%13vAQ67uW=%o33gH;}wuZLWbERl-Uk#zJE%Mgxlwyvo9&UE*ghwc8HIL>9o( zQE*kr&i5avr0fFT+MooWlJUpBDU+i@o~E=w7rB3hN0aWb-eq(BZg?SzUsM6YJmv|! zNSy-uhM0aLVlK_3#PkE9&ey^YJ`x04mW*jHK_#8~1lE)N;1Lc_Xo)~$s)JoEk_7rG zn0~K?kmv3({F18V9!(z;`~o-zeqBuRnzCXpC9>eXDZn*9csW2}Vr`uag=^&N*Nn|+ z`r6QPX-GFLsD^G2c}Fz+bCaw2D9^h2m=EI#nbFpa)}s-w(U8V=IW%6b`u<(eMF=52 zOzG)&ft?Dh57(h92kC)fnqJN&D5s9Mx^&v+{`&PR;MJ=bs4tN+oYiV{@n9o(9o5<- z8P2BXYCn5-T}sDRoJlgydOqNb!jB(4D(A0}qQ(2_C^%48IP3MGU1TV4n1!ta()0f? z=Ui`}d0-s;ZzoF*fi;S-=J18*^}YvBXPbO}V7&IRsYwGqy2lDAs-_S-v|Y5cWbanV zfk5sC6>gmZ2%<%DeVR7Ss8A2e?BeAdaFkVb8$IVg*yifPN022T;&$jY1}ZOFERPx}06Vz=sN#RWl*8C);Bjpup;dXcYu92A9X_05B973p zbOLKnU zhKV~?jWr-NwatbYldLmAmkB__?BDEcAsUu5c?J=mZ&{lB@f_+7&c!*rg04WLGsrI(glnnqD%sFDMk?y5&`SP zC?YDkU`dSGRNFR1dD*)hG^PgFSkZoaaDh+;FaS7(N&uyf;lV_&PmGvP>z(=J{idE& zzUiXu$O@wd(L0$-m-sQ^T|k%ZS!16jo zqu9sjFl{N>HdDM%%3p)`tyiWxHd8VKjj07THu7ve>4PZVfom^~=?bQU?dG~N{&FhC zlGp()7VrwNi3|4iWcw)g>#X>t3cHYJ8bF|+A7f))Qw^Q2`N|A$B=#I*s~#gD=w1O6 zcMjAxKs)xN%K;4}2ir=;H9zxJ$^GM4%|c0!9n}A+>yNklf9k+1zHX;{{aIkAynn~I z$h|$l%d_K^0-Pc7(Fd52-@(&I&+I&%U+G*@H*!Qv3vvONYpeC31hmP*CoJN&X z|CkWQ#I9VuTEkLtqHR*s&&_t%LcyuF$v@vJD^>f;eG2~}Dl1cKu*}H7P$8PK4OX{L z9x*A_mRQKgD@}?+V>lW$mfYOKDG}(QFBVy^0E{ZUeED*DHew?cTGv@}x9Bzr|Hl?n zj>QGfs}>%EFiqrr&p>v7daq&0|CciqS3{AGfdP+S#nlBy-}51#tTE1W`p$%q%g%~Z z_hw?ZZ{H3=N3Q1HDDU>5QkTnQ;YfQ{f)~yH_#B(oHxmAbe-8|BL%sy(<_rElcI!Yt zRQT4-$${a{BiuK-KefZ7tAI0%^b{9E|2+d*Mp+fNo=+C7DD7b2Yx?!oJ1``~YC+7m zTyk#w>kPrJHQf;7YiC&euz!Y9Yq&vjldXA21Jq!Hjel7T`j@CPLD9k0e`i zX}E+7cD8Td9$1^t@Mwm@s4(N*24z2#v06Ye@WqQrK-6sS>YqO;DCjtz(>n5q!KfZs zollTllXqF15O(3|=qPl_E%#&1fD+kqd2aY;mW3Zj<$(RP;1Tk|WKRaP$aLW-%>|Q1 z`=`cr#Sybt)V4~E?dc=IN?PIAKlVu`Ar-kW%(FzbaUAF_dCIK*XbL&rd9 zz$HL0$r?I(Ka1Q>%Tc6AUApuPqiZyb0#cw;^$Prju^GkddV2^0q?wr+A@gcR8fKx3 zH$P2#!F0-ejcAW00Jc?CRVQ7}bco-bigcbIi342JYM?6cl7a$c^Pvu7Z6~tivU0*s z-$@2;VFDy0AT%^Za^r6u^I6wC^SW@}rzA$MkdTm(mbB0ye&h7{(bm!Qf{7nH_&<@_ ze3IXRXgx9WvBW|`Z5mOF8z;n=;pRdoleSF&3jvIK- zzw;GT--W>l8qjq{FH?*l2#z$TSd4WSo;K;o8QU$@U%WwK)tVj#s^>KRbHI%kg3@A- zM==J^Ta7&ok1B@?*(i2!^YAoH_g6G$7)#1qREhcrKuZ_EQu$w8Cg_o;XQEP=_y`== zX{;@($ZcgL#3Eev!UZo-yZM5iwc4@WHwKrc`+w%x1iP>QwUAh7y9yH!Sr#^ZrH@8_ z=A>Y=0c6MJh_aQWmnqlr;|d+QH-kBFD-vd9q5xQn-B>B!Xe_x;DQr=DK;0rc^vM(A z8o)E%5q%J|-+$+8Y)VpZhN=aVS?+yEs~G;n2s+3)CZ8z`o!ZTuXDW}<@3B7; z-PhOG-Sh6gNjuV+p>h7sn`;Tyg5gx9w_@zW)uK0Q-Uwq*5Kw%j6zvR=+Zy^XE)))7 zyE(^3TYg3)W52NV@3nGX)tMg3b@drHR%Yg8NCqzX@8dTDw-WQ^%Q@V}_?dSr=IP#_ z%8(s7meGh>4*!V5=5@i3B`qL;uFG|{hWV6ztn=JZ6b#sW>z}r>uJ*J2ID7=8Y`nIz zs9o&7CiJfktMSHia1gJ4JhmiI15ilDl`dMiwCy`~U^|DqxY>}Dm#2e4C4gQuH8g$~ zcJE)`y=PB!ZP@9Q%b_A5joGsv&|!zWRFv~Qu&wh0bzhd#t-&hQ7Dt z#%k7L@HK#6p+3GeuCc^->Xhz}5Z0X_HUC=Ai5NLQ=i(#6!kSs;HEN*t+=4$fEBQYH z;F|mF`ST|1UFtm6)%8DIZ-|wDl@0l1TwL7n+;HO&WouSIuE9Jt!Bc<@8jXku06313 zQKyMcXit-T-B(m$
    Ud~fC&WPWOQI&VD&7@8M)Y#$v*lTFLKmI3aiJ9x0heNnnn z@)xwT>7hdpoq1(IgmG05;~X+FGQX$q0v;>~B{(3k=euouRqt8!d`JfazjXO>pvJPe zEl`Byb}~XcRVOOKeYx_cpy%K5SBeg6^Q|`U$;a8+(~iHt?Z)j6ZfO z>jYkzy!zJq^zEspAPsK8C%w@j^5{|fFMS@%fU!~VyEFhn!8}{zd$aG@THpzcwB^`# z>EVf_dulFLJw=6QSEpnhC%X-?Ea8s>+>X5XZQXOTe`@dzu2Jt^jrqOe484(`pYCNr zTmk@$U4D7Gg0(r@N_}EuhYG)vPm{7{J6eU zA$d$lNaIJy_Y}V3ReP9-3qAE=ATXy#!9Dn+0Utd*JvVf`qN1Xn`S=8KNc{c%${AF5 zzUxlU-y6F+R-KAq9xoe)D{y0`zrs&jN9VPStZa_!Uwcjtj@J_5Hv(N7y&gT{K5;@7 z4?92vNQME96mb9Meir)RkXy#uvv6AuK<>L6r$G@a#u~1tKr=%x-yX9Z3zLe*P(-K! zZXU#Em<&`NOfg8|L5;jy{X#IhhwT9Zg$k&RR)*1K#-!Mr#cNuaG=K4GG$@o+_3IPK zh6NuutlBb7p;l=Gi6lOxrX7JSTl>|K%h{Fp-H^c-2oL9_9%ziqFn+N=O)DsaskmUb%AR zw^PCVXKL0&=;$5Uph+E;Sy=;B;1^8EwrN!|H8owH`OcpMJ=Ee2qZ~uzc?!3IphU8U zR0KB>Ygnj>dHzl;?4L%iSy-fGW~xA1m8=@$)!whulBAvx5EK*-&^V6EI86a>TesuB zze8^c!OYBT7*3B<95}(XU%y)xY*yCBNJGu^JW;F4u;nuFC19BM$Lgz?{ z29dYCU71}5ZEB8`ekkNLrh{Q6$fC5sbrfx^y9nEMwtbNwA81`zfd(*cEkj4)prpG2 zI1p7CnFou`S3R<7gvkP|eY7Yw>i1wyMZYQt5_&^yWdaTmA|Y9^g6SOR>8}iqQ@zrl ze9Fx!+6gztsRz0ysdpVvad!R)K87Vz7o$exhfH4VWdd~I7a>k-dn}c)Vn=~{f}tWe z)ZkAwOG6M}c26;M3L%v{)w>e*Pn~d%04`&{ZJsp5rq-&!hB8Z9E+;-S5;cRiULvJ$q;jL-`Q^KI`Tn%H}X9WyU?AEXn2XR&H2r=vz* zzw6mXhCFpw87A{zrmO$+$ZuN^l%P|esR1qI1($N8r>JY}C1T@(Vx_G`j@2#p)a^gG zk0fsY`w29EhG#8yv7FI?3~ky?Oj68kIeRNDODb;7@bK_h{-GeP>g-@7-@p=pv`ZzJ z&#;Pb3AaMX=sjR#z8}K^rak&s+Lv|cwIbo z_3PIaaJk30x#d+=Rjs=|=5)JEN=&){HI}=*gvn9JCiCN!BPQI|AVX;A%)dSF=dmga z8^M3awbPqGtONG>4y#MICR=TLiVWc~+~5n2nh-%bVe6)P=Iq8VQq1z#eH$7Y-kiAV1-Vf&G+0)y<`V3Pn;e7bjpBF*t-@?*(}NE< z29a!dco+{1<8c7coKZ-tRG}VkDs;I6L%GM<*`;9)OwHBxQ%kyG3LY=TV%k_=1JxB< z8P0XJg= z1=TAnEAMxnM;N~<34;2HZtvch`g#@Y^Z=u9p2#1ZgAkJp9d!R#Y-o_1)>nrJHUoRm zfga`e`0KqW=r2gbeBAboUVU!qnVD0c zGQ6KX^9NW&SRK6KhwJUp_4V~?#x9kd!5Y0csqxGsRWH$kfgd8E(Vteh;tM#2fFCZb z1Le+bYCU)E9AsGm&gqb?`p1IfO$2%RYoxpEf(bt@(0DmN7EMS6kI%FcPz0Ehm<&wN z;{pbnZ7Gmk;ifoD-{CP890ZD1Ce-ci-~XuzO~7L$fGatVrsZPA;^gGKCz)W?7{3fT zDtJ4-uN4)?`S_HA4V^-8O;ascXF2n`@+Z_@P`x-cgg}0g4kea8WUm?UBpw(Vfl<02 zFsc~f?;ovyvv58-;vJM#^mKGwr%&tW=jV6#4resBpfP|kN=}5kE$B8UsmmoLCH>63 z83E&pQIO6LS00TB;Ekj&E zApQ}R^#c+d z{B%|lBf_xU^Ms7>&^HQ<0K+)(|G$rT{-m!arJ|w|^4!RM`s|tUd3^5(yrln(e{Ed8 zX>+=In(C)sn?2WPmP13swf>YRPa3VAhZ{=lhpGv}+0@384NZSw=V@s|4`2V&DM(bF}+g9G}hX3xx+pk(CS`!NG|H%^*6Q|wFHxcsL^AuHr(;s>d3L46Z6tK-6Yl<>l zya8%a65CbJsoE>0_t|+Y*EaeijFO%{+iiI)&1-vY^F}&b5NotnoVX$J#_uM2VhnS= zTy&GrmCIv&uCp~k#%X_d-Bj!>HFf&U`Es?!2%f5`X;n3~@HcPXjMScHN!C-ZTjc0? zyd%%@;SQe%El3b2%#P8ExT}Yrp{I`?SzK6Hm>JK0G|>`wjEt;l@A>oR_3by78!CMt zeH4sJ=i64w_*btzE9CuaCIrs^$WkiinqlCzs=>m_YT`pHXjeTGVk0;ETq3ev;Py%B zW0&{T19SrQlK+*R{z-ovq&**e496n><~1|jO=r%!k-8wdM(;WKo!wo^Q>Q{lYSlDI zIa1xc9;z2vF|mA9Qj6fxvRI3JW)ciL6@D&5TwPx;8-7_u;^kSc25(L_HaQNhZ1sfO zfpo$ZJeiaBc3_UvO7Cc@Nv9>+doQ{ zOP4aVatwqV#$L^pPIK>Wj07JeA-Q7tsJ+JuZ(yUT0k54byb-msi?0>(98(IM)l-r_ zz7-_`?r5imuYEdB78V+M29EUWSE=Ai`UU&EGR5@u4n83dQ3d0dL>3b3Tcug9xAN=2 zRoxhi?tM?lCivPZt;LyK;+4Q-NmAEF0ZyYOg{@qmtbNK?WczCB4Oik@qrl`|8{uF=SzU)UL%Yp{;JNIe8VeVBiW8%R!LT+F(gkX&mU=5QyMFH zEVj;j}Jd65%x;ElCDXs>qtEa;LY0KrVDhpmItA ziqOQrU-lyZWW>>D-;+4kPUmj){qSxSTE^f7_S_2WXg5VtU&Ns(pGnxWRk1?Q;n2aO z5MXbBH5}&4NhjCod^2ETHdiV+CF~up*pBvONr63Fc3>4HQrK5MjbD0_#m=A+VYH+$ z9RWqRhH#Hzy9dAeGBt}MlZYhG&z@K%pJcSplndBj{F#OP>E%n)>FWcO%yKb%cadI{ zq_MAL`MsnSzjvI;D$1F5h!5UIMnEBuRr`-@xB`wtl)45yos^K#Ms7s@8(*0c{5Ivq z3rD>`L?qt-iJb+k(6GQF;%MjOo0n69Hc6HGKJ_zsuoEW=EQG`83jydbgg$-FibPDn zs{+4YesEMaudwHO97Cqv^+8UZWiRrXcIIPTCRosF#ax7pdNn53SEg!Il-*3}%X?avNqJ*pM7t6!=JOU_p}8Gh#(DuM`U! z7x%u1T`(NbFDW)zH&0ZJBLI=KzoEq#4Nqbr^XYF%TFbq!rfaaOgI7)bSVZF1D-nsm zyTHjT-tNKI@vO7PiK(fVVy~I!;2JqxV{K`cNf7E(YyKV*ni#w<1Iobdh-1EKGyIbK z?uow#scT-aook{e!>}A_%vX1!Blkn)1aUW@eDm7#7Tx!(mUX10Vsp6kX5lr~G&3N(J_z=vdtybB`#c$Jrez?L9zl=#8LTX1o@ zKefDaV#zNVIsI(wKyOE}~6l`(h+HkJFfFlaHHI zxvy~`ed!$~pfF&mAC!40B$FodGYP*?ZOcFPKnUIc33TiP$7n08sbITb+e;Bm6;Xm; zh(UtC28BG(PiVCC>`tA*+fA$F3E2gpCFTyc)@^RIr(9M-M$U^! zyfUdYT}L;$wp@lH%NBts6l*#CF_JrZaHOljQ|{Aw7N4lvUKJnu#pjD$j}ta~XX@QRY%uwW#;ch>$o#UXtHju8fXm?JvFqBEi zZSLvsVEs4-e&i&s0w79`lo`%Mq+NF1gx_~tQ8%OYjx!3Mu3W*#ag&pi)WWX07cO4Z zh!rOoaPG5qUmtMUG!E1|y0qR}+(=!+z}cUyHI8zK>m`Q#BgOX^yf@-*2T~`=g|Vi& zuTBNLe5tlRH$VxAcyD(b(zCF(rev{Rt9ZptpN!-j(b#7x`yKU)PL!vHEZ1BiB)zJm zBX|`U*f|m`mMuf?CiSl|LMw{jdS&PtxkYEXhDq>Yo>mc7)sa$&4^{I*X`mvH*UZ*ExwoqJ_sReyLcU#KT_2#&eqZsCZ1^KOYJ=}1ghR2no^@1u zd1z$mXjE2KrmLj{Mf>czInDGersv2hC}^mvss@n{xm&z(&Svs-lXPW5$9-<07!!0D zyQ>hzuVCo48s3$yp8;E)1aZ3(<-)SJBI6|e*?D<+w=V+JX1IjE#6hLQC?i?iTu?|Y z31&PrOzQ8y%lh*9^A;pPj$zeI9iEgbK20sfqVKb{mZyS+MLK}bd@&_?c~vPX-&3bg zBa}COy>>Y%$#i01QYmrdLG+guim+PPp;K z;@We;B5Uvdc+87%Y3GV>ug$jimpH8cxD=CW-1ru>e|&=eblT&O3F_6|*@Mo}>NH*G z>=}b^5__)A+(Qr$&|>G}NS#KyI-Ao(%PrgTMf}drj?ILKy+_ZP9?#1vN(wqz59QL> zHCqfv%5F~vJ(oa8HTQYH2^H8JifSCRayx1wtluYtFUlQTD4ZO$o>yLuWN890e4n7C z=^DMuvGaE4?vV{AYXnU1d?Q`mMUGm1odSEJcllij-Y(+yzfn6`$#XXCmJR~>=vvlE zxVDtnx3VUdJ{>5N@#9Kjj@Gw~y04w`LO!iCtzdc=2pNY6@kXh2`XSWY5%`5K?Z{T< zz$J@Y4t0L8B=INSwyeu@uvm1<BP8I+?>o3}6t%}^ zo8N{4!QI;!(bDVSfn*o@oa`@<)^aqzXVfJMeoTT8a^)mE`w(w5kydtrFIi25a-q<2 zGU&9$b&HY{A2-|4X3k2(^FN+--Z3+ozs*iRlQUcQEB)JeW5MDO70Nc+kW}hrA_RPu zJ}7APT}2z+48}-C^V|Gjql5aJs*0fF$QYf(^UAl6dJ9T3B}bjLzeArbeC4Xnn8rd zm4k5o;`tCh`hpP59t9jS#A*@Fmgu(oK%HerRdSB!z$xn1Ev88d%S+m(>nXVOwYdir?YYdy@(KAWCS7RU4V4BJ(Ir3B_uNkDC+DvBv_e%a#<>gF&NL_ zmd(qy>$DIXvHFY9PgyGLTe&qINxktJ>Xoa`G42XMYS-Y63-WL=6!4Vjx}F6IPlFW+ zgMzT_ni+di> z+CwQ0OeOji+*V3jt32qzJ|(8q6%rGyAh!Ql&$}u(=G~^A}ty1G}dH=TW z>81GNF8BkTjsTqVP;v*yxE0Burtsx_CfW?cB02$ZmTCngmbvlE!xoA$=cNZV)qk98 zTkS~f1j{*)&IZCxHP=xx@Vma-;VO7ZOKEV{K8cfY3o9fHp;+W>|WGa+@z_Ie!5ezNdfA%GX-^X ztL5k!H8p~&<$hX`*rJd%2jQ$b=@WHLAUho1rR=UVNY$F4YCUe=7OgOM-j>s=a7teW zZCcBgk=>NRrs_|7i}I6MI;1h}e4GD;w`(AVr|yHl;e;KM@OB3gwA#vz9uu(YVJsVn z?v5fD`VMco32w$EW|%A%g!Gy}+IUjj|Jk%RmXV>A{d{aKP}A@4Eujyt21>6CvcDlE zoDnVYdZwABqrbcfoeL^_NM94SKnUFqbDNm+BG;V)-_FamsD=Gq=@LuNaHzFMX7@I9 z`XX-7XTRcCj93m}01odnoZ2mv4ulJ*z<~Kz8!n5~#(i1lw-Nnv6A{x4 zcQD*^{p!hTz;@=dzYDdz{tONp0yJovHNjlp!?8REr&H1mP8)bfDWnMAy7XbV-dOS? zAD;%G$z!CXj-7YA0T(cl(F!UbKgX>uFCW0JnVEX@H0xz{_9?tU%mI#3hSnH6Gc$8= z3bCEYW2oG_-|z{Ad)`WtIJ9ECzLl=?bYFmA$ihC#*xrk%WpHpmxn}SPgJgokB>qm?__!om5`%ZkZ!w_l+@_RSIhFA0RfjL_p0TsD%jLJ~v1?4h?e6THp`=Xe>FJrN+ghK` z>CDiw++6zi{{fdoDL4Xw_1P^+cek$F`m)W+S=ZvI2l?comw@s`@^Z0Sb%_QvZ8b79 zx#}Jk4SJXT9T~~lqW1Ce@$>Z^-N1(S=&KS6DyQ61jvd*u82KVqxFf9D7aYw8(O|)q z{v7u3!Gi+m!O{lL_T)+aYj_+dI1~teabDx{*+faxJ#{FvbUuyvLg>QDG_GSk#g89C zhj{3%;eO3=9z3AQ?3!$wdXw)E{OZ;EZf+$+v_hcxr4 ztB(tlv-)iTb`9m}xswge4V3X2)ez18snD(UC)d)}es`8zFBOh89ZWa-_p7nym>exb zFO8cnbLx*CB^r1xO0UlJF5?ZGt?y&aj!ayV&&I4eJ{0;h%T+|Gx5WCVH<(<%8%>HW zY1!nzY9t&AWx3N)?&k3A>sPbMwxlhn0Mz3oh`koR9D$;zeWo{GKaVN`LPvDtu-yc7 zKPREtCL0>5LEfD*JC%xy85sS6G42;D9DM|p0BWOpZ%tm>+}t!4^PaC*w}7o@|0cy= zUMH2@ozF-do}GUkGmyM*b0c}}VZ`*tJ;2>Kntz|58gFMUwCY{54fgl*n}p6cdI|;l z6sWxgAnM?v{(i!=QCaPBn07Gqw@{*^(~+@-uu;<(`4H>jVJ;fZNs_aZ68EiEhz3unX0vSc>T5TDqNac zCnm;)^e=p(eK zZ*%@m^4Xt(hL?JU@7}=N2?)yNLAw2iSub9cBp@L8{mJ;H?%~QRNDqIk|CCC)8-I2n z8~$x9!50Kx<4RRjO!lhDL=BqOZ(hG13Me{+(=%5|DM%LeN;#(AMe*nHD}XSM9{2L$ z7(5rA7xX%5B?S8e8;w3}nc{a-ei$S(tYdpRnHSPpiL!`)AY*ZfXDLCWs=1RMg{;DQ6 zbj|PC4)4Fo!_+HHtWEkZvN^wc6TOc9pze7ELTg7f24U`}f-u6a5j#O%=!bf3Ei1~Y zE>nXzI35rsy3RTX`(9_b{XN6D(Y}Eg=SEuFvb?UPSrY$*TF@ixtc_@T?F$Z6cLW?k zB{??A5kW^#&}((=RYr`WoRX5uHxs?57jd}4tp2drKWg0*cN?U`xz)u_mvw6;E!>Ct z0Y@`-w&+R72g|)|{WAXThyNPFsYToi*tN1VVNz3KaUFYY>7sc#9f7_|vskD~)Us}W zpIZNT3Ds~*3ekp#itm3R^jc|^(J6O*Y+y5%Y)3?a8?_=?k35yqxvkiEDW9o78njP7 z#4m&8B+G}h>r}Wq8Q31iY;=Yh#T2}@6bp+J-n3n#rRFsa6V)ybL?hk1GZN5Aa$4 z?m#XmtQF^at7(!ZVe8-V>6uMlr>I={>zan!ChORcoZeZC?nE7>Ez!rYSTXo#=!XM(B z=9}6G9Kw>XkV^81D&PATKxEPKAy6lG^7)BNdufmL8t>B95& ziUJ%#e*mS&sSb|@YL-1Y$@91p$nZ;^Y=SOQfJif(V+2#^PitBFNCZ4R`q-!Rfym6WEQ`hoFQcx;=9p_B|P{WzY&^$VBLKaa_IH3de*MQNT=PVa+9Vzk-rQ z?&7)mF0m?ul;v~n3Xn&#n~e#sh>D7CJM$19JJSLxW0CuK)1|B1&}TNi3B&arC{J5@ ze_hIY^EVk+kE0Z7!TxYaLzu676oPuZ)Qg#L@rJit8I&BFvY~5p102WK?qb@q)9%K+ zC3PQ##P(!n|)y%=}_U<5At3tF)3pX^M^YcIS}$#p|VU*{*Ca~kdBQL&3UC;7}4v9Uxs(P8}kLG zw#ociP^@8#A>nrnsoXU&z=#;ej0IES9GQvB z=2J`G*qZ`w-bV{GKzK53j&`3b883i&IJ8v&(OAOZl={kj9E7S7WG;2=IxU9n(Uoe! zUF>NEr2Yoc6)Ft-E;lVn4%NGembfi`52VpZxJ}k;#b2>Cm4Wg)*g(pgH)kLeN$u_J zp_lD#Hv5!X7+?!#|2@5Zd3aK+YOc-4dmssN(ALI_-_VdlN#kXGrx!NsToy!oBOVa1 zMym2HnAmCp2n9n*f+k>^PN4<6c5W=kxYNpEUcB;0C)*I5@AO>RyylNk79dK*$HzY^GTc1#9o*MGpACxcR?3&=ii78!Vv5K!@kBhR8D#Vq!%x9mxcw3JTD?JV54j0G02c?I9{*K+G z36>4rbF-DM*bq0SI*bnChc#jBC7_1bX;D#~*d0{rTiwhlW0BiW)t9gR-2wd@#v^Jl zK*hRY)>_e@nT{_^V_}Gjo9Cz1Oj+c(2f^^pNsOSH%$U#j*&)v}Mf(LhfdQR!r=gH2 zJ`7xwes#xh4nbbvu%1`$#x@Kxv1z)=A52R(r5Kn>F4UHz3;)73t|KDA$tCTkr6 zmM0JdA(sJqih$OCkFq=1(_T)VsNl7HCb~K3d@r~5NVPQ7$3p~!p0it-UUaJ!y^EJ#7Qy+8ruJ1zS3bfYY2wcB<>J^o+QY;r_^A#aDU%L>5C=7#Q)+@JRKC(TS9e~m$}1!=kq$MWw-HjVgTd?*pY!oXIjwH#dsXFl3-P@qihy@?3x_lxW$OjQ?8t3 z2fbbwsWWZwVG1iHdA`~hy(I~tl%;zP9@37r4X>8;WSB@TcQI&=FJ?GK;;-Dl2dd0{zDCwyp}Kzf*xGt) zx>rhvg?c7TsQEoOF;*xlaDM$7Y40j0X|hmvbpFSqLfVqM8Eetk;QHpzkwZgJ3_}BP zWoNlLO5_;k>f7+%lBD~W1xc`BTFEq&u9|;a3G7yfZ{5TW_wy zalrk@;r^Z+Lot!1`irGd46d9j^r(!> zQG&^fg@wi1xSX7v8y_{qMS#iacZUh5ZaP^zOKvpUtWw_NtOo}kB?tx%4=|oY*83eI z`K==f2?=c`_$2*LXqcIqt;s;mOs{kli%xl*^cNO;d4-nV`P+QC+j7Sz<2${xYcq9i z?d=dUtoWm#NOusvq`ygW|NkDi*ybO?T@v(OD|c56XvaT$v6SD(o2kH6n5u^6qk61B zqlt@)EBat8%#A^?(cE62Z(h`fS(iqkg$Amh_$)e#=R8K8QwVTH+shKA2Ji9=#B6S` z%efElHB9*!N>kyDfC`e>Z%P$hcKC{*;D#*|&*jUq06r?>7LH)Wm1tHzqpiiTSFG^x z?Obb>&!4zmr~`hNChvI7bo(5_Y??;035c*!@~Ebk4D!M3bzLEv8iy`A)o~up$-BqM zjH=t+`q}Pl4V}4y^?yjZshB!nP$(1;nOy(iR%A<7Wdq>2yJ3BtwI{`aMZlM)r#HCr zqnE;<0$R62X<*kl8r3AJ+_ANnn$Q^#`e?60SC`dMG)?|q~xd>IbsMGhDN>;I%k);I}guF*0m!?7N%nh}!sJLWYaaAZFN zC#nxeOoSQHKy`LraSuh-3>a~ofq}i9CAg4ywg%V9co->sqNz~=z}rs^9yxT%hzSuT z;^;G-p_vEc`f4r+s~Gp`iSY!Lk5g%;BeHUB`@09!1PBtvR1nsylm0XM*8u~JDm>Ep z54z^Kn~3JOB$a~yw<6trnQ~>lH9!R1^bEXFA8p-j3IjpKa@ndys!#mv!5T4+3k6}d#p||ccO9Xe)sfBj3GFy$-z?6u`$87 zUD8uh=ApV5+Z#Mlfp`G-52Hs1d#qvp0%LV+6-j={$cnMpQtuM^|Iie2&m7$0WTUNU z=$MhiC{_kNMCC@6#xpUmAFOHPjFDW)W;!f)^P^vA{(zRiOQ69Z!UCh%!KE}!7!hWx z2uVROPeqgkD9m1ugLzh_Z8Xy|qO ztPIY&`@wUj=((c%MO4%~KwH>$b?PNGKMPAWqor(;91@nc;-{gd$^j~FL?>gDVy*$> z0V!FWbByc(L&s#_9BR;Vl=Oz)LMONLj^Aab&8I@IbmKN@Ao6A-%Ph`16$d%sioR@P zOTHmMPrWB#Fm{%=_CTf^@&gYW?tmJPc*9V(o(xGl3uXBq&&<+4d;ZY4zdjdRs-T_p zRSe!&1mhTN;rxHN0hft4dnwCq-pZ2sHdW0=T~pnJtXR0ALZg;%`TcG7lc!?!>zdQR z5DWN0Pj=VQeuLF2)Xkvl*F&k3yZ9U+4?VKp1z8YqI~~u)$0fO2sgn`%5*8CUSWFv< z*~cP35Z`zw6u(=n|E#h%@#Q41?-NU83&N2DCKFjc>fO4*8evVZO}^3r9Y*g6QV3<~ zHz^Cfh|9!Vy@gii$c%<`kN`Q42WN*Pd&@#qn&86TR`^Yi)|JqDM=vFQDw_~W+oK_^Hr*$IABK|dNl;`6oT zp^6V1=T6-P70F7T2Z9+9rrlsjQ{$DK)j7cew{oFd|D6Fp1LW9IsB%ND?a1+>$-)x2 zMtAV;%^qv_?L}($-zwzc^6t^Dq9;`JTYK+50ogHa^v8QTg+c2Wd^JUK9h z#D_ z?)zJBb(c5E11vg#WkakRpt$kHDe4bUNLd({yWb6HzXuy;L>smVg&xRMwrt>}x)QPH ztWN0&%prBMp?Ayc!8?RUURx|puE`VkzJeyrHMiTmwYNk+*X&;wgfm6R`52uwR9E>SUp&B8D-xdG#}Z1fzzWxq znimm8b3lhw|L_Yz<<=+5H__$o!2J0%L{7H%79Jf5A+Q4) zaJpetB`~)s&z?;_%cWxm)gkJqS8E^(&580<s^`sJ=F|(|IT9j+?XzEPy_dnGnpjU6gYee@^993xs^5%%jb>Eg3-{?#V9BvXf-BHi1(J68 zg9i@~gP6m+sU=Pl*gcWECr_RXX;ve|7F>*v9kJ*#q^>dCsf@s1S^7{HLpax-5{%mK zFr?BqZg^Ajw>vR8nVpZ1Z+kg0kr_H}cE^AkbCx^VbfRhg^F&7YVrU|FV8bLLYShgw z)|tPSvG+LEbBWxfL7-W5I}kIW#m+~#`%Fq=Hjy87~p-3d9}0%4Qo z+m00jvj6MhQ%((M_jG};%)slr=z<2rlKG{Dk%lDC-!)OJDx_dH1{=RoWUKN<77t1ku}`E3K#)O>I;C& z=S2MQx#0(QA#%uibimfmkJ2R=*p7>tk>~>N5tj5w)RglY$d3y+3`|j5kq?j7wCjQQ zfnl841~&kteg1n31l8Uxoh|Nt$V84bgKIcT*6~5~YCvUHYA8?QbedcSpWCKrew_q8 z%7K`is#z?wODP0e-5P)@fsHUW4)+Gs}NaS_>3{g*4G ztCl({P>P2oFnMymz~>^$0*2#o&va%xkgtVeO$fchP6Ks=%Aq|SB1K*E2f-gKn+;lq zsWou?FrBA|7B2k6@t^6ua+Euy>LJ^riI4L|Z4_(D2k(&F@wD1XZGs0P8rRa--|)$o zh)edgBVARKZF@*=K-ZQWCGLQf1S2eGKdk?+)GHfRc6O7Qi z(Xj5&n6dG@%)1WxoK)E9Q>U2aAjq;R!HL*SpE`94zHV@D&&hv;ajGUhXJ!)>-Fxdy zZKI&78j5CbP#D9A_MJ$OaqeK#7w=}D83zaWQ^>n_Xb5Uz8X0B$12fCN!Q(|rM)ohN zlL)>BnsGV(|Gqig+-A#(JNgi80ueCKCr)okanLMuUv3ikH$QK?cKL0Mx4@C@0os}M zojTEjKa~v3<3}{NYvG{<*|)-k=rLn-O8?t0qee6ik_wOmOoEN>ooQHZ4!I~(;54n7 zUzhsC!ZeTjk~D0jih; zKRoJxf=;z5l5cfuI){Us``654&WFomO+c^A(#+J3>*!F=ugiP&>L--u1+o4$`1-g9iL?X5NfJ^|5&7`vV zN?kM$huIA43x-o}*5kiE%HO@K4v7~H1fZe8zkOrP>rW4iAgKjxGOrmoT)uWKl;+P^ z7@B8hm(8`wFnA?adTmb`?r%jn&;PMr(>Ab$PkX2Z?P5!ztq5OsS;9+0nQO0XP=)zJ zb3empe|yk7 z?YY7D&gODZ*<5L3p7X4ZjE+uZ0_ZXbNCr0nztNG=@H@U@5c@N8vZC$X)rYjuX;KP` zVL|G8`19S>AfW!<@ZS7)?sUqsVp>{S5X>rWxUbE;-|hMJ@g^PcV;p#`dRne}ZrH&c z1^@#c)HAhP7aKTo1flsvcf!AR@!L5=K^Q&3mt8aU`LpgTC&gvP44D8nXt=wVezqNq z-qi!>;l45vC*(9`1~VslIk~HrcXJ#T|4M(n;c(mfcR|P~=b)@AkQiWj7CBntpBMR~ z6u!MYrv>{hbXzt7dVs2J#p>HJz&yzKT4fmcJfw0Q#(q*+4_4}5Qi|?q3^!GP8X}-CtjvR`}T3 zw*fP-p1g;>VpXs&MCk$ROM}*8Bn;+&6yOn-vce4?HAaehm7=TN1|AChQPxnYL~I4Bpy(MYi3!Mzx4RAot6*zsB#l<-*Vxol4J=x7_*`W2pu#!oqqm zUe|zjBnw-a8$^Z48QVXc_x44GsP7FfJD2H$J-%gbdVgI8LQ4S9t^&gsnD6auB6ng{h)neLC0Z*xo|uv{{rB5TcD3YJa2nzIjxfql?)_xU z=elq|DJjX=aGI<;x7W&|BQ<2Mc;tj19&aLM0F&*_jg5)=kc)0bv%((Zo{oLiMdm0v zL0c0BAcoCW3^K7t!tTk`h!xskeHQy&Dy`J898VVU>W z5(FByq+MXr*8u!1AmDU@&BpRscA3?`X43ie=miQ7%j3;a!fESh&RDS$ihdzJes;8& z?C$$(#_(Zdc9w2YgGv75(LO);0)WqHO1%P(KV2mO55ALC$Ka!fH$ue+h|)IMoyUu^suazqHZzUU#D0 zX)-z?b=64f` z6rzRi)de$XL0Ia&=*|+=#OhxgvU^Bynq-K^wmgnW5^pw8>a?`D7-@UG-FS8!zEO0V z|D!()R7)|RO4t)66%||U74nB>EeqD7rLO)4d^3D^Fc$jFCc$HcC`p0t zGoXJy)tcaM(UqA7jy?ghx5L;}aidYPwY3$^2=U|$*{4|K%^;;lUNL$K{wROGM7qp* zRuu|D$E_7}i2f50)ztGId}EgL+FDV8ECQUXq}}cH3^+C*iF`nZ3I6%1*z_#S*E$nu=FDJhCI8U^!ynGwPe@FPtAe{5wwe2Wsw`nlQ z_MtD&-~);H7@xg+kRnWiM?0@wySC@t#Ip1UGC4BaEbTlA_!?Oi28(C{nqRl%UbVNC z0fCw=swufG>5k>b!Z6Gl-}XLqOB@}2v^qa%2$2dE@zGvu_sGs)5$CDe`4n)Dhx^Co zvhh?$8q)iWa~Y%v_((Vr^kV=4n{U%_=zaF*K|{BH;T&UcN}Z+~>gr@@_^l9uN^kFG zC&wYipC`|qO978Y+Dq5Wii8il-Pkie%8)dRr6_)Eg989ml>;;3_aZ@cTg%O2h{Hz7 zrK1kV*Z%YU^-cf`Res`fzl&^RfQpCcMv;7$>5h|atcr8J*@c5VhQcQ} zu_E}r4KVVGLwxKDVVuVES#JouAMQ%tInU2((1!OSaD$o04-YJy;;hAqlFzS{$a~1XcFg2NR zQ6vDAE7y?s>GV=C)%M5#fZhK&*0-sFs1If0uMamK!Ys|Mv6!3@)2oHqRKm@0Q(5`-T=}vhmqB^Y2cOGW<1h(`_HALfw(w!yiOy6N$@%i-AZGK%w_HBkr2x4D z&tH{jPf_XyN(z8O4g?>-nA%VV0rZp#rXKL(g$f)6vm9!re6|@#hxnfX3|5pE>D?!o z0F=mq$2D~OT*9WIhOE}`#p4^Ao0XnCdD5HWRb<__R+Llbx)_f>73;GpQwZ%yR-jRM ze@z;Kr`ngN#E|Fsfb67>{1gFGVD%`xyK-xBaSRgB?6nqDb9Q9j-rhGFXtI@46zP&6 z*>5b4So9a?-5I38Y>2q-L;H5=U!x^t3*@3eUwrR%hDQJqBl zp;M@nd;iJtE3%{}*)u B(=Gr2 literal 0 HcmV?d00001 diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_return_table.png b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_lineplot/test_should_return_table.png new file mode 100644 index 0000000000000000000000000000000000000000..f40ea785459a4912eeda353af9ec865d9a0fba59 GIT binary patch literal 14946 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

    Zx<0|GL18) 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 Dklzf% literal 0 HcmV?d00001 diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_both_set.png b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_both_set.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6035eafce22e316e5021c1a27433bbbae6af3c GIT binary patch literal 12902 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�PrT zxvif~+^7nkTypM8Q(^7NeY&4Oxo zM&ezTzneqnsA}6x92?^pdD*&WdmWnt5_IMZYiw6atOpG&uC*sihaaqD@{!wIsbd zKcE54s8ZLpxirBC--)0l7aSd(1%zkzt29Hm7r{RJPWj8`wZ2C_(6isa3#$a&2kd?W z+$|~6x=IW1@sqiGOD=_YcvI4VRk=JkP2F3+mRCUwW`KqgvYYT-yd)6$(%MID1N`o; z(g$X6MCSzswNUGRKLu?nwZ1cW&re=5cx+q)Tc8`IhSpe7`3OE4RM3Grzj5Fuf2l4P zs{b5jyS_qPqQ(L^-#c^apJGJZ_SV>!Yvj66It7*)%NOd$S4vwVFS9c-U5^%a>R}4J z8jm{P=+_NeIpsD z=r=YucYS8%jVgk@?ter)w^0@CZ)RBjEdC#JF7XK zTF_Tcb6A;H!cBio=luYgXL#XWDQ#tCo0>>{%8$ zl|B8?U@e5UDWd{4z2m~5d9>58OHaC5#=`+JGO|pN<2qT|h51%hzrMp0{SY;o;HV9t zm#?O*e1}fNwJV>aDMIi;GTH>v2G>B{#pRc|%Y3dV;YkLDocQ>&Xp=+8btU!OtvByH zca~$pe8KeP#-S#Q)livC@N5?;&S2KuNGr^7t}iY%^*pu+YAp^zrx*5}f*O4g*c4+v zaV_~AoCa08Q?Z^^3srb4?ALUHefv{oUZ3mFGnTeFaEJuOdAHC z{Ap)r2c%*GzXf)3&t>ex1QnBi7iPrA$3I+jw;C+T13PVU)m0Je9~+jL$pZas*NxFdi1NJ&efi)^cbOouFMU=39Q!YOC-fky+}+?gVK{i!Z?}Fu&0gFXf*J;iLnb z%?snyG1Us2#D`yE(<#J+s^#d5;J%r~7G{@zr@;XjEX})tGnOUfFuT!noK*mJmjQs* z<3mc7iC?V7`uY1847;!E;UN9<(1C*txXT_mDf+of*VS!p^Bn5woHW6GD=dWkm&JoL zybmzbTejMxu@&rz`^@)^3sGFt)RmdS~LroXNH`xYOwT< z&Q5;g&xh!)*mz|;R;|b-0P8@}FRvapG=!EePZxPc5zkq-qNYX;^L*%2bC_%I?&-?rP ztE?{!g}#3M39q~>3EeqnI=sH-l6y7`#?S}W7n^$S;<2kW`zVQ4+|!KcygKr(w?X#- z)BipVwuS-|whAuj0#qiQv#N0r;WQTwy>`|;cQp!3TRMPc&kgi~M+Z(;RHt<}cm)r4 zPeX!&`6biQmuKwICbFIiXZV4Z`>tAr$ao`rPDs;a$9yq18_;2@{?Kh^FmHZyNjvY(6YE_?vF$`4&uI`+*P?h< zws*2H`Z*fJ#Kh@3#n~twK&@vuqTnGb%0AqaI?tD2M{9+t&5($@xVR+M0VfV=G3|s{ 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 CKIs7f literal 0 HcmV?d00001 diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_only_x.png b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_plot_feature_only_x.png new file mode 100644 index 0000000000000000000000000000000000000000..f44732c27ee30c7ad3909d7ce9b97526e53592e4 GIT binary patch literal 11657 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 Dklzf% literal 0 HcmV?d00001 diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_return_table.png b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/__snapshots__/test_plot_scatterplot/test_should_return_table.png new file mode 100644 index 0000000000000000000000000000000000000000..f92f23bea9692029026940c80ebd787501347bdf GIT binary patch literal 11067 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 literal 0 HcmV?d00001 diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_lineplot.py b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_lineplot.py new file mode 100644 index 000000000..a4816e4ec --- /dev/null +++ b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_lineplot.py @@ -0,0 +1,265 @@ +import pytest +from safeds.data.tabular.containers import TimeSeries +from safeds.exceptions import NonNumericColumnError, UnknownColumnNameError +from syrupy import SnapshotAssertion + + +def test_should_return_table(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_lineplot() + assert plot == snapshot_png + + +def test_should_raise_if_column_contains_non_numerical_values_x() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + NonNumericColumnError, + match=( + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns." + ), + ): + table.plot_lineplot(x_column_name="feature_1") + + +def test_should_return_table_both(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_lineplot(x_column_name="feature_1", y_column_name="target") + assert plot == snapshot_png + + +def test_should_plot_feature_y(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_lineplot(y_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_plot_feature_x(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_lineplot(x_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_plot_feature(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_lineplot(x_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_raise_if_column_contains_non_numerical_values() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + NonNumericColumnError, + match=( + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns." + ), + ): + table.plot_lineplot(x_column_name="target") + + +@pytest.mark.parametrize( + ("time_series", "name", "error", "error_msg"), + [ + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_1", + NonNumericColumnError, + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns.", + ), + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_3", + UnknownColumnNameError, + r"Could not find column\(s\) 'feature_3'.", + ), + ], + ids=["feature_not_numerical", "feature_does_not_exist"], +) +def test_should_raise_error_optional_parameter( + time_series: TimeSeries, + name: str, + error: type[Exception], + error_msg: str, +) -> None: + with pytest.raises( + error, + match=error_msg, + ): + time_series.plot_lineplot(x_column_name=name) + + +@pytest.mark.parametrize( + ("time_series", "name", "error", "error_msg"), + [ + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_1", + NonNumericColumnError, + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns.", + ), + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_3", + UnknownColumnNameError, + r"Could not find column\(s\) 'feature_3'.", + ), + ], + ids=["feature_not_numerical", "feature_does_not_exist"], +) +def test_should_raise_error_optional_parameter_y( + time_series: TimeSeries, + name: str, + error: type[Exception], + error_msg: str, +) -> None: + with pytest.raises( + error, + match=error_msg, + ): + time_series.plot_lineplot(y_column_name=name) + + +def test_should_raise_if_column_does_not_exist_x() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + UnknownColumnNameError, + match=r"Could not find column\(s\) '2'.", + ): + table.plot_lineplot(x_column_name="target", y_column_name="2") + + +def test_should_raise_if_column_does_not_exist_y() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + UnknownColumnNameError, + match=r"Could not find column\(s\) '2'.", + ): + table.plot_lineplot(x_column_name="2", y_column_name="target") diff --git a/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_scatterplot.py b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_scatterplot.py new file mode 100644 index 000000000..822b3d755 --- /dev/null +++ b/tests/safeds/data/tabular/containers/_table/_tagged_table/_time_series/test_plot_scatterplot.py @@ -0,0 +1,265 @@ +import pytest +from safeds.data.tabular.containers import TimeSeries +from safeds.exceptions import NonNumericColumnError, UnknownColumnNameError +from syrupy import SnapshotAssertion + + +def test_should_return_table(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_scatterplot() + assert plot == snapshot_png + + +def test_should_plot_feature(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_scatterplot(y_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_plot_feature_only_x(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_scatterplot(x_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_plot_feature_only_y_optional(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_scatterplot(y_column_name="feature_1") + assert plot == snapshot_png + + +def test_should_plot_feature_both_set(snapshot_png: SnapshotAssertion) -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 1, 2, 1, 2, 1, 2, 1, 1], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + plot = table.plot_scatterplot(x_column_name="feature_1", y_column_name="target") + assert plot == snapshot_png + + +def test_should_raise_if_column_contains_non_numerical_values() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + NonNumericColumnError, + match=( + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns." + ), + ): + table.plot_scatterplot(y_column_name="feature_1") + + +def test_should_raise_if_column_contains_non_numerical_values_x() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + NonNumericColumnError, + match=( + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns." + ), + ): + table.plot_scatterplot(x_column_name="feature_1") + + +@pytest.mark.parametrize( + ("time_series", "name", "error", "error_msg"), + [ + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_1", + NonNumericColumnError, + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns.", + ), + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_3", + UnknownColumnNameError, + r"Could not find column\(s\) 'feature_3'.", + ), + ], + ids=["feature_not_numerical", "feature_does_not_exist"], +) +def test_should_raise_error_optional_parameter( + time_series: TimeSeries, + name: str, + error: type[Exception], + error_msg: str, +) -> None: + with pytest.raises( + error, + match=error_msg, + ): + time_series.plot_scatterplot(x_column_name=name) + + +@pytest.mark.parametrize( + ("time_series", "name", "error", "error_msg"), + [ + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_1", + NonNumericColumnError, + r"Tried to do a numerical operation on one or multiple non-numerical columns: \nThe time series plotted" + r" column" + r" contains" + r" non-numerical columns.", + ), + ( + TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + "target": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + }, + target_name="target", + time_name="time", + feature_names=None, + ), + "feature_3", + UnknownColumnNameError, + r"Could not find column\(s\) 'feature_3'.", + ), + ], + ids=["feature_not_numerical", "feature_does_not_exist"], +) +def test_should_raise_error_optional_parameter_y( + time_series: TimeSeries, + name: str, + error: type[Exception], + error_msg: str, +) -> None: + with pytest.raises( + error, + match=error_msg, + ): + time_series.plot_scatterplot(y_column_name=name) + + +def test_should_raise_if_column_does_not_exist_y() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + UnknownColumnNameError, + match=r"Could not find column\(s\) '2'.", + ): + table.plot_scatterplot(x_column_name="target", y_column_name="2") + + +def test_should_raise_if_column_does_not_exist_x() -> None: + table = TimeSeries( + { + "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "feature_1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "target": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + }, + target_name="target", + time_name="time", + feature_names=None, + ) + with pytest.raises( + UnknownColumnNameError, + match=r"Could not find column\(s\) '2'.", + ): + table.plot_scatterplot(x_column_name="2")