-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_ferrix.py
More file actions
132 lines (113 loc) · 3.6 KB
/
Copy pathtest_ferrix.py
File metadata and controls
132 lines (113 loc) · 3.6 KB
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
125
126
127
128
129
130
131
132
import ferrix
import numpy as np
def test_creation_and_get():
data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
shape = [2, 3]
arr = ferrix.PyNDArray(data, shape)
assert arr.shape() == shape
assert arr.get([0, 0]) == 1.0
assert arr.get([0, 1]) == 2.0
assert arr.get([0, 2]) == 3.0
assert arr.get([1, 0]) == 4.0
assert arr.get([1, 1]) == 5.0
assert arr.get([1, 2]) == 6.0
def test_add():
data1 = [1.0, 2.0, 3.0, 4.0]
data2 = [5.0, 6.0, 7.0, 8.0]
shape = [2, 2]
arr1 = ferrix.PyNDArray(data1, shape)
arr2 = ferrix.PyNDArray(data2, shape)
res = arr1.add(arr2)
np_res = np.array(data1).reshape(shape) + np.array(data2).reshape(shape)
for i in range(2):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_mul():
data1 = [1.0, 2.0, 3.0, 4.0]
data2 = [5.0, 6.0, 7.0, 8.0]
shape = [2, 2]
arr1 = ferrix.PyNDArray(data1, shape)
arr2 = ferrix.PyNDArray(data2, shape)
res = arr1.mul(arr2)
np_res = np.array(data1).reshape(shape) * np.array(data2).reshape(shape)
for i in range(2):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_matmul():
data1 = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
shape1 = [2, 3]
data2 = [7.0, 8.0, 9.0, 10.0, 11.0, 12.0]
shape2 = [3, 2]
arr1 = ferrix.PyNDArray(data1, shape1)
arr2 = ferrix.PyNDArray(data2, shape2)
res = arr1.matmul(arr2)
np_res = np.dot(np.array(data1).reshape(shape1), np.array(data2).reshape(shape2))
assert res.shape() == [2, 2]
for i in range(2):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_matmul_blas():
data1 = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
shape1 = [2, 3]
data2 = [7.0, 8.0, 9.0, 10.0, 11.0, 12.0]
shape2 = [3, 2]
arr1 = ferrix.PyNDArray(data1, shape1)
arr2 = ferrix.PyNDArray(data2, shape2)
res = arr1.matmul_blas(arr2)
np_res = np.dot(np.array(data1).reshape(shape1), np.array(data2).reshape(shape2))
assert res.shape() == [2, 2]
for i in range(2):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_relu():
data = [-1.0, 0.0, 1.0, -2.0]
shape = [2, 2]
arr = ferrix.PyNDArray(data, shape)
res = arr.relu()
np_res = np.maximum(0, np.array(data).reshape(shape))
for i in range(2):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_sum_mean():
data = [1.0, 2.0, 3.0, 4.0]
shape = [2, 2]
arr = ferrix.PyNDArray(data, shape)
assert arr.sum() == 10.0
assert arr.mean() == 2.5
def test_transpose():
data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
shape = [2, 3]
arr = ferrix.PyNDArray(data, shape)
res = arr.transpose()
assert res.shape() == [3, 2]
np_res = np.array(data).reshape(shape).T
for i in range(3):
for j in range(2):
assert res.get([i, j]) == np_res[i, j]
def test_softmax():
data = [1.0, 2.0, 3.0]
shape = [1, 3]
arr = ferrix.PyNDArray(data, shape)
res = arr.softmax()
np_data = np.array(data)
e_x = np.exp(np_data - np.max(np_data))
np_res = e_x / e_x.sum()
for i in range(3):
assert abs(res.get([0, i]) - np_res[i]) < 1e-6
def test_argmax():
data = [1.0, 3.0, 2.0, 4.0, 0.0]
shape = [5]
arr = ferrix.PyNDArray(data, shape)
assert arr.argmax() == 3
if __name__ == "__main__":
test_creation_and_get()
test_add()
test_mul()
test_matmul()
test_matmul_blas()
test_relu()
test_sum_mean()
test_transpose()
test_softmax()
test_argmax()
print("All tests passed!")