- Add pandas-pr60584-60586-mpl-vert.patch
* Fixes matplotlib deprecation errors in the test suite * gh#pandas-dev/pandas#60584 * backported in gh#pandas-dev/pandas#60586 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python-pandas?expand=0&rev=140
This commit is contained in:
306
pandas-pr60584-60586-mpl-vert.patch
Normal file
306
pandas-pr60584-60586-mpl-vert.patch
Normal file
@@ -0,0 +1,306 @@
|
||||
From 78b63f87013c8d2fe98fc86ecf685b5cd20da3e1 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com>
|
||||
Date: Tue, 17 Dec 2024 15:01:59 -0800
|
||||
Subject: [PATCH 1/3] Backport PR #60584: TST: Address matplotlib 3.10
|
||||
deprecation of vert=
|
||||
|
||||
---
|
||||
pandas/plotting/_matplotlib/boxplot.py | 4 +-
|
||||
pandas/plotting/_matplotlib/tools.py | 2 +-
|
||||
pandas/tests/plotting/frame/test_frame.py | 41 ++++++++++++----
|
||||
pandas/tests/plotting/test_boxplot_method.py | 50 +++++++++++++++-----
|
||||
4 files changed, 74 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py
|
||||
index d2b76decaa75d..f78327896908f 100644
|
||||
--- a/pandas/plotting/_matplotlib/boxplot.py
|
||||
+++ b/pandas/plotting/_matplotlib/boxplot.py
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
import pandas as pd
|
||||
import pandas.core.common as com
|
||||
+from pandas.util.version import Version
|
||||
|
||||
from pandas.io.formats.printing import pprint_thing
|
||||
from pandas.plotting._matplotlib.core import (
|
||||
@@ -54,7 +55,8 @@ def _set_ticklabels(ax: Axes, labels: list[str], is_vertical: bool, **kwargs) ->
|
||||
ticks = ax.get_xticks() if is_vertical else ax.get_yticks()
|
||||
if len(ticks) != len(labels):
|
||||
i, remainder = divmod(len(ticks), len(labels))
|
||||
- assert remainder == 0, remainder
|
||||
+ if Version(mpl.__version__) < Version("3.10"):
|
||||
+ assert remainder == 0, remainder
|
||||
labels *= i
|
||||
if is_vertical:
|
||||
ax.set_xticklabels(labels, **kwargs)
|
||||
diff --git a/pandas/plotting/_matplotlib/tools.py b/pandas/plotting/_matplotlib/tools.py
|
||||
index 898b5b25e7b01..98441c5afbaa4 100644
|
||||
--- a/pandas/plotting/_matplotlib/tools.py
|
||||
+++ b/pandas/plotting/_matplotlib/tools.py
|
||||
@@ -57,7 +57,7 @@ def format_date_labels(ax: Axes, rot) -> None:
|
||||
fig = ax.get_figure()
|
||||
if fig is not None:
|
||||
# should always be a Figure but can technically be None
|
||||
- maybe_adjust_figure(fig, bottom=0.2)
|
||||
+ maybe_adjust_figure(fig, bottom=0.2) # type: ignore[arg-type]
|
||||
|
||||
|
||||
def table(
|
||||
diff --git a/pandas/tests/plotting/frame/test_frame.py b/pandas/tests/plotting/frame/test_frame.py
|
||||
index 4ca4067214bbd..33366b4eabba5 100644
|
||||
--- a/pandas/tests/plotting/frame/test_frame.py
|
||||
+++ b/pandas/tests/plotting/frame/test_frame.py
|
||||
@@ -1059,28 +1059,43 @@ def test_boxplot_series_positions(self, hist_df):
|
||||
tm.assert_numpy_array_equal(ax.xaxis.get_ticklocs(), positions)
|
||||
assert len(ax.lines) == 7 * len(numeric_cols)
|
||||
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
+ @pytest.mark.xfail(
|
||||
+ Version(mpl.__version__) >= Version("3.10"),
|
||||
+ reason="Fails starting with matplotlib 3.10",
|
||||
+ )
|
||||
def test_boxplot_vertical(self, hist_df):
|
||||
df = hist_df
|
||||
numeric_cols = df._get_numeric_data().columns
|
||||
labels = [pprint_thing(c) for c in numeric_cols]
|
||||
|
||||
# if horizontal, yticklabels are rotated
|
||||
- ax = df.plot.box(rot=50, fontsize=8, vert=False)
|
||||
+ kwargs = (
|
||||
+ {"vert": False}
|
||||
+ if Version(mpl.__version__) < Version("3.10")
|
||||
+ else {"orientation": "horizontal"}
|
||||
+ )
|
||||
+ ax = df.plot.box(rot=50, fontsize=8, **kwargs)
|
||||
_check_ticks_props(ax, xrot=0, yrot=50, ylabelsize=8)
|
||||
_check_text_labels(ax.get_yticklabels(), labels)
|
||||
assert len(ax.lines) == 7 * len(numeric_cols)
|
||||
|
||||
- @pytest.mark.filterwarnings("ignore:Attempt:UserWarning")
|
||||
+ @pytest.mark.filterwarnings("ignore::UserWarning")
|
||||
+ @pytest.mark.xfail(
|
||||
+ Version(mpl.__version__) >= Version("3.10"),
|
||||
+ reason="Fails starting with matplotlib version 3.10",
|
||||
+ )
|
||||
def test_boxplot_vertical_subplots(self, hist_df):
|
||||
df = hist_df
|
||||
numeric_cols = df._get_numeric_data().columns
|
||||
labels = [pprint_thing(c) for c in numeric_cols]
|
||||
+ kwargs = (
|
||||
+ {"vert": False}
|
||||
+ if Version(mpl.__version__) < Version("3.10")
|
||||
+ else {"orientation": "horizontal"}
|
||||
+ )
|
||||
axes = _check_plot_works(
|
||||
- df.plot.box,
|
||||
- default_axes=True,
|
||||
- subplots=True,
|
||||
- vert=False,
|
||||
- logx=True,
|
||||
+ df.plot.box, default_axes=True, subplots=True, logx=True, **kwargs
|
||||
)
|
||||
_check_axes_shape(axes, axes_num=3, layout=(1, 3))
|
||||
_check_ax_scales(axes, xaxis="log")
|
||||
@@ -1088,12 +1103,22 @@ def test_boxplot_vertical_subplots(self, hist_df):
|
||||
_check_text_labels(ax.get_yticklabels(), [label])
|
||||
assert len(ax.lines) == 7
|
||||
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
+ @pytest.mark.xfail(
|
||||
+ Version(mpl.__version__) >= Version("3.10"),
|
||||
+ reason="Fails starting with matplotlib 3.10",
|
||||
+ )
|
||||
def test_boxplot_vertical_positions(self, hist_df):
|
||||
df = hist_df
|
||||
numeric_cols = df._get_numeric_data().columns
|
||||
labels = [pprint_thing(c) for c in numeric_cols]
|
||||
positions = np.array([3, 2, 8])
|
||||
- ax = df.plot.box(positions=positions, vert=False)
|
||||
+ kwargs = (
|
||||
+ {"vert": False}
|
||||
+ if Version(mpl.__version__) < Version("3.10")
|
||||
+ else {"orientation": "horizontal"}
|
||||
+ )
|
||||
+ ax = df.plot.box(positions=positions, **kwargs)
|
||||
_check_text_labels(ax.get_yticklabels(), labels)
|
||||
tm.assert_numpy_array_equal(ax.yaxis.get_ticklocs(), positions)
|
||||
assert len(ax.lines) == 7 * len(numeric_cols)
|
||||
diff --git a/pandas/tests/plotting/test_boxplot_method.py b/pandas/tests/plotting/test_boxplot_method.py
|
||||
index 76f7fa1f22eec..969ea76efd041 100644
|
||||
--- a/pandas/tests/plotting/test_boxplot_method.py
|
||||
+++ b/pandas/tests/plotting/test_boxplot_method.py
|
||||
@@ -1,5 +1,7 @@
|
||||
""" Test cases for .boxplot method """
|
||||
|
||||
+from __future__ import annotations
|
||||
+
|
||||
import itertools
|
||||
import string
|
||||
|
||||
@@ -22,6 +24,7 @@
|
||||
_check_ticks_props,
|
||||
_check_visible,
|
||||
)
|
||||
+from pandas.util.version import Version
|
||||
|
||||
from pandas.io.formats.printing import pprint_thing
|
||||
|
||||
@@ -35,6 +38,17 @@ def _check_ax_limits(col, ax):
|
||||
assert y_max >= col.max()
|
||||
|
||||
|
||||
+if Version(mpl.__version__) < Version("3.10"):
|
||||
+ verts: list[dict[str, bool | str]] = [{"vert": False}, {"vert": True}]
|
||||
+else:
|
||||
+ verts = [{"orientation": "horizontal"}, {"orientation": "vertical"}]
|
||||
+
|
||||
+
|
||||
+@pytest.fixture(params=verts)
|
||||
+def vert(request):
|
||||
+ return request.param
|
||||
+
|
||||
+
|
||||
class TestDataFramePlots:
|
||||
def test_stacked_boxplot_set_axis(self):
|
||||
# GH2980
|
||||
@@ -315,7 +329,7 @@ def test_specified_props_kwd(self, props, expected):
|
||||
|
||||
assert result[expected][0].get_color() == "C1"
|
||||
|
||||
- @pytest.mark.parametrize("vert", [True, False])
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
def test_plot_xlabel_ylabel(self, vert):
|
||||
df = DataFrame(
|
||||
{
|
||||
@@ -325,11 +339,11 @@ def test_plot_xlabel_ylabel(self, vert):
|
||||
}
|
||||
)
|
||||
xlabel, ylabel = "x", "y"
|
||||
- ax = df.plot(kind="box", vert=vert, xlabel=xlabel, ylabel=ylabel)
|
||||
+ ax = df.plot(kind="box", xlabel=xlabel, ylabel=ylabel, **vert)
|
||||
assert ax.get_xlabel() == xlabel
|
||||
assert ax.get_ylabel() == ylabel
|
||||
|
||||
- @pytest.mark.parametrize("vert", [True, False])
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
def test_plot_box(self, vert):
|
||||
# GH 54941
|
||||
rng = np.random.default_rng(2)
|
||||
@@ -338,14 +352,14 @@ def test_plot_box(self, vert):
|
||||
|
||||
xlabel, ylabel = "x", "y"
|
||||
_, axs = plt.subplots(ncols=2, figsize=(10, 7), sharey=True)
|
||||
- df1.plot.box(ax=axs[0], vert=vert, xlabel=xlabel, ylabel=ylabel)
|
||||
- df2.plot.box(ax=axs[1], vert=vert, xlabel=xlabel, ylabel=ylabel)
|
||||
+ df1.plot.box(ax=axs[0], xlabel=xlabel, ylabel=ylabel, **vert)
|
||||
+ df2.plot.box(ax=axs[1], xlabel=xlabel, ylabel=ylabel, **vert)
|
||||
for ax in axs:
|
||||
assert ax.get_xlabel() == xlabel
|
||||
assert ax.get_ylabel() == ylabel
|
||||
mpl.pyplot.close()
|
||||
|
||||
- @pytest.mark.parametrize("vert", [True, False])
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
def test_boxplot_xlabel_ylabel(self, vert):
|
||||
df = DataFrame(
|
||||
{
|
||||
@@ -355,11 +369,11 @@ def test_boxplot_xlabel_ylabel(self, vert):
|
||||
}
|
||||
)
|
||||
xlabel, ylabel = "x", "y"
|
||||
- ax = df.boxplot(vert=vert, xlabel=xlabel, ylabel=ylabel)
|
||||
+ ax = df.boxplot(xlabel=xlabel, ylabel=ylabel, **vert)
|
||||
assert ax.get_xlabel() == xlabel
|
||||
assert ax.get_ylabel() == ylabel
|
||||
|
||||
- @pytest.mark.parametrize("vert", [True, False])
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
def test_boxplot_group_xlabel_ylabel(self, vert):
|
||||
df = DataFrame(
|
||||
{
|
||||
@@ -369,14 +383,20 @@ def test_boxplot_group_xlabel_ylabel(self, vert):
|
||||
}
|
||||
)
|
||||
xlabel, ylabel = "x", "y"
|
||||
- ax = df.boxplot(by="group", vert=vert, xlabel=xlabel, ylabel=ylabel)
|
||||
+ ax = df.boxplot(by="group", xlabel=xlabel, ylabel=ylabel, **vert)
|
||||
for subplot in ax:
|
||||
assert subplot.get_xlabel() == xlabel
|
||||
assert subplot.get_ylabel() == ylabel
|
||||
mpl.pyplot.close()
|
||||
|
||||
- @pytest.mark.parametrize("vert", [True, False])
|
||||
- def test_boxplot_group_no_xlabel_ylabel(self, vert):
|
||||
+ @pytest.mark.filterwarnings("ignore:set_ticklabels:UserWarning")
|
||||
+ def test_boxplot_group_no_xlabel_ylabel(self, vert, request):
|
||||
+ if Version(mpl.__version__) >= Version("3.10") and vert == {
|
||||
+ "orientation": "horizontal"
|
||||
+ }:
|
||||
+ request.applymarker(
|
||||
+ pytest.mark.xfail(reason=f"{vert} fails starting with matplotlib 3.10")
|
||||
+ )
|
||||
df = DataFrame(
|
||||
{
|
||||
"a": np.random.default_rng(2).standard_normal(10),
|
||||
@@ -384,9 +404,13 @@ def test_boxplot_group_no_xlabel_ylabel(self, vert):
|
||||
"group": np.random.default_rng(2).choice(["group1", "group2"], 10),
|
||||
}
|
||||
)
|
||||
- ax = df.boxplot(by="group", vert=vert)
|
||||
+ ax = df.boxplot(by="group", **vert)
|
||||
for subplot in ax:
|
||||
- target_label = subplot.get_xlabel() if vert else subplot.get_ylabel()
|
||||
+ target_label = (
|
||||
+ subplot.get_xlabel()
|
||||
+ if vert == {"vert": True} or vert == {"orientation": "vertical"}
|
||||
+ else subplot.get_ylabel()
|
||||
+ )
|
||||
assert target_label == pprint_thing(["group"])
|
||||
mpl.pyplot.close()
|
||||
|
||||
|
||||
From 8d4c506e4352341dff217f1658a4c1655031eef7 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com>
|
||||
Date: Tue, 17 Dec 2024 15:15:51 -0800
|
||||
Subject: [PATCH 2/3] Add missing import
|
||||
|
||||
---
|
||||
pandas/plotting/_matplotlib/boxplot.py | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py
|
||||
index f78327896908f..80f0349b205e6 100644
|
||||
--- a/pandas/plotting/_matplotlib/boxplot.py
|
||||
+++ b/pandas/plotting/_matplotlib/boxplot.py
|
||||
@@ -7,6 +7,7 @@
|
||||
)
|
||||
import warnings
|
||||
|
||||
+import matplotlib as mpl
|
||||
from matplotlib.artist import setp
|
||||
import numpy as np
|
||||
|
||||
|
||||
From 5b0e557934b771b5d4d5d100605d351cf48a3b10 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com>
|
||||
Date: Tue, 17 Dec 2024 15:27:55 -0800
|
||||
Subject: [PATCH 3/3] Ignore pre-commit check
|
||||
|
||||
---
|
||||
pandas/tests/plotting/test_boxplot_method.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pandas/tests/plotting/test_boxplot_method.py b/pandas/tests/plotting/test_boxplot_method.py
|
||||
index 969ea76efd041..e1b03a34086c0 100644
|
||||
--- a/pandas/tests/plotting/test_boxplot_method.py
|
||||
+++ b/pandas/tests/plotting/test_boxplot_method.py
|
||||
@@ -408,7 +408,8 @@ def test_boxplot_group_no_xlabel_ylabel(self, vert, request):
|
||||
for subplot in ax:
|
||||
target_label = (
|
||||
subplot.get_xlabel()
|
||||
- if vert == {"vert": True} or vert == {"orientation": "vertical"}
|
||||
+ if vert == {"vert": True} # noqa: PLR1714
|
||||
+ or vert == {"orientation": "vertical"}
|
||||
else subplot.get_ylabel()
|
||||
)
|
||||
assert target_label == pprint_thing(["group"])
|
@@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Feb 7 18:40:46 UTC 2025 - Ben Greiner <code@bnavigator.de>
|
||||
|
||||
- Add pandas-pr60584-60586-mpl-vert.patch
|
||||
* Fixes matplotlib deprecation errors in the test suite
|
||||
* gh#pandas-dev/pandas#60584
|
||||
* backported in gh#pandas-dev/pandas#60586
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Dec 13 06:51:11 UTC 2024 - Steve Kowalik <steven.kowalik@suse.com>
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package python-pandas
|
||||
#
|
||||
# Copyright (c) 2024 SUSE LLC
|
||||
# Copyright (c) 2025 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@@ -72,6 +72,8 @@ URL: https://pandas.pydata.org/
|
||||
# SourceRepository: https://github.com/pandas-dev/pandas
|
||||
# Must be created by cloning through `osc service runall`: gh#pandas-dev/pandas#54903, gh#pandas-dev/pandas#54907
|
||||
Source0: pandas-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM pandas-pr60584-60586-mpl-vert.patch gh#pandas-dev/pandas#60584 gh#pandas-dev/pandas#60586
|
||||
Patch0: https://github.com/pandas-dev/pandas/pull/60586.patch#/pandas-pr60584-60586-mpl-vert.patch
|
||||
%if !%{with test}
|
||||
BuildRequires: %{python_module Cython >= 3.0.5}
|
||||
BuildRequires: %{python_module devel >= 3.9}
|
||||
|
Reference in New Issue
Block a user