From c4143afed0f3345baae4052427eed2e3e0d296f4 Mon Sep 17 00:00:00 2001 From: Junior Atemebang <129027012+jxnior01@users.noreply.github.com> Date: Thu, 13 Jul 2023 21:19:34 +0200 Subject: [PATCH] fix: Warnings raised by underlying seaborn and numpy libraries (#425) Closes #357 ### Summary of Changes * Python's `warnings` module now ignores warnings caused by underlying seaborn and numpy libraries. --------- Co-authored-by: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Co-authored-by: Alexander <47296670+Marsmaennchen221@users.noreply.github.com> --- src/safeds/data/tabular/containers/_table.py | 47 ++++++++++++++---- .../snapshot_histograms/four_columns.png | Bin 24457 -> 28890 bytes .../image/snapshot_histograms/one_column.png | Bin 8359 -> 7951 bytes .../_table/test_plot_correlation_heatmap.py | 11 +++- .../containers/_table/test_plot_histograms.py | 12 +++-- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/safeds/data/tabular/containers/_table.py b/src/safeds/data/tabular/containers/_table.py index 18ffe9bfb..3d1a1d74d 100644 --- a/src/safeds/data/tabular/containers/_table.py +++ b/src/safeds/data/tabular/containers/_table.py @@ -1808,16 +1808,41 @@ def plot_correlation_heatmap(self) -> Image: """ only_numerical = self.remove_columns_with_non_numerical_values() - fig = plt.figure() - sns.heatmap( - data=only_numerical._data.corr(), - vmin=-1, - vmax=1, - xticklabels=only_numerical.column_names, - yticklabels=only_numerical.column_names, - cmap="vlag", - ) - plt.tight_layout() + if self.number_of_rows == 0: + warnings.warn( + "An empty table has been used. A correlation heatmap on an empty table will show nothing.", + stacklevel=2, + ) + + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message=( + "Attempting to set identical low and high (xlims|ylims) makes transformation singular;" + " automatically expanding." + ), + ) + fig = plt.figure() + sns.heatmap( + data=only_numerical._data.corr(), + vmin=-1, + vmax=1, + xticklabels=only_numerical.column_names, + yticklabels=only_numerical.column_names, + cmap="vlag", + ) + plt.tight_layout() + else: + fig = plt.figure() + sns.heatmap( + data=only_numerical._data.corr(), + vmin=-1, + vmax=1, + xticklabels=only_numerical.column_names, + yticklabels=only_numerical.column_names, + cmap="vlag", + ) + plt.tight_layout() buffer = io.BytesIO() fig.savefig(buffer, format="png") @@ -2000,7 +2025,7 @@ def plot_histograms(self) -> Image: """ col_wrap = min(self.number_of_columns, 3) - data = pd.melt(self._data, value_vars=self.column_names) + data = pd.melt(self._data.applymap(lambda value: str(value)), value_vars=self.column_names) grid = sns.FacetGrid(data=data, col="variable", col_wrap=col_wrap, sharex=False, sharey=False) grid.map(sns.histplot, "value") grid.set_xlabels("") diff --git a/tests/resources/image/snapshot_histograms/four_columns.png b/tests/resources/image/snapshot_histograms/four_columns.png index 45e050640b173dcfa99485b899d8690536a891ea..cdb1028096fe134846700d092fe4c0d785f3517c 100644 GIT binary patch literal 28890 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 JR$6$){S7qGMTr0a literal 24457 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 HHh=P8yKCi? literal 8359 zcmd6NcR1Dm-~W-K%uWhL=#&()_egOvvZ6t$GLKDGRthCW_TDQbD>=yCbck^5 zaX-)ZzVGkv{$2Oyd)@1g`@XK~a=nlDdB5Jz*Yo*UuY&KX$WfAAAVVM!lnU}_bp(Ql zlkoQ>30!gYjBrFCSgaM$w;#BqERVWtK5#rFUET8G(GM@$j2}AFloLAkBwZeV4%}Y5I@H?N+K;tOE+^V|QHUXtr;*p|@8A$GJ}`$`QdH#avWd_18j z{axG9QBcTw1oQCIqsg}D%h+Lfo8Ah0Gmp(7GcCC*Yz+zinH9^!WtSx+7y|+V95*u! z4GmX2g~um)-pX8fciF755!D%fo}Yv^^n|$6(ueiI20v0HBV$;GTx7alo!5oTzx@iz z1lIeHt9-9CAAS64Oz_GaTV?3ACz>WECaY^}(vKe}V%0DoqTveKVawp(Z`gBr16Uii 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 diff --git a/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py b/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py index f87cfcba7..902a184bd 100644 --- a/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py +++ b/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py @@ -14,9 +14,16 @@ ids=["normal", "empty"], ) def test_should_match_snapshot(table: Table, path: str) -> None: - current = table.plot_correlation_heatmap() + if table.number_of_rows == 0: + with pytest.warns( + UserWarning, + match=r"An empty table has been used. A correlation heatmap on an empty table will show nothing.", + ): + current = table.plot_correlation_heatmap() + else: + current = table.plot_correlation_heatmap() snapshot = Image.from_png_file(resolve_resource_path(path)) # Inlining the expression into the assert causes pytest to hang if the assertion fails when run from PyCharm. - assertion = snapshot._image.tobytes() == current._image.tobytes() + assertion = snapshot == current assert assertion diff --git a/tests/safeds/data/tabular/containers/_table/test_plot_histograms.py b/tests/safeds/data/tabular/containers/_table/test_plot_histograms.py index edcdab313..aa9f413bc 100644 --- a/tests/safeds/data/tabular/containers/_table/test_plot_histograms.py +++ b/tests/safeds/data/tabular/containers/_table/test_plot_histograms.py @@ -10,7 +10,14 @@ [ (Table({"A": [1, 2, 3]}), "./image/snapshot_histograms/one_column.png"), ( - Table({"A": [1, 2, 3], "B": ["A", "A", "Bla"], "C": [True, True, False], "D": [1.0, 2.1, 4.5]}), + Table( + { + "A": [1, 2, 3, 3, 2, 4, 2], + "B": ["a", "b", "b", "b", "b", "b", "a"], + "C": [True, True, False, True, False, None, True], + "D": [1.0, 2.1, 2.1, 2.1, 2.1, 3.0, 3.0], + }, + ), "./image/snapshot_histograms/four_columns.png", ), ], @@ -19,9 +26,8 @@ def test_should_match_snapshot(table: Table, path: str) -> None: current = table.plot_histograms() snapshot = Image.from_png_file(resolve_resource_path(path)) - # Inlining the expression into the assert causes pytest to hang if the assertion fails when run from PyCharm. - assertion = snapshot._image.tobytes() == current._image.tobytes() + assertion = snapshot == current assert assertion