forked from lcompilers/lpython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
elemental_10.py
78 lines (61 loc) · 1.9 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 ltypes import i32, i64
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] = k + 1
q1[i, j, k] = (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] == k
if k == 0:
rem = 0
else:
rem = d1[i, j, k] - 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] = k + 2
q1[i, j, k] = i + j
r1 = mod(d1 * q1 + r1 + 1, d1)
for i in range(32):
for j in range(16):
for k in range(7):
assert r1[i, j, k] == k + 1
r1 = mod(2 * q1 + 1, int(2))
for i in range(32):
for j in range(16):
for k in range(7):
assert r1[i, j, k] == 1
for i in range(100):
d2[i] = i + 1
r2 = mod(int(100), d2)
for i in range(100):
assert r2[i] == 100 % (i + 1)
for i in range(100):
d2[i] = 50 - i
q2[i] = 39 - i
r2 = mod(q2, d2)
for i in range(100):
d = 50 - i
q = 39 - i
rem = r2[i]
if d == 0:
assert rem == 0
else:
assert int((q - rem)/d) - (q - rem)/d == 0
test_numpy_mod()