-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathelemental_10.py
78 lines (61 loc) · 2.01 KB
/
elemental_10.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from lpython import i32, i64, f64
from numpy import mod, int64, empty
def test_numpy_mod():
q1: i64[32, 16, 7] = empty((32, 16, 7), dtype=int64)
d1: i64[32, 16, 7] = empty((32, 16, 7), dtype=int64)
r1: i64[32, 16, 7] = empty((32, 16, 7), dtype=int64)
r1neg: i64[32, 16, 7] = empty((32, 16, 7), dtype=int64)
q2: i64[100] = empty(100, dtype=int64)
d2: i64[100] = empty(100, dtype=int64)
r2: i64[100] = empty(100, dtype=int64)
i: i32; j: i32; k: i32
rem: i64; q: i64; d: i64
for i in range(32):
for j in range(16):
for k in range(7):
d1[i, j, k] = i64(k + 1)
q1[i, j, k] = i64((i + j) * (k + 1) + k)
r1 = mod(q1, d1)
r1neg = mod(-q1, d1)
for i in range(32):
for j in range(16):
for k in range(7):
assert r1[i, j, k] == i64(k)
if k == 0:
rem = i64(0)
else:
rem = d1[i, j, k] - i64(k)
assert r1neg[i, j, k] == rem
for i in range(32):
for j in range(16):
for k in range(7):
d1[i, j, k] = i64(k + 2)
q1[i, j, k] = i64(i + j)
r1 = mod(d1 * q1 + r1 + i64(1), d1)
for i in range(32):
for j in range(16):
for k in range(7):
assert r1[i, j, k] == i64(k + 1)
r1 = mod(i64(2) * q1 + i64(1), int(2))
for i in range(32):
for j in range(16):
for k in range(7):
assert r1[i, j, k] == i64(1)
for i in range(100):
d2[i] = i64(i + 1)
r2 = mod(int(100), d2)
for i in range(100):
assert r2[i] == i64(100 % (i + 1))
for i in range(100):
d2[i] = i64(50 - i)
q2[i] = i64(39 - i)
r2 = mod(q2, d2)
for i in range(100):
d = i64(50 - i)
q = i64(39 - i)
rem = r2[i]
if d == i64(0):
assert rem == i64(0)
else:
assert f64(int((q - rem)/d)) - (q - rem)/d == 0.0
test_numpy_mod()