Пример #1
0
 def setup_class(self):
     self.a = np.array([[np.nan, np.nan, 3.], [4., 5., 6.]])
     self.mask_a = np.array([[True, False, False], [False, True, False]])
     self.b = np.arange(1, 7).reshape(2, 3)
     self.mask_b = self.mask_a
     self.ma = Masked(self.a, mask=self.mask_a)
     self.mb = Masked(self.b, mask=self.mask_b)
Пример #2
0
    def test_shape_setting_failure(self):
        ma = self.ma.copy()
        with pytest.raises(ValueError, match='cannot reshape'):
            ma.shape = 5,

        assert ma.shape == self.ma.shape
        assert ma.mask.shape == self.ma.shape

        # Here, mask can be reshaped but array cannot.
        ma2 = Masked(np.broadcast_to([[1.], [2.]], self.a.shape),
                     mask=self.mask_a)
        with pytest.raises(AttributeError, match='ncompatible shape'):
            ma2.shape = 6,

        assert ma2.shape == self.ma.shape
        assert ma2.mask.shape == self.ma.shape

        # Here, array can be reshaped but mask cannot.
        ma3 = Masked(self.a.copy(),
                     mask=np.broadcast_to([[True], [False]],
                                          self.mask_a.shape))
        with pytest.raises(AttributeError, match='ncompatible shape'):
            ma3.shape = 6,

        assert ma3.shape == self.ma.shape
        assert ma3.mask.shape == self.ma.shape
Пример #3
0
 def test_nonzero_0d(self):
     res1 = Masked(1, mask=False).nonzero()
     assert len(res1) == 1
     assert_array_equal(res1[0], np.ones(()).nonzero()[0])
     res2 = Masked(1, mask=True).nonzero()
     assert len(res2) == 1
     assert_array_equal(res2[0], np.zeros(()).nonzero()[0])
Пример #4
0
 def test_can_initialize_with_masked_values(self):
     mcls = Masked(self.MyArray)
     mms = mcls(Masked(np.asarray(self.a), mask=self.m))
     assert isinstance(mms, Masked)
     assert isinstance(mms, self.MyArray)
     assert_array_equal(mms.unmasked, self.a)
     assert_array_equal(mms.mask, self.m)
Пример #5
0
 def setup_class(self):
     super().setup_class()
     self.ma = Masked(self.a, mask=self.mask_a)
     self.mb = Masked(self.b, mask=self.mask_b)
     self.mc = Masked(self.c, mask=self.mask_c)
     self.msa = Masked(self.sa, mask=self.mask_sa)
     self.msb = Masked(self.sb, mask=self.mask_sb)
Пример #6
0
 def setup_class(self):
     self.a = np.array([[-np.inf, +np.inf, np.nan, 3., 4.]] * 2)
     self.mask_a = np.array([[False] * 5, [True] * 4 + [False]])
     self.ma = Masked(self.a, mask=self.mask_a)
     self.b = np.array([[3.0001], [3.9999]])
     self.mask_b = np.array([[True], [False]])
     self.mb = Masked(self.b, mask=self.mask_b)
Пример #7
0
 def setup_class(self):
     self.a = np.arange(1., 7.).reshape(2, 3)
     self.mask_a = np.array([[True, False, False], [False, True, False]])
     self.ma = Masked(self.a, mask=self.mask_a)
     self.b = np.array([2.5, 10., 3.])
     self.mask_b = np.array([False, True, False])
     self.mb = Masked(self.b, mask=self.mask_b)
Пример #8
0
 def setup_class(self):
     self.a = np.array(['2020-12-31', '2021-01-01', '2021-01-02'], dtype='M')
     self.mask_a = np.array([False, True, False])
     self.ma = Masked(self.a, mask=self.mask_a)
     self.b = np.array([['2021-01-07'], ['2021-01-31']], dtype='M')
     self.mask_b = np.array([[False], [True]])
     self.mb = Masked(self.b, mask=self.mask_b)
Пример #9
0
 def setup_class(self):
     self.a = np.array([15, 255, 0], dtype='u1')
     self.mask_a = np.array([False, True, False])
     self.ma = Masked(self.a, mask=self.mask_a)
     self.b = np.unpackbits(self.a).reshape(6, 4)
     self.mask_b = np.array([False]*15 + [True, True] + [False]*7).reshape(6, 4)
     self.mb = Masked(self.b, mask=self.mask_b)
Пример #10
0
 def test_all_explicit(self):
     a1 = np.array([[1., 2.],
                    [3., 4.]])
     a2 = np.array([[1., 0.],
                    [3., 4.]])
     if self._data_cls is not np.ndarray:
         a1 = self._data_cls(a1, self.a.unit)
         a2 = self._data_cls(a2, self.a.unit)
     ma1 = Masked(a1, mask=[[False, False],
                            [True, True]])
     ma2 = Masked(a2, mask=[[False, True],
                            [False, True]])
     ma1_eq_ma2 = ma1 == ma2
     assert_array_equal(ma1_eq_ma2.unmasked, np.array([[True, False],
                                                       [True, True]]))
     assert_array_equal(ma1_eq_ma2.mask, np.array([[False, True],
                                                   [True, True]]))
     assert ma1_eq_ma2.all()
     assert not (ma1 != ma2).all()
     ma_eq1 = ma1_eq_ma2.all(1)
     assert_array_equal(ma_eq1.mask, np.array([False, True]))
     assert bool(ma_eq1[0]) is True
     assert bool(ma_eq1[1]) is False
     ma_eq0 = ma1_eq_ma2.all(0)
     assert_array_equal(ma_eq0.mask, np.array([False, True]))
     assert bool(ma_eq1[0]) is True
     assert bool(ma_eq1[1]) is False
Пример #11
0
 def setup_class(self):
     self.ra = np.array([3., 5., 0.]) << u.hourangle
     self.dec = np.array([4., 12., 1.]) << u.deg
     self.sc = SkyCoord(self.ra, self.dec)
     self.mask = np.array([False, False, True])
     self.mra = Masked(self.ra, self.mask)
     self.mdec = Masked(self.dec, self.mask)
     self.msc = SkyCoord(self.mra, self.mdec)
Пример #12
0
 def test_full_like(self, value):
     o = np.full_like(self.ma, value)
     if value is np.ma.masked:
         expected = Masked(o.unmasked, True)
     else:
         expected = Masked(np.empty_like(self.a))
         expected[...] = value
     assert_array_equal(o.unmasked, expected.unmasked)
     assert_array_equal(o.mask, expected.mask)
Пример #13
0
    def test_equality_strings(self, op):
        m1 = Masked(np.array(['a', 'b', 'c']), mask=[True, False, False])
        m2 = Masked(np.array(['a', 'b', 'd']), mask=[False, False, False])
        result = op(m1, m2)
        assert_array_equal(result.unmasked, op(m1.unmasked, m2.unmasked))
        assert_array_equal(result.mask, m1.mask | m2.mask)

        result2 = op(m1, m2.unmasked)
        assert_masked_equal(result2, result)
Пример #14
0
 def check(self, func, *args, **kwargs):
     ma_list = kwargs.pop('ma_list', [self.ma, self.ma])
     a_list = [Masked(ma).unmasked for ma in ma_list]
     m_list = [Masked(ma).mask for ma in ma_list]
     o = func(ma_list, *args, **kwargs)
     expected = func(a_list, *args, **kwargs)
     expected_mask = func(m_list, *args, **kwargs)
     assert_array_equal(o.unmasked, expected)
     assert_array_equal(o.mask, expected_mask)
Пример #15
0
    def test_block(self):
        self.check(np.block)

        out = np.block([[0., Masked(1., True)],
                        [Masked(1, False), Masked(2, False)]])
        expected = np.array([[0, 1.], [1, 2]])
        expected_mask = np.array([[False, True], [False, False]])
        assert_array_equal(out.unmasked, expected)
        assert_array_equal(out.mask, expected_mask)
Пример #16
0
 def test_indirect_creation(self):
     assert self.MyArray not in Masked._masked_classes
     mms = Masked(self.a, mask=self.m)
     assert isinstance(mms, Masked)
     assert isinstance(mms, self.MyArray)
     assert_array_equal(mms.unmasked, self.a)
     assert_array_equal(mms.mask, self.m)
     assert self.MyArray in Masked._masked_classes
     assert Masked(self.MyArray) is type(mms)
Пример #17
0
 def setup_class(self):
     self.x = np.array([3., 5., 0.]) << u.m
     self.y = np.array([4., 12., 1.]) << u.m
     self.z = np.array([0., 0., 1.]) << u.m
     self.c = r.CartesianRepresentation(self.x, self.y, self.z)
     self.mask = np.array([False, False, True])
     self.mx = Masked(self.x, self.mask)
     self.my = Masked(self.y, self.mask)
     self.mz = Masked(self.z, self.mask)
     self.mc = r.CartesianRepresentation(self.mx, self.my, self.mz)
Пример #18
0
 def test_interp(self):
     xp = np.arange(5.)
     fp = np.array([1., 5., 6., 19., 20.])
     mask_fp = np.array([False, False, False, True, False])
     mfp = Masked(fp, mask=mask_fp)
     x = np.array([1.5, 17.])
     mask_x = np.array([False, True])
     mx = Masked(x, mask=mask_x)
     out = np.interp(mx, xp, mfp)
     expected = np.interp(x, xp[mask_fp], fp[mask_fp])
     assert_array_equal(out.unmasked, expected)
     assert_array_equal(out.mask, mask_x)
Пример #19
0
 def test_meshgrid(self):
     a = np.arange(1., 4.)
     mask_a = np.array([True, False, False])
     ma = Masked(a, mask=mask_a)
     b = np.array([2.5, 10., 3., 4.])
     mask_b = np.array([False, True, False, True])
     mb = Masked(b, mask=mask_b)
     oa, ob = np.meshgrid(ma, mb)
     xa, xb = np.broadcast_arrays(a, b[:, np.newaxis])
     ma, mb = np.broadcast_arrays(mask_a, mask_b[:, np.newaxis])
     for o, x, m in ((oa, xa, ma), (ob, xb, mb)):
         assert_array_equal(o.unmasked, x)
         assert_array_equal(o.mask, m)
Пример #20
0
    def test_masked_list_subclass(self):
        class MyList(list):
            pass

        ml = MyList(range(3))
        mml = Masked(ml, mask=[False, True, False])
        assert isinstance(mml, Masked)
        assert isinstance(mml, MyList)
        assert isinstance(mml.unmasked, MyList)
        assert mml.unmasked == [0, 1, 2]
        assert_array_equal(mml.mask, np.array([False, True, False]))

        assert Masked(MyList) is type(mml)
Пример #21
0
    def test_insert(self):
        obj = (1, 1)
        values = Masked([50., 25.], mask=[True, False])
        out = np.insert(self.ma.flatten(), obj, values)
        expected = np.insert(self.a.flatten(), obj, [50., 25.])
        expected_mask = np.insert(self.mask_a.flatten(), obj, [True, False])
        assert_array_equal(out.unmasked, expected)
        assert_array_equal(out.mask, expected_mask)

        with pytest.raises(TypeError):
            np.insert(self.a.flatten(), obj, values)

        with pytest.raises(TypeError):
            np.insert(self.ma.flatten(), Masked(obj), values)
Пример #22
0
 def test_part_mask_setting_structured(self, item):
     ma = Masked(self.sa)
     ma.mask[item] = True
     expected = np.zeros(ma.shape, self.mask_sdt)
     expected[item] = True
     assert_array_equal(ma.mask, expected)
     ma.mask[item] = False
     assert_array_equal(ma.mask, np.zeros(ma.shape, self.mask_sdt))
     # Mask propagation
     mask = np.zeros(self.sa.shape, self.mask_sdt)
     ma = Masked(self.sa, mask)
     ma.mask[item] = True
     assert np.may_share_memory(ma.mask, mask)
     assert_array_equal(ma.mask, mask)
Пример #23
0
    def test_regression_12978(self):
        """Regression tests for https://github.com/astropy/astropy/pull/12978"""
        # This case produced incorrect results
        mask = [False, True, False]
        x = np.array([1, 2, 3])
        xp = Masked(np.array([1, 2, 3]), mask=mask)
        fp =  Masked(np.array([1, 2, 3]), mask=mask)
        result = np.interp(x, xp, fp)
        assert_array_equal(result, x)

        # This case raised a ValueError
        xp = np.array([1, 3])
        fp =  Masked(np.array([1, 3]))
        result = np.interp(x, xp, fp)
        assert_array_equal(result, x)
Пример #24
0
 def setup_class(self):
     super().setup_class()
     self.qpv = self.pv << self.pv_unit
     self.pv_mask = np.array([(True, False),
                              (False, False),
                              (False, True)], [('p', bool), ('v', bool)])
     self.mpv = Masked(self.qpv, mask=self.pv_mask)
Пример #25
0
 def test_initialization_without_mask(self):
     # Default for not giving a mask should be False.
     mcls = Masked(self.MyArray)
     mms = mcls(self.a)
     assert isinstance(mms, mcls)
     assert_array_equal(mms.unmasked, self.a)
     assert_array_equal(mms.mask, np.zeros(mms.shape, bool))
Пример #26
0
 def setup_class(self):
     self.a = np.arange(54.).reshape(3, 3, 6)
     self.mask_a = np.zeros(self.a.shape, dtype=bool)
     self.mask_a[1, 1, 1] = True
     self.mask_a[0, 1, 4] = True
     self.mask_a[1, 2, 5] = True
     self.ma = Masked(self.a, mask=self.mask_a)
Пример #27
0
 def test_initialization_without_mask(self):
     # Default for not giving a mask should be False.
     MQ = Masked(Quantity)
     mq = MQ([1., 2.], u.s)
     assert mq.unit == u.s
     assert np.all(mq.value.unmasked == [1., 2.])
     assert np.all(mq.mask == [False, False])
Пример #28
0
def choose(a, choices, out=None, mode='raise'):
    """Construct an array from an index array and a set of arrays to choose from.

    Like `numpy.choose`.  Masked indices in ``a`` will lead to masked output
    values and underlying data values are ignored if out of bounds (for
    ``mode='raise'``).  Any values masked in ``choices`` will be propagated
    if chosen.

    """
    from astropy.utils.masked import Masked

    a_data, a_mask = Masked._get_data_and_mask(a)
    if a_mask is not None and mode == 'raise':
        # Avoid raising on masked indices.
        a_data = a.filled(fill_value=0)

    kwargs = {'mode': mode}
    if out is not None:
        if not isinstance(out, Masked):
            raise NotImplementedError
        kwargs['out'] = out.unmasked

    data, masks = _get_data_and_masks(*choices)
    data_chosen = np.choose(a_data, data, **kwargs)
    if out is not None:
        kwargs['out'] = out.mask

    mask_chosen = np.choose(a_data, masks, **kwargs)
    if a_mask is not None:
        mask_chosen |= a_mask

    return Masked(data_chosen, mask_chosen) if out is None else out
Пример #29
0
def select(condlist, choicelist, default=0):
    """Return an array drawn from elements in choicelist, depending on conditions.

    Like `numpy.select`, with masks in ``choicelist`` are propagated.
    Any masks in ``condlist`` are ignored.

    """
    from astropy.utils.masked import Masked

    condlist = [c.unmasked if isinstance(c, Masked) else c for c in condlist]

    data_list, mask_list = _get_data_and_masks(*choicelist)
    default = Masked(default) if default is not np.ma.masked else Masked(
        0, mask=True)
    return ((condlist, data_list, default.unmasked), (condlist, mask_list,
                                                      default.mask), {}, None)
Пример #30
0
 def test_sort_complex(self):
     ma = Masked(np.array([1 + 2j, 0 + 4j, 3 + 0j, -1 - 1j]),
                 mask=[True, False, False, False])
     o = np.sort_complex(ma)
     indx = np.lexsort((ma.unmasked.imag, ma.unmasked.real, ma.mask))
     expected = ma[indx]
     assert_masked_equal(o, expected)