-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathelemental_12.py
123 lines (92 loc) · 3.17 KB
/
elemental_12.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
from lpython import i32, f32, f64
from numpy import empty, floor, ceil, sqrt, reshape, int32, float32, float64
def elemental_floor64():
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 + k + l))
observed: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
observed = floor(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(floor(array[i]) - observed1d[i])) <= eps
def elemental_floor32():
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 + k + l)))
observed: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
observed = floor(arraynd)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
assert abs(floor(arraynd[i, j, k, l]) - observed[i, j, k, l]) <= eps
def elemental_ceil64():
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 + k + l))
observed: f64[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float64)
observed = ceil(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(ceil(array[i]) - observed1d[i])) <= eps
def elemental_ceil32():
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 + k + l)))
observed: f32[32, 16, 8, 4] = empty((32, 16, 8, 4), dtype=float32)
observed = ceil(arraynd)
for i in range(32):
for j in range(16):
for k in range(8):
for l in range(4):
assert abs(ceil(arraynd[i, j, k, l]) - observed[i, j, k, l]) <= eps
elemental_floor64()
elemental_floor32()
elemental_ceil64()
elemental_ceil32()