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