656c8d7c8bc74401f2edbf42ffd2a3aed59f7a23
[bigint-presentation-code.git] / src / bigint_presentation_code / test_toom_cook.py
1 import unittest
2
3 from bigint_presentation_code.toom_cook import ToomCookInstance
4
5
6 class TestToomCook(unittest.TestCase):
7 def test_toom_2(self):
8 TOOM_2 = ToomCookInstance.make_toom_2()
9 # print(repr(repr(TOOM_2)))
10 self.assertEqual(
11 repr(TOOM_2),
12 "ToomCookInstance(lhs_part_count=2, rhs_part_count=2, "
13 "eval_points=(0, 1, POINT_AT_INFINITY), "
14 "lhs_eval_ops=("
15 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
16 "EvalOpAdd(lhs="
17 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
18 "rhs="
19 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
20 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(1, 1)})), "
21 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)}))),"
22 " rhs_eval_ops=("
23 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
24 "EvalOpAdd(lhs="
25 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
26 "rhs="
27 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
28 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(1, 1)})), "
29 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)}))),"
30 " prod_eval_ops=("
31 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
32 "EvalOpSub(lhs="
33 "EvalOpSub(lhs="
34 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
35 "rhs="
36 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
37 "poly=EvalOpPoly({0: Fraction(-1, 1), 1: Fraction(1, 1)})), "
38 "rhs="
39 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
40 "poly=EvalOpPoly({"
41 "0: Fraction(-1, 1), 1: Fraction(1, 1), 2: Fraction(-1, 1)})), "
42 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)}))))"
43 )
44
45 def test_toom_2_5(self):
46 TOOM_2_5 = ToomCookInstance.make_toom_2_5()
47 # print(repr(repr(TOOM_2_5)))
48 self.assertEqual(
49 repr(TOOM_2_5),
50 "ToomCookInstance(lhs_part_count=3, rhs_part_count=2, "
51 "eval_points=(0, 1, -1, POINT_AT_INFINITY), lhs_eval_ops=("
52 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
53 "EvalOpAdd(lhs="
54 "EvalOpAdd(lhs="
55 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
56 "rhs=EvalOpInput(lhs=2, rhs=0, "
57 "poly=EvalOpPoly({2: Fraction(1, 1)})), "
58 "poly=EvalOpPoly({0: Fraction(1, 1), 2: Fraction(1, 1)})), "
59 "rhs=EvalOpInput(lhs=1, rhs=0, "
60 "poly=EvalOpPoly({1: Fraction(1, 1)})), "
61 "poly=EvalOpPoly({"
62 "0: Fraction(1, 1), 1: Fraction(1, 1), 2: Fraction(1, 1)})), "
63 "EvalOpSub(lhs="
64 "EvalOpAdd(lhs="
65 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
66 "rhs=EvalOpInput(lhs=2, rhs=0, "
67 "poly=EvalOpPoly({2: Fraction(1, 1)})), "
68 "poly=EvalOpPoly({0: Fraction(1, 1), 2: Fraction(1, 1)})), "
69 "rhs=EvalOpInput(lhs=1, rhs=0, "
70 "poly=EvalOpPoly({1: Fraction(1, 1)})), poly=EvalOpPoly("
71 "{0: Fraction(1, 1), 1: Fraction(-1, 1), 2: Fraction(1, 1)})), "
72 "EvalOpInput(lhs=2, rhs=0, "
73 "poly=EvalOpPoly({2: Fraction(1, 1)}))), rhs_eval_ops=("
74 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
75 "EvalOpAdd(lhs=EvalOpInput(lhs=0, rhs=0, "
76 "poly=EvalOpPoly({0: Fraction(1, 1)})), rhs="
77 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
78 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(1, 1)})), "
79 "EvalOpSub(lhs="
80 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
81 "rhs=EvalOpInput(lhs=1, rhs=0, "
82 "poly=EvalOpPoly({1: Fraction(1, 1)})), "
83 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(-1, 1)})), "
84 "EvalOpInput(lhs=1, rhs=0, "
85 "poly=EvalOpPoly({1: Fraction(1, 1)}))), "
86 "prod_eval_ops=("
87 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
88 "EvalOpSub(lhs=EvalOpExactDiv(lhs=EvalOpSub(lhs="
89 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
90 "rhs=EvalOpInput(lhs=2, rhs=0, "
91 "poly=EvalOpPoly({2: Fraction(1, 1)})), "
92 "poly=EvalOpPoly({1: Fraction(1, 1), 2: Fraction(-1, 1)})), "
93 "rhs=2, "
94 "poly=EvalOpPoly({1: Fraction(1, 2), 2: Fraction(-1, 2)})), rhs="
95 "EvalOpInput(lhs=3, rhs=0, poly=EvalOpPoly({3: Fraction(1, 1)})), "
96 "poly=EvalOpPoly("
97 "{1: Fraction(1, 2), 2: Fraction(-1, 2), 3: Fraction(-1, 1)})), "
98 "EvalOpSub(lhs=EvalOpExactDiv(lhs=EvalOpAdd(lhs="
99 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
100 "rhs="
101 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
102 "poly=EvalOpPoly({1: Fraction(1, 1), 2: Fraction(1, 1)})), rhs=2, "
103 "poly=EvalOpPoly({1: Fraction(1, 2), 2: Fraction(1, 2)})), rhs="
104 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
105 "poly=EvalOpPoly("
106 "{0: Fraction(-1, 1), 1: Fraction(1, 2), 2: Fraction(1, 2)})), "
107 "EvalOpInput(lhs=3, rhs=0, poly=EvalOpPoly({3: Fraction(1, 1)}))))"
108 )
109
110 def test_reversed_toom_2_5(self):
111 TOOM_2_5 = ToomCookInstance.make_toom_2_5().reversed()
112 print(repr(repr(TOOM_2_5)))
113 self.assertEqual(
114 repr(TOOM_2_5),
115 "ToomCookInstance(lhs_part_count=2, rhs_part_count=3, "
116 "eval_points=(0, 1, -1, POINT_AT_INFINITY), lhs_eval_ops=("
117 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
118 "EvalOpAdd(lhs="
119 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
120 "rhs="
121 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
122 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(1, 1)})), "
123 "EvalOpSub(lhs="
124 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
125 "rhs="
126 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
127 "poly=EvalOpPoly({0: Fraction(1, 1), 1: Fraction(-1, 1)})), "
128 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)}))),"
129 " rhs_eval_ops=("
130 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
131 "EvalOpAdd(lhs=EvalOpAdd(lhs="
132 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
133 "rhs="
134 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
135 "poly=EvalOpPoly({0: Fraction(1, 1), 2: Fraction(1, 1)})), rhs="
136 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
137 "poly=EvalOpPoly("
138 "{0: Fraction(1, 1), 1: Fraction(1, 1), 2: Fraction(1, 1)})), "
139 "EvalOpSub(lhs=EvalOpAdd(lhs="
140 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
141 "rhs="
142 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
143 "poly=EvalOpPoly({0: Fraction(1, 1), 2: Fraction(1, 1)})), rhs="
144 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
145 "poly=EvalOpPoly("
146 "{0: Fraction(1, 1), 1: Fraction(-1, 1), 2: Fraction(1, 1)})), "
147 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)}))),"
148 " prod_eval_ops=("
149 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
150 "EvalOpSub(lhs=EvalOpExactDiv(lhs=EvalOpSub(lhs="
151 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
152 "rhs="
153 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
154 "poly=EvalOpPoly({1: Fraction(1, 1), 2: Fraction(-1, 1)})), "
155 "rhs=2, "
156 "poly=EvalOpPoly({1: Fraction(1, 2), 2: Fraction(-1, 2)})), rhs="
157 "EvalOpInput(lhs=3, rhs=0, poly=EvalOpPoly({3: Fraction(1, 1)})), "
158 "poly=EvalOpPoly("
159 "{1: Fraction(1, 2), 2: Fraction(-1, 2), 3: Fraction(-1, 1)})), "
160 "EvalOpSub(lhs=EvalOpExactDiv(lhs=EvalOpAdd(lhs="
161 "EvalOpInput(lhs=1, rhs=0, poly=EvalOpPoly({1: Fraction(1, 1)})), "
162 "rhs="
163 "EvalOpInput(lhs=2, rhs=0, poly=EvalOpPoly({2: Fraction(1, 1)})), "
164 "poly=EvalOpPoly({1: Fraction(1, 1), 2: Fraction(1, 1)})), rhs=2, "
165 "poly=EvalOpPoly({1: Fraction(1, 2), 2: Fraction(1, 2)})), rhs="
166 "EvalOpInput(lhs=0, rhs=0, poly=EvalOpPoly({0: Fraction(1, 1)})), "
167 "poly=EvalOpPoly("
168 "{0: Fraction(-1, 1), 1: Fraction(1, 2), 2: Fraction(1, 2)})), "
169 "EvalOpInput(lhs=3, rhs=0, poly=EvalOpPoly({3: Fraction(1, 1)}))))"
170 )
171
172
173 if __name__ == "__main__":
174 unittest.main()