-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathtest_numpy_03.py
97 lines (83 loc) · 2.32 KB
/
test_numpy_03.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from lpython import f64, i32
from numpy import reshape, empty, int32, float64
def test_nd_to_1d(a: f64[:, :]):
i: i32
j: i32
k: i32
l: i32
eps: f64
eps = 1e-12
b: f64[256] = empty(256, dtype=float64)
newshape: i32[1] = empty(1, dtype=int32)
newshape[0] = 256
b = reshape(a, newshape)
for k in range(256):
i = k//16
j = k - i*16
assert abs(b[k] - f64(i + j) - 0.5) <= eps
c: f64[16, 16, 16] = empty((16, 16, 16), dtype=float64)
c = empty((16, 16, 16), dtype=float64)
for i in range(16):
for j in range(16):
for k in range(16):
c[i, j, k] = f64(i + j + k) + 0.5
d: f64[4096] = empty(4096, dtype=float64)
newshape1: i32[1] = empty(1, dtype=int32)
newshape1[0] = 4096
d = reshape(c, newshape1)
for l in range(4096):
i = i32(l/256)
j = (l - i*256)//16
k = (l - i*256 - j*16)
assert abs(d[l] - f64(i + j + k) - 0.5) <= eps
def test_1d_to_nd(d: f64[:]):
i: i32
j: i32
k: i32
l: i32
eps: f64
eps = 1e-12
b: f64[256] = empty(256, dtype=float64)
for k in range(256):
i = k//16
j = k - i*16
b[k] = f64(i + j) + 0.5
a: f64[16, 16]
a = empty((16, 16), dtype=float64)
newshape: i32[2] = empty(2, dtype=int32)
newshape[0] = 16
newshape[1] = 16
a = reshape(b, newshape)
for i in range(16):
for j in range(16):
assert abs(a[i, j] - f64(i + j) - 0.5) <= eps
c: f64[16, 16, 16]
c = empty((16, 16, 16), dtype=float64)
newshape1: i32[3] = empty(3, dtype=int32)
newshape1[0] = 16
newshape1[1] = 16
newshape1[2] = 16
c = reshape(d, newshape1)
for i in range(16):
for j in range(16):
for k in range(16):
assert abs(c[i, j, k] - f64(i + j + k) - 0.5) <= eps
def test_reshape_with_argument():
i: i32
j: i32
k: i32
l: i32
a: f64[16, 16]
a = empty((16, 16), dtype=float64)
for i in range(16):
for j in range(16):
a[i, j] = f64(i + j) + 0.5
test_nd_to_1d(a)
d: f64[4096] = empty(4096, dtype=float64)
for l in range(4096):
i = i32(l/256)
j = (l - i*256)//16
k = (l - i*256 - j*16)
d[l] = f64(i + j + k) + 0.5
test_1d_to_nd(d)
test_reshape_with_argument()