poulpy/poulpy-schemes/src/bin_fhe/bdd_arithmetic/circuits/u32/slt_codegen.rs
poulpy-schemes/src/bin_fhe/bdd_arithmetic/circuits/u32/slt_codegen.rsRaw
1use crate::bin_fhe::bdd_arithmetic::{BitCircuit, BitCircuitFamily, BitCircuitInfo, Circuit, Node};
2pub(crate) enum AnyBitCircuit {
3 B0(BitCircuit<256>),
4}
5impl BitCircuitInfo for AnyBitCircuit {
6 fn info(&self) -> (&[Node], usize) {
7 match self {
8 AnyBitCircuit::B0(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
9 }
10 }
11}
12
13impl BitCircuitFamily for AnyBitCircuit {
14 const INPUT_BITS: usize = 64;
15 const OUTPUT_BITS: usize = 1;
16}
17
18pub(crate) static OUTPUT_CIRCUITS: Circuit<AnyBitCircuit, 1usize> = Circuit([AnyBitCircuit::B0(BitCircuit::new(
19 [
20 Node::Copy,
21 Node::Copy,
22 Node::None,
23 Node::Cmux(32, 1, 0),
24 Node::Copy,
25 Node::Copy,
26 Node::None,
27 Node::Cmux(0, 0, 3),
28 Node::Copy,
29 Node::Copy,
30 Node::Cmux(33, 3, 0),
31 Node::Cmux(33, 1, 3),
32 Node::Copy,
33 Node::Copy,
34 Node::Cmux(1, 2, 3),
35 Node::None,
36 Node::Copy,
37 Node::Copy,
38 Node::Cmux(34, 1, 2),
39 Node::Cmux(34, 2, 0),
40 Node::Copy,
41 Node::Copy,
42 Node::None,
43 Node::Cmux(2, 3, 2),
44 Node::Copy,
45 Node::Copy,
46 Node::Cmux(35, 1, 3),
47 Node::Cmux(35, 3, 0),
48 Node::Copy,
49 Node::Copy,
50 Node::Cmux(3, 3, 2),
51 Node::None,
52 Node::Copy,
53 Node::Copy,
54 Node::Cmux(36, 1, 2),
55 Node::Cmux(36, 2, 0),
56 Node::Copy,
57 Node::Copy,
58 Node::Cmux(4, 3, 2),
59 Node::None,
60 Node::Copy,
61 Node::Copy,
62 Node::Cmux(37, 1, 2),
63 Node::Cmux(37, 2, 0),
64 Node::Copy,
65 Node::Copy,
66 Node::Cmux(5, 3, 2),
67 Node::None,
68 Node::Copy,
69 Node::Copy,
70 Node::Cmux(38, 1, 2),
71 Node::Cmux(38, 2, 0),
72 Node::Copy,
73 Node::Copy,
74 Node::None,
75 Node::Cmux(6, 3, 2),
76 Node::Copy,
77 Node::Copy,
78 Node::Cmux(39, 1, 3),
79 Node::Cmux(39, 3, 0),
80 Node::Copy,
81 Node::Copy,
82 Node::None,
83 Node::Cmux(7, 3, 2),
84 Node::Copy,
85 Node::Copy,
86 Node::Cmux(40, 3, 0),
87 Node::Cmux(40, 1, 3),
88 Node::Copy,
89 Node::Copy,
90 Node::None,
91 Node::Cmux(8, 2, 3),
92 Node::Copy,
93 Node::Copy,
94 Node::Cmux(41, 1, 3),
95 Node::Cmux(41, 3, 0),
96 Node::Copy,
97 Node::Copy,
98 Node::None,
99 Node::Cmux(9, 3, 2),
100 Node::Copy,
101 Node::Copy,
102 Node::Cmux(42, 1, 3),
103 Node::Cmux(42, 3, 0),
104 Node::Copy,
105 Node::Copy,
106 Node::Cmux(10, 3, 2),
107 Node::None,
108 Node::Copy,
109 Node::Copy,
110 Node::Cmux(43, 1, 2),
111 Node::Cmux(43, 2, 0),
112 Node::Copy,
113 Node::Copy,
114 Node::Cmux(11, 3, 2),
115 Node::None,
116 Node::Copy,
117 Node::Copy,
118 Node::Cmux(44, 2, 0),
119 Node::Cmux(44, 1, 2),
120 Node::Copy,
121 Node::Copy,
122 Node::Cmux(12, 2, 3),
123 Node::None,
124 Node::Copy,
125 Node::Copy,
126 Node::Cmux(45, 2, 0),
127 Node::Cmux(45, 1, 2),
128 Node::Copy,
129 Node::Copy,
130 Node::None,
131 Node::Cmux(13, 2, 3),
132 Node::Copy,
133 Node::Copy,
134 Node::Cmux(46, 1, 3),
135 Node::Cmux(46, 3, 0),
136 Node::Copy,
137 Node::Copy,
138 Node::Cmux(14, 3, 2),
139 Node::None,
140 Node::Copy,
141 Node::Copy,
142 Node::Cmux(47, 2, 0),
143 Node::Cmux(47, 1, 2),
144 Node::Copy,
145 Node::Copy,
146 Node::Cmux(15, 2, 3),
147 Node::None,
148 Node::Copy,
149 Node::Copy,
150 Node::Cmux(48, 2, 0),
151 Node::Cmux(48, 1, 2),
152 Node::Copy,
153 Node::Copy,
154 Node::Cmux(16, 2, 3),
155 Node::None,
156 Node::Copy,
157 Node::Copy,
158 Node::Cmux(49, 1, 2),
159 Node::Cmux(49, 2, 0),
160 Node::Copy,
161 Node::Copy,
162 Node::Cmux(17, 3, 2),
163 Node::None,
164 Node::Copy,
165 Node::Copy,
166 Node::Cmux(50, 1, 2),
167 Node::Cmux(50, 2, 0),
168 Node::Copy,
169 Node::Copy,
170 Node::Cmux(18, 3, 2),
171 Node::None,
172 Node::Copy,
173 Node::Copy,
174 Node::Cmux(51, 2, 0),
175 Node::Cmux(51, 1, 2),
176 Node::Copy,
177 Node::Copy,
178 Node::Cmux(19, 2, 3),
179 Node::None,
180 Node::Copy,
181 Node::Copy,
182 Node::Cmux(52, 1, 2),
183 Node::Cmux(52, 2, 0),
184 Node::Copy,
185 Node::Copy,
186 Node::None,
187 Node::Cmux(20, 3, 2),
188 Node::Copy,
189 Node::Copy,
190 Node::Cmux(53, 1, 3),
191 Node::Cmux(53, 3, 0),
192 Node::Copy,
193 Node::Copy,
194 Node::None,
195 Node::Cmux(21, 3, 2),
196 Node::Copy,
197 Node::Copy,
198 Node::Cmux(54, 1, 3),
199 Node::Cmux(54, 3, 0),
200 Node::Copy,
201 Node::Copy,
202 Node::None,
203 Node::Cmux(22, 3, 2),
204 Node::Copy,
205 Node::Copy,
206 Node::Cmux(55, 3, 0),
207 Node::Cmux(55, 1, 3),
208 Node::Copy,
209 Node::Copy,
210 Node::Cmux(23, 2, 3),
211 Node::None,
212 Node::Copy,
213 Node::Copy,
214 Node::Cmux(56, 2, 0),
215 Node::Cmux(56, 1, 2),
216 Node::Copy,
217 Node::Copy,
218 Node::Cmux(24, 2, 3),
219 Node::None,
220 Node::Copy,
221 Node::Copy,
222 Node::Cmux(57, 2, 0),
223 Node::Cmux(57, 1, 2),
224 Node::Copy,
225 Node::Copy,
226 Node::None,
227 Node::Cmux(25, 2, 3),
228 Node::Copy,
229 Node::Copy,
230 Node::Cmux(58, 1, 3),
231 Node::Cmux(58, 3, 0),
232 Node::Copy,
233 Node::Copy,
234 Node::Cmux(26, 3, 2),
235 Node::None,
236 Node::Copy,
237 Node::Copy,
238 Node::Cmux(59, 1, 2),
239 Node::Cmux(59, 2, 0),
240 Node::Copy,
241 Node::Copy,
242 Node::None,
243 Node::Cmux(27, 3, 2),
244 Node::Copy,
245 Node::Copy,
246 Node::Cmux(60, 3, 0),
247 Node::Cmux(60, 1, 3),
248 Node::Copy,
249 Node::Copy,
250 Node::Cmux(28, 2, 3),
251 Node::None,
252 Node::Copy,
253 Node::Copy,
254 Node::Cmux(61, 2, 0),
255 Node::Cmux(61, 1, 2),
256 Node::Copy,
257 Node::Copy,
258 Node::None,
259 Node::Cmux(29, 2, 3),
260 Node::Copy,
261 Node::Copy,
262 Node::Cmux(62, 1, 3),
263 Node::Cmux(62, 3, 0),
264 Node::Copy,
265 Node::Copy,
266 Node::None,
267 Node::Cmux(30, 3, 2),
268 Node::Cmux(63, 3, 1),
269 Node::None,
270 Node::None,
271 Node::Cmux(63, 0, 3),
272 Node::Cmux(31, 0, 3),
273 Node::None,
274 Node::None,
275 Node::None,
276 ],
277 4,
278))]);