diff options
author | Bas van Beek <b.f.van.beek@vu.nl> | 2020-10-01 01:26:11 +0200 |
---|---|---|
committer | Bas van Beek <b.f.van.beek@vu.nl> | 2020-10-05 16:08:53 +0200 |
commit | cb92195c59be15415ce795367aeac6619f069257 (patch) | |
tree | dfaeec57b991a2cfbd5babfc0eeeda5b19fe73f4 | |
parent | 5dbcbb79478a8eddf05a72f7030bdf29a93ff46c (diff) | |
download | numpy-cb92195c59be15415ce795367aeac6619f069257.tar.gz |
TST: Added tests for bitwise operations
-rw-r--r-- | numpy/typing/tests/data/fail/bitwise_ops.py | 19 | ||||
-rw-r--r-- | numpy/typing/tests/data/pass/bitwise_ops.py | 131 | ||||
-rw-r--r-- | numpy/typing/tests/data/reveal/bitwise_ops.py | 131 |
3 files changed, 281 insertions, 0 deletions
diff --git a/numpy/typing/tests/data/fail/bitwise_ops.py b/numpy/typing/tests/data/fail/bitwise_ops.py new file mode 100644 index 000000000..9be6869ad --- /dev/null +++ b/numpy/typing/tests/data/fail/bitwise_ops.py @@ -0,0 +1,19 @@ +import numpy as np + +i8 = np.int64() +i4 = np.int32() +u8 = np.uint64() +b_ = np.bool_() +i = int() + +f8 = np.float64() + +b_ >> f8 # E: No overload variant +i8 << f8 # E: incompatible type +i | f8 # E: Unsupported operand types +i8 ^ f8 # E: incompatible type +u8 & f8 # E: No overload variant +~f8 # E: Unsupported operand type + +# mypys' error message for `NoReturn` is unfortunately pretty nad +a = u8 | 0 # E: Need type annotation diff --git a/numpy/typing/tests/data/pass/bitwise_ops.py b/numpy/typing/tests/data/pass/bitwise_ops.py new file mode 100644 index 000000000..67449e2c2 --- /dev/null +++ b/numpy/typing/tests/data/pass/bitwise_ops.py @@ -0,0 +1,131 @@ +import numpy as np + +i8 = np.int64(1) +u8 = np.uint64(1) + +i4 = np.int32(1) +u4 = np.uint32(1) + +b_ = np.bool_(1) + +b = bool(1) +i = int(1) + +AR = np.array([0, 1, 2], dtype=np.int32) +AR.setflags(write=False) + + +i8 << i8 +i8 >> i8 +i8 | i8 +i8 ^ i8 +i8 & i8 + +i8 << AR +i8 >> AR +i8 | AR +i8 ^ AR +i8 & AR + +i4 << i4 +i4 >> i4 +i4 | i4 +i4 ^ i4 +i4 & i4 + +i8 << i4 +i8 >> i4 +i8 | i4 +i8 ^ i4 +i8 & i4 + +i8 << i +i8 >> i +i8 | i +i8 ^ i +i8 & i + +i8 << b_ +i8 >> b_ +i8 | b_ +i8 ^ b_ +i8 & b_ + +i8 << b +i8 >> b +i8 | b +i8 ^ b +i8 & b + +u8 << u8 +u8 >> u8 +u8 | u8 +u8 ^ u8 +u8 & u8 + +u8 << AR +u8 >> AR +u8 | AR +u8 ^ AR +u8 & AR + +u4 << u4 +u4 >> u4 +u4 | u4 +u4 ^ u4 +u4 & u4 + +u4 << i4 +u4 >> i4 +u4 | i4 +u4 ^ i4 +u4 & i4 + +u4 << i +u4 >> i +u4 | i +u4 ^ i +u4 & i + +u8 << b_ +u8 >> b_ +u8 | b_ +u8 ^ b_ +u8 & b_ + +u8 << b +u8 >> b +u8 | b +u8 ^ b +u8 & b + +b_ << b_ +b_ >> b_ +b_ | b_ +b_ ^ b_ +b_ & b_ + +b_ << AR +b_ >> AR +b_ | AR +b_ ^ AR +b_ & AR + +b_ << b +b_ >> b +b_ | b +b_ ^ b +b_ & b + +b_ << i +b_ >> i +b_ | i +b_ ^ i +b_ & i + +~i8 +~i4 +~u8 +~u4 +~b_ +~AR diff --git a/numpy/typing/tests/data/reveal/bitwise_ops.py b/numpy/typing/tests/data/reveal/bitwise_ops.py new file mode 100644 index 000000000..ae899f47b --- /dev/null +++ b/numpy/typing/tests/data/reveal/bitwise_ops.py @@ -0,0 +1,131 @@ +import numpy as np + +i8 = np.int64(1) +u8 = np.uint64(1) + +i4 = np.int32(1) +u4 = np.uint32(1) + +b_ = np.bool_(1) + +b = bool(1) +i = int(1) + +AR = np.array([0, 1, 2], dtype=np.int32) +AR.setflags(write=False) + + +reveal_type(i8 << i8) # E: numpy.signedinteger +reveal_type(i8 >> i8) # E: numpy.signedinteger +reveal_type(i8 | i8) # E: numpy.signedinteger +reveal_type(i8 ^ i8) # E: numpy.signedinteger +reveal_type(i8 & i8) # E: numpy.signedinteger + +reveal_type(i8 << AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(i8 >> AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(i8 | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(i8 ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(i8 & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] + +reveal_type(i4 << i4) # E: numpy.signedinteger +reveal_type(i4 >> i4) # E: numpy.signedinteger +reveal_type(i4 | i4) # E: numpy.signedinteger +reveal_type(i4 ^ i4) # E: numpy.signedinteger +reveal_type(i4 & i4) # E: numpy.signedinteger + +reveal_type(i8 << i4) # E: numpy.signedinteger +reveal_type(i8 >> i4) # E: numpy.signedinteger +reveal_type(i8 | i4) # E: numpy.signedinteger +reveal_type(i8 ^ i4) # E: numpy.signedinteger +reveal_type(i8 & i4) # E: numpy.signedinteger + +reveal_type(i8 << i) # E: numpy.signedinteger +reveal_type(i8 >> i) # E: numpy.signedinteger +reveal_type(i8 | i) # E: numpy.signedinteger +reveal_type(i8 ^ i) # E: numpy.signedinteger +reveal_type(i8 & i) # E: numpy.signedinteger + +reveal_type(i8 << b_) # E: numpy.int64 +reveal_type(i8 >> b_) # E: numpy.int64 +reveal_type(i8 | b_) # E: numpy.int64 +reveal_type(i8 ^ b_) # E: numpy.int64 +reveal_type(i8 & b_) # E: numpy.int64 + +reveal_type(i8 << b) # E: numpy.signedinteger +reveal_type(i8 >> b) # E: numpy.signedinteger +reveal_type(i8 | b) # E: numpy.signedinteger +reveal_type(i8 ^ b) # E: numpy.signedinteger +reveal_type(i8 & b) # E: numpy.signedinteger + +reveal_type(u8 << u8) # E: numpy.unsignedinteger +reveal_type(u8 >> u8) # E: numpy.unsignedinteger +reveal_type(u8 | u8) # E: numpy.unsignedinteger +reveal_type(u8 ^ u8) # E: numpy.unsignedinteger +reveal_type(u8 & u8) # E: numpy.unsignedinteger + +reveal_type(u8 << AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(u8 >> AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(u8 | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(u8 ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(u8 & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] + +reveal_type(u4 << u4) # E: numpy.unsignedinteger +reveal_type(u4 >> u4) # E: numpy.unsignedinteger +reveal_type(u4 | u4) # E: numpy.unsignedinteger +reveal_type(u4 ^ u4) # E: numpy.unsignedinteger +reveal_type(u4 & u4) # E: numpy.unsignedinteger + +reveal_type(u4 << i4) # E: numpy.signedinteger +reveal_type(u4 >> i4) # E: numpy.signedinteger +reveal_type(u4 | i4) # E: numpy.signedinteger +reveal_type(u4 ^ i4) # E: numpy.signedinteger +reveal_type(u4 & i4) # E: numpy.signedinteger + +reveal_type(u4 << i) # E: numpy.signedinteger +reveal_type(u4 >> i) # E: numpy.signedinteger +reveal_type(u4 | i) # E: numpy.signedinteger +reveal_type(u4 ^ i) # E: numpy.signedinteger +reveal_type(u4 & i) # E: numpy.signedinteger + +reveal_type(u8 << b_) # E: numpy.uint64 +reveal_type(u8 >> b_) # E: numpy.uint64 +reveal_type(u8 | b_) # E: numpy.uint64 +reveal_type(u8 ^ b_) # E: numpy.uint64 +reveal_type(u8 & b_) # E: numpy.uint64 + +reveal_type(u8 << b) # E: numpy.unsignedinteger +reveal_type(u8 >> b) # E: numpy.unsignedinteger +reveal_type(u8 | b) # E: numpy.unsignedinteger +reveal_type(u8 ^ b) # E: numpy.unsignedinteger +reveal_type(u8 & b) # E: numpy.unsignedinteger + +reveal_type(b_ << b_) # E: numpy.int8 +reveal_type(b_ >> b_) # E: numpy.int8 +reveal_type(b_ | b_) # E: numpy.bool_ +reveal_type(b_ ^ b_) # E: numpy.bool_ +reveal_type(b_ & b_) # E: numpy.bool_ + +reveal_type(b_ << AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(b_ >> AR) # E: Union[numpy.ndarray, numpy.integer] +reveal_type(b_ | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(b_ ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] +reveal_type(b_ & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_] + +reveal_type(b_ << b) # E: numpy.int8 +reveal_type(b_ >> b) # E: numpy.int8 +reveal_type(b_ | b) # E: numpy.bool_ +reveal_type(b_ ^ b) # E: numpy.bool_ +reveal_type(b_ & b) # E: numpy.bool_ + +reveal_type(b_ << i) # E: Union[numpy.int32, numpy.int64] +reveal_type(b_ >> i) # E: Union[numpy.int32, numpy.int64] +reveal_type(b_ | i) # E: Union[numpy.int32, numpy.int64] +reveal_type(b_ ^ i) # E: Union[numpy.int32, numpy.int64] +reveal_type(b_ & i) # E: Union[numpy.int32, numpy.int64] + +reveal_type(~i8) # E: numpy.int64 +reveal_type(~i4) # E: numpy.int32 +reveal_type(~u8) # E: numpy.uint64 +reveal_type(~u4) # E: numpy.uint32 +reveal_type(~b_) # E: numpy.bool_ +reveal_type(~AR) # E: Union[numpy.ndarray*, numpy.integer, numpy.bool_] |