Skip to content

Commit 2cde128

Browse files
Derfiesv923zJamie140
authored
Bitwise (#628)
* add bitwise operators * add build to requirements * [EDIT] - Tweaked test data and saved test results. * Tweaked test values for and / or * [EDIT] - Setting print options to be verbose for test comparisons. * [EDIT] - Removed call to set_printoptions and added output from ulab instead of numpy. Of note - there seems to be a discrepancy between the numpy and ulab output for one of the left_shift cases. * [EDIT] - Added newline at end of file for diffing purposes. * [EDIT] - Added print options back in as output seemed truncated. --------- Co-authored-by: Zoltán Vörös <[email protected]> Co-authored-by: JamieDouugh <[email protected]>
1 parent ef248b6 commit 2cde128

File tree

9 files changed

+168
-80
lines changed

9 files changed

+168
-80
lines changed

docs/ulab-change-log.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ version 6.1.0
1616

1717
add sinc function
1818

19+
Fri, 12 May 2023
20+
21+
version 6.0.13
22+
23+
add bitwise operators
24+
1925
Sun, 7 May 2023
2026

2127
version 6.0.12

tests/2d/numpy/bitwise_and.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66

77
dtypes = (np.uint8, np.int8, np.uint16, np.int16)
8+
test_values1 = (0, 1, 0, 1, 2, 5)
9+
test_values2 = (0, 1, 1, 0, 2, 7)
10+
811

912
for dtype1 in dtypes:
10-
x1 = np.array(range(5), dtype=dtype1)
13+
x1 = np.array(test_values1, dtype=dtype1)
1114
for dtype2 in dtypes:
12-
x2 = np.array(range(5, 0, -1), dtype=dtype2)
13-
15+
x2 = np.array(test_values2, dtype=dtype2)
1416
print(np.bitwise_and(x1, x2))

tests/2d/numpy/bitwise_and.py.exp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
array([0, 0, 2, 2, 0], dtype=uint8)
2-
array([0, 0, 2, 2, 0], dtype=int16)
3-
array([0, 0, 2, 2, 0], dtype=uint16)
4-
array([0, 0, 2, 2, 0], dtype=int16)
5-
array([0, 0, 2, 2, 0], dtype=int16)
6-
array([0, 0, 2, 2, 0], dtype=int8)
7-
array([0, 0, 2, 2, 0], dtype=uint16)
8-
array([0, 0, 2, 2, 0], dtype=int16)
9-
array([0, 0, 2, 2, 0], dtype=uint16)
10-
array([0, 0, 2, 2, 0], dtype=uint16)
11-
array([0, 0, 2, 2, 0], dtype=uint16)
12-
array([0, 0, 2, 2, 0], dtype=int16)
13-
array([0, 0, 2, 2, 0], dtype=int16)
14-
array([0, 0, 2, 2, 0], dtype=int16)
15-
array([0, 0, 2, 2, 0], dtype=int16)
16-
array([0, 0, 2, 2, 0], dtype=int16)
1+
array([0, 1, 0, 0, 2, 5], dtype=uint8)
2+
array([0, 1, 0, 0, 2, 5], dtype=int16)
3+
array([0, 1, 0, 0, 2, 5], dtype=uint16)
4+
array([0, 1, 0, 0, 2, 5], dtype=int16)
5+
array([0, 1, 0, 0, 2, 5], dtype=int16)
6+
array([0, 1, 0, 0, 2, 5], dtype=int8)
7+
array([0, 1, 0, 0, 2, 5], dtype=uint16)
8+
array([0, 1, 0, 0, 2, 5], dtype=int16)
9+
array([0, 1, 0, 0, 2, 5], dtype=uint16)
10+
array([0, 1, 0, 0, 2, 5], dtype=uint16)
11+
array([0, 1, 0, 0, 2, 5], dtype=uint16)
12+
array([0, 1, 0, 0, 2, 5], dtype=int16)
13+
array([0, 1, 0, 0, 2, 5], dtype=int16)
14+
array([0, 1, 0, 0, 2, 5], dtype=int16)
15+
array([0, 1, 0, 0, 2, 5], dtype=int16)
16+
array([0, 1, 0, 0, 2, 5], dtype=int16)

tests/2d/numpy/bitwise_or.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66

77
dtypes = (np.uint8, np.int8, np.uint16, np.int16)
8+
test_values1 = (0, 1, 0, 1, 2, 5)
9+
test_values2 = (0, 1, 1, 0, 2, 7)
10+
811

912
for dtype1 in dtypes:
10-
x1 = np.array(range(5), dtype=dtype1)
13+
x1 = np.array(test_values1, dtype=dtype1)
1114
for dtype2 in dtypes:
12-
x2 = np.array(range(5, 0, -1), dtype=dtype2)
13-
15+
x2 = np.array(test_values2, dtype=dtype2)
1416
print(np.bitwise_or(x1, x2))

tests/2d/numpy/bitwise_or.py.exp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
array([5, 5, 3, 3, 5], dtype=uint8)
2-
array([5, 5, 3, 3, 5], dtype=int16)
3-
array([5, 5, 3, 3, 5], dtype=uint16)
4-
array([5, 5, 3, 3, 5], dtype=int16)
5-
array([5, 5, 3, 3, 5], dtype=int16)
6-
array([5, 5, 3, 3, 5], dtype=int8)
7-
array([5, 5, 3, 3, 5], dtype=uint16)
8-
array([5, 5, 3, 3, 5], dtype=int16)
9-
array([5, 5, 3, 3, 5], dtype=uint16)
10-
array([5, 5, 3, 3, 5], dtype=uint16)
11-
array([5, 5, 3, 3, 5], dtype=uint16)
12-
array([5, 5, 3, 3, 5], dtype=int16)
13-
array([5, 5, 3, 3, 5], dtype=int16)
14-
array([5, 5, 3, 3, 5], dtype=int16)
15-
array([5, 5, 3, 3, 5], dtype=int16)
16-
array([5, 5, 3, 3, 5], dtype=int16)
1+
array([0, 1, 1, 1, 2, 7], dtype=uint8)
2+
array([0, 1, 1, 1, 2, 7], dtype=int16)
3+
array([0, 1, 1, 1, 2, 7], dtype=uint16)
4+
array([0, 1, 1, 1, 2, 7], dtype=int16)
5+
array([0, 1, 1, 1, 2, 7], dtype=int16)
6+
array([0, 1, 1, 1, 2, 7], dtype=int8)
7+
array([0, 1, 1, 1, 2, 7], dtype=uint16)
8+
array([0, 1, 1, 1, 2, 7], dtype=int16)
9+
array([0, 1, 1, 1, 2, 7], dtype=uint16)
10+
array([0, 1, 1, 1, 2, 7], dtype=uint16)
11+
array([0, 1, 1, 1, 2, 7], dtype=uint16)
12+
array([0, 1, 1, 1, 2, 7], dtype=int16)
13+
array([0, 1, 1, 1, 2, 7], dtype=int16)
14+
array([0, 1, 1, 1, 2, 7], dtype=int16)
15+
array([0, 1, 1, 1, 2, 7], dtype=int16)
16+
array([0, 1, 1, 1, 2, 7], dtype=int16)

tests/2d/numpy/left_shift.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@
22
from ulab import numpy as np
33
except:
44
import numpy as np
5+
np.set_printoptions(threshold=100)
56

67

8+
shift_values = (
9+
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
10+
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
11+
(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
12+
)
713
dtypes = (np.uint8, np.int8, np.uint16, np.int16)
814

9-
for dtype1 in dtypes:
10-
x1 = np.array(range(5), dtype=dtype1)
11-
for dtype2 in dtypes:
12-
x2 = np.array(range(5, 0, -1), dtype=dtype2)
1315

14-
print(np.left_shift(x1, x2))
16+
for shift_value in shift_values:
17+
for dtype1 in dtypes:
18+
x1 = np.array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=dtype1)
19+
for dtype2 in dtypes:
20+
x2 = np.array(shift_value, dtype=dtype2)
21+
print(np.left_shift(x1, x2))

tests/2d/numpy/left_shift.py.exp

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,48 @@
1-
array([0, 16, 16, 12, 8], dtype=uint8)
2-
array([0, 16, 16, 12, 8], dtype=int16)
3-
array([0, 16, 16, 12, 8], dtype=uint16)
4-
array([0, 16, 16, 12, 8], dtype=int16)
5-
array([0, 16, 16, 12, 8], dtype=int16)
6-
array([0, 16, 16, 12, 8], dtype=int8)
7-
array([0, 16, 16, 12, 8], dtype=uint16)
8-
array([0, 16, 16, 12, 8], dtype=int16)
9-
array([0, 16, 16, 12, 8], dtype=uint16)
10-
array([0, 16, 16, 12, 8], dtype=int8)
11-
array([0, 16, 16, 12, 8], dtype=uint16)
12-
array([0, 16, 16, 12, 8], dtype=int16)
13-
array([0, 16, 16, 12, 8], dtype=int16)
14-
array([0, 16, 16, 12, 8], dtype=int16)
15-
array([0, 16, 16, 12, 8], dtype=int16)
16-
array([0, 16, 16, 12, 8], dtype=int16)
1+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint8)
2+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
3+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
4+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
5+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
6+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int8)
7+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
8+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
9+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
10+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int8)
11+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
12+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
13+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
14+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
15+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
16+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
17+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=uint8)
18+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
19+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=uint16)
20+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
21+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
22+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int8)
23+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=uint16)
24+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
25+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=uint16)
26+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int8)
27+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=uint16)
28+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
29+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
30+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
31+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
32+
array([0, 2, 4, 8, 16, 32, 64, 6, 10, 14, 22, 26], dtype=int16)
33+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=uint8)
34+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
35+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=uint16)
36+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
37+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
38+
array([0, 4, 8, 16, 32, 64, -128, 12, 20, 28, 44, 52], dtype=int8)
39+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=uint16)
40+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
41+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=uint16)
42+
array([0, 4, 8, 16, 32, 64, -128, 12, 20, 28, 44, 52], dtype=int8)
43+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=uint16)
44+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
45+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
46+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
47+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)
48+
array([0, 4, 8, 16, 32, 64, 128, 12, 20, 28, 44, 52], dtype=int16)

tests/2d/numpy/right_shift.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@
22
from ulab import numpy as np
33
except:
44
import numpy as np
5+
np.set_printoptions(threshold=100)
56

67

8+
shift_values = (
9+
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
10+
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
11+
(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
12+
)
713
dtypes = (np.uint8, np.int8, np.uint16, np.int16)
814

9-
for dtype1 in dtypes:
10-
x1 = np.array(range(5), dtype=dtype1)
11-
for dtype2 in dtypes:
12-
x2 = np.array(range(5, 0, -1), dtype=dtype2)
1315

14-
print(np.right_shift(x1, x2))
16+
for shift_value in shift_values:
17+
for dtype1 in dtypes:
18+
x1 = np.array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=dtype1)
19+
for dtype2 in dtypes:
20+
x2 = np.array(shift_value, dtype=dtype2)
21+
print(np.right_shift(x1, x2))

tests/2d/numpy/right_shift.py.exp

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,48 @@
1-
array([0, 0, 0, 0, 2], dtype=uint8)
2-
array([0, 0, 0, 0, 2], dtype=int16)
3-
array([0, 0, 0, 0, 2], dtype=uint16)
4-
array([0, 0, 0, 0, 2], dtype=int16)
5-
array([0, 0, 0, 0, 2], dtype=int16)
6-
array([0, 0, 0, 0, 2], dtype=int8)
7-
array([0, 0, 0, 0, 2], dtype=uint16)
8-
array([0, 0, 0, 0, 2], dtype=int16)
9-
array([0, 0, 0, 0, 2], dtype=uint16)
10-
array([0, 0, 0, 0, 2], dtype=int8)
11-
array([0, 0, 0, 0, 2], dtype=uint16)
12-
array([0, 0, 0, 0, 2], dtype=int16)
13-
array([0, 0, 0, 0, 2], dtype=int16)
14-
array([0, 0, 0, 0, 2], dtype=int16)
15-
array([0, 0, 0, 0, 2], dtype=int16)
16-
array([0, 0, 0, 0, 2], dtype=int16)
1+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint8)
2+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
3+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
4+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
5+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
6+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int8)
7+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
8+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
9+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
10+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int8)
11+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=uint16)
12+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
13+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
14+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
15+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
16+
array([0, 1, 2, 4, 8, 16, 32, 3, 5, 7, 11, 13], dtype=int16)
17+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=uint8)
18+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
19+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=uint16)
20+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
21+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
22+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int8)
23+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=uint16)
24+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
25+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=uint16)
26+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int8)
27+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=uint16)
28+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
29+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
30+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
31+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
32+
array([0, 0, 1, 2, 4, 8, 16, 1, 2, 3, 5, 6], dtype=int16)
33+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=uint8)
34+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
35+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=uint16)
36+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
37+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
38+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int8)
39+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=uint16)
40+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
41+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=uint16)
42+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int8)
43+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=uint16)
44+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
45+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
46+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
47+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)
48+
array([0, 0, 0, 1, 2, 4, 8, 0, 1, 1, 2, 3], dtype=int16)

0 commit comments

Comments
 (0)