From 44c8da9f2caa5e09c78204e487cf74fe53c6d0d4 Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Mon, 25 Jul 2022 14:00:02 -1000 Subject: [PATCH 1/3] Make mask_invalid consistent with mask_where when copy is set to False. Add test for type erroring. --- numpy/ma/core.py | 17 ++++------------- numpy/ma/tests/test_core.py | 7 +++++++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/numpy/ma/core.py b/numpy/ma/core.py index 93eb74be31a8..405937046d47 100644 --- a/numpy/ma/core.py +++ b/numpy/ma/core.py @@ -2356,20 +2356,11 @@ def masked_invalid(a, copy=True): fill_value=1e+20) """ - a = np.array(a, copy=copy, subok=True) - mask = getattr(a, '_mask', None) - if mask is not None: - condition = ~(np.isfinite(getdata(a))) - if mask is not nomask: - condition |= mask - cls = type(a) - else: - condition = ~(np.isfinite(a)) - cls = MaskedArray - result = a.view(cls) - result._mask = condition - return result + try: + return masked_where(~(np.isfinite(getdata(a))), a, copy=copy) + except TypeError: + raise ############################################################################### # Printing options # diff --git a/numpy/ma/tests/test_core.py b/numpy/ma/tests/test_core.py index b056d516907b..5a6d642b4fa1 100644 --- a/numpy/ma/tests/test_core.py +++ b/numpy/ma/tests/test_core.py @@ -4496,6 +4496,13 @@ def test_where_structured_masked(self): assert_equal(ma, expected) assert_equal(ma.mask, expected.mask) + def test_masked_invalid_error(self): + a = np.arange(5, dtype=object) + a[3] = np.PINF + a[2] = np.NaN + with pytest.raises(TypeError, match="not supported for the input types"): + np.ma.masked_invalid(a) + def test_choose(self): # Test choose choices = [[0, 1, 2, 3], [10, 11, 12, 13], From 2d73e10f7a0e0d85247cd2f9c20c6a0b462dc77e Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Mon, 25 Jul 2022 16:23:45 -1000 Subject: [PATCH 2/3] Fix lint. --- numpy/ma/tests/test_core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/numpy/ma/tests/test_core.py b/numpy/ma/tests/test_core.py index 5a6d642b4fa1..3c233b9cd7c3 100644 --- a/numpy/ma/tests/test_core.py +++ b/numpy/ma/tests/test_core.py @@ -4500,7 +4500,8 @@ def test_masked_invalid_error(self): a = np.arange(5, dtype=object) a[3] = np.PINF a[2] = np.NaN - with pytest.raises(TypeError, match="not supported for the input types"): + with pytest.raises(TypeError, + match="not supported for the input types"): np.ma.masked_invalid(a) def test_choose(self): From 4213779a4a1108f5908a51dd96ed468057f2c1f2 Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Wed, 7 Sep 2022 08:22:36 -1000 Subject: [PATCH 3/3] Remove try statement. Add test. --- numpy/ma/core.py | 5 +---- numpy/ma/tests/test_core.py | 4 ++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/numpy/ma/core.py b/numpy/ma/core.py index 405937046d47..812c48cedbdd 100644 --- a/numpy/ma/core.py +++ b/numpy/ma/core.py @@ -2357,10 +2357,7 @@ def masked_invalid(a, copy=True): """ - try: - return masked_where(~(np.isfinite(getdata(a))), a, copy=copy) - except TypeError: - raise + return masked_where(~(np.isfinite(getdata(a))), a, copy=copy) ############################################################################### # Printing options # diff --git a/numpy/ma/tests/test_core.py b/numpy/ma/tests/test_core.py index 3c233b9cd7c3..8304a2d244ac 100644 --- a/numpy/ma/tests/test_core.py +++ b/numpy/ma/tests/test_core.py @@ -5317,6 +5317,10 @@ def test_masked_array_no_copy(): a = np.ma.array([1, 2, 3, 4], mask=[1, 0, 0, 0]) _ = np.ma.masked_where(a == 3, a, copy=False) assert_array_equal(a.mask, [True, False, True, False]) + # check masked array with masked_invalid is updated in place + a = np.ma.array([np.inf, 1, 2, 3, 4]) + _ = np.ma.masked_invalid(a, copy=False) + assert_array_equal(a.mask, [True, False, False, False, False]) def test_append_masked_array(): a = np.ma.masked_equal([1,2,3], value=2)