From dd1300d2ce5a165213bf2a0cbb8c6e31bd19cacf Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 28 Jun 2024 15:15:26 +0200 Subject: [PATCH 01/33] added plot for DecisionTreeClassifier --- .../_decision_tree_classifier.py | 24 ++++++++++++++++++ ..._that_plot_image_is_same_as_plt_figure.png | Bin 0 -> 34459 bytes .../classification/test_decision_tree.py | 15 ++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 9821573d6..d37356f28 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -4,6 +4,8 @@ from safeds._utils import _structural_hash from safeds.ml.classical._bases import _DecisionTreeBase +from safeds.data.image.containers import Image +from safeds.exceptions._ml import ModelNotFittedError from ._classifier import Classifier @@ -71,3 +73,25 @@ def _get_sklearn_model(self) -> ClassifierMixin: max_depth=self._max_depth, min_samples_leaf=self._min_sample_count_in_leaves, ) + + # ------------------------------------------------------------------------------------------------------------------ + # Plot + # ------------------------------------------------------------------------------------------------------------------ + + def plot(self) -> Image: + if not self.is_fitted: + raise ModelNotFittedError + + import matplotlib.pyplot as plt + from sklearn.tree import plot_tree + from io import BytesIO + + plot_tree(self._wrapped_model) + + # safe plot fig bytes in buffer + with BytesIO() as buffer: + plt.savefig(buffer) + image = buffer.getvalue() + + return Image.from_bytes(image) + \ No newline at end of file diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..6284ebc2b9ead006523bcce0b331def8ccfcd66d GIT binary patch literal 34459 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 None def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leaves: int) -> None: with pytest.raises(OutOfBoundsError): DecisionTreeClassifier(min_sample_count_in_leaves=min_sample_count_in_leaves) + +class TestPlot: + def test_should_raise_if_model_is_not_fittet(self) -> None: + model = DecisionTreeClassifier() + with pytest.raises(ModelNotFittedError): + model.plot() + + def test_should_check_that_plot_image_is_same_as_plt_figure(self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion) -> None: + fitted_model = DecisionTreeClassifier().fit(training_set) + image = fitted_model.plot() + assert image == snapshot_png_image + From 7c730d0f5bccf612843e2ee873bb2db805cd76fa Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 28 Jun 2024 15:23:17 +0200 Subject: [PATCH 02/33] added plot for DecisionTreeRegressor --- .../regression/_decision_tree_regressor.py | 23 ++++++++++++++++++ ..._that_plot_image_is_same_as_plt_figure.png | Bin 0 -> 34459 bytes .../regression/test_decision_tree.py | 14 ++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index 24ed8565c..a77a78981 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -4,6 +4,8 @@ from safeds._utils import _structural_hash from safeds.ml.classical._bases import _DecisionTreeBase +from safeds.data.image.containers import Image +from safeds.exceptions._ml import ModelNotFittedError from ._regressor import Regressor @@ -71,3 +73,24 @@ def _get_sklearn_model(self) -> RegressorMixin: max_depth=self._max_depth, min_samples_leaf=self._min_sample_count_in_leaves, ) + + # ------------------------------------------------------------------------------------------------------------------ + # Plot + # ------------------------------------------------------------------------------------------------------------------ + + def plot(self) -> Image: + if not self.is_fitted: + raise ModelNotFittedError + + import matplotlib.pyplot as plt + from sklearn.tree import plot_tree + from io import BytesIO + + plot_tree(self._wrapped_model) + + # safe plot fig bytes in buffer + with BytesIO() as buffer: + plt.savefig(buffer) + image = buffer.getvalue() + + return Image.from_bytes(image) \ No newline at end of file diff --git a/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..6284ebc2b9ead006523bcce0b331def8ccfcd66d GIT binary patch literal 34459 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 None def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leaves: int) -> None: with pytest.raises(OutOfBoundsError): DecisionTreeRegressor(min_sample_count_in_leaves=min_sample_count_in_leaves) + +class TestPlot: + def test_should_raise_if_model_is_not_fittet(self) -> None: + model = DecisionTreeRegressor() + with pytest.raises(ModelNotFittedError): + model.plot() + + def test_should_check_that_plot_image_is_same_as_plt_figure(self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion) -> None: + fitted_model = DecisionTreeRegressor().fit(training_set) + image = fitted_model.plot() + assert image == snapshot_png_image \ No newline at end of file From ec712e2f446ee2f59ca8931cb4f9cda25d7417ef Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 28 Jun 2024 15:29:59 +0200 Subject: [PATCH 03/33] new snapshot for regressor --- ..._that_plot_image_is_same_as_plt_figure.png | Bin 34459 -> 19864 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png index 6284ebc2b9ead006523bcce0b331def8ccfcd66d..2479862c3d58d6c3dc0c0c6b417f470c009b56f6 100644 GIT binary patch literal 19864 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 Date: Fri, 28 Jun 2024 13:34:23 +0000 Subject: [PATCH 04/33] style: apply automated linter fixes --- .../_decision_tree_classifier.py | 18 +++++++++--------- .../regression/_decision_tree_regressor.py | 19 ++++++++++--------- .../classification/test_decision_tree.py | 12 +++++++----- .../regression/test_decision_tree.py | 11 +++++++---- 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index d37356f28..3e03584a1 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -3,9 +3,9 @@ from typing import TYPE_CHECKING from safeds._utils import _structural_hash -from safeds.ml.classical._bases import _DecisionTreeBase from safeds.data.image.containers import Image from safeds.exceptions._ml import ModelNotFittedError +from safeds.ml.classical._bases import _DecisionTreeBase from ._classifier import Classifier @@ -77,21 +77,21 @@ def _get_sklearn_model(self) -> ClassifierMixin: # ------------------------------------------------------------------------------------------------------------------ # Plot # ------------------------------------------------------------------------------------------------------------------ - + def plot(self) -> Image: if not self.is_fitted: - raise ModelNotFittedError - + raise ModelNotFittedError + + from io import BytesIO + import matplotlib.pyplot as plt from sklearn.tree import plot_tree - from io import BytesIO - plot_tree(self._wrapped_model) - + plot_tree(self._wrapped_model) + # safe plot fig bytes in buffer with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() - + return Image.from_bytes(image) - \ No newline at end of file diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index a77a78981..b9130f6d4 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -3,9 +3,9 @@ from typing import TYPE_CHECKING from safeds._utils import _structural_hash -from safeds.ml.classical._bases import _DecisionTreeBase from safeds.data.image.containers import Image from safeds.exceptions._ml import ModelNotFittedError +from safeds.ml.classical._bases import _DecisionTreeBase from ._regressor import Regressor @@ -77,20 +77,21 @@ def _get_sklearn_model(self) -> RegressorMixin: # ------------------------------------------------------------------------------------------------------------------ # Plot # ------------------------------------------------------------------------------------------------------------------ - + def plot(self) -> Image: if not self.is_fitted: - raise ModelNotFittedError - + raise ModelNotFittedError + + from io import BytesIO + import matplotlib.pyplot as plt from sklearn.tree import plot_tree - from io import BytesIO - plot_tree(self._wrapped_model) - + plot_tree(self._wrapped_model) + # safe plot fig bytes in buffer with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() - - return Image.from_bytes(image) \ No newline at end of file + + return Image.from_bytes(image) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index fad809555..b784d4c4c 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -1,7 +1,7 @@ import pytest from safeds.data.labeled.containers import TabularDataset from safeds.data.tabular.containers import Table -from safeds.exceptions import OutOfBoundsError, ModelNotFittedError +from safeds.exceptions import ModelNotFittedError, OutOfBoundsError from safeds.ml.classical.classification import DecisionTreeClassifier from syrupy import SnapshotAssertion @@ -42,15 +42,17 @@ def test_should_be_passed_to_sklearn(self, training_set: TabularDataset) -> None def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leaves: int) -> None: with pytest.raises(OutOfBoundsError): DecisionTreeClassifier(min_sample_count_in_leaves=min_sample_count_in_leaves) - + + class TestPlot: def test_should_raise_if_model_is_not_fittet(self) -> None: model = DecisionTreeClassifier() with pytest.raises(ModelNotFittedError): model.plot() - - def test_should_check_that_plot_image_is_same_as_plt_figure(self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion) -> None: + + def test_should_check_that_plot_image_is_same_as_plt_figure( + self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, + ) -> None: fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image - diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index bf6221997..b9f7f5bb7 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -1,7 +1,7 @@ import pytest from safeds.data.labeled.containers import TabularDataset from safeds.data.tabular.containers import Table -from safeds.exceptions import OutOfBoundsError, ModelNotFittedError +from safeds.exceptions import ModelNotFittedError, OutOfBoundsError from safeds.ml.classical.regression import DecisionTreeRegressor from syrupy import SnapshotAssertion @@ -43,13 +43,16 @@ def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leave with pytest.raises(OutOfBoundsError): DecisionTreeRegressor(min_sample_count_in_leaves=min_sample_count_in_leaves) + class TestPlot: def test_should_raise_if_model_is_not_fittet(self) -> None: model = DecisionTreeRegressor() with pytest.raises(ModelNotFittedError): model.plot() - - def test_should_check_that_plot_image_is_same_as_plt_figure(self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion) -> None: + + def test_should_check_that_plot_image_is_same_as_plt_figure( + self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, + ) -> None: fitted_model = DecisionTreeRegressor().fit(training_set) image = fitted_model.plot() - assert image == snapshot_png_image \ No newline at end of file + assert image == snapshot_png_image From c2373f3fbbcb5910cc07b68d0fd70ce64a5b6c81 Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 28 Jun 2024 13:35:48 +0000 Subject: [PATCH 05/33] style: apply automated linter fixes --- .../safeds/ml/classical/classification/test_decision_tree.py | 4 +++- tests/safeds/ml/classical/regression/test_decision_tree.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index b784d4c4c..787e15abe 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -51,7 +51,9 @@ def test_should_raise_if_model_is_not_fittet(self) -> None: model.plot() def test_should_check_that_plot_image_is_same_as_plt_figure( - self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, + self, + training_set: TabularDataset, + snapshot_png_image: SnapshotAssertion, ) -> None: fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index b9f7f5bb7..227332f3a 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -51,7 +51,9 @@ def test_should_raise_if_model_is_not_fittet(self) -> None: model.plot() def test_should_check_that_plot_image_is_same_as_plt_figure( - self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, + self, + training_set: TabularDataset, + snapshot_png_image: SnapshotAssertion, ) -> None: fitted_model = DecisionTreeRegressor().fit(training_set) image = fitted_model.plot() From 4a8fb50bafbd8cd3edf6827b467cb1d73bfd8fbd Mon Sep 17 00:00:00 2001 From: Saman Hushi Date: Fri, 12 Jul 2024 09:36:48 +0200 Subject: [PATCH 06/33] added snapshot for linux --- ..._plot_image_is_same_as_plt_figure[linux].png | Bin 0 -> 35197 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png new file mode 100644 index 0000000000000000000000000000000000000000..70c1274b149de76157abe3e8aa4b2858492d54c0 GIT binary patch literal 35197 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

Jzx{&@Kk;JtM|N|#n9h~R^kV?VW^}O0 z$kE3Nh$P9EJ$h8r)@G5cjN)?OxiAH6l#DZBP`@<>X+ERm&kx%^9@TfV``g5#MV2xc zhTC=qP8APO8aELDHCPFN(25Uo{~l57-}kQ~ipL!PV?^<*xrO{gL=<@hFcUn46cts4 zj2B{~VFoS##Usc({;`MPnKARWu>I#NgnpMdx}{(u0(yRFm-_-_nreSHwg|P>d-Bn^ zx$2eIUym@1XUv9s(Q014WW)MlAnB$@$r#`{?(YynOk_kw$mJ%j5IkbMGc?w4)c>YG zIv!*ioQy+ZfoUc(pz)jtQsDM3=oNGn7-^G89oX;*NDYyJJivK`@XW@+lq;b9SqW0j z3y=eV1Vn=%DSnG|jIc%wxd{n(j4?Y~5{0GEnTvwl%jjC0l==`RyhxHKM31P(=+~d2 zF+6|RNf3L?Z@HOo!q{M%T{^O(;Yf@Bp)2dxYr$$IB40!VBYO0+?U#KpwMK^2uvZT> zwdL+3wYv{_rh140c+^26h{qw%^Axg;yP&Yl`GSIDY0po)*pwd4X&z!|{0n*kM#cD{ zijar}HbaeH>ApW-$y!`W=e$ z9o%G-$(~nFG<4jv;L%$lNN!Mocuj27dlGsOj=>^_63cMi7|1Mch^a#!0rQl!#D_+K z7}{Vy`W&L?|IOEumDg$gP$MURgS%=fFoEbH0kWYT4tEx3W$yuT6AfMaozAXj zg(V>U$%!6?0AYUqwE=4b1K%_^SAn9E;Q^o?5d_k^{Jju!S+}_aISX=W39N>lCr@sI z*iXaFec3nQX}3V_g9suCZJgfg-pUN|>`;gIonPHQXba5*|f% zB2Ilj#7(Fej1+fMi}Mhh$*>>f#SJtP#dYq`Fzo5F_hdYL>u!0}I+eI9S^jL++_GPb#1Sh0+OVE{X|bYkT>|y5qO}&kXB0CCc%2%gSbSJg(4;^s}Fb<2~8mix$+1!9s*T}KuE4`NQMak zyN-JL^b@-!L^C7*p9{4~0AcJ{bGdjL%gTf@&B?=)I%1TbD9|_~Q7%MgBLDRbQ;q8c z6#x5#+m8QtB-~~e=HyvhW07knnI|wm5}twMwG8p1wtEsOg=RNHxR~B3Egrg_kO0{n z>@jQ(vSB2q!N^4x%0Y{#JHEYLMef#UES_jiK1UHjg?DKplhGX>jv0717)1H!;2RJd zk5>H6e;s|pESW?ohZ9B(Q}C0_6Q6r$vNDs3i+zgghgk1;ld#=?AAi$t=BSYVGF=VT zZ7~b+Yy>x|!9&r0w0}(W3gco1g?C^7Qv%K|5%YLm0mzgdIB?)ucbS!q-wfhsm)+$s zY%w$>S?V!R8wuK~?dIlIR&Y~2PykrqikeSmSJ))f%fr1D+sULX`gk?ECO8$jr32WK zD1%|SoX0UX4kbC$drY@^Z)Ul{U8j$#{hA%^N0nL8zI5yVZB|>+R8xg5ZnPR5@kL?;2Z}n>}sMN zC~WoWqu7*qSUUz5i)x2!V!=SnT=r^M)*_YUiK`tD9*Kk~B8GTpO@sRskCM3ym^P`r zUT9BgEi~DRc(%A2OBZ)^f}WC#R;uA-1E`R@ldV7XZZ~#r5WhBDNfhlDw>5-u`>-bX zoUxf%=%q^>z+oNPNhnP0!s-_xo;%|56ewj3$bz3^KJ?M;X;l>k8jL0$H72HTrynB; zpMeALF7m@bcEpv*)k_L>N1OHE%s8VnJn)T z5?NW@rRydG{)#7zNktR*#=?iOg_5sYHWGCimu#+p^rb__CU8%f+q9$`>mOmpNPchb zwSkZDm`P$89D#$6Z#f1b!sfWh1t^gb0!k~T^Lht9qJxq>fN+NwCV@~5EIZDpD-Y}u zNliqG{_eUBT>ShP93HdJaW&`rA3qvPG$?C|QfO2}nylGUmWt78$)00=BE&?PtkE(O zTF91Gbx1_Wt|HYimSTz-WE(Y>>_YvX@8XVo@7(2aAHT=%apy1dD9$xBSN1z>W%s20G~94~TQjpg2ah_=p3r$jBL!%xV&ru1xyq(hokvuvN}GMP zVBS2_=O(kK?LE-*Ev4!D?b|0j3~8INbJ?y%-0r*cKID^(vt!^&(a4JntkXN|RLcuI zrYY5`s$8D5hJ?jZ$CyvaRtM;ikii^|#=YD_p0n>DD1!!C2IfOdV#J28jr*KM4lk~8 z#ol=jMj&qyj!iJfE+^j`_8CshhrRqObp5^vt2~eE`-GgyElcgW5E}~1WHlkMd>?Hv zVpzMmMb3m)@XN5+WD^n@Jloo!iFHBMFJ9HUp;D#0&tycsvB#F4pkd2Ig(J|$thXCF z*!zoSIxkQ4>Y!cO`TFH2`&eNyRq21%=B%8Z8pL^K97cBCQMhkxmU#!d9G~|B7^(T% zBF)EY7k>P)8C7H~P?2=>lAb7f^b$a{wC5{sA|rl{T0&`rnTZ=T5Ue==WlB<`TLLmbkcj&cNVq9CU~^m@Ycct@ zuvYg5EifmS1Z98$4V^8=!Wq87Gk~rWe)wjjx4@7u%u0BZh4!r@ZjV0|??C#-z@*=Q zcm(&|e9xAi-mzSiZ}a}c5Epd= zWB}RpbnFW_Ti;tZR_8Hg~Mp7t8045%GfyhMiaflgf+GInoVhq-{Ciw zZqz+$gQh69m61InYwtCfJRO;p+R(gg=Til@LU4d_Gl`fRc0-wuhGqp73lhB1^OyV5 zn^2mY9n~`iD*yr-1cd|(?^-rm;tQdx4SMuwNnU~f%9URbArVMdDrqDTViB*pn3=i# z*1HFQsOK-~qg5}C>^*tY@*x?}oja$@)%fDtp(BCj+)}U+9rqs-pc}g|U=;od_x;Og z0S58pPG2F0kN)7*lbfL&Q{;R%Rfy$))%@non{&mH6WTUb@GwP34HjCCj?kn-Es1ON zMoA;&1R`d|GN{6Vn5Sr#;g#znk}&xl2~j9F^r(z&)Z>&oCyUDgb`>4nOXV!9kyg31 zG{1lMZg{K43N#ADiqD#5Cb#8Z-ksyq^77Nrb#qD!j3pjPu@?Xlpx1uStDiZDB}8B3 zz??;CMctL>E0MTJh(G-JI#bU+D5=GM&6XzWV& z6C#jd7z_MZHwhnbx;E=qXI#^S1@=G?d4;1)Aq{9%O^(ww71*u;Ke-nv=_$)?3>_Es zwUWUKSm-56Z7_UjWkp#Rych%B-F4Yg>r(nN6@j<~q5p9{#4dR9D+=N)nod<~cY#gj z10rl#e3KRa9lI)XtVhB(U6TTjAMYFQG(94fYuETy%=?i2`z;jV8EYSN7IQOgNEwxI zB=AyEQO1oK^>E4Z(d&_Fyt$5hD4p)2X36hHxB1Aakvv9X`U+n9s&A(O_D+$^6nEd-d$8@a?6$7+Y6S zyDLdc3Wj*u*_QQl8v^@C`htj#FcFSAT6NQSZ2$fH3KQe61=>9sXjIX~HeXlxYEf4z zG{Gh!+&6--Qt)MS4cLquw-wQRG?hRT*~NB=w`MCRN#wLTvFCCekq7w|2Z#Uu{riO> z8P{qP_V@g=l4>p?D`$8-+2m3g)orZT2|~=R>?doj<`K)atOL1k)D;4F3N{X)G?1jZ zAgb@Ybkoico9OFLy!VQd%6971c)1vAE6R($jSiw(k?j6!7mACII23KI2rLK4k`5?O#@CQnsKwhT-`jK+Zy>5?mr?lF1Qa>zYxZl;p-LrlfVtZ`t*6XdH!a*2k6J`*QeF~e`otthdKC0Z z>(~gG!ES|p)9*BJ#MJ%660lp9KUrF(E2YGoIbG!o zy|+)P|AJo^)`Mjl0$?f><2Pm1O8} z%`Ir|p1wL3(;T8^yn!NiN*vD{-wWv~`NaEnl#O(B)S_C7+Ap@c!6KiqPo4fg^8#m865^B>BBtLer z!@sKvBMr|hC1z@^@hYF} ze6wq1x^YmFIoDi)I>z@*W;hg1{<=3>GL9$bywSi*+E@MBdv21lvTz-xJ%Kk#Bfavd z1ezwN6>T zCYD_GL4ls`2)!F4WCJv4l`Q58h2eZ=yrNt4l) zBq^XhndLy?nVX+A3lTJ^sEGBpkiQC&^> zQ*~I_^=Me5I|#&*=N`O7&=#xk3^17Zc+WK$SoZMYWVAeUz5d8^w7YZcFQJen5Tt*E zLe?Mk^B^k8s6d!p^5vfvbnm)33xmNv9SJa5e#!vUkqYd+*vqLA;@cvKHp>*vg z(aV78=8}P`Z87c3)~#FbRpz(&9(U&4M|Lxu_xzbytgiDGC&TrVs6yT#;h4-hMY%Uw zxSB^Q_t)O^W73z3EQt~>(*3pLrQ&d;RpIaYAe;J_4EbV#PuaI8JPDsvOfU*}?GSI{ zGu*IQM#aXYwH#j!p^ISIos;hCI*uo8L^6uzkW`W}cB#t=N*jr?p{l)iHPJ;(PUWa| zM9*$){tE^yVOf|~5aG6cXpy-ZV=cB590=HWmao{m+pEkjz}k_p;-<`P5LhpoShn%rd`_A8l0cmR z(5GAEqE`zb31jlk@apvi6_i53S* z^Jj^`H9tN|>1DEh!-m*W%|OM|(e3XM=xgKBsKr-1R}Y;y@#K%scLaH^Sha&+y0|Gg ztR>NIEJlf#f@J5E+gZ9!XE#0cF@m`yX_S7XFll@CB~H4l_8k&Ly;N`xn(Gv4rtl?_ z3CE&wZR51^HBU2k;>jf<^alO*O%^bMOPdjKmr=KX85rPw^EkVPdSJO~kfEwab+4Gr zzdA{BwNV!1=h%gKs{Mc8$AWxp!2`|U|4Ej02!N*A8F6mP$S0x@rsI#R20>qMV-ajESISqv{Gi1kXC4X zm9N9o2DTo-ZG8zFu(dUR>l|D4x~ftiPoE|{BA40}lp?A|K}i?LcQ%ZzYeM-95EgNK zDFYC=-6TazY~EZtCTkwQJir+vnmsY4!?c^aFF`BzzHDL@B&$u{8FHVJmJ=PX3&UJn zArZy!BTuP~cw8}nb0%vazihvL=+o4tAH={T-Z_~#R7)YQJhU^xJ%TRIkZA~xU-&?t zLoi633O7imd~QmBr^fm|9QGwt00@`Giv)%*d8byyKc0O5><3j=JEsQns2W~Gau`gK z?nQ#Ab*&p8tVIXg#qc;tJZ{xUa{Ba__1dJxPy*dBRRA8ZoT7qSla94UP$EADI;~)VLa57=VXwH98A9eQ{bCP&>=6 zMhxU@Vcq5(Faa1|`JPS>vW#0N| zMq7!>l++LsMF>bm7n|fJPe7*Ei9At;AHL}{DfXJf*s(g~`7z;c{Z@80Qi7!3Um8Yn zHIc<^S2#I|B=Oj5L-{QVf>Yg^7u4C8y=v4`7E(?J zOKqqzxgELt(Ecp)`%GA;m{9q%nw43QPLoe>?bBP8PxoE_j%YABrj!C(c6yL;E4Bi{H%72FyKnm$TMv4Vov5?pb(QM<&=x4d)jq)C9eO^7wU zFkYC^aa+_S^@=~$b95E^9TjLl7^U$7Lt?U#98Ji(@yeS-jzPz$(>O}(77s|PY15U| zqsto4_8jdy?%Cm)2Wo2_@BX=FB|Q>;0D*pXaC6hUk*vxIqJaRfcPp-94qFpy#S%EF zG$jfPwPoZgj7EsCkviXZTz7?)SyjNz2x~$c0$pZ7C&~`Pa|*#j0JWoF_oy~DrW-$T zap$L(ND6}^LJHrI?SqO9JKljCZ(jPTI0dXcUD3x(X%FJ3VcJLx1?I# z2(ysGg<_sGfcQO`i6?J+zwK{jHnBga=+FdITGau1Y)wvdY#FB{9g_BYRmIN4#3}q( zDp>(|sjVhq96pT0Jl%sYd?4gWL@JxeE~jSVQVWU2IwW9#0?PDmgTD`Qnm*A{EG<(GbTMumnxE!ZOK)Rp(|+~+16>l? zaZ>jH%HLfQ&S)ECK)Wt#(_8Zugdgu=VX+b{7N}X(<{Kg(K#ZN0eeCV?Jwu0w)C;wD zswWRk$)-YDq&{!n^KNAb++!|kC+u&Tdim0&(?B4*+Jw@_Lz|CR9zFTfj_{UOL|lgX z`P#wnBIA#3n)paV@kxs2QoJ#IWsdS~%{wG9#4zGdQW)}4a;3rid6Y>6kf@}8;iXuC(iQRMoPM19^jU6mW+x^3j*C2V z=h;gcSm5Fbp!pBxB!x%*dvlU5Uaq(~>IqQXKgv(S3sE_M+FQJVh+(ew?x)fTwdY&y zQ~k`IVMxL3MCZ2(q`idSKFc2Fqb-L?P3nD2N25W5Ozd)d84V<>2{3dJ6%Tz8^C4Lg zupo2uW%Cj0icwFTOd<#+y*r3ceDz&iRzdTcmkZMTeu>7VGQnDjbvr|8Jmbaxs8$>H z{oAQXssxfl&_z5y9AEd2&)Yq_8&<#5MgL+xl9RKQ*+U;Dg9N(R{qw+}c9v)EY?!d1 zdK1$*%)x}^8ZfYZKu(9_kA0h}a~sr*!mT|CSX0hcj5>~nDDL^)ySu`HQRgWX%y?J}%87ck4z&%xkV8%3joLHA8%G!~g1SEh z3?d7aDqtp*&=BMwh!NL(MDB_BrYcx5t_pQ}7E&kCGy+VC&JoWlqXkS4=u1ThVlG*& zOr8OmsD-3$%eXBV2x6$Ruv5!?n2QATpoS@UpS3HoVo5h!k24+{a@v1rT(vqdX@m@I zgqsi*J((t}Li<&ylS7n{{(#lW?H9)qP%d3WmVe?e{wpquL1%hx;2 zN1iX=bk}@XswTs)4ljDCQnY2;t1kBhz5-)z+B9xXG?D_2u8yqVuW07Fxa;ZbcToiX z8JS&c0A*}$B&Eu5g(m0k+z$Z_b&XgsIO{l!1G$guD@yo^z`{lQiIrBSf_1s}ghJ8U zBqErM1PQEHq-6lT7A`}%{bR7oSA;*CGqNSr~Bd`q21kKUBW<_dFl-szDR^Zh7Q z6KNb0;J#WBSs`?=RGi$0Ltq~B5A-2;o2$ql7fwb|5M6M@bedn|*S{jU;M)_u;*D+! z<%ob`?VAAh+3SFAmLMR4bp?i5LL=W;GGiOZ*>$> z%cJe<&JpBKJt~ShM3gf9mZB}n9FMEX>j^TDO?fJRM#h9fxbJTL$1?Unp@5kWf9J6! zDysgirTuR${q`ROyl8{}bvo2V0fY6C+$JzlHFJ>b9do+XyPzAfy(fc|13a@4Z_%O+ z21o-*nlxjE29^9DVJ{oY1XiudKLC7;+p%N7<9df)aiZ{KO9dbc%I3vRC0KE!vA?Z|`q8yzse^ zsPg&#$N`MJ9=Y?nOF&Nh&|y*%`bfJit~ZIJ6gLbdKB;{G>k;R>^2Q}5Na`G!Z$Z^b z%2vOmIj`cn!)B3V+<ra-$AT9GQd>VE`U}t?eiEzD8l*p1thqO%C6*+>rA8$W+Flzcq%7fDYv;rqVhES)hK-dsN zE1&j3j1H1BTa$cU55hs405)cMq`vr&G*sNJx()1ZrXo^h3%qP$KdAaN%?(p8zbQz; zZy!M!P9l?CPpYobt$jB7DCN`r_`Zu?m@4OqU5gcnJPn-)_pWilF)}jtS}|vdYa6xo zt@XkRG^JdY`ADCkA4zW2gz!T$HvTywJaS7(ecS|+bU&HN$1EE8+Ib3=db7cbC9RIr zhRcY7-q|{#uG_RJCza7#$dI8hNIA5tla(BkPmJ*=mo& zrBA6D;@eLD)hHr$pI%tr+VYPaaZpfwLG5Pdc%*Iqs|Mxj_3pI-$#p2W{wmz7n$k_B z^{}SGt4^Fb^gYO%wP=7C#Jkv?$r%|aP&BFP)0B<%`!yprW(ts8VdDwvghX_Dx1Zn{ zX75;soK2p-26&%_25sOfkJZf4F7wXyaPrRUXH;f*c2sD2^|dg!ymFgiPQ1wpQ(YaX z@8tE64rD|V{Xr@>+E0R4+~#kd1|up1DwucE2wev0;KT_X%ku*EIDX^XC}_j#Hprb3 z+&>^MiQz&akzh6Sll1s>9y*VryOHT!pSK*o*v(Wy10fl)gLiI}3FN2&`GiF1C`dUeu;3gJ%BPV~rLQHl8p=%4xRDy% zy7%(y)XF(V|ItXO2IHOM2`;$4vlPpSnu6)&jR)9xR%lV`E+o!TLBN3bt`f0-9Z!>;DrOCu~gx-p&7nCm>E z+)7Dt77G*z2Auy-`u6eFp1=1<&|0XX^Oup*~o>DR{)}4H049k@Kgz-v{V`=3AdPeP{V}_X zqLEOE#+Jknp%6Rkqq%0FX-Iaq4Y`E}Gb^QJ2mgz>KK=Bv!AZc7+W& z06fnD?{I}=qg7Z%rY(|i54z^GmpHj>*nMzaGNP>L85pojuY=OTJwk}>4=&3-7@Z0D*1pilv zfSdNdg(S<&cz|Y2Mu0L;M0Lqh$y-SQ3GHfOA#O|%1ta$p@a14i=Q=wVa8nT17)lS2 z1(0wme@p^BuarS4j$88*RXilOl#dSy>N46Ow)e^2dBfEWkX{=o0vSRdh(_15LwwGa8Q$z}c;YxN@Y515Imm?esf&Ke_CjD!2tS}rvpoX?2@>IyT3 z#9@kUX_}vlOSo{xl$|mWy5xs0Cpx|kc=)9ML4+*ivB@U~8M7t)Bb)Nw|LD=hQTm~5 zbZ3F3;T)O9Y=ZJZhPp{8P+mx~nae8=Q-4iHIttax%GAI(AfG=Y^MJLwgvHhxaD#F^ z?-6rFX3IeMOtvL{$Uwl`V2Yq_k2tFLjC6c(`Az=f;}v)u%p1hqsQvL{az>f!gg&bXMSrtg!%PDmtC$Q-?VmIsWg zf~a}dVqcdQp}D2E&Byd@V$kgHx7z}BR*{`^T9O%4Cqyh(sk#3Ck&sag0REu0bn>s#4(LcfdyMxE4Z3n+YFA2 zOG#;nnA|m>d~AvN7z+x7fNw@u7cqZF%uu^kPj>v=%AbMBM4`8_V9wLgQ(I}rUbCwK zV%sjBW#Tv}21vZ5WQw%(aSRZq+adFgu`Us8?H8MeF*|+!{DZ2jwi}#Bj#MDhmS4OA zPm?~pQt=U44d}64vl Date: Fri, 12 Jul 2024 09:43:25 +0200 Subject: [PATCH 07/33] fixed force plot from sklearn --- .../ml/classical/classification/_decision_tree_classifier.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 3e03584a1..9c9c64b7e 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -93,5 +93,8 @@ def plot(self) -> Image: with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() + + # prevent forced plot from sklearn showing + plt.close() return Image.from_bytes(image) From dffdf42507ba6535af4b5beedf0516f79b1a39bd Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 07:44:55 +0000 Subject: [PATCH 08/33] style: apply automated linter fixes --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 9c9c64b7e..0e37562f4 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -93,7 +93,7 @@ def plot(self) -> Image: with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() - + # prevent forced plot from sklearn showing plt.close() From a4413792180b49b487ad42a5b9169961998d88fc Mon Sep 17 00:00:00 2001 From: Saman Hushi Date: Fri, 12 Jul 2024 09:46:50 +0200 Subject: [PATCH 09/33] fixed force plot from sklearn in regressor --- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index b9130f6d4..a39cf12bf 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -94,4 +94,7 @@ def plot(self) -> Image: plt.savefig(buffer) image = buffer.getvalue() + # prevent forced plot from sklearn showing + plt.close() + return Image.from_bytes(image) From 0fc988083efeeed0660cfde2e3825f75c1649d38 Mon Sep 17 00:00:00 2001 From: Saman Hushi Date: Fri, 12 Jul 2024 09:48:31 +0200 Subject: [PATCH 10/33] styling --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 9c9c64b7e..0e37562f4 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -93,7 +93,7 @@ def plot(self) -> Image: with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() - + # prevent forced plot from sklearn showing plt.close() From bb848f587eee1006de939914ee47365ff38aef77 Mon Sep 17 00:00:00 2001 From: peplaul0 Date: Fri, 12 Jul 2024 09:58:19 +0200 Subject: [PATCH 11/33] mac snapshot --- ...at_plot_image_is_same_as_plt_figure[mac].png | Bin 0 -> 34459 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[mac].png diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[mac].png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[mac].png new file mode 100644 index 0000000000000000000000000000000000000000..6284ebc2b9ead006523bcce0b331def8ccfcd66d GIT binary patch literal 34459 zcmeFZc{tVI-Z#Dp$rKqvgsqgJqEb;wY!RuRsj|Q2#<+?(nt}Csu1S?oCIk6Y?Xwg#;p4l5T1_M@dFR@mEADtQOjHXX9<%ii2-^ zf6i1K_Za$~n_^zjn(?hCOJwPVv^U?LbU2t!T%JkI>CmEjbBa>&CnqMRpW=r@ukKq+5h+L|4Wy}B$>lAQQyQwF#E|917W6+eJO@% zR>zMg^~?JCg$6AVm1jPF{CHn`{-z&4e&`Fcgxn}DR?^kgjbvD+a~n@z(0g$3#FyS) zF&P=Q``cX&UAECQ_U`ox4ql4ai=zDPheBW9-yU~iayXgeDmK&J9&J$?{@D925#{3I z3b|uVuYoV)k3>?IHLKX$ORZYwKj<#2^)(e4WCW5<|nZEg2O%F-=ex#On8 z?VC46w^qNpyLI5q^5k_pcMAXf`bxF4_)<(phUHLXT3TA~MBc9)mw^_=8+ZKtEUFl8 zYAi8KH}kKor2QKFsFyn!yldX`?%fs6XU^aac-_3oIs5C~0shU$I3MitSnu$@=z{Ai z2??9t+OTBiqSoQ|e7tRD{uL`KUcE}&W6LJ6k-^{J-+9BSQ>Rv|Ytm@E-R7kUewn!PzF1SRya91HLr}bs|&YN+CZfy@482~N~-3`(Km-zAGauU z6EnTsUCwyy`0?(FrMps{Z$w7&yPZG(^42cOX=mpv0RgN*LJG0JB7Hcwxeg1>&dxSG zcX7BlH~wC;lZkTd*r>x*zr?JbtqM8{Y;0_&yGrTWpE)hkidfG``SRt9)sHVPPoFtc zk!@EeH545k9c<|_$7}xltmKn){D{W>{e~u~FJHcNTbP@)c64NSb#*1{W}IWsJOBHQ zM{SO@l$36tfyn*`JC-b3wCI?FLq$~;qqVj5c(yr}>hAy8(_d;d*kg9l-7Svgh39{E zb$5FSZ$BrxYnKRq$l&#r-mhO(n7#PcnS>rXYGZTd-o1M!RTEuhiv~MO$WJ`GJg2DW z((irz-6Lzf)66GNr1OIHr3{V@VsDkTwmvr;GdS|)MMz&`+~N}_PTUL&^TDIt7qyYG zWMO_gJw1K@i2@q!mk0Klfz9iC3fsPH&dr_d%Jx)D1_RP1}qd$J=CI)9^$*o$p1lz4HweIChFMt2Nfjy1y-d)v~ zQnRpFxpLR#8*2_cc=+rY|D8K`!X_>Z<-F$+wA4zOFX59o@ZiR~#|OkEC70}U|CKm7 z#Lbno!eWtzzJF?}Onua*#h;$LRHT{ajgHlbNH-m@v=k9mJiB(%q~yz&!`l=Tnzub# ztrd=4#(j6|sp_H&ld@;~4nB2w&%w$kQ@V85>_O{YN&3kR((>{-)mhD(k>DPrb+cyMMmfRny;`B6qAo^cViOc0O)TU^z~9$lbfr1$?rr zS2OOKpAuJ^8GK?=)lzu=%+&ASWpCarMg3r2x>ViGZ5zI|>FnSKF77q^D{lyFva+*V zJ@D?}e!7MGob=t@-LjiEryAJoqtUM0(rf5@9oRL;gH@^g{_e50z5VslQsv5;8r#p6 z{$v~A5J?S*aB_NPX3E~+m!p?9O0WF+?M>Fj-_B?Io0eR@d|5N#-P^azMoJcxIy@FG zk$uX{%36W98xs@bg%>-t-N?u&!Euw66bogvCwLdV=isljq@*M>r(^5Zt=o5Bk$1c6 zFb-r}-ct1-p)x-%ag;@WR6B2P?=CDnGY7}laSs}8+#63^;qvtNH8Q5TY+B(mWjDoC zDHJ@&4|%6VEG`Vm*FV^~VrF6}Uo%y z>_7`Ud6w0ID?;wyH(%36Irue67@uh|}`Tp z$nD#U%+1XUCt4l+ZrrH+kYzg{V?m|fs$sa9D1?_&-MxEvRBw2AcyIV=NlD4wIyzjN z<>hy@$nO03&Fm=O!f8kp<6mS!z`W{eL9Ejvi@h`Vbmax z!X@4sOODh>(k1C%KUMtuQR}5Q_qQ*`7Xq7(H0?f&@@?nDbTg4pMn>k#$@I*;yo?F{ z_3PI=+cw#89RX7C#3H4kAiSUcdi}_&JCfr}>{M!O@+gn&f9?R1Iw~sk=m2JtJZg+g zOf56FWxY8+prqnNKTJtsRaaLZY|YV%DQ;u z$xpR1rdc+O^{-yZ;f-t@5E2rypZ&C;m`uod2eiTp-Ug=X% zu)Y1$Cp*X5?TmxN!$IgW;z~*@)6>%%-oL+g`!;uMTwHH;#)w`iTF2V8YdwR5gWH`g zEiDfpIr15sq*-vox^?VhV`Gs!&Tquy4-=5$;*u1=XJEXiaE9sjnghP~?+fEaxNx8t zS^2sqhT2%h4`^#w;oGvOI(7&tUF08X%d0_=bQ)+$v#-&eZVE}ZFxYu$73z|SiHV*4 z@^jzcGE#2dyJwd6Ohr{y%)7KHNw3a)mrK7sdR2^C0H52;P@WSSwSC|L8m+cMuaw4O z{NxDx;LwoMmls^ejup;&+{R}yGdH(Bdeq2n0Y`1ss#T?BWpt%=4veo}z2XuU4(zRq zFp>_(^Rj*OU?)qJ5I?_h_w>DcLYq%@nC0$D*tc)r;eiy}k&dFimb4XUyS?Fn5JL0w z^Jr_T0etIjhK72xuh{a?b);ho6|*tRw#MG^nxCJ2Fg7Uf^?-melme=#sPg(l&Q4Cd zuW<965WDn8oI3jjM`C%gUFI*l5<60stVf~EvLRdb<*w8foP5- zeUo14wQCdKI-$27G&VN=s#yKjVF6$8Tz~xVA!RX#P$}?MW3qv?&!j4|&WOuWf4{!f zukn6&>*;Z0$N2>XRX=wbIQ+!UD8r%(6#`Z9P{!EW0iMjqkJmiS$>HMT^Bo^}Ul%^| zsbKk$BS%;wPAHrk2xcRw+l+alX-5)giTnH2Tikj z@Z%E{z(AbR$h&uq&L)!5kBjXi_-_3KP?D^a*>KfR9Md)o?#W%=^uk&%(2*t8;-esTT!^(*<( zA~u|b#pEowxw(n%*dgTbKD{bZ&bA@TR{carp#aLnv5vz0u=6r8?}IL!wD;-eSApNsEsCxWe=0~(6!M9G{5a0GCde4Y z!Z6Jwq5rhTOTiwwy|nnXcp{QrRRPN*x4W+2v15l78YIDL(HDO#`87V?{q5W1{!uWJ zWS=FXA@rL!ZzfnM|ID|~jdAL-va-qx^K)DR0{-YniHbW=i0uKv<0s2AD;2ms3-wnHi0YX?=J!Y`zijkD}8;(NK2KFkdWQ7#kZtn7gnBZ zsb52F%crNO`&x6Pmn~cNW%|I~E$m;vetm|c=|0}ih&E|_=#bd9ZN@QkAD$dtYG!8k z@bTkoK$}*xQ)5#@d7WQcNw-JWyc!cDc4zCUAUr(ks#Wn{MJ(8v#YTqVYFRd>3VNEIAa}rAwsdPzkdVJuTxOz}m-G-7%;3n_)mLBH0fdR`ml-JZO zK6&!wHs>$QRB>^+OVek+eEn*un9E78rlw|4TzkP@BuC%fZZ*C6iyu-ooqV*M_vl;*s(-2j{^q|Sf4z(o`sdwhf{_0a0(|nG`9+~ z)583v7*tooRAaICBiL#xQeoG%?`~Nl=8eW5cdRkir+nu3RQuQAYk0UkXc zP(LsJ^+?A~I^`2>xoNFV%|5=T_buaU=53){H60zk&a}L>RS@{90(Gz(ofA(Y{J87X zsP&1~r%Ql`oHrdoJC=IaQdg%nTy*v7B0Ne$&hqUjwfADfG**pHOoW?mu`Xw*tf~?N zNN)eIKUyj9^Jg2vDzJpv1X}^_)L=ETjx|!BJ%3K!x^=mdl2YV0C+hU%NJhh^Kyx#* z+Iz$6gM)(hhdF+IeLn#G!5V93kh_{n?X|&q*tN``;pm$OYF1XF;p@$>qoIBH@WJZ) z+XT1CPp)*7HT&o^ygk<16)B)&7(&WAa^&Tqb-lrV=uiZdf(Er-c?}q$8@=o z{Hcz@ebi&@W&R)K(G(Y?E0NQO~trKb&;p|1_ zEiHUN)#y-VZ+0!*=<2enza!5I9^!fJ+G2ucR;*azeeGJ^_=R76TsHy(!vyPkYJznR z9u$pW2$yhkY|CAjcK}a`j*^v?B`Yt#?ny^O!@-GfPCeDupr>xw{l#+=ra)Dtb#<)Z z6TA`@-(KIZKwV9_@u{{p`E9HB)|2hZIyxck`;H}{df0TA`@E>FRe_k1+|KtGV2gD= zcI?B()t@-FzQJaq5eDHt+?KGiU)LZ%R;Z=ZahwC_m zwt1pXmV#ckE2&=N@WIOK>gml^RvJCcU|70cy7=yHkOJmrYsd!d!(qa zu<$fCY5m=;O9{scT(NbuY_W*`HgTgBOiWCqq@adaojMha$B2z-4R&F7t3emEfKYQ% zNJxEcc(@ysineDD6Uw11Slhlko0s53@4;?h;t&EIVvSEo=uXKfzLJvS;PX<1Lb@Az zd`?H+xuMn=;9BQ8&7*8XgM-*I76Xo)Tsl>F-gCkE`3fl6S$1`N=uoOgM$2Ene!b1< zv-gSIS`a<~0f7(sXV##s&>cN`l$2ETP|e_)h6c`%kdVl&r&eB`|9vzvD#{vYFjC&Z zFk!AG&2%wp<_|l9Ds5nkF;Ad)cWb$=6d3l40{JpD|;dwRNLxu?CPOuMhazoiZ1s(;UYzna zy*srg0ks<%+xf}(YE-gKQ)A<9K;p64-#<-G-S$hA!-tf2 z!?OT?dIsbb99)5*s~_g6JFU6Grci$}6ZQ&ZFasYk8h9b@^Xv3{HS=YAo6iIRVQ*QvrWCLDY& zK|!fWnlE~qDB2j>lP`@*H~K>`!{~Otw>JYJ-RIArk5o8wB+d3bPCXMFzh`^9S*lt7 zvUBIoJ#!nQ0(XZ1$^h8ux0ZkoU*B<2T~ALh7nFilTMa#O2im;bg$uSoIOLpz?a&q8 z6R3al=2}KZM(WTb?YoCP)}v6Nc7#Ml`EMwh)sX2uG#|eH6fkfx@+t z0O!-czF$SJsckhcxhzZoWr9}3&8R5JyN>Ugn+-IDQ0It9H8?nUP+xzQ>G1dO{>>>y z;@Awf)i;td7eGr6;!p26u%obL8@RZ1&PP&o;~GjlJkS_KH*e-aLsN%Ty58)WC+g?R z*29MnTj9X>H6?Lhxq8+5`0*u31rt_bx0;FnM znw!_9FasJV7SsDq>5A4kXH6GEKR z&YAT3hnG%ETQ@y16hPK(=T7rs-=!4(jfa_^K7HEN({t6+^N*f6H$9G5tpdZ95^ig2 zTY-LX1==* z47O-~c^wps%-q~PDk>^h14I1$@I=LX1_lB?J~>*^)Wl<9Vc|R=BrNO%Q8v}0ND!4@ z1%+MCWB%gdqepFrT64mJ+CWNZYHHR{rulceZ^r(~L=nC?)qTx*2$I<7++?RMJ~Onb zJ&^S8$U87$*RqKy3AMJiYIc6>S9BYF*gk*6&aS&)qjZc(X4cLsM}m`HtF@Nk974H}I>!<%Xp&)uAby<7%O7d1I7Wn8_Nm5r?u0;rC$ zG0LKD+}%B(q~5z0X1TG!HT}P%J`ijK(%$&w=z)YANrU`!4-*raN%MwEcKXMcy>9OA z;cY=RtGMLtpmW<-0z8w_4{ByVxzl5Q2gk}CiBF9o+bu?~PFU^X`NI}0Pz}W@bjwOE z9b0JoiCpeLNpj9#G$@H<$G_cK6&Mz!aORQjb;lCTk8&o)#$B~x(%F-!AezF_P`|M; zo0!4dOUuhunyoi0Vr@>lxEQ$b(`ZsPYZ7rJ{$f2SDgRYSf!!IA7xbMw}NC<n2}tV4?o5flNcR7)<;jW!!uc8e@bsRypa{-Nc- zxJeYee*LWU0`&Jf<<=u0vF*2;`%dT6)q#xIt{P0F#WzH)3$~K z+tIAKd$SotJ&@C}w6($dm>eSHrv%}k(^2^KHRUzi<#Z<)*y;-@h*y51^Q>fSad zdIF*#*^Xfuc2h$V7323vLVW>!s47{QJJtT&g%!mfk9GI4V{7XcIJufP5yj*4kKQ`q z|LPT|3caAPZ~UF&0~T%#XbFp}3xTvxyO5QWQ-yAjb^hm(S!hyy?;bD3 z_CG!LSq)mnAAU|vuohOPQXpDYp|`Va-MV$h`5z2u0X5hxr{PcSiI|mtv?lrHbeEoi zpCH;2jRKy+uC1+2Nb#wXxh<$o0r=r9&qY$7KHYqFxLp99HkrdmBj_(fPw-QTWbC8s zaO6BU9ew@qK(vx^rWM`m=v~3sS!E#Okj67JGdQj|3{ zSpb-C-oO6}yUPoQ%svB0z4PKvcIa?fr#h8D`B?K#b?#ACrd&pGgw(){Zl~iC+59&D z%+a$W9p*%N&{>2d-P8eZ!V@^53w27BV3&>yBVt%M6iGrzI^25L4X(j8jMv{s**oO; z>AAtgw;MOui13Qud#tm#h$Rj%FL^upcGR6a<&Y5p2d_Y*0wgdHhP0t`AI!^sjyif^X7qa_?0ehV`FExK5^p45^jmEva5@o9f`hB z{R|K6(y&SnXrT4rhpfJam_>MQ4M}=yre$M3x(GWkJaijn@GP)luiaOfx`9a=nwuFZSRi5G zKj3TzQX7)Z4}JieX-GHU&cMi62CoBU2{5%1BEi_Z1G^-D^_7XK`dUHGaIRCtSvC^m z*5NK^$mGLY(8!1S)cA+!uGo5#hTleHaP)C{w?kj6@wDMLL~c6DK`8}cgve*uUvIg4 zH{Hffn+D>~eF8dx;3Rdy^3E5I6C@zeaX}H0r4*KhYj7cN6Ftq^S`3>U z6va})f*Sh+afn#O@qg=dHZ&y8Dm?|TWfp6QRSVcS0M^J;Y#mF5xm`LxH$#5^!21kR z(<4D)U;(mi-(KK6qmiKNQ(f#jvJ!$QZ_w&BYZjAU@#M)9m8u$eRQ@Y>x|dd0GXY95 zFIiF+DycU*Gg2ZBF}r(cS%^D!JI&?ff8X|8?hXsyt^}KO?dD=A)#X_briDl?AqoJ> zs!EJWs7FcLWLjQFd8Ty*(Qr{@)no2z_-R~1U?kRE4(h+qPIn$4Pv3}$2$f6V07OQ- zd)M@c`TqSJ_}unF!PpY$`Y0!(Q)9NIu)*Upkg&`snz*CVBkj)eEHjf6bh?U^1hj^_ zPju$yKy=lAVJmNZ>LxcKs{OR_;+wSwCVK0{#9~@6!GFeY3Kh{`{l9aMy65q{%RT89 zJUE4S)9IIEa zj#PA!BH|_#S%f0u4QHs{%J6wnEgi!6xkK)7>e~V-@=_`R(hY>Ko7C0TE>l!gwE6v` z*SW4HaK##vyp!vo2TBhuw3wdq#|ry>dlOw3UR7PqLir3c(`DHi^ChgT4yS9rpg2Kr z=7QlqP;44w)u?iEI>RpC zUJK{v!p^lpW67R`PhH;DW{RAK=|vb?pYa52Q2FUSfw|LfyE$C#45P6xle^lnrj2?uTwkqs2TsVTRQ8}V0-C{yIIvB02+L5~6r0Obm8 zpK@qPJ*Y6%0T6Y*!VMmD=MJZ6c229+W0zb$USg2&RC*Z(;p0z$gLl71aoDP7>Q75UL>< z=Ssv&hu(u0=N0u{8UFt z$TDlzJa*35DPDy)#?HvdXcum3ViImzo)90;fF9k@)D*gXe7LXA*zVOXF$S0hyo!%_ z5@KTLPyiAFC#BTVxnx$)yEX23v!SM6{P}8Y^YDe?b_IL^2pz{k6{p&pY+IDL2XFG93`w0Sx*tFY zr%#{0S+rGN-Usf;+qZ9%g%4O+JyZ!EOWwaz-u~WS9(>~PiH)N_wq16)(a&QoLDk*5 zkJ3zF8;)Du&IBS3`&6&Z7`_9afjp5RHz<0II2lrH2IEhexw*MXCB{Q=cGNmLB9+2x z^gMlie|^YjSbTPG%F>eX*qhx!N?gkDsN)S%3~y>CxIwgxa*2wH8ebWly`OHofx zH!xqgsfGKTh23g7z>b)d6w~3H%V5w}3J3w%--@Ipa{;Lm=^Q6@Smie~N^+dXSK?!d zrkmyK_6~e1P1}Gnz)S2zLUT41J=ms;D3xh7)gbdLm7sm-&=frt4Goh7A z7yWeN_B5Ydlcd>ic(xFG!1D6%)$?P)9?Ay}EQNVQf=<|$bx(I*n%+$GP#gh>KA*vp z7NZiaGA+3irTVcETuUzP$lC)MSmzJiOCA_oQ9M+J_3*4gj6#OgipU`H7dlp-S5ygvyp4GooV zzH?#5gQ&lxzry66oxOPIE|>ToQPi;XXij>fz#%~aDJwnnl0>Y8MuOTg!Tf5IHmMyu z%szblNaUh!08#SENoa+9yhC?u`ziDH!@|PM0<)*n7p<+Vb9aQp6#^B553CuWdN(xd z(BoTO`kS0>3*5$H(b}ScR(T=N@gRf)FC=dz)hON9aB*f*l4Ii-R2CL?c6Qixy_#*G zN<1tD>E648L5 zx(i6PRS^%M{WbWZPjPYai#KmF&fNgP=ES=rUMG2}JGG=Bl{-+H>j9StGlqiF4RHs} zVmZ810s(*p4X&wcYaDNMLYJVas{=Jr5RqDY=E;6F&48dcP~xvG71=}dn9H+nV2mlP zS)qK9>HP)LQ>xV(tRnFaXQ^8tD|l_9hXv`F^Q4pk@wLE96tgL(n z9Q4l4VqtJj7$JJIgFX|H5Wdfc=PuI3aD)_0Towu{{GuIhqZDK(rn;^!C2j-0WmR>Z z*KKx6PHDO?&N+_+H%OU4XGn9l^w%f?0^fu+d@9q| zhr6#ffazU?nUT$qi4*BDH@=*FcBtr-QliL0+9k0sU{3Ft80#oUWC0c063R!X)yc>ku3f+W z>vv14E;F}svTH(>15`W%Va*)#LN_kRd>lahF$oD(iVnP1jblFo1vW9Ec@ZD^a2<;5 z*sHCbFJASLzornOD}Nqz*4xW#cfS8u6s<-e6_VNtt5&8lAO@wAL)ySLC|(G_;0)K^ z?~aYY2R+d^h6NOd;tPR<#0H@5WV#F(!nv_V_sc#9Mm#z?TAF(3$>?aeD%oU!JP6#? zEEc&)fy12t3`N~HK7JL#4EZfH8nk{d1pAsZ?VF{D){2_c*HKiETyeYsXMuC&${_4n zYjhz3e2FB15JuejpI?(XGOD5EWN)oCvid0rnzCdj0x6PEJ|v8?i=a z&rZ`pY=ew1Q5_^4@c2OVXCMK7Su0PoHW+Bu{Y^<^N6B8CIt?>~_)q2FDV7qCuuYY< zv{-@d4d*$yb>7AIt9S<%uwtL@to7|+MW##Ul=XaGMn7*17SkTf`jhy~n&)DqnA?j1MmD`%ez zK5oB50|EI1;9(QJGA1rg98Iwb$n#4pf5Hp=nIXA2&0ingV0nV%11LXxnp*B zboBICt3w9KzFNaR#QvxPIu8B0+feWO{FYVhX`H`0v-+O7+ph&k{N=H2(FX>ST_k>4 zuHy=L>OR3r)6Ce=D$EpR&~1_ng?8ElAWRH3uq7A(3(l_8D{l~o6l)kZT!HQ+i%`I? zf%kt>juDoZ{i82WFCh-ni51H?Sa?G%Z*OlWR2)VkfxvJB($1a`^Hx#wTu?Gq&8dj( zq0!hQlQ%U~r;5#HY>}46I)UV{OiD^gEdy_iMRl-&(V5+wu*p;J(Y_FeP80z;WhAU? z!!JR(&Hh-foABl%+CtdC$oKD($i>;c**iDG)`heL?AAxfzxbGyKrduT(wDlhvL8_h zEfWRgGhG+V48#J!Naa?&GNCJ9x?v=p{&6BQR%9p==XWQZ*JqlmZ1}>^&W_CkT@6ii$*;8;|E?l@kR13UKn5)uA zKXt>E0Q8RaSeR!q*ZTVTGs(2*f84LG{t&E{rEF%|N_? zp7N}qK%7dY$2ljmqg@^RBD*&>>wj=b>oeQt20%!->;Q+8lRI@T@Kj(^U&qGgqe2~k^)U>U2SV`U{Fki_|LxY(ZY7k#{ ztE(@DrbZmXC;@kBtnNL!6Do)|HKdttC6Nw%1Px8iD~KIHPN>}>*pGLrao~WF`&;pU zarE_#uQ`Ibffms0?d_x9z2TMHytxuCy+0yLHppI(ojxjOwu5n>HW4d!?A)1!&W0((A?+>3m=UjTt^J> zJ%NHg=uD`BN{OfUq;DZb9nodHSZPPcO4MY(fPf09$I=&-k^%$SNrD-gVh{d?3@LzL z0}FV;F=Z3n%zRryyBzq3xS0^V%FD~?k&qyHv#$Prlkc01@4^KlQRhKRC>z8`p*-_g zP-0N3o0KYg0T|B>p?V#C_(2w-HnbGL2~ITIYfxyGqbZ-!33AOwEnoZfS@3C|J1Gk~Auw zS|jw8vqP=CP*>#_MnfO|dVBr)e2*H5w86YuTYmhDC@sgB2*Yf3SI?jI+{*$ZHZb>hs z?*%F2gG)kQ1sh{O@;m|PSWB=~K5l^vEsDr?1-BBrt?7+fXLXS#JUA|>N&jLx)F35b zIux2w_GOGeaH3T<2c@k4^P}DQbW~l%mdEmy<{NY4IzOaM8KH zHtoP6UEM2KX8}A}La-n;QD8ylPlsl>|F0O6*6~ZVMz>4*n;rwv|2I-gr&0QDe@e0x zK+6(rmcT#q$;olaf09I_6|z3#3i;QZ$rYTAmuYQ?D*{TfVzIGNF$NXW(sp6Aiw-S_ zf`|xME1|!CMNJCM4P60nIqTv=0;-70#=oUD)%yK&{zRm|EoEGijs#&TQfUX0PJH$l zm$WpvKOKtrkDW#DE4J{K$0SY*XxzKsVZr>nWLL6Gc$WD>m* zOM&`=boY9_=#B7AiBSo>*EKkJgSZE4*J^wp3&k@2N8m})Ec$I@BNyqs_`!qNV7ZQM zX z=s0j+F{gbQ7gD0-NHLr|w10mPh-W$(X@I0tj_^Cl7sMh7BNNxXt$r5L+8%=6A66{pbE)R7_vL~?Z zQ!W2NORm`{3#IfZW#9!2R+4n`_VukDu3toKzrV$U!p(&q+_`fdso0n4YML4vWTpTT z?lna9S`@=UEXdlSO;^F-$I!qv@O!GPEGN*)2av&pxd3Q<&tGfn={+%Vm1%(vxC(eX zw*ChkDC|PmyAxQ$B zf)eBpZ3Us9+SX!s#cZ(HMTpw@Bd$^q{C__ydoGKwfF5C?TxSu-yReeW{}W!{KjL?`}gkE7Omf)pdbJh z70fSX!YyIWa_#~q8u;MR{C$y)nV$#!o}Q+{B80mMFcbDkNLOmZhNYA*N4`Ol@kaK^ zP$4%gj299)REyQ7=Rn3chAkkvd3t8T@hJhlS8{uI_I4Sdk?SQ|rC~2pMfMgE2n0#< z3esj6@H~372cH>#r=L?Z0N(Lz zLQ!3yb}0d=rv==WF7SIEE4O8WzL(Y?gopMdCr1s4gFNH*;!CE(U;il=1ukZdz2^q$ zEM;FUr4*T{W&X65t(bd2NJ2_4_%(NPU5 zv9-f(5eTetp<9-jse{9S)Y0`hPoIu&H+_lA1p97p7zILB-fm8As z$E^J2%e};Gft+%kSRtm1N0D~sLCxWV#{wq=dz%|TY-tvxacA3P*05$e8FQl!X(c6# zmXpvm={v0J!M_nJFeQfg}dZg9;#l;+nH zkl&oLB92soAj`_0u*jC|nFzO}(Q2&agyw=7P5DiVE=v0v9{$phCFy+F;ol( zuLdEBFupnroOEHt7ob?mai3icW?zz@)|}5$&i~vWJGGTdN41RMX8$WBJOV<*)#)j4 z792M3(Y{q(TYpbMPx57bN~mz0j}Ie`3-!V&%!Ku189y|0a?zQ+>z5dVfXR3@$PPAZ zGDlovV@r!~N=nMxYFjU7DivOL{1N=H+<*LVysz=YLi>OGnix4eJo?`lYqbUrVS9|U z3gx)owr`3 z{9vqIL{EPcCJ*MGNRkh-OVZgBNOYx|kECO#xK9G0FF#@cbt9al=PbliNoM z;~GxblJsF0vLg(XdrFrC0sgU{!=wx0v#^tM#d^K-Z)rtJKDD3H1?y3(9D9jsUx=rd zB#BN!Obm!D7*xJx`mL|e5ADoqyuXh@D9kHhxH$9pJBf?a-yZ{l zlw!MO9)7tj{~Q3sBFa-(?zM90LcJa6%p#?AhliREk03V^*1>4r51irbu?Aaw3Nbax zi|G0E0DeHwTg+-!Mr}U6j071#g``$LLOHGg^Cm-dCV`rEHOv%ncaqH`!$(ArbTcXZRdB0jwN6Eu z0L6F>d-v)f(X?^LN`JwX*sI#i4tlz(3D{X* zojhsrim8hy5qo5cC|$$HqQ@70}^pP?G?oD=I1$k%$K#oxZRjmpm25L1M?HA1~LS ztZyKBNb9CV9b^d`x1H_d#K9Xy%+Cr%nv5ER0CQp-1JkD@eP>T2jIao{RTb_9p;~yM%B|et<_Q2rMV7g_n@dL=wb8G?3c(4)1(+~LETrJfU}7Sp zYO(^sJu>TEGC#fnD2|>2M!pC!UtaY+v_LvCbN9Tka0fD|bse1$_z76Z$&n`mH1PQo zWuHI#2DD5B=iF1B9KfOm*HmeN6!Pzq>+AOs*@|TL5dQJUUWm0Uxr`|Ra^{TtqWlu+ zx)k{FgNO)rLGsMZ&Mt?(K)frGx&&i8{6n4Aq)e`ZNl?V?3dBi7h|vmb{kP0yV~pxz zgKLJ4fkRpDO~1xM+~Z{+u+cQdy*;rAkM>1ffu!W^<3s$?l`B^!bELJBQUb*oGC`6e z4^`mOrAuHHvP{Ng9#nv4 zKXEtS%ipgk(M=>%`1Yw*+2v9aCo3*^9f_8gi{fN%7dQ6h@ZUp?u# zkH&6jY|Ia*hY(S$atxM=%oT#DOB?a|`uXVxAWbQ$?d-e}oeeJ|gSN&U6cm)q0eD+W zo^PlGkSL&H?+Fp)9v_q2b`rl6gYfn)-v4x zQK=g`_1yvc+eJtrr2jP2O+mI6vpC;Xt5>Tvi#63^N66V!GUvY=h1b0p0Llv50fvj9 zE!)EJBcfxvWeEpnD=5kUx|pi>BW56?=E<#$KDf4nTy=q=Ste-rM2I9N9+-e48BZV% zy+So`81ats?Ez--aolqG7!Gn zlT3yr3hU@$c?B8BN0h)uLhN7Hg?}S{;wr>=60ZIJcJ-m1Rk(=3s;ktCjCmmID=kch zE8(YQe_2YwNHmnZE3n~TEK|1QQt5)M3m!lQA^2pBJu#h}a59dHX)FM*EvkIKHE_L8- z0xL$9Lirr9U7)38A}>n_KbRf4UIoG0FRi@1ypo$A#O^i2cobnvFwJaHcsW(Nkd81& z96|6C8lERo?c26*ujuS7*;h!@UV?)iyXQ}+0aI+=aPrDf8p)6qd}sWkhcP<8cU}So z<5YPF55cY_3iHtj(imp#g!zlikUBOwo_!F+K5H}v@)0n0P&*_ZrpYTfgNKVSKzjBk z0A#2BCP|7i_LvjwPP_%9kEi~t%UF1>ha_f^tACpO0CE;1*i~kFs>tWc6?&mvmxX}6 zbdK*M9sA%xPK@2lLQN6juAnv(GKAAtf%FNII@@K8GbwO6Rek2-b(2&wnwpyI zYgUD5kZp_CYd#i@0HBlK9V#GzOX}0ali*@GGuW3cGfQuB(nC7)MxlgGh}ef8@RMZw z0uUx4en2)PT0@*3G-Vh5tm%Ka2F4oE4dWtrc|sBnE+Asl4F>D{#1rXba-#w=@ri%G z{sl~i4!Lo%8btO-3?>HaP5$+8XUT^5q!Fkti)CgDR|tDy$a{AqCp4TeAaaAbS7T>u&$ajaFC#Xyf} zn4ciCaffSgE!3pc?2P+pmlq+87|P~?A;;O+*jV1tVSx;dKjxJ-4!I7suBQ0G!Vs*v zIMgbib-G&xFD(YYL$Ak4YSZzztH>=iT)e!i;at#+jUx#e_kn~7By!Wt6iFyDru}gS zZZb*aL91Rznzz$v*KRq)xapJ`7B7Ckw@|)0v}8@vyc}ITlb7WQc2z^eaKZs$SVWjA zVVJ%V2`|j$7$0B2O+{K~`xrOoq<{BJpEd4PB2p&O!t+e;_(XzECH(-LsBWM%}`*8RT2iFQSJ{7IMx0nG9#)1 zD@ZVz<%W_`g}@wmyh>Cqr4mKXZUo<|B61;0gpa-yFUBOeL4?RqsLL`3$I%P7LjB2w zV}auVj_BlMQ8C)#2eHl%0aucmMD0B62)~1o!iD&xDTezcP+(V+<>~(XnTo{jatH&y>=~q=%MOw0_nmxa_CRk)Sr4rt^)ZonLDpq3O<6u$qkPV}OoBp}VW^cVq zLdr&bjs0Whh?hc!On&|3M@&Bp-h{M7uxx979`paj7k~oH`X4-%Mlz zPbSl3xE5{W01jwc1Ai}XM{{Fi8RB6n!odj%t1)k8WLJ>9a`_Ql5eBXJAs%14`YE()BwL$MrTT@#2ri&q8!#0 zwTvKPkovgAGf~g6_O08({Aac`N!u|J)a(f{7Wo`<6AeP9FOSrb%Q~>A7{AE2=+SAB zwEBBQkqtyRVqGVOLD9W%r@#oyjAnu^dW;ynP{cyv)iF^>{skK(XZ_}VweSAAb*{Xz zF{|~`-0W=E_wR=m>--_E@TZi~2Hhuz1JT-SVTPkbWtV?2P=Lub7|B3EtyH`op6CQo zL|+w6^ZyV~T;6~8zYHi!4Ez@XMf9n8Wz6u9;auo8Es9FI9OB|}nzw(~;$pG=F?H;r zs{yw~JZ9x^$qYzdJ1zi0z7^pi-J&X$rcf}QWFHU)GAe+?gEG(?y1W+#e8@ag zOZBHu!YY0nca`?eohEr_lGvK`^76{Q_V)d9a9c8(g1^HpU39oqu{LdS9yXJ+Ew+vb z?p*ML(LhE&QLS;^Mf$ZD{yCD;Eg(?G?CoRGu}NQzKA>$MjHy`rKCtWm>NXe+_N*;- zhoDrFQEgxjCfxP{hHHfyMFy+MP>!p)Xow;ZnZ7EFURB+&9mrV|4uUpj!g_`zu+p{C%b1d63)r{X6i9aS=x>5Ez1)3`{>;M#5m&m75= z3W&`lqXcRnMY+|Apd*c@O>xkZO8?br&=E=NzkxfL#B=|oZkHieldKqOk4!0*7}0=} zs;HFM4&eGa7jm}rrff9~ZF!V>3ak0dxmPnR!?p8L-diV&H0|F~YW8}DU(jht$`K91 zV5pd;&4^*=5Y7J_vdfR{w|1<}&XKePQzdtLaBy%mynR~^>5@}Ohz%b3AGdXkOWqLU zsnjq6#>prhxKVz#g8rFQ?L)a+5>Q)-_klLkjnp43`#&53;eL&Tx6|$HvA$}Y@|6FW zgb=L3I3W?xd;pF})5g%oa%76&u^BUqVH&F#Q^?B^bmsypC`T`W1Y$fpTCvo*2eap_ z6i9HIM1vrmnp}JZAgIj4%j*x_++XR^G&3xo?!iGBG|Jv-xO)Z=)=U7Au0x1rK{5<_ zg=FrDkJR@k!Ezx=yN*0)|A9fL05l#}P&|?fKml9>-u*8XE zn0rgJ?`TfuiIL$9&YHuHbGYSy_m=ksDGzxH)3P86QVoK1TtKrSFczAf=4gz+B@l}v* zMG8>%NIgHor?m7DB0&K0>;uw9@Qk>lWWXDXYV>?5noAjOF=@=O+(i@=k^v`o^^prV zvmMQlTg?DmpMux397%@02aw!j{&#*1X+%9g4%G|P= zD=eX(EmXtLcWhT1M2mlSMNY(P%KoU0YU!8o2^lG%&KULsVS9OmRZANWhr)@_lJgv% znGZ+@$UBcp=zY3EkA-3+lX&2Y-yCqA95zRwtqS9Q-kd79mrjQ~`R=*dnac*_+1c62 zEzj=J=?9@j%VAB(9XlWdsTV`-uoMjyZT2Us^R+EyEoPb?fe8 zU>B?v*Fu?`JV8hfpa3Kss;gKb8a27uZGQGVU^p{U1u!*z5GIt^f6oufp!C_mNOIQ| z!u@vJg@x}+wcY%Yg(ZdUD%!Y!kOPV8;%JlU5OUWEmHorMR`WiUq_`7^`~rz zJ|Kk4UvU&|;Erb7!N<%#ni@{7DZ%KOiO+ymRd*>C-!53|hhYZZam}O>o)#RhgU19I*NGFF^ubLV=lvQ-3^a97j8Q zS1@v!BngKdOvZo6%mDNU4K1w{Suey1gfNz1Y&QtAJurKV7+1)1(%(7IH^^)^O0f#& zl`$AYOcqFf`Oj@BWX>3OvQ)IR7$(VK76pi1L`39cHW5l;Ve_^at$;#=;0ZKNldr$d zs3Da!2GaVOMB2z&t`ing2o#4UerN38$+w||#`3wz}b39kEpnt+>?%g)LwgVwPW6#$Or3Z%WSV89#> z^v#<$Jux9mQX7O*!itqU-K7l9Bf4%KyXB>EUO+YJOS$%_8OXvVht6UCj2vMKWpbob z9X%Hp#Zf5eUI@YI*Pip^L6kTcxULMBW)YnL}xZ|@uO*?we@*G z=OVH%)F#ot$3UtP?>zjz2yUm?zobD7e(!j9hup@4TrigU8VMF5fJXcrxP=DCOUSQ9 zC-~QBNcLP`bINk1f13`$>4>^(rrDWs=m`@J%s3w_Y`B#u8{F{jp%qqFFTQl9PdYNKqRP_>uDd;2_ z4kLR5Lm11acJ8gMbfEYPK18EQQDm^E;1yk}UgDC#Ysl(7MC(HE#x`eqnLHDudOyLn zd~1xfoqk}Zo9O=_bE-gLh)MDcYc&}YeVM$c!pi}-j~+Qf;$8^5l));3ZeeIA5?k%J z)$1m?wEUa zUU>dVZo$JQemdgYkgExh^(GflZ`hEr(FulGt5-)+?b8=+paMkl>J-+yJDEw0bou0Dume zgRJt$|J;MIjGMde-mNx_sE`2;;+!BH3Du+WICom(u)EZQx_+Qt{ix@g&!Ps*!+X<<`!N;`o5x zckkX!HCLP2ad~!Xqw9-#=zo|8&9uIH;?Vc|-{A$_YNo^FLJ^MK6SL0i{gmOhyaTu$ z!H6ImbYENrsy_C5`-mULd&RstiCBPP1zsRd6__i8*&r^XI*S-;&J+VL$U>3k2(<${ zs;E*&po4K=EiS7N^sX)bfE!DUyPxB#0A{%NI(WkvP7T;l%n6I&&sY?ZJ#Yw?gL>Lc z&+VkcwSoU%d*>e4^ZoYm&tfQZXebLI=Wk;9t(cspQL@fi&gE+pVOf^Vp%scrOQm8% z5%n#HLTN;zQfyLaFB<99#qe{O$yJgD#C^ZC55>w29o z?@YDHvuC|jYuW=6i^5X6dr=e+ob~`wL}4FWzkTt|?-Tl`6F>!tnzlVM(q)luShbUl z&QwElc}arJ4}DRKCqobE^pK)1b~@jDa`3hAYS;~R#emt~_a!p{@v>M+c=>3v)wMTt zA-)d!KkzJju|i-vOP{T`KiK_03SycXS5r<^N%p(sne=r{&a+jQcGDCy02G?NH2qq& zN#0**ufEjbbO{tTU@zIefJ+kfEkO+o+DZ>5Wlq!kb#+lk%(BK9D0KD6B2SsRFSq0ixerLwdq_f56v@m=k)P1It$MEh~jvp3-26 z24i8Cs${}OQDEgYQ^2TN^~9k5F^y31z}Y78eM$7T(8F8?G})4qZ!LFjGexXLwAyD& zjQ>t?HR10SR|W?C`gwcsCHyZ0JYBNB_3dV@!m8v~h1H&v!G8L?2qDi*7)SYll#iU* zE{tRxuWnt>BXP`7Xrf#!X{_H^r@{hT3?P*XO7=UGP2Rk&so8aQiM;sQp&z9RlnYN|L-$$svFNGFY8m^_)g8?ipU+r4OVIll#&jL|fy<&9zP@P;oG*)I2|<&m z0G}5wIHH@_G9WhaWYkAb&@`L!XbGe;V?T)nKC7wZq8RdTh!ZKmIA0&U|i6` z(K}W?ibdBR;!k?RzR|5AtXkN#>dDO3QwhN*E|znIC@pZV^+7{A;L`rXyY0B-QCB|R zxUnNoLq%5o)eg#;w|A`Ui!~4YHgLKXa^)fFrPaOiKy9S@>$Ys!5)902%BRD60!o<) z*vkhfJiItWJ^R_J$(ELNZ*5Ea+^>752i~vr^f|Ta+0`yu}HvvSMF%~u^;bG(=~%Bkr`|pd4@J&#-S1d zJS}};_?La7Xa#fXudNQFkq|YoBncrA=3<;@>H}vq^;^9lhhReJ2>9Us;?!Qt zI3qT83!mwQfN_WVFn~+i5ACb2f|7mI@vJOSat-lvTW0v)jNC*bAQ(IhIGJSQGu^}}wnjlU%J7qC~mQHY_<7KDD+_}vS4WoygyJL1PxoYFg zDiRfMwtc`8C5k>~)nEjaG}Ll!;0}u4X^O;xVyAUfuMXz;0bNSGFyI_)`jD`2)5a;p z;7kmyC_e9S_gq|BelI6W`99SYN5txGYipoIe2z1ftG6^YURF7Nb>s~ulR-<{T;nz> zI=tZO@z*UEm4_gIRvEn4O{G!=TAK`5dhsl{->Zc3*fy+!jX@GLj-fTVe9H12m#%$F zYXFvvm}yRwPmM_)LT%>r_`+o0d>9y}Z?ZfRzow zl{DlN9zDCa_i=L2kpb%y&Dj|6yiBjcsVVkJol95t_Kp#{ujCUZP(F8}gHItprXTrQ)o+y}~sj643PIR5Gd=^|Hle z=~2DUQdy|#x#GUrzJ1X9r&}tr8w3NaXa|5uIb08}YWx6lp#pL?YSW!NcS3Q>%X|U# zY>gY=a^W`t_?ili{6In|eWv;BYz6tsF6eY}4PK`e2;#Qy2`^2uai>N3Wo4N+y9ek{ zSVb)9NyNfCq^C+=D2%oMrhJ-+D?2Fgm7l$THOV*q0{6WP6^V|!Bt!J9-q@O3x8`te z`}(jaMNj}xRNKnq?^d=zwDZDsbp?;lCiI*N3sSZX)OCN&MoD`niyf5f;3(p*g59Ct zQr)q0xupG41L4&O;h!N$aRwhNr$NR64h z8Fkp~dW7gzMj^3TIIlRn{lm9}<_M>e)xL;N`fpB`2-@kY6oWLbf~1+c=AB zA=MthU0i~-7+eZVp6;q;>3}ECvB)SgEE7!rD$y>=ZTrMBbDhBpoP~~&C^jy!=?Jr# zPe&GbZH~lbTigTRfF9RPZ{(4n5Tij-($pn;dTR!KMZZHToSV8pFa9Y5ybd$^SLyx# z$qnF-ts@}1YT4(|mK7mJ!GKTKIg-M&G7cRI3J-V8^m)D6#KJSLjPZUIZz?mWWNjz5 zn7S=(UgTTbHYW~$eAxTB(lEJW2`T$^bJMYa^&u)kP~yowRqjviUBxqN?b6nu-`;f- zXU#hK#Sc5zdk3!F$$vT@vmwIJz(D#^gfnB|*y+u8SASxZ0=^-tCz(Px4N4NXpONJF zQoBA002QdUq9P-+xz}Mxhas=wrg7=!6jYCvSakdT^q)*QZ=Km%+;*`}PZRGOLURLD z0Hl0cup^LhON0a*hT=zu>~-^-NJtl&8pmD+UAu0SND;!jPScmUcAK*6Yig=s6O8_x zbT(thexw<1q9OHyVKPZHjiO-#;UIrGxq68a=}G;%S}l8tFcaw?@F>ZDHxy5JqW)9R z%Q_M`ln~O;ierCKXN;7gJ^PE;GR=K1zb5H;!|1&hJ^{?UPunnU zZMgmbkqXAQ@D})$_pkIo#2{G^B4WqAD$sE51q*wgx29+HC(Y-cZ7;^*(Txu~C|Xq> z;aC06gQZNNzCF>paYlQQ*TE zgga?x_JCE5b?)?nEvW$h_p<7jRGiVJql}{lYuehIVPq*PQR(`iRbOLdGAa)6oODC3KTibCY`-++goQ>c)mj#F@ zt&6ik-A^GH5n&Np3IKC5YF=cD5v3P|)7xRbLx{7R!fIk+?FgXW_!-mv31HSQ*er&kbl!qpRu~PfdG2)fP z>6hqfuW?^Q34owNQOsQ3==aql3-QazJug%pYL2AgUE@7|S++%zB|g*et=}CASid!f zOhA~XWKt$y2bYJFa3l_Mi14Rc8LERsR@+bX@GwHM{Kb$?#n**`g03L3uK=lGFLY!+ z5o5If={eDWKb^3-m79$=f-Ms@+r!Fg8xOKYHQ55;&*xS^b0jmG z#t63I-EKCMElyQ#&R2T@ zFw|7{vY|NUWX1#+Fded0a>PVqU1=hn?TZ%{TlHP1|C_p1Z`04`pv_k^4eiVdxE)A zNyR*huP(2hD`(b!N$p@vwx?#9HpWS%($u=bZ{8ZlLB_BXh{n5IOjwG7#K}~)cg+xS zN@;qewaG^j5zYxKCoT7%URe2V*+V%tqJE=o5ZNEyun1s5DG^watcr8@G=l`PpYZ_V zYuc;lP3tHc8rU}#v4#IiU_uP?%(Rqvhx8L^CzM~a_h@AbPgkZboE4C-cFyVdQTy;h zM9-C|>aE9&2`CTS3{!z9Yv=jSf04b^gFehzZPmK<$KGM~p)JGgoLX{TPE`L{%#d)% z@BkLTKdKo{p4%B|cu|C9;6<0x-`leLc+4#F_~(E%5K3q9UTcWKR|c-lEt;hyFn!3Sx3Qj?O?dKN4_8 zWiD;lb-K7ym>r+^GwW8PPOeQ%5}Z|%Eb&tqjohke5PojM2qmUmwt8Ia$*qz`HhdbJZzZg!D?3z$9H zqpDG-0ux6)h*|hp?yBOm6b?Ng(h1hqYc6j&ymQ^!{JE!PLrnD z9=fP2xSpcm`N#+0gt^|x*e%4KG}Te2?l920?ScY-31u6Q!! zXV6}p^}4#czKwhBx3xh1%mJrMuvQ@MV-oD3^Ha{Rk{bt!64pQ22Bj61a_ji|i0+$d z{S@RMeWiH)=`NgpXm?<1bwfeN&`x2Kj3XYdemvCL+Rqapo~%3ZK`ue@y5ix5HxM26 z-#2oWgF^tYu@?eKaq}#@TP`D|c1CIW)!_g8$d=})88s^!8|S~|vUEh><&(cQZLV+e z%5P)|Z=fMmdQjIo-gPEmk;!WU7Sl5*pVdWBKQAig>cWnhkEq!OinXU_{K7IyWIrW@ zX|XH~pM#!4R*1{~leiWMNHCl=v!5O zpRfW=(na$!hZCl*>uD3hzdi!sNFs=ASR?YS6@nfd45^ck{Wi?yGvGeA*mRC6-+SG< zc9lLGrDBm;Gl!e+#ZYmi_@&Y7_n=4uM^xo4W09QLUf9vnU!~e?mVq57D{G{rA)}Ed za;p;uGqv;-#<>e*@~_?AsivaB>1MI#a<~u8!tt(^<_v*1w9bNviM{E{2eP?9^4lch zgVYrGu3U_7trdy$y$V)?;!>ZXLiQa2_6e=N>NQB;ScxKS<)0%D1d^xladJl2)QcRbOBYj%E!^q5cJ3T=w`In| ze6hP$J(^#Z)<@}q>;Q61UD}0S{@Dm*8InB&rkYDm_Q#y;qJYC6mD9ZljAIV!d)K^0 zYIRBfnrsVe?OoX<9jc!#5olDT(`X*Ve++#f>$wEXpXTy$-OY zbT(#IDDG+7o8f%(ZIFFpNCSuvF++(-4tMP{E*E z$1+k1TvfJ;ZJ@2i_D*Js?4#tzNEH?Rqx;iUF1;l)x6O+Q_b!nRlbxOY!N&=4722m` z(wfJ!gvfmeBin-DQ>=PXCG|~ja|I>-1_5DQwL`HRfwJJg{?nhe3!79@`F@|)W3>tW z-555s(*Yy0V}z*2T!Y6@*Lqtt7o`>&(BCer)^u8L{dJ<$^#zJ35*DEPzVMP+d%o@$33my{q1kM;3S&G+x4srPNs_tq84) z0bE7HJeKVZKq<(l-R4*sN0jsqNh~<}L7hhFfp*nn@s;LUI(P9E=XBB_LTXP4-iBf~ z7DeCY@>&>!RnpJk z7DjvbnCFR9t%4!9)23Gp4BQTIcu&e5&=8aIapzeh^Rz1Yv$+lLZ|EAKdAxt&J2Vcv zZD?Em45MF^wLrgv(G5|hxo3uw3lY^Y(3vxzNUI{VB7z_gFrP@!hm7dk z=~CxS1)qmFmgNu2IzwiK_l?k@SH)+}S5c+8Hk$lHevQ~8nM*mOFCKq-Iu>OL1yLL$ zSmjdu2Fd|QS1QCJ9Ze1d62P7{gC?yT8xXeGHt+zLzGolK*|~6sM%Mi*=M(Gk^aVW6}^q_$$n`qn!vd2(I1UVOI}>%7tidG7uk>(j(gi6ugBiGe4d zBa~IMy4R})PR8@YhgbUy^|{=;VJT`R1V$muf-9a>McY0}Z3M`Am-qs9Ld_Gd z)tY;qmrqvhH}4wZr{Alj4UeyP9#b1?gKY6gk_M<`QowEWOLTF_mS^a^-l7 zWnZjIo3|QQuUPDvLgPphN-t+RVPdiI^fV#6(s@o3U^yWvI}7g+*lXHnrp9VS-}Tk9 zt<~bGls4gkRLMtO^-PLV51AX_}Dm{N0{L zr_J9oG z)dt8ky) zlqm)JZ*FBn;Ww${mG;mM`sfD4Q#6k3GgeVK?T6_| zp%=J;Dm2jT)q4tZkp>_4JSYEB=|3W{I7(*qYyoVrJ7pN-KVin0w}}BpwX) zT1OJH;<@)lXwttv_}0DA=`2PhjTs$#ZxPBc(B$%zA(ELE+dT}sob$k$$EU(FOQa&f zlGdW6Aq#hi&e^jQr4%qS zOCH{kJ1h@NaB%$o>&HbOW<5RaVQ8)wSKj=S{2O+mjdJ{(4$mvHn;5I8)*<-rkTdv5 zwP|CjsE8QpEsVU#Y$wjjZoWDFA6b&($-f*^xXCdj`puPe(hGw=e0ic*zE|4KjwAa% znK7U_8{ABCiWU_8_1++~G0yY7R8~@}#R)aP(($bkeUpRp=hjVJ<8Xbup9!HXzcwMR zca!v7Qhzb*D@dT2EM0T;E!qyAd0aX~Z5l;OJP*EC*8M!aCj|OWE}iVRY0@h9+Cj5T zoR$(xK`ZCr*Ew_(&o)vC*KRfuXS~wp`A>Fhx8opN&aHRL^2Fx>o!{B_u(o%wwcVf@ z-(zzo`yLeI=;9^!r$U>@_w570!34Ht)AN_U?5E$q^>;t;d{Fm4`6~YZr=NR={9C`4*rs-41} Date: Fri, 12 Jul 2024 10:06:04 +0200 Subject: [PATCH 12/33] skip linux and mac --- ..._plot_image_is_same_as_plt_figure[linux].png | Bin 35197 -> 0 bytes ...at_plot_image_is_same_as_plt_figure[mac].png | Bin 34459 -> 0 bytes .../classification/test_decision_tree.py | 2 ++ 3 files changed, 2 insertions(+) delete mode 100644 tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png delete mode 100644 tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[mac].png diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure[linux].png deleted file mode 100644 index 70c1274b149de76157abe3e8aa4b2858492d54c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35197 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

Jzx{&@Kk;JtM|N|#n9h~R^kV?VW^}O0 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 TabularDataset: @@ -55,6 +56,7 @@ def test_should_check_that_plot_image_is_same_as_plt_figure( training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, ) -> None: + skip_if_os([os_mac, os_linux]) fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image From dd4ba109b7d6b90bb167a4f7d5912ee28b6f046e Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 08:07:43 +0000 Subject: [PATCH 13/33] style: apply automated linter fixes --- tests/safeds/ml/classical/classification/test_decision_tree.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index d25c6fddc..95365bf9c 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -7,6 +7,7 @@ from tests.helpers import os_linux, os_mac, skip_if_os + @pytest.fixture() def training_set() -> TabularDataset: table = Table({"col1": [1, 2, 3, 4], "col2": [1, 2, 3, 4]}) From 410cf3e81492016e6e7d6baf7be656fd48efbc58 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 10:38:18 +0200 Subject: [PATCH 14/33] update windows snapshot --- tests/safeds/ml/classical/classification/test_decision_tree.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index 95365bf9c..416e6abdb 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -58,6 +58,7 @@ def test_should_check_that_plot_image_is_same_as_plt_figure( snapshot_png_image: SnapshotAssertion, ) -> None: skip_if_os([os_mac, os_linux]) + fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image From 7926e2ba417f1830bfdc6b2ff6f3a4632d92e7ed Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 08:39:53 +0000 Subject: [PATCH 15/33] style: apply automated linter fixes --- tests/safeds/ml/classical/classification/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index 416e6abdb..3bc3834e6 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -58,7 +58,7 @@ def test_should_check_that_plot_image_is_same_as_plt_figure( snapshot_png_image: SnapshotAssertion, ) -> None: skip_if_os([os_mac, os_linux]) - + fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image From ef25c03737f44a9f6459772d415c9b61a2f1c086 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 11:04:05 +0200 Subject: [PATCH 16/33] added documentation --- .../classical/classification/_decision_tree_classifier.py | 8 ++++++++ .../ml/classical/regression/_decision_tree_regressor.py | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 0e37562f4..ac5ff0fe4 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -79,6 +79,14 @@ def _get_sklearn_model(self) -> ClassifierMixin: # ------------------------------------------------------------------------------------------------------------------ def plot(self) -> Image: + """ + Get the image of the decision tree + + Returns + ------- + Image: + The decision tree figure as an image. + """ if not self.is_fitted: raise ModelNotFittedError diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index a39cf12bf..d1ab4db97 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -79,6 +79,14 @@ def _get_sklearn_model(self) -> RegressorMixin: # ------------------------------------------------------------------------------------------------------------------ def plot(self) -> Image: + """ + Get the image of the decision tree + + Returns + ------- + Image: + The decision tree figure as an image. + """ if not self.is_fitted: raise ModelNotFittedError From b8b47f37dc70ba72a723953cbadf2463ffc0ec0c Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 11:25:30 +0200 Subject: [PATCH 17/33] fixed ruff errors --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index ac5ff0fe4..dbfa3edf7 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -80,7 +80,7 @@ def _get_sklearn_model(self) -> ClassifierMixin: def plot(self) -> Image: """ - Get the image of the decision tree + Get the image of the decision tree. Returns ------- diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index d1ab4db97..434a5caf0 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -80,7 +80,7 @@ def _get_sklearn_model(self) -> RegressorMixin: def plot(self) -> Image: """ - Get the image of the decision tree + Get the image of the decision tree. Returns ------- From d20352fb7f27b3e0ea1e7c8c3215259780ba2d7c Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Fri, 12 Jul 2024 11:42:30 +0200 Subject: [PATCH 18/33] test: update snapshots --- ..._that_plot_image_is_same_as_plt_figure.png | Bin 34459 -> 35197 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png index 6284ebc2b9ead006523bcce0b331def8ccfcd66d..70c1274b149de76157abe3e8aa4b2858492d54c0 100644 GIT binary patch literal 35197 zcmeFZc{J8Y-p}6q+3UA|>zuRJIcuH%%6#9~=epkS*Yv(3jrQ(jV-{ehP$+D> z^r$8j3T-fjLes~{fX}GB>H0{aL{fKAcbNIz80+@6;%Q&hn4F>Ay_|CyXF_I#h&}I^ zfJeGjijl~*WS z_)NwssbKQ4TR4*l`G#wbw0ih3_2B>i<^QiPi-P%bO*2^q1-6ckj!gD*diPF!|CC=? zXyU_9rRq1(UlIr{D%yBrxS8hEsZ*KkVS2jz_Y2F&$QaN@4i`TqUmhFt_&78qDlg9} zsCL50N0q9#Ygb5V>E^-*53W+U-ngG<5>Z);FKM>t?lTu;;N*Pc9=$n)?5}^do6J}; zGBPgdNffqsJUBGe*8AiX_tWz$&L<~}8WA9~-mx8>N5D!GY?`SWsXib-0Pc}sF}bH6DM@a-tn zSe&K%`t|FxmoIgwRC+Bft;u(W8jgKcA%2VVW!d}iQsb^%iAa#M%oO|K_W1Z`b}=zA z2PY?5U*8#lXl1`i2MH;u#_}gmp2V+_;p8+A^`+sK2`Mk%?*DU4rqpAwKKj|~*9}vH z4R5loH&7HOyiXoGwnI;k@zaZ|bQGmcn{;2_+Mb~H-O|V?_{EDCYBKx3)vxvx*|33| zk{>X0w6?C!JmBKNm)8=0J&A}&U-V+Ql)eT(aXBIN)YL$j$FDFJzB_4YVJkG|^Ba|& zoSgc;e399`NU7@RSe2WbtLptR;;r*at-h|ZX4F>QdJ1ua<9R9Hu-&zcqo@HUp^;edatUxTd*lnA*(3p%o+7F3)7Y-#@-ja zcoZYJRcy-^Yu5rPX=&$Q--hxF3U(|lE=-YiYt1yD{j9Mh)1I52u9s{XsCw#~1S>1+ zotzvtOH0epu&~yqlaUd_lDBB3GOIKer&f4$7BPMQ^zz*K^UF_;y$_k6KaFoP-@=l3 z{W^;%{k2U;Y!2Sc$dK{&_IBg_aBlgE{Gg>X_>TVH)1!yma|Q1i-i{%!w7NREOWh>H zEV*E!`|Kn3sA}IIq~QB~mrkx- zSxWP4Vq#)3TY*VX<%gM^(w>^;WbFcc`-`g^miznr`#cI16LX@~GfQ)Qcdvi=&E4VV zWV&tJxATrTW9vjx&vtcntsljka&U9A8T9+{1$OP)HH`gS?s+>xuX|EJGe!S^i;Lr{8(W6orm-CD zeiRm~v1pZi=J)U4`NhQwGd7hUKORusy0u;Pp5*RCva_yl_N>PVQ9AI9qv&Y20Lx1G zD(oL4M~w`#%w{)_4wDib$N^NZ%i;HrFO*=@`+NJpzt(6N zY0Xmh>eKvzH`lm$cV}$Av3$;EYc!=YCq zs;XDompD0FxzQ1aX20COo$t}HUf#Np9@~|Ha@ftyskb6vZQaWC}%DsGqvi5sR%&+gC=_p;@ z-S{yPTYEdZivt5r9RXXnZvFW2qr;cCY0sWN56R74hy8N#*)zS1t2gJq8jutdJ7qwL zY+9>g3C{+( z9zI;v)n(^8xUlbwNH;9FJVc3ftA6{|h{%j(!tYSE|Wihh9_Fo?dRP0=!DFJv4xr5^I>7j!r28;>F(Zjj@DQ$ zCT6k@1=6H>abd21c$jhDzI_iLKI|i9q_dpFX|qp21bx zJ$v@JgzKZZ*VA9pqdD~IMs>W5X-iPJ zy4N=yQF5%I?|S5u)mad)?vt8nX>Pc3m%jel#6*j$oneAoPtsE)q@^w8a+{lt7)5c0 zioDwmuWw?rv9USaStQeQX6{JWlT#0D2Dv%ozD@Ed#nHB9Tc5*j8GIHe-rVf>Yf0+R zp+gVL%BoS=8y5jc^z`(C@7@&;PHJbiv9c0TQxlN0$WFJA-*E6n)vfITJW*Sel=5q) zw`|#R_-$&WN09#2Yu6gvEE{^t1IYHr`aM(de4ENNzp&8%^=r(%J=eu#WSCZO^3X&( zof?eQNICMMq_vYB=U9kaGewq%k8iL+IEbpL8EjYhab$$q*48$x9r-vcE9l?Izp?^<9j%}p&v>;2OqpvmwS-AJ87MFJ4?k>{c3)-6Kn14 z>?Zrq3lCiPtjH);C5;d@!yLz4*U?e*#mkpX+3s&r!nB;@UuBl-@7%fk^=*y3liMsT zESS6Hzs+1N|K{ZX?IRP8>Br8*SMv#c$8~;w?Pkd^i$c$kYw79f5!xQ`vv#N{iMI#v zN@hhK+M5>It7wA$)MWqD^`q-IY#7~sYt@E>nz9KNzpz0vPprX8^Q>H%SQb<8qf-MP zgbm1`3jz-)ou2jD=-Fe}zrdl@640#;{1k~+V2*kfiXE47_in+_ZnX}Nj@B&8V-r2w zt*otE-M2NWE!*btUg@yAyEy9XXnS6gLhoZ=MZ7!SbsgSg@0CA(`efnvednpg@3)uw zP?E1~bp5L)Fd{K89q(ID!tskl3MdhVB=1N=<5%qSX~ zc~0cf$#DU@efy40kC>kr?=)}iUn{YFyC61b-P}ZFta+A2hT0mF!g@agE>4*!JP~HU zsexsmUfpC_v0?=lrXNV9PWtv~+Q7g-wBAg$ZDL|6ZXjr>6gD7ZmHGV`<^(cp zF7@0`)zwWw@5yA31;(@?4?%PHZkF@xf`6btRli#8->9CkcnM&so&;Cwy?dEz@isuA z%WmAbfufloICs+gyf*bmCwewjc7|;8*BVP^ggv;O14+zid3k;F)Kr78Gd3jnLxkQD zpfCTr@eieBk*{38u5D?_hrQ0Pab_E~IE8}U-%u0A(myajD=sdMZ*ZRMtA6M`6xF55 z#KZ(@5D^noKi2WU(anvSo11%fZtm{Ghx|#3`*kOJ%9Hc*V)x!u!*HWz! zJB4@1CZrVE`|sF6BcyTWBCni9-}?gR_hrYW4fgDLgM~+pOj_mnCPkEJ%!W{(NK<=iC(^I*RBnqD<+Nl&V1d6%2kJ-4CT=B z=z3_p@kpmx|HAy-8T0AFl9F8SZ2bOxSHRDJXPHGqANo$*qKK3n`Cu{ra70U6RVp%K zgn5+0wP1xf$KY|)YQ~xFRyf?p&8g38XA_(#Kgor zd-jamGXZ=1oT7OF$>moD6QN6*rbZ zJh1~>Tih)c*N08b$jVy#Hf?v@<;!#^FNBtnT}SD|3-Fs8FI9GZD+aOaqolKUtajZ34iV zhO#g>vlAPyO=6yo&vn#zupT%+x_WrX4C4w%}zN3oIaBbNn^6lvdC#1e@B?IriX_-UTS0Z=8YTU z7ft~sld^D2JunK(z)nL$Gx_5O6>uUfvc2s1XC;TKU|HuA>x{lJJuW@ZwbxozC~ zYr?D^dWjYm7B)XQ^M*1270RcjnHXZ2<#g3Gal&pUGln%N^^V`3c4jl&> zOuc{qX-|)RhBBil$EsCKo}Qi^g>=i=?_dXk@5+?Ez9g!BCnF;g8)5zZ+j35a4-<^Y z4I$#sQv-W7HGSv(L3Wg9^5L<;#upNcsC?*jTmT?bpRRk#p3uMc_caSz_|~L&MI%U^ z6d!Efl=O5)lr4bjLTg3r#x?4v`B5^T0{1uON5n;4R|{wG?boojVi}wX~TLjxVWoV zBWdUus@}fk0y&!<$;#_Pb9Vf;oPzG=b^LhNbVV^JVvcQTqOFCR^DwX>P-naUYT$fj zK$j&KM@JetIXRDx!ew8+d?AJP!UdMSH&jKh=X`_UpsUMp@@rQl0AW>K-Lko# zm);I4Z`?>da6sbI%j@TF2Q99`9)ADi)CQD0*>RK~HPtO!97o%7P%D?C4>V_*%l#N_ zH!Km}?*F6e^X(w^pr9bI9#E7u+UMEppadjT2veyolX{`Eo*^5=c>hcLOz%QjB*zxC zRJ%1fT|wwF^@p0X=wSc`F%@W65kMa=372L#JoB|XlO53B-uVWN1ioyt0f!P_Z(-%u zG}+A+Ne?uV$$qyU%uzH>4~?&}<=uw|hgQ@_uZHfh8m-abhH8Pu2Yo}s2JE@!$G)D! zqodk5)Ofqa0;cB5fE|tMn;`-Kl-e9gibyYjQqU41DJ3<4x9r_iQ&Z#h`IR86&^9ZX z*!%xca{P3pqud0}uUsO|58}4`@eM=+Ae)I?zr^>+_G^q@V>(_JPjX~;?dvFxA z8oGgw>-O(>>M1z&hkKrEL9OT?8Ht*loRlq94*dPY`*z-k%Alq7v64+MU)GVgd2i2Z zAU+%!A%dx)QAGbV?9k`V3Rkn=chQ!#8>RHBd~Qh8h#Ryu7OFF7R>k z^G9T7%VX!Iy-cPviV4-#N6>+yOzX6NL{b+Z#*Z>$Z{FTf@&EDSMCR92QbIXSuTy0-q%&=5^<*H{N}*a4f<<{4Ftd*6Sy;uU&Qt#W1CVZX&>@-&U7Fk`=>F+f2LuHC_}aZ1 za7@?V|4|p4FhvQ%>|s~eYBXQ;3Wy`sSbicNK}RxED@jV?v&gYohN>=a_mBhh@_oJ| z-L=i0>)K!S_6jdwAw;b_v(Ps&5z8*9)(7e3A#`8Jp5a%n@Z&IBJ{08ROS%?BVSaRM zkl|?8Lz+GplN+~g#SjT8`0?Y%^3~nt0h@bHeHIKmxO(^8((GU?B^bL{9F&tNOJPYz zJUj><0c&7bjs2sHCt8o)1ED4S>eW?H3WwT2W&80Mt;+pXbYq30(W)F4=YN4K)`OPF z36_EmL_|f^G$zO?AAG^Ds;cS$RcUte>58FF2oi(6ON*P^^7h9Zes9z9dwh?{Ba6J!KNtP+dxrKv1|sgZu#VT>j0IG zfS+U5X}&u)hw?{8FkWKR$<>q2bVj*2mz5=#YhNyFIU3u@hx1tM-VRL1!4;XRyE)q6 z*0xnai@&6uoShT6-T~#msR#_Pt2n)?`?0TO-I*=VwoK^^Oc^4=O7SD7#!{ z(;r-WP*fC}mX?~R2^R?bKIX_Y;q3x=6Hv5SA+mF)S_*Hzj>h3>HwpAl)*6ZpZOY% zrL%@Z6?~C0nuO4D}w{&Bx zFFVYJvp8p@YNFTStAyS`4zN6Y5eLknCEeJn;`A028q0$Vhi(UkPfmKhxUq#BeKTYYZ%AcW}InaZW;lOX3=m5;u3 z7R!N3_kI3+o(Q+l_=exzUs3UUL~edic*$s3`6OCCg(4@HvE&;;vm|HZ*)~<5>z=N%Z#V z(RNN@;nyDxcaWp9e*Jm^6s>G*oSt10wW>U`9ZxkJWw+IT9;Vj%=kEb)O>>m7T*^>R z?4I~>0>4v&)dPQ5p{A62_SQrFau<|FnTK>DkOpj01K)_C0DxAspM&L?LP{4o1T77q&heC@o~mKwnWkJ*xyHdkhFYO(OW#ty}K_y>8sR`6gL= z`3+znfC=-T0W;mcjt35e+L!wi?}lJK+gIOYsWi)DI}M##*<@>FB#mm$$Tp*UYrc4n~1wX^KteGn&he9||iiJ+t8dXTt*M6C@xx@p9B17;JXz!D}e8(LSSX{cswpz~u<6 zLT7NUi{dTrsps2&ng)jjk|Gp2r>bBYRZvWn3c2z2`-Z|}oy9EZoqqGP%JK>dz+oq{ z_dT{~tB17$+2sAhW8%aPJA0P4$fJXcfaTO(m)!)na>mI{N^yuSBQ^%?5UbLof_NJl zBVGatfDQ8dE7m~jp`~0DP+>-`(la#NNdybqV>fYjXUQj<=DFT&%skF4UtryQnq~Ds_B|=Sjc>33R>?I|)mbD(; zj}o5mSAeRxhJ|k(RbQX^)oqPfJZL&f#oX7eygPNNsb_!_f9!|CgU59i9fr~e=ri2? zc=H-TLGs{-zkJD1t!Xy|k~`t!bJdEQvvtECF5>AK3li&qZHI=d0d+6xOA=*Fj3pxJzmCB=!ivMnY?oq6HE6Z>@C3^D6kh9%KfKn z&Msr|TAV*cw&}Wc>-5mM($XZ+ZOjEzv|uL@`wvG22K$cIehwN6N*mcLFxBzq*yzDN z0(5kAi0J}B>@0K!M|5E5^P6BYOyd0x;6?CnJ(->PG&>QnC4TOO9iVV9l(#dp{mTi` zhFC&u>ByO$fEB-f{Q`rog+)ppi}`tkH&V^e4abjkKQjOM`Qk-Z;s8J;I{fZlH1l2j zrp&G6%kUAZ-@M_31yF-_4N#piLfF#?4|#pJ1Aku4)Fy_Gysx> z;-zU~pY#MR1rpjzP(55S${qAH04%kCPz=evo zD|zP%fDe8g`^&Zm-Q8_1MY-R&hcY=RY#GZ+5hW#~j1Lr%r1=Ez zzi`^77$ps zZttIf0Pz3_@3*lL04&;TDc?yp{uOw*tgMVf>khnjmp1r5vZtR? zb%eJ01w(Kme;-eM=i`&(1Wy=TUB8T-oqgzMoPHW}bRa}WcmZqI?B2VVeWjv3D<2KxVBMB2t6sf&r4r-%{4dF8FJ9C_A|XOB>#Fti_)*_w3189}bpGN(auH4)7l$38sS!H1>;IDMk}ZixKHl{j4GhSw;73_8b&H9T=$W z@jhQIBGU#5fW2W%rltV_xL0eMNCpMtzLQmdPSxM0T#4A_U!o!h(J};VTLhvcq!tZHr2(><3?nhMGCiGLa1|95HF{K{`B3cb<=TMaz2_ja@R2Q3tRNYu*Ecq1_qF&?>O&Bk zJNWm)o3NMN598zG;i)o0X!E|`bMwZH%!%*cA|$82X#G?xH!qg<;VUCkBwb{FhmptLP+m|g8Rm; z4!*dO++6o#$BrEdF_+PK{&*T(yC*nuvMubsJbIM5VQ1@x(qaaPpX=jqSTt;M8pkT71$u1t&ZiAm6+sYs8fk zA9r+q4R0a;?04Ee_vMVv>EOrS&dWs9wV(BZ&byz1YlFd(T0$-fci>jktGD3W+8x zoq})j{NJqka{pLqRB=nd{%_MbYZhv+2ztxOi3Z{<8-hU|R#vtJ;KbT-e})ZW(uc+sHL+F8jCc*AXlzkBa9F5PX66bloEnOAQ%JZ zMG&g0dSdvJ#{wE4xCmYvaJBt!|&61CQ-Q5`r?FHPsLKv})b2ia}g?4ZLj9)aBj z910LFfjpKxK(x5KskLBL<%5!v#4KZrULQ)BpLO2&-B@)lyhklWOH|d=qAp#!w0;~) zwZ%~n__aKc**U>FQ=qFNJZFhU-=_Vsv9)=GQgPJH_QX881aO=-6t%LqCy8&0V(0Yk z-k#Q&srg^uX@lP*j#NC?mQeqD-!7OPv{o#6O-Y@el?zg&hQf!*)K0c>JIo|b4P9o}E4V^oV2Mbr=AFEVvcm)YcK`&f^{cI=eG(~1OnEeB8x-xI1f$afuM!21 zFjHhEn%mpY=jG*PKE2zn=lbT@^5x5^J9mmBrh$y%+T#!Q>gZpHdHpX#L@Tf4j+mQs zy6Qy5Sf)ZkOj@^33uV3l;VBXffR7IE9=$ovJ)pm48CGimZ=VD}LCG8;q_VBvWG3JY zNGK*QuI&9$ucvx1HDN#{*iBbkn+~q^m94((2&JW?qx&)bfe!_ih%V%XKFiW+*qx{7 zbMj>P_3PKQ3~xTiCPb(>`|APlE0P*O8Y`*5Pd`2yZV-H*xeE+^Q1uu2E-((*RvHq%;3*R9g@v#AVLP`is zgYITr_5oR4##`G?5gcG%mPbwPL5*3ZprBCpm@#sM_CidOx!Um={HYt;PMKKH9Y;W! zWJ=X%`{=A`t$-gY7k{(hZ4q=wfg4Km49f2P+h?MXT&@9#c(DoRiw>bBNRm%p{X7?8 zzXGsQ?~B!mC)wC@jklB++~iF%cmQnT<(yk!!OkPcTaA`BR8Nvi$QfN&z4_=JlnU?B zGfNA;H?{|?1Zz%s{QYJ``nD$wmm=b0bQ+r8BFO-RBWJhdruAiDz{GXUkYpxS5sB7M zU-pZcFmh{V`li*nBT{BAs9(GfdeX#`@9ap-Aje#%=FaQzX6jos77tRyETpmnO;BN` z@Snz)!{pNxuWuiBl`TRp4h;#}Q5N}$cq|#F(!{EM3ptEJlEsPG_UQyHX!YPA8$`Q&JS*tqj!SUUSOi;b_ZN=T+fD-60Zz+&$iv3w0o~F0wbg){ zCvDCr=J7&6|JXYOq9ajm88>X$K=31!NO5R0RJ3poEka)VCngltPL8d`J`Mx&r`k`2w)k=pb==FII$76QVHoK z$S2g?3G@!-GxL6gL_%o9(r~O?XBUBIX!&S`ds}ujU~MyWIua9xH!FGO_ZR6WNd6Tb zA+jmbc|fcUP+SP)K?F}^^XAgG1z{Y_yflk*9&D}b7h+&ZIAp%kT>T(?va%BhpGLE` zwsvjTePDE8jVNI9NYd64lU`AfZ8Fad1RJEMU_fE5?N3Bznhvt;PEbFD$b?z$5*j>$ z@?m3JGJiy)iAn=vta6OQN|lULhIZShj3@%RW+`PHrM z7oew-01X^9Sf)>rs&SE2Ku9432%The{@Q-d%+!=$k)8u=WSnGsWAdlwH6RtiZH;oOrdf`_kLBCo1y^;5p>8)9R!W&&{i z%{sy(B8Gjc+$sC%V8DTV=pYzKG zhX7WvgD=@yTqmfC3QMrL8?Y^iIg4IJ+`f13Oiz|Op90^y zZ^Y>k5HQ#IRb9m?x=h^#qbL5;BVi!g+Q^sU!Cg^tx462>Uo6Gs2F>Z{!-o&wL8m3p z4&Wj#KAs*{8_eY3mBkbAP3A1SEzxw%QtRxr8j-$Fz$AsegEvgO~nv=iKxI2!T-Zt zjNEDU3`jbOiu*}|gs^)wyHI#d@IZjQg5eQ3!Dl0eD`K+B4pkITSuse$`va$Wfv9Bz z8M5NyILWj?VGuBds_)k|6q3TmeuqekGFbwcqkzb zi%A~GnouU$sEZK-vbSiDegw#MaB&I4;`L!9r}pFX%W(+_VZ^z~4fsAiU57lM*X*R@ zMQBmb{NKajN_#DtBLl<-XfC#G+Zr-+fpBTTsqY78fBiD=^n_#u1CEbqI|kP_GGS1m z3Qn=HiHX<;NEQAfDk{7P7NWsbA#_V7mrxB2zRVfNVL-(1)TwG@B_O)bVz|R)0?MqF z=dq0p#NR>Xg^j}wUlFv%5mH0p&Zn?riGUvpc@yzlu)Y{zoTRHcdl1tGYDVEimXQrj z9^pJldBW&v#07v6$%arWiNfNa_X2|Y>?ko%F_{3{gCWf#HURpc-FyZSxaHvEBpHeG z2tFIS{=UV`_y=OKRW&zr;8gCozxO88Ig{@z44L#5bJB-3?5U}r%mP+@}rh9pB8V(RMla6HYh8cYE3 z*!~i$?-yN+EiNv$%6ABX8B+uSG=n07tgRf}h&r$u9S@IeB&E2e5Z}R3EnLK_i-5`w@q+@S? zt7c)8`5($jm7)qJK+N-!C4#dJt&1O}8)l#rkGAL7ZU$B~MoNazFC$Zpmw6HI1bel*t!*XPg7>t{{^{X2;@Bc@_KDfCN*3J*VO6VQh=wY4|O&27Rb)(vM9m*8_H|WbQc(0*|RL z??a}M5q^AL;$m@na1GN(l-%V1sF(D}H~mSmm4Yf_I))vU4*}vUs>hsiN@x12>4>I? zM~KOzQ2dFbJx{E&lzqoLmq|-YgJhGL6GY8-rRk(6a5}rWWsV)cjQH_|3t6q|Ev1&D zrnH(MiWD=O+a?{gL8GP>nQGHA-CbRcPa3bUlFu=OIAZ{5z3FD#;^VibRp#Yx{z(D; z{%Wv)ZKZwZxQz!JRsk2I&ARMuK+_hLlVgGOrVI3uQyK@?8MTR)f+!smPGPofDLZtp z*`cKUZYTD%pqG%~ue|*eejIsCCnvE##3JA)D@=}@2mH1r9+7}yc8^c8O_a~r7nj~; z#$Kqzlf$49gzXg25uCE85D_@mtYJlgAu68C2a%L^76R7u?2GoJ7n@=%V~c3upIDi= zgarN4uh&7BZrqT+p7Eupd@DRkl1b?Bh)=<`Br`80{sF>3Klx29kBHm^17pKqK<8=S z_4gdwp{t{v0)<$A%SaL1w8`S=DPXBGN!<~#`nQFmpg-AOFTzb2?uj~{5^Hr{#h(%m z5bSe+SlY_UI}RUCAA7ZpLS!clh313xbky|&U0qQRd^Bd0iXupu1M;q<`{y{H`u#%& z734gIzOwDgxS;Mn^qUex!jZHjbSSgV%7+iFl1ID1wzGU1oc1A|Q3JQFQGVimfjH(s zpg0`IF|lxe@^&%L`^1UR#Ke_QM9qarHZJ7~rHvE&7FE>|b5I0Z;P=o_P=SEA&LcRU zJ)U)6d^Zvw=(+I42AUKr&Gcz!QJG146;pnX#;l9+q|Rbuk9b@Mo^xT@&EEGSZV2Tg z&wDE*U_h~;oI&$&j3ca<)S^@Y?P@VXH6f!7tpY37+D1_U^6KmB3#T(L#v$-&Y(N>k z1htXOoubS-&Q2oNfFOAavhLo#pY~Or5hT$Uq7GfXDs%maY1^0~Qpt~eMj4=Nl$|X> zjQuGI(IS5itZeaq30oFeAl-W_p#=I*sExJ15HJ^22;=ZfmPYulO^nD;WcK5IOPXCK*Lt(~w9Le)@WQo6Pcf zX=Cic<|tDP^1pf#f4Q|^l`Fr#Ve@9o+(lcA@4`O4WBz?TBeMnMTnq<16J+%tu6)j~286qjA1yblyF6)f^tO*axj&@~a|2}^H zEdD>r{v9Bp7~6Z_DoGvgt%wG@POxn*d2)ZvlMyU1GjFz!kB|9B@eDqKfFN&p&HX&m zQ3yE}(g+tmm;2KXcKcc6=FeLLQ$SRsFMc2?`K6@|BnuAy4;J8rBTvdV)Y>7$ zJl~sbIi8XBXCj;f$_4RjVd9Zt6h{hK=I%FD}Ikqhd*0%1sN(yN(5wNxg!QH4Qp$g4txZrE#6D9zVjqI zimU3;+QkJ~7s=o}6J6R_S!6u&6np5kruRbYgiDSXPTt90z`H@Hhx!+WPy&G5HKCd$ zY`RxSa*yVngHNpP*d6mRp1&TEp6o!YH~p#Gx3>;XKMe(MSViEj)GlWi|NODKx;i6<3BS`0rA^E4W{Jn^v~7C@JqYQEKOs)AJ&OS0 zk>5O%S#_2B6@KiyKF~|0vMs}X3@Sg|LcZbVhO*V_lwY(%|I@s#cG&}X1V=Xq_#5mQ;B@EBpE!+bj2n#l{GdJLAeN6(X0$lS@9&d&j! z8y_xF#>t})`<9mScRw7nbkBM1afw7obo8EtWp$oi4?}Q7DZzG}J`{*KNs|3OoZ_4+ z_Q1I<@n|K4^gvki^Y?GeIgSBkz_xsV{fk1|1uz3!4P8F&=FMn`h!$!`p^}mi1`3!H zgk_Ry#~P98(8l5on>N)~E-iRw@2?cX1gzff-RD3&k^4mNm=x%h$u&S30DL8_lt@-2 zy$AM3yi2>saK>pUFcgi4uE2%#o`4RzqR*x9r(59+_MiU5*>!)Szm=DvFP&amn4x?$ z3~JZ8NNw@k6)I+FY+43D$?&(!8j>+zk;#6Zv7n&9s@RS9Pt^BwtnAAFY1G%+RYf*I zP@Dp9rXL%af195Y5;fNSu2XL(^o5eBY|9T(+>?>%AjUyyX=$dmXo`(f$hQ&WgCX8x znL#&bveV#H$~KvEv?d|w1Igj|y)*$5?LZ!o;%9xl02M?wCjA&0fIRbSh_536t(hP5 z*dG!x7s<8)zyCP`@Hox5(ImnxVp*fRZU@SH`We@BH42m)u}l)L`1^bZ`S{<*K`>L% zZltdtg+$X|{Zo1^lVn^mI)9U-iW#B~E<(%osF_bu2lB4gTU`H^SGh>8GMF0c*Z?=c z_UD+*Uo(^a+6K4P1;fL`$Sc{(7^ESWPY~t}r}a*9atKlm{jlgV*`p%_$PGSb6QLZFGcyf%(q4U4G)U3g zBGo4Vv{HuwNHTp0sl?CEuMeUb&}3w$ws?weC^BWOj}6s-(eFP!wT$FkvB7Ox`!@%Ym^o z;9>&mQ5G~YC_vOI@<-!P8>!O+fND6iI{`t-5aeOk0#?@}@vNC%Tp2%3!-MjWo5?n-in&>x?K+$+>NTM-?ZUJapH8zb<@{1Lu~ z9l9JwTQw|?kBv1PoN;b{e(|ood&5ggHo<{Va&MEz=FU(9!jxT3*83VntRlD8s0V@Q zDmTJ2=|Epe=-RJ`k@4) z(vmqY_=HuUU*^Ru%owL42`^#QBvae6|hp z!qKBg3Gf6zIxx+nX!j8QF@p%=ljLHC6BjWmL)ze98We!NaQHhhYqp5(rX=VvhM-N0 zqXGaVLRF&y%}jU{9mUVjueo#Qed9zSvCI|oNjun>-E)n#-!$)~Sxr-z z6WuM%%u<{EqNI)?76Y%X9;G%07P2N|h;MJ8Wpc&e>_r;vN-}&Ngh{t4uJXNPfJ23A z3Au-S%nXxMIAA=HDUcB0T)C2gExK{y3!Y#Y2Q9=ug$J)dK_PY*M~&l=y{`?*LoldWQ&*SPcm^Q`DyWsip+o1< zxXE<`5M^dz`fze^+%dXHjb_6!NYOojRF^8MMUVfe0wj(;vJK#L>pR;ZY60#{q+0O4 zzR|o&UHrwYG2fv^-mv=8q9U{OZs;2!M5`h76Gj1fA&}t65Mg>z?|+RahQKe?`XKFQ z@MmGxWA&fHvLI1>JbBrchT2*pyMbJ~v<+civ!$h|ehP_fOvNKSwjx$oqaN=LEs=H4 zo|pP_K3}`6lc#vMFY7|;x8rv2>F;}fjI^>4$p<3~ydz7Qxag@5r2%&~XkjHXyKko_ zI}4IGEdjX#^?& z?Qqr|$UGJ}RMV2S$@}v%Vxi?Grlwhfm*Gue*8;_x-wou_dR8y$FNi9X>71tH!~OSI zWPVRja3}`}-lI<5$;x7ZT8Jpb?*2uRU%)uPoxHpi(5j$$_Cp)?;V=08PuD0pBJ)qo zhIRWZvW=Foa)U4dydMOky3ZmdqwN1<_}{Ki5)&1rA^Hs%D>1Yn=ifmIB|rVOw^Fg4 zv?1nlp6$!#Gm(!ZsO~V}W$_%dD2I>`ySDaI8_9Yq+cgn43c+xc2n^9=s_~=+%+D5} z(eU6=(ytd{3#b9AhP&kMtj@cSL3J0obX5qxrLhlk2G<+gs9D`L? z;5%WD8w^<9R0ajXYcQFqmNQ1_I=5A-)T2WTgc!T=BCKV+t~c;TA+*VDtsrsO{@(Wg zYw1ELjMfNdX#GRhU%66>6iTA3lju#m1-d05h4xQ%WBMMAi~fSH%QkoJraF{M&C z0Iq$wJol8p>b-2XbcJGau1c{a9O5gf`VqLV;h6#=f=`gC3q$xSyJ*SQvs@Bgw+uxYU@b=2Tk`0>vVabu zq$Pj*##OoS)3)qLLL4PgcHO#_u-l7;?r#IA3d4}@eaxotB4}3wBmo!5L_$I$-jziY z!rh*q>dMN-tO6VLiVnZgBFZ9$sfh!C@XM$~TW8;lgbX(++5)3|A5i_MXy#!sUx(ip z+(m|l6XG!fTl?Ci@MtLTbwGy(PCkATev|$|TZi@4Rp;H9WGN!qwUgd+~tED~O3GXu*i4lc^8pX~R8x z>JWKQ^6c40=HLm73T5JUJMqRJVw^m< z5XiG@D~ZQxMgd3*-1Q5gP9|ie5fLfr41A4YLVSR~-L~TZwS^;}mDQLn$NB*S6g*

Jzx{&@Kk;JtM|N|#n9h~R^kV?VW^}O0 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 Date: Fri, 12 Jul 2024 13:05:27 +0200 Subject: [PATCH 19/33] removed linux from skip test --- tests/safeds/ml/classical/classification/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index 3bc3834e6..61106a252 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -57,7 +57,7 @@ def test_should_check_that_plot_image_is_same_as_plt_figure( training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, ) -> None: - skip_if_os([os_mac, os_linux]) + skip_if_os([os_mac]) fitted_model = DecisionTreeClassifier().fit(training_set) image = fitted_model.plot() From 9bdfadcdc0a4ba355a3d7a687934ccf8d2eaed7d Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:07:02 +0000 Subject: [PATCH 20/33] style: apply automated linter fixes --- tests/safeds/ml/classical/classification/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index 61106a252..7d15d7237 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -5,7 +5,7 @@ from safeds.ml.classical.classification import DecisionTreeClassifier from syrupy import SnapshotAssertion -from tests.helpers import os_linux, os_mac, skip_if_os +from tests.helpers import os_mac, skip_if_os @pytest.fixture() From 5c5ae1e26f044777125cb73ddb42950f4b83bcc4 Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:09 +0200 Subject: [PATCH 21/33] Update src/safeds/ml/classical/classification/_decision_tree_classifier.py Co-authored-by: Lars Reimann --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index dbfa3edf7..9b58cb5db 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -97,7 +97,7 @@ def plot(self) -> Image: plot_tree(self._wrapped_model) - # safe plot fig bytes in buffer + # save plot fig bytes in buffer with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() From 64f955ad0eedf0b89303a26e78f52cb115c678f2 Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:16 +0200 Subject: [PATCH 22/33] Update src/safeds/ml/classical/regression/_decision_tree_regressor.py Co-authored-by: Lars Reimann --- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index 434a5caf0..a7c284a37 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -97,7 +97,7 @@ def plot(self) -> Image: plot_tree(self._wrapped_model) - # safe plot fig bytes in buffer + # save plot fig bytes in buffer with BytesIO() as buffer: plt.savefig(buffer) image = buffer.getvalue() From 8c704e0544e076431a0879ddbe55c4c722c400aa Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:24 +0200 Subject: [PATCH 23/33] Update tests/safeds/ml/classical/regression/test_decision_tree.py Co-authored-by: Lars Reimann --- tests/safeds/ml/classical/regression/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index 227332f3a..175f8a153 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -45,7 +45,7 @@ def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leave class TestPlot: - def test_should_raise_if_model_is_not_fittet(self) -> None: + def test_should_raise_if_model_is_not_fitted(self) -> None: model = DecisionTreeRegressor() with pytest.raises(ModelNotFittedError): model.plot() From c9ed5d690f2484e75bdb0cb1649ed9d798f5ea46 Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:35 +0200 Subject: [PATCH 24/33] Update tests/safeds/ml/classical/regression/test_decision_tree.py Co-authored-by: Lars Reimann --- tests/safeds/ml/classical/regression/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index 175f8a153..6a39e1968 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -50,7 +50,7 @@ def test_should_raise_if_model_is_not_fitted(self) -> None: with pytest.raises(ModelNotFittedError): model.plot() - def test_should_check_that_plot_image_is_same_as_plt_figure( + def test_should_check_that_plot_image_is_same_as_snapshot( self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, From 1ba5db80e97adddbacd57c8ee10bedcfe2b5e699 Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:47 +0200 Subject: [PATCH 25/33] Update tests/safeds/ml/classical/classification/test_decision_tree.py Co-authored-by: Lars Reimann --- tests/safeds/ml/classical/classification/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index 7d15d7237..e6ea65485 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -52,7 +52,7 @@ def test_should_raise_if_model_is_not_fittet(self) -> None: with pytest.raises(ModelNotFittedError): model.plot() - def test_should_check_that_plot_image_is_same_as_plt_figure( + def test_should_check_that_plot_image_is_same_as_snapshot( self, training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, From 3a3564f3392156b800ab191d48271cce2c39d4b3 Mon Sep 17 00:00:00 2001 From: TW <114212984+timwirt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:05:54 +0200 Subject: [PATCH 26/33] Update tests/safeds/ml/classical/classification/test_decision_tree.py Co-authored-by: Lars Reimann --- tests/safeds/ml/classical/classification/test_decision_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safeds/ml/classical/classification/test_decision_tree.py b/tests/safeds/ml/classical/classification/test_decision_tree.py index e6ea65485..6642ac0a6 100644 --- a/tests/safeds/ml/classical/classification/test_decision_tree.py +++ b/tests/safeds/ml/classical/classification/test_decision_tree.py @@ -47,7 +47,7 @@ def test_should_raise_if_less_than_or_equal_to_0(self, min_sample_count_in_leave class TestPlot: - def test_should_raise_if_model_is_not_fittet(self) -> None: + def test_should_raise_if_model_is_not_fitted(self) -> None: model = DecisionTreeClassifier() with pytest.raises(ModelNotFittedError): model.plot() From d5d87b63132d03dba269962b8e2e909986f95311 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 14:11:34 +0200 Subject: [PATCH 27/33] added raised errors to documentation --- .../ml/classical/classification/_decision_tree_classifier.py | 5 +++++ .../ml/classical/regression/_decision_tree_regressor.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 9b58cb5db..b4fa4e938 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -86,6 +86,11 @@ def plot(self) -> Image: ------- Image: The decision tree figure as an image. + + Raises + ------ + ModelNotFittedError: + If model is not fitted. """ if not self.is_fitted: raise ModelNotFittedError diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index a7c284a37..f9656f6bf 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -86,6 +86,11 @@ def plot(self) -> Image: ------- Image: The decision tree figure as an image. + + Raises + ------ + ModelNotFittedError: + If model is not fitted. """ if not self.is_fitted: raise ModelNotFittedError From 603cd74a38c36f52302e401d200261a7da041fd9 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 14:38:44 +0200 Subject: [PATCH 28/33] push --- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index f9656f6bf..da6e287c6 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -90,7 +90,7 @@ def plot(self) -> Image: Raises ------ ModelNotFittedError: - If model is not fitted. + If model is not fitted. """ if not self.is_fitted: raise ModelNotFittedError From c8bf7f94f54122b1e00753628b53ec82ffdd9403 Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:40:28 +0000 Subject: [PATCH 29/33] style: apply automated linter fixes --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index b4fa4e938..3a9434343 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -86,7 +86,7 @@ def plot(self) -> Image: ------- Image: The decision tree figure as an image. - + Raises ------ ModelNotFittedError: diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index da6e287c6..f9656f6bf 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -90,7 +90,7 @@ def plot(self) -> Image: Raises ------ ModelNotFittedError: - If model is not fitted. + If model is not fitted. """ if not self.is_fitted: raise ModelNotFittedError From d6ea890ae1a4b52b21c46e1a0389599598988b85 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 14:45:26 +0200 Subject: [PATCH 30/33] ignore mac os on regressor --- tests/safeds/ml/classical/regression/test_decision_tree.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index 6a39e1968..7684aaff8 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -5,6 +5,8 @@ from safeds.ml.classical.regression import DecisionTreeRegressor from syrupy import SnapshotAssertion +from tests.helpers import os_mac, skip_if_os + @pytest.fixture() def training_set() -> TabularDataset: @@ -55,6 +57,8 @@ def test_should_check_that_plot_image_is_same_as_snapshot( training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, ) -> None: + skip_if_os([os_mac]) + fitted_model = DecisionTreeRegressor().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image From 8ea6bf19b7c4ff1feebca9be2a9d26fc92a21443 Mon Sep 17 00:00:00 2001 From: gitgott1 Date: Fri, 12 Jul 2024 14:55:58 +0200 Subject: [PATCH 31/33] updated snapshots --- ...d_check_that_plot_image_is_same_as_snapshot.png} | Bin ...d_check_that_plot_image_is_same_as_snapshot.png} | Bin .../ml/classical/regression/test_decision_tree.py | 2 -- 3 files changed, 2 deletions(-) rename tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/{TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png => TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png} (100%) rename tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/{TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png => TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png} (100%) diff --git a/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png similarity index 100% rename from tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png rename to tests/safeds/ml/classical/classification/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png diff --git a/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png b/tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png similarity index 100% rename from tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_plt_figure.png rename to tests/safeds/ml/classical/regression/__snapshots__/test_decision_tree/TestPlot.test_should_check_that_plot_image_is_same_as_snapshot.png diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index 7684aaff8..9c5793b70 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -57,8 +57,6 @@ def test_should_check_that_plot_image_is_same_as_snapshot( training_set: TabularDataset, snapshot_png_image: SnapshotAssertion, ) -> None: - skip_if_os([os_mac]) - fitted_model = DecisionTreeRegressor().fit(training_set) image = fitted_model.plot() assert image == snapshot_png_image From ccc3023c98b5c1ea81474390a5c7989c816c61be Mon Sep 17 00:00:00 2001 From: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:57:28 +0000 Subject: [PATCH 32/33] style: apply automated linter fixes --- tests/safeds/ml/classical/regression/test_decision_tree.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/safeds/ml/classical/regression/test_decision_tree.py b/tests/safeds/ml/classical/regression/test_decision_tree.py index 9c5793b70..6a39e1968 100644 --- a/tests/safeds/ml/classical/regression/test_decision_tree.py +++ b/tests/safeds/ml/classical/regression/test_decision_tree.py @@ -5,8 +5,6 @@ from safeds.ml.classical.regression import DecisionTreeRegressor from syrupy import SnapshotAssertion -from tests.helpers import os_mac, skip_if_os - @pytest.fixture() def training_set() -> TabularDataset: From 478c8f9561146ef6ae91f9c247317f5fae96b51d Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Fri, 12 Jul 2024 16:27:47 +0200 Subject: [PATCH 33/33] docs: result names instead of types --- .../ml/classical/classification/_decision_tree_classifier.py | 2 +- src/safeds/ml/classical/regression/_decision_tree_regressor.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/safeds/ml/classical/classification/_decision_tree_classifier.py b/src/safeds/ml/classical/classification/_decision_tree_classifier.py index 3a9434343..caa20b030 100644 --- a/src/safeds/ml/classical/classification/_decision_tree_classifier.py +++ b/src/safeds/ml/classical/classification/_decision_tree_classifier.py @@ -84,7 +84,7 @@ def plot(self) -> Image: Returns ------- - Image: + plot: The decision tree figure as an image. Raises diff --git a/src/safeds/ml/classical/regression/_decision_tree_regressor.py b/src/safeds/ml/classical/regression/_decision_tree_regressor.py index f9656f6bf..19ea07400 100644 --- a/src/safeds/ml/classical/regression/_decision_tree_regressor.py +++ b/src/safeds/ml/classical/regression/_decision_tree_regressor.py @@ -84,7 +84,7 @@ def plot(self) -> Image: Returns ------- - Image: + plot: The decision tree figure as an image. Raises