diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 23c57105ca5e..37820593005e 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -2208,19 +2208,11 @@ def _convert_dx(dx, x0, xconv, convert): x0 = cbook._safe_first_finite(x0) except (TypeError, IndexError, KeyError): pass - except StopIteration: - # this means we found no finite element, fall back to first - # element unconditionally - x0 = cbook.safe_first_element(x0) try: x = cbook._safe_first_finite(xconv) except (TypeError, IndexError, KeyError): x = xconv - except StopIteration: - # this means we found no finite element, fall back to first - # element unconditionally - x = cbook.safe_first_element(xconv) delist = False if not np.iterable(dx): diff --git a/lib/matplotlib/cbook.py b/lib/matplotlib/cbook.py index 483039e337ba..8dc62259e8b5 100644 --- a/lib/matplotlib/cbook.py +++ b/lib/matplotlib/cbook.py @@ -1619,13 +1619,13 @@ def safe_first_element(obj): def _safe_first_finite(obj, *, skip_nonfinite=True): """ - Return the first non-None (and optionally finite) element in *obj*. + Return the first finite element in *obj* if one is available and skip_nonfinite is + True. Otherwise return the first element. This is a method for internal use. - This is a type-independent way of obtaining the first non-None element, - supporting both index access and the iterator protocol. - The first non-None element will be obtained when skip_none is True. + This is a type-independent way of obtaining the first finite element, supporting + both index access and the iterator protocol. """ def safe_isfinite(val): if val is None: @@ -1657,7 +1657,7 @@ def safe_isfinite(val): raise RuntimeError("matplotlib does not " "support generators as input") else: - return next(val for val in obj if safe_isfinite(val)) + return next((val for val in obj if safe_isfinite(val)), safe_first_element(obj)) def sanitize_sequence(data): diff --git a/lib/matplotlib/tests/test_cbook.py b/lib/matplotlib/tests/test_cbook.py index da9c187a323a..264db5dc9887 100644 --- a/lib/matplotlib/tests/test_cbook.py +++ b/lib/matplotlib/tests/test_cbook.py @@ -608,6 +608,18 @@ def test_flatiter(): assert 1 == next(it) +def test__safe_first_finite_all_nan(): + arr = np.full(2, np.nan) + ret = cbook._safe_first_finite(arr) + assert np.isnan(ret) + + +def test__safe_first_finite_all_inf(): + arr = np.full(2, np.inf) + ret = cbook._safe_first_finite(arr) + assert np.isinf(ret) + + def test_reshape2d(): class Dummy:
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: