MCPcopy Create free account
hub / github.com/PolyhedraZK/ExpanderCompilerCollection / compile

Method compile

expander_compiler/src/layering/compile.rs:102–145  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

100
101impl<'a, C: Config, I: InputType> CompileContext<'a, C, I> {
102 pub fn compile(&mut self) {
103 // 1. do a toposort of the circuits
104 self.dfs_topo_sort(0);
105
106 // 2. compute min and max layers for each circuit
107 for id in self.order.clone() {
108 self.compute_min_max_layers(id);
109 }
110
111 // 3. prepare layer layout contexts
112 for id in self.order.clone() {
113 self.prepare_layer_layout_context(id);
114 }
115
116 // 4. solve layer layout for root circuit (it also recursively solves all required sub-circuits)
117 let mut layout_ids = Vec::with_capacity(self.circuits[&0].output_layer + 1);
118 for i in 0..=self.circuits[&0].output_layer {
119 layout_ids.push(self.solve_layer_layout(&LayerReq {
120 circuit_id: 0,
121 layer: i,
122 }));
123 }
124 self.layout_ids = layout_ids;
125 if !self.opts.allow_input_reorder {
126 let layout_vec =
127 merge_layouts(vec![], (0..self.circuits[&0].lcs[0].vars.len()).collect());
128 let id = self.layer_layout_pool.add(&LayerLayout {
129 circuit_id: 0,
130 layer: 0,
131 size: layout_vec.len(),
132 inner: super::layer_layout::LayerLayoutInner::Dense {
133 placement: layout_vec,
134 },
135 });
136 self.layout_ids[0] = id;
137 }
138
139 // 5. generate wires
140 let layers = self.connect_wires(&self.layout_ids.clone());
141 self.layers = layers;
142
143 // 6. record the input order (used to generate witness)
144 self.input_order = self.record_input_order();
145 }
146
147 fn dfs_topo_sort(&mut self, id: usize) {
148 if self.circuits.contains_key(&id) {

Callers 2

compileFunction · 0.80
CompileWithRustLibFunction · 0.80

Calls 11

merge_layoutsFunction · 0.85
dfs_topo_sortMethod · 0.80
pushMethod · 0.80
solve_layer_layoutMethod · 0.80
connect_wiresMethod · 0.80
record_input_orderMethod · 0.80
cloneMethod · 0.45
lenMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected