diff options
Diffstat (limited to 'dev-python/seaborn')
-rw-r--r-- | dev-python/seaborn/Manifest | 3 | ||||
-rw-r--r-- | dev-python/seaborn/files/seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch | 280 | ||||
-rw-r--r-- | dev-python/seaborn/seaborn-0.11.2.ebuild | 25 |
3 files changed, 305 insertions, 3 deletions
diff --git a/dev-python/seaborn/Manifest b/dev-python/seaborn/Manifest index 364ab0f06a4d..883a4cebcd44 100644 --- a/dev-python/seaborn/Manifest +++ b/dev-python/seaborn/Manifest @@ -1,3 +1,4 @@ +AUX seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch 11538 BLAKE2B 67d5046d093ba693d41d6c26caf4da67e93eef45eae7253238764f4a5738e37fd12998acdff638bd9fc8c023226e87b59d04aaf24fc357682858a742a9f30089 SHA512 ea93fc34634cd325b8f5af611feacb4159cf4c4cbc31287dda1301a0f3b2182295c13f94604ddff83e82efb2090625213141d8cf34690fe4791895074827c8bc DIST seaborn-0.11.2.tar.gz 268839 BLAKE2B b1ba3a76431843921f01f714e601ebe7ed87a8c4136acb65a7cdb89059d67cb136484cb968efd713a5260caa552673efd5d06898a69624b36311fd3908f00179 SHA512 f08fe82b4ecca2b140a953c89bb7f811255d00ec819225809bb224aadde161ddabdeaf5cab53e3558bb84334cee828baafe0ee5efe465e80875a0513fb1ab9ac -EBUILD seaborn-0.11.2.ebuild 784 BLAKE2B 0e491be5c556e6384ab26af3c2d18294703024e71264c12c57116e2ee4f8fcbeb1e2013a3d41d225d2d030e68ea245f0fb5b1bf73adc24562fee863cf115b60b SHA512 65bcabff9ef6697ead2a435f19b18969caeb7466db1415269cd63f0f607808d1f09479d6e2a7ed3adc26f06e6ac7f425dd446345cd13cef7e0a5b9a1b6cc2427 +EBUILD seaborn-0.11.2.ebuild 1987 BLAKE2B 4583ebe9ed9c3dc27c1318025ea37526341b056a55d54d7e584fa10a1bb63ce21a66d27f2da9ec82a658274ae4af92317f25d01f661323c41bff30578c7eb665 SHA512 17fbb818c94a3a6c754f7002064b4c95cc8075376b293a42917336017a32065e26b1ddc7e66deb4f0ee7258626306d634d335fdb81bf584599e925aafdbee652 MISC metadata.xml 1766 BLAKE2B 7e449efa11d2101e2b6e5729ef66bbec42d51793e8543ad214578db7351e5174ac80a96e2b41c7715135c4af1bc4f6205ee9b43add6737279546e7c02251dd86 SHA512 074d5cc59baae5ea4333d735d19a9788cc7fd31e1cf0f90715ae623260853a1231d93663e975bb7c7fcafc116ea48ff6b4fda6900bec1093b0be3768cb3be6fb diff --git a/dev-python/seaborn/files/seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch b/dev-python/seaborn/files/seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch new file mode 100644 index 000000000000..9f46a59145f1 --- /dev/null +++ b/dev-python/seaborn/files/seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch @@ -0,0 +1,280 @@ +From 262bb95402e405489f6d58bb96dcb06fcd24f0ba Mon Sep 17 00:00:00 2001 +From: Michael Waskom <mwaskom@users.noreply.github.com> +Date: Sun, 31 Oct 2021 16:52:06 -0400 +Subject: [PATCH] Update tests for compatability with matplotlib 3.5.0 (#2690) + +* Update boxplot tests for mpl3.5 compatability + +* Update kdeplot tests for mpl3.5 compatability + +* Update legend tests for mpl3.5 compatability + +* Pin docutils to avoid buggy interaction with sphinx + +[ flow: modified to apply on top of 0.11.2 ] + +Modified-by: Florian Schmaus <flow@gentoo.org> +--- + seaborn/tests/test_categorical.py | 30 +++++++++------ + seaborn/tests/test_distributions.py | 58 ++++++++++++++++++++--------- + 3 files changed, 61 insertions(+), 28 deletions(-) + +diff --git a/seaborn/tests/test_categorical.py b/seaborn/tests/test_categorical.py +index a0b0393c330c..ac41a8885773 100644 +--- a/seaborn/tests/test_categorical.py ++++ b/seaborn/tests/test_categorical.py +@@ -28,6 +28,14 @@ class CategoricalFixture: + df = pd.DataFrame(dict(y=y, g=g, h=h, u=u)) + x_df["W"] = g + ++ def get_box_artists(self, ax): ++ ++ if Version(mpl.__version__) < Version("3.5.0b0"): ++ return ax.artists ++ else: ++ # Exclude labeled patches, which are for the legend ++ return [p for p in ax.patches if not p.get_label()] ++ + + class TestCategoricalPlotter(CategoricalFixture): + +@@ -772,12 +780,12 @@ class TestBoxPlotter(CategoricalFixture): + def test_axes_data(self): + + ax = cat.boxplot(x="g", y="y", data=self.df) +- assert len(ax.artists) == 3 ++ assert len(self.get_box_artists(ax)) == 3 + + plt.close("all") + + ax = cat.boxplot(x="g", y="y", hue="h", data=self.df) +- assert len(ax.artists) == 6 ++ assert len(self.get_box_artists(ax)) == 6 + + plt.close("all") + +@@ -785,14 +793,14 @@ class TestBoxPlotter(CategoricalFixture): + + ax = cat.boxplot(x="g", y="y", data=self.df, saturation=1) + pal = palettes.color_palette(n_colors=3) +- for patch, color in zip(ax.artists, pal): ++ for patch, color in zip(self.get_box_artists(ax), pal): + assert patch.get_facecolor()[:3] == color + + plt.close("all") + + ax = cat.boxplot(x="g", y="y", hue="h", data=self.df, saturation=1) + pal = palettes.color_palette(n_colors=2) +- for patch, color in zip(ax.artists, pal * 2): ++ for patch, color in zip(self.get_box_artists(ax), pal * 2): + assert patch.get_facecolor()[:3] == color + + plt.close("all") +@@ -801,7 +809,7 @@ class TestBoxPlotter(CategoricalFixture): + + ax = cat.boxplot(x="g", y="y", data=self.df, + order=["a", "b", "c", "d"]) +- assert len(ax.artists) == 3 ++ assert len(self.get_box_artists(ax)) == 3 + + def test_missing_data(self): + +@@ -811,13 +819,13 @@ class TestBoxPlotter(CategoricalFixture): + y[-2:] = np.nan + + ax = cat.boxplot(x=x, y=y) +- assert len(ax.artists) == 3 ++ assert len(self.get_box_artists(ax)) == 3 + + plt.close("all") + + y[-1] = 0 + ax = cat.boxplot(x=x, y=y, hue=h) +- assert len(ax.artists) == 7 ++ assert len(self.get_box_artists(ax)) == 7 + + plt.close("all") + +@@ -2504,11 +2512,11 @@ class TestCatPlot(CategoricalFixture): + + g = cat.catplot(x="g", y="y", data=self.df, kind="box") + want_artists = self.g.unique().size +- assert len(g.ax.artists) == want_artists ++ assert len(self.get_box_artists(g.ax)) == want_artists + + g = cat.catplot(x="g", y="y", hue="h", data=self.df, kind="box") + want_artists = self.g.unique().size * self.h.unique().size +- assert len(g.ax.artists) == want_artists ++ assert len(self.get_box_artists(g.ax)) == want_artists + + g = cat.catplot(x="g", y="y", data=self.df, + kind="violin", inner=None) +@@ -2858,14 +2866,14 @@ class TestBoxenPlotter(CategoricalFixture): + + ax = cat.boxenplot(x="g", y="y", data=self.df, saturation=1) + pal = palettes.color_palette(n_colors=3) +- for patch, color in zip(ax.artists, pal): ++ for patch, color in zip(self.get_box_artists(ax), pal): + assert patch.get_facecolor()[:3] == color + + plt.close("all") + + ax = cat.boxenplot(x="g", y="y", hue="h", data=self.df, saturation=1) + pal = palettes.color_palette(n_colors=2) +- for patch, color in zip(ax.artists, pal * 2): ++ for patch, color in zip(self.get_box_artists(ax), pal * 2): + assert patch.get_facecolor()[:3] == color + + plt.close("all") +diff --git a/seaborn/tests/test_distributions.py b/seaborn/tests/test_distributions.py +index 737d6ccdaddc..57b380c32ca1 100644 +--- a/seaborn/tests/test_distributions.py ++++ b/seaborn/tests/test_distributions.py +@@ -39,6 +39,27 @@ from .._testing import ( + ) + + ++def get_contour_coords(c): ++ """Provide compatability for change in contour artist type in mpl3.5.""" ++ # See https://github.com/matplotlib/matplotlib/issues/20906 ++ if isinstance(c, mpl.collections.LineCollection): ++ return c.get_segments() ++ elif isinstance(c, mpl.collections.PathCollection): ++ return [p.vertices[:np.argmax(p.codes) + 1] for p in c.get_paths()] ++ ++ ++def get_contour_color(c): ++ """Provide compatability for change in contour artist type in mpl3.5.""" ++ # See https://github.com/matplotlib/matplotlib/issues/20906 ++ if isinstance(c, mpl.collections.LineCollection): ++ return c.get_color() ++ elif isinstance(c, mpl.collections.PathCollection): ++ if c.get_facecolor().size: ++ return c.get_facecolor() ++ else: ++ return c.get_edgecolor() ++ ++ + class TestDistPlot(object): + + rs = np.random.RandomState(0) +@@ -803,7 +824,10 @@ class TestKDEPlotUnivariate: + for label, level in zip(legend_labels, order): + assert label.get_text() == level + +- legend_artists = ax.legend_.findobj(mpl.lines.Line2D)[::2] ++ legend_artists = ax.legend_.findobj(mpl.lines.Line2D) ++ if Version(mpl.__version__) < Version("3.5.0b0"): ++ # https://github.com/matplotlib/matplotlib/pull/20699 ++ legend_artists = legend_artists[::2] + palette = color_palette() + for artist, color in zip(legend_artists, palette): + assert to_rgb(artist.get_color()) == to_rgb(color) +@@ -854,7 +878,7 @@ class TestKDEPlotBivariate: + f, ax = plt.subplots() + kdeplot(data=long_df, x="x", y="y", hue="c", fill=fill) + for c in ax.collections: +- if fill: ++ if fill or Version(mpl.__version__) >= Version("3.5.0b0"): + assert isinstance(c, mpl.collections.PathCollection) + else: + assert isinstance(c, mpl.collections.LineCollection) +@@ -870,8 +894,8 @@ class TestKDEPlotBivariate: + kdeplot(x=x, y=y, hue=hue, common_norm=True, ax=ax1) + kdeplot(x=x, y=y, hue=hue, common_norm=False, ax=ax2) + +- n_seg_1 = sum([len(c.get_segments()) > 0 for c in ax1.collections]) +- n_seg_2 = sum([len(c.get_segments()) > 0 for c in ax2.collections]) ++ n_seg_1 = sum([len(get_contour_coords(c)) > 0 for c in ax1.collections]) ++ n_seg_2 = sum([len(get_contour_coords(c)) > 0 for c in ax2.collections]) + assert n_seg_2 > n_seg_1 + + def test_log_scale(self, rng): +@@ -898,7 +922,7 @@ class TestKDEPlotBivariate: + ax2.contour(10 ** xx, yy, density, levels=levels) + + for c1, c2 in zip(ax1.collections, ax2.collections): +- assert_array_equal(c1.get_segments(), c2.get_segments()) ++ assert_array_equal(get_contour_coords(c1), get_contour_coords(c2)) + + def test_bandwidth(self, rng): + +@@ -911,7 +935,7 @@ class TestKDEPlotBivariate: + kdeplot(x=x, y=y, bw_adjust=2, ax=ax2) + + for c1, c2 in zip(ax1.collections, ax2.collections): +- seg1, seg2 = c1.get_segments(), c2.get_segments() ++ seg1, seg2 = get_contour_coords(c1), get_contour_coords(c2) + if seg1 + seg2: + x1 = seg1[0][:, 0] + x2 = seg2[0][:, 0] +@@ -936,9 +960,9 @@ class TestKDEPlotBivariate: + kdeplot(x=x, y=y, hue=hue, weights=weights, ax=ax2) + + for c1, c2 in zip(ax1.collections, ax2.collections): +- if c1.get_segments() and c2.get_segments(): +- seg1 = np.concatenate(c1.get_segments(), axis=0) +- seg2 = np.concatenate(c2.get_segments(), axis=0) ++ if get_contour_coords(c1) and get_contour_coords(c2): ++ seg1 = np.concatenate(get_contour_coords(c1), axis=0) ++ seg2 = np.concatenate(get_contour_coords(c2), axis=0) + assert not np.array_equal(seg1, seg2) + + def test_hue_ignores_cmap(self, long_df): +@@ -946,7 +970,7 @@ class TestKDEPlotBivariate: + with pytest.warns(UserWarning, match="cmap parameter ignored"): + ax = kdeplot(data=long_df, x="x", y="y", hue="c", cmap="viridis") + +- color = tuple(ax.collections[0].get_color().squeeze()) ++ color = tuple(get_contour_color(ax.collections[0]).squeeze()) + assert color == mpl.colors.colorConverter.to_rgba("C0") + + def test_contour_line_colors(self, long_df): +@@ -955,7 +979,7 @@ class TestKDEPlotBivariate: + ax = kdeplot(data=long_df, x="x", y="y", color=color) + + for c in ax.collections: +- assert tuple(c.get_color().squeeze()) == color ++ assert tuple(get_contour_color(c).squeeze()) == color + + def test_contour_fill_colors(self, long_df): + +@@ -987,7 +1011,7 @@ class TestKDEPlotBivariate: + kdeplot(**plot_kws, levels=np.linspace(thresh, 1, n), ax=ax2) + + for c1, c2 in zip(ax1.collections, ax2.collections): +- assert_array_equal(c1.get_segments(), c2.get_segments()) ++ assert_array_equal(get_contour_coords(c1), get_contour_coords(c2)) + + with pytest.raises(ValueError): + kdeplot(**plot_kws, levels=[0, 1, 2]) +@@ -999,7 +1023,7 @@ class TestKDEPlotBivariate: + kdeplot(**plot_kws, levels=n, thresh=0, ax=ax2) + + for c1, c2 in zip(ax1.collections, ax2.collections): +- assert_array_equal(c1.get_segments(), c2.get_segments()) ++ assert_array_equal(get_contour_coords(c1), get_contour_coords(c2)) + for c1, c2 in zip(ax1.collections, ax2.collections): + assert_array_equal(c1.get_facecolors(), c2.get_facecolors()) + +@@ -2246,13 +2270,13 @@ class TestDisPlot: + z = [0] * 80 + [1] * 20 + + g = displot(x=x, y=y, col=z, kind="kde", levels=10) +- l1 = sum(bool(c.get_segments()) for c in g.axes.flat[0].collections) +- l2 = sum(bool(c.get_segments()) for c in g.axes.flat[1].collections) ++ l1 = sum(bool(get_contour_coords(c)) for c in g.axes.flat[0].collections) ++ l2 = sum(bool(get_contour_coords(c)) for c in g.axes.flat[1].collections) + assert l1 > l2 + + g = displot(x=x, y=y, col=z, kind="kde", levels=10, common_norm=False) +- l1 = sum(bool(c.get_segments()) for c in g.axes.flat[0].collections) +- l2 = sum(bool(c.get_segments()) for c in g.axes.flat[1].collections) ++ l1 = sum(bool(get_contour_coords(c)) for c in g.axes.flat[0].collections) ++ l2 = sum(bool(get_contour_coords(c)) for c in g.axes.flat[1].collections) + assert l1 == l2 + + def test_bivariate_hist_norm(self, rng): +-- +2.35.1 + diff --git a/dev-python/seaborn/seaborn-0.11.2.ebuild b/dev-python/seaborn/seaborn-0.11.2.ebuild index 16a604584049..50b1cabf1626 100644 --- a/dev-python/seaborn/seaborn-0.11.2.ebuild +++ b/dev-python/seaborn/seaborn-0.11.2.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 @@ -12,7 +12,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" LICENSE="BSD" SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +KEYWORDS="amd64 ~x86 ~amd64-linux ~x86-linux" RDEPEND=" dev-python/matplotlib[${PYTHON_USEDEP}] @@ -23,9 +23,30 @@ RDEPEND=" " BDEPEND="test? ( dev-python/nose[${PYTHON_USEDEP}] )" +PATCHES=( + "${FILESDIR}"/${PN}-Update-tests-for-compatability-with-matplotlib-3.5.0.patch +) + distutils_enable_tests pytest python_test() { + # Tests fail due to a newer matplotlib (3.5) being used. Was fixed + # upstream in https://github.com/mwaskom/seaborn/issues/2663 but not + # for the 0.11 branch. Partially backported in + # seaborn-Update-tests-for-compatability-with-matplotlib-3.5.0.patch. + local EPYTEST_DESELECT=( + 'seaborn/tests/test_categorical.py::TestBoxPlotter::test_axes_data' + 'seaborn/tests/test_categorical.py::TestBoxPlotter::test_box_colors' + 'seaborn/tests/test_categorical.py::TestBoxPlotter::test_draw_missing_boxes' + 'seaborn/tests/test_categorical.py::TestBoxPlotter::test_missing_data' + 'seaborn/tests/test_categorical.py::TestCatPlot::test_plot_elements' + 'seaborn/tests/test_categorical.py::TestBoxenPlotter::test_box_colors' + 'seaborn/tests/test_distributions.py::TestKDEPlotUnivariate::test_legend' + 'seaborn/tests/test_distributions.py::TestKDEPlotBivariate::test_fill_artists' + 'seaborn/tests/test_distributions.py::TestDisPlot::test_with_rug[kwargs0]' + 'seaborn/tests/test_distributions.py::TestDisPlot::test_with_rug[kwargs1]' + 'seaborn/tests/test_distributions.py::TestDisPlot::test_with_rug[kwargs2]' + ) cat > matplotlibrc <<- EOF || die backend : Agg EOF |