Skip to content

Commit

Permalink
Backport PR matplotlib#25196: Add deprecation for setting data with n…
Browse files Browse the repository at this point in the history
…on sequence type in `Line2D`
  • Loading branch information
oscargus authored and meeseeksmachine committed Feb 12, 2023
1 parent 172ede3 commit 53e828d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
4 changes: 4 additions & 0 deletions doc/api/next_api_changes/deprecations/25196-EP.rst
@@ -0,0 +1,4 @@
``Line2D``
~~~~~~~~~~
When creating a Line2D or using `.Line2D.set_xdata` and `.Line2D.set_ydata`,
passing x/y data as non sequence is deprecated.
18 changes: 16 additions & 2 deletions lib/matplotlib/lines.py
Expand Up @@ -1275,7 +1275,14 @@ def set_xdata(self, x):
x : 1D array
"""
if not np.iterable(x):
raise RuntimeError('x must be a sequence')
# When deprecation cycle is completed
# raise RuntimeError('x must be a sequence')
_api.warn_deprecated(
since=3.7,
message="Setting data with a non sequence type "
"is deprecated since %(since)s and will be "
"remove %(removal)s")
x = [x, ]
self._xorig = copy.copy(x)
self._invalidx = True
self.stale = True
Expand All @@ -1289,7 +1296,14 @@ def set_ydata(self, y):
y : 1D array
"""
if not np.iterable(y):
raise RuntimeError('y must be a sequence')
# When deprecation cycle is completed
# raise RuntimeError('y must be a sequence')
_api.warn_deprecated(
since=3.7,
message="Setting data with a non sequence type "
"is deprecated since %(since)s and will be "
"remove %(removal)s")
y = [y, ]
self._yorig = copy.copy(y)
self._invalidy = True
self.stale = True
Expand Down
8 changes: 6 additions & 2 deletions lib/matplotlib/tests/test_lines.py
Expand Up @@ -20,6 +20,7 @@
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from matplotlib.testing.decorators import image_comparison, check_figures_equal
from matplotlib._api.deprecation import MatplotlibDeprecationWarning


def test_segment_hits():
Expand Down Expand Up @@ -91,9 +92,12 @@ def test_invalid_line_data():
mlines.Line2D([], 1)

line = mlines.Line2D([], [])
with pytest.raises(RuntimeError, match='x must be'):
# when deprecation cycle is completed
# with pytest.raises(RuntimeError, match='x must be'):
with pytest.warns(MatplotlibDeprecationWarning):
line.set_xdata(0)
with pytest.raises(RuntimeError, match='y must be'):
# with pytest.raises(RuntimeError, match='y must be'):
with pytest.warns(MatplotlibDeprecationWarning):
line.set_ydata(0)


Expand Down

0 comments on commit 53e828d

Please sign in to comment.