-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_sample.py
More file actions
82 lines (65 loc) · 2.36 KB
/
Copy pathtest_sample.py
File metadata and controls
82 lines (65 loc) · 2.36 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
from GF2 import GF
import numpy as np
def test_associativity():
for i in range(2, 9):
gf = GF(i)
a = 2
b = pow(2, 7)
c = pow(2, 8)-1
ab = gf._mul(a, b)
bc = gf._mul(b, c)
assert gf._mul(ab, c) == gf._mul(a, bc)
def test_commutativity():
for i in range(2, 9):
gf = GF(i)
a = 2
b = pow(2, 8)-1
ab = gf._mul(a, b)
ba = gf._mul(b, a)
assert ab == ba
def test_inverses():
for i in range(2, 9):
gf = GF(i)
for num in np.arange(1, pow(2, i)):
inv = gf._inverse(num)
assert gf._mul(num, inv) == 1
def test_gauss():
gf = GF(3)
generator_matrix = [[1,1,1,1,1,1,1],[0,1,1,1,0,1,1],[1,0,1,0,1,0,1],[0,0,0,1,0,0,0]]
generator_matrix = gf.gauss(generator_matrix)
for i, row in enumerate(generator_matrix):
for j, element in enumerate(row[0:4]):
if i == j:
assert element == 1
else:
assert element == 0
def test_hamming():
gf = GF(8)
m = 4
control_matrix = gf.hamming(m)
generator_matrix = gf.get_generator_matrix(control_matrix)
syndrome_table = gf.compute_syndromes(control_matrix)
n = pow(2,m)-1
for i in np.arange(pow(2,n)):
decoded = gf.hamming_decode(i, control_matrix)
original = gf.get_padded_poly(n, i)
difference = sum(i != j for i, j in zip(original, decoded))
assert difference == 1 or difference == 0
assert (np.matmul([decoded], control_matrix.T)%2 == 0).all()
def test_reed_muller():
target = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
[0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1],
[0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1],
[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],]
assert (GF(2).reed_muller(1, 5) == target).all()
def test_reed_solomon():
gf = GF(4)
d = 5
g , h = gf.get_matrices(d)
a = np.matmul(g, h.T)
for i in range(a.shape[0]):
for j in range(a.shape[1]):
a[i, j] = gf._mod(a[i, j], gf.irreducibles[gf.e])
assert (a == 0).all()