Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f78e8ec

Browse files
Backport PR #25196: Add deprecation for setting data with non sequence type in Line2D (#25201)
Co-authored-by: Oscar Gustafsson <[email protected]>
1 parent 172ede3 commit f78e8ec

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
``Line2D``
2+
~~~~~~~~~~
3+
When creating a Line2D or using `.Line2D.set_xdata` and `.Line2D.set_ydata`,
4+
passing x/y data as non sequence is deprecated.

lib/matplotlib/lines.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,14 @@ def set_xdata(self, x):
12751275
x : 1D array
12761276
"""
12771277
if not np.iterable(x):
1278-
raise RuntimeError('x must be a sequence')
1278+
# When deprecation cycle is completed
1279+
# raise RuntimeError('x must be a sequence')
1280+
_api.warn_deprecated(
1281+
since=3.7,
1282+
message="Setting data with a non sequence type "
1283+
"is deprecated since %(since)s and will be "
1284+
"remove %(removal)s")
1285+
x = [x, ]
12791286
self._xorig = copy.copy(x)
12801287
self._invalidx = True
12811288
self.stale = True
@@ -1289,7 +1296,14 @@ def set_ydata(self, y):
12891296
y : 1D array
12901297
"""
12911298
if not np.iterable(y):
1292-
raise RuntimeError('y must be a sequence')
1299+
# When deprecation cycle is completed
1300+
# raise RuntimeError('y must be a sequence')
1301+
_api.warn_deprecated(
1302+
since=3.7,
1303+
message="Setting data with a non sequence type "
1304+
"is deprecated since %(since)s and will be "
1305+
"remove %(removal)s")
1306+
y = [y, ]
12931307
self._yorig = copy.copy(y)
12941308
self._invalidy = True
12951309
self.stale = True

lib/matplotlib/tests/test_lines.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import matplotlib.pyplot as plt
2121
import matplotlib.transforms as mtransforms
2222
from matplotlib.testing.decorators import image_comparison, check_figures_equal
23+
from matplotlib._api.deprecation import MatplotlibDeprecationWarning
2324

2425

2526
def test_segment_hits():
@@ -91,9 +92,12 @@ def test_invalid_line_data():
9192
mlines.Line2D([], 1)
9293

9394
line = mlines.Line2D([], [])
94-
with pytest.raises(RuntimeError, match='x must be'):
95+
# when deprecation cycle is completed
96+
# with pytest.raises(RuntimeError, match='x must be'):
97+
with pytest.warns(MatplotlibDeprecationWarning):
9598
line.set_xdata(0)
96-
with pytest.raises(RuntimeError, match='y must be'):
99+
# with pytest.raises(RuntimeError, match='y must be'):
100+
with pytest.warns(MatplotlibDeprecationWarning):
97101
line.set_ydata(0)
98102

99103

0 commit comments

Comments
 (0)