summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorSebastian Berg <sebastian@sipsolutions.net>2021-04-19 15:16:51 -0500
committerSebastian Berg <sebastian@sipsolutions.net>2021-05-12 15:33:34 -0700
commitaaaa9753277ff9d387beecaf0f43519eacdea4eb (patch)
tree90d14001e26085de2cd6865d86f595b02110001c /numpy
parent6b79a8ee7a9db83fbd693cc6d9097aeb3ca4a8d6 (diff)
downloadnumpy-aaaa9753277ff9d387beecaf0f43519eacdea4eb.tar.gz
DOC,TST: Fix documentation and add tests
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/tests/test_dtype.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py
index 53e4821ae..2246a4802 100644
--- a/numpy/core/tests/test_dtype.py
+++ b/numpy/core/tests/test_dtype.py
@@ -1088,6 +1088,41 @@ class TestPickling:
assert roundtrip_DType is DType
+class TestPromotion:
+ """Test cases related to more complex DType promotions. Further promotion
+ tests are defined in `test_numeric.py`
+ """
+ @pytest.mark.parametrize(["other", "expected"],
+ [(2**16-1, np.complex64),
+ (2**32-1, np.complex128),
+ (np.float16(2), np.complex64),
+ (np.float32(2), np.complex64),
+ (np.float128(2), np.complex64),
+ (np.nextafter(np.longdouble(1.7e308), 0.), np.complex128),
+ (np.longdouble(1.7e308), np.clongdouble),
+ ])
+ def test_complex_value_based(self, other, expected):
+ # This would change if we modfiy the value based promotion
+ min_complex = np.dtype(np.complex64)
+
+ res = np.result_type(other, min_complex)
+ assert res == expected
+ # Check the same for a simple ufunc call that uses the same logic:
+ res = np.minimum(other, np.ones(3, dtype=min_complex)).dtype
+ assert res == expected
+
+ @pytest.mark.parametrize(["dtypes", "expected"],
+ [([np.uint16, np.int16, np.float16], np.float32),
+ ([np.uint16, np.int8, np.float16], np.float32),
+ ([np.uint8, np.int16, np.float16], np.float32)])
+ def test_permutations_do_not_influence_result(self, dtypes, expected):
+ # Tests that most permutations do not influence the result. In the
+ # above some uint and int combintations promote to a larger integer
+ # type, which would then promote to a larger than necessary float.
+ for perm in permutations(dtypes):
+ assert np.result_type(*perm) == expected
+
+
def test_rational_dtype():
# test for bug gh-5719
a = np.array([1111], dtype=rational).astype