| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | """Tests of the ._exceptions module. Primarily for exercising the __str__ methods."""import pickleimport pytestimport numpy as np_ArrayMemoryError = np.core._exceptions._ArrayMemoryError_UFuncNoLoopError = np.core._exceptions._UFuncNoLoopErrorclass TestArrayMemoryError:    def test_pickling(self):        """ Test that _ArrayMemoryError can be pickled """        error = _ArrayMemoryError((1023,), np.dtype(np.uint8))        res = pickle.loads(pickle.dumps(error))        assert res._total_size == error._total_size    def test_str(self):        e = _ArrayMemoryError((1023,), np.dtype(np.uint8))        str(e)  # not crashing is enough    # testing these properties is easier than testing the full string repr    def test__size_to_string(self):        """ Test e._size_to_string """        f = _ArrayMemoryError._size_to_string        Ki = 1024        assert f(0) == '0 bytes'        assert f(1) == '1 bytes'        assert f(1023) == '1023 bytes'        assert f(Ki) == '1.00 KiB'        assert f(Ki+1) == '1.00 KiB'        assert f(10*Ki) == '10.0 KiB'        assert f(int(999.4*Ki)) == '999. KiB'        assert f(int(1023.4*Ki)) == '1023. KiB'        assert f(int(1023.5*Ki)) == '1.00 MiB'        assert f(Ki*Ki) == '1.00 MiB'        # 1023.9999 Mib should round to 1 GiB        assert f(int(Ki*Ki*Ki*0.9999)) == '1.00 GiB'        assert f(Ki*Ki*Ki*Ki*Ki*Ki) == '1.00 EiB'        # larger than sys.maxsize, adding larger prefixes isn't going to help        # anyway.        assert f(Ki*Ki*Ki*Ki*Ki*Ki*123456) == '123456. EiB'    def test__total_size(self):        """ Test e._total_size """        e = _ArrayMemoryError((1,), np.dtype(np.uint8))        assert e._total_size == 1        e = _ArrayMemoryError((2, 4), np.dtype((np.uint64, 16)))        assert e._total_size == 1024class TestUFuncNoLoopError:    def test_pickling(self):        """ Test that _UFuncNoLoopError can be pickled """        assert isinstance(pickle.dumps(_UFuncNoLoopError), bytes)@pytest.mark.parametrize("args", [    (2, 1, None),    (2, 1, "test_prefix"),    ("test message",),])class TestAxisError:    def test_attr(self, args):        """Validate attribute types."""        exc = np.AxisError(*args)        if len(args) == 1:            assert exc.axis is None            assert exc.ndim is None        else:            axis, ndim, *_ = args            assert exc.axis == axis            assert exc.ndim == ndim    def test_pickling(self, args):        """Test that `AxisError` can be pickled."""        exc = np.AxisError(*args)        exc2 = pickle.loads(pickle.dumps(exc))        assert type(exc) is type(exc2)        for name in ("axis", "ndim", "args"):            attr1 = getattr(exc, name)            attr2 = getattr(exc2, name)            assert attr1 == attr2, name
 |