-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathelemental_13.py
124 lines (92 loc) · 3.16 KB
/
elemental_13.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from lpython import f32, f64
from numpy import trunc, fix, empty, sqrt, reshape, int32, float32, float64
def elemental_trunc64():
i: i32
j: i32
k: i32
l: i32
eps: f32
eps = f32(1e-6)
arraynd: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
newshape: i32[1] = empty(1, dtype = int32)
newshape[0] = 16384
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
arraynd[i, j, k, l] = f64((-1)**l) * sqrt(float(i + j + j + l))
observed: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
observed = trunc(arraynd)
observed1d: f64[16384] = empty(16384, dtype=float64)
observed1d = reshape(observed, newshape)
array: f64[16384] = empty(16384, dtype=float64)
array = reshape(arraynd, newshape)
for i in range(16384):
assert f32(abs(trunc(array[i]) - observed1d[i])) <= eps
def elemental_trunc32():
i: i32
j: i32
k: i32
l: i32
eps: f32
eps = f32(1e-6)
arraynd: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
arraynd[i, j, k, l] = f32(f64((-1)**l) * sqrt(float(i + j + j + l)))
observed: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
observed = trunc(arraynd)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
assert abs(trunc(arraynd[i, j, k, l]) - observed[i, j, k, l]) <= eps
def elemental_fix64():
i: i32
j: i32
k: i32
l: i32
eps: f32
eps = f32(1e-6)
arraynd: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
newshape: i32[1] = empty(1, dtype = int32)
newshape[0] = 16384
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
arraynd[i, j, k, l] = f64((-1)**l) * sqrt(float(i + j + j + l))
observed: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
observed = fix(arraynd)
observed1d: f64[16384] = empty(16384, dtype=float64)
observed1d = reshape(observed, newshape)
array: f64[16384] = empty(16384, dtype=float64)
array = reshape(arraynd, newshape)
for i in range(16384):
assert f32(abs(fix(array[i]) - observed1d[i])) <= eps
def elemental_fix32():
i: i32
j: i32
k: i32
l: i32
eps: f32
eps = f32(1e-6)
arraynd: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
arraynd[i, j, k, l] = f32(f64((-1)**l) * sqrt(float(i + j + j + l)))
observed: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
observed = fix(arraynd)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
assert abs(fix(arraynd[i, j, k, l]) - observed[i, j, k, l]) <= eps
elemental_trunc64()
elemental_trunc32()
elemental_fix64()
elemental_fix32()