frontend/layouter/nodes/
circuit_inputs.rs1pub mod compile_inputs;
6use super::{CircuitNode, NodeId};
7use remainder::{layer::LayerId, mle::evals::MultilinearExtension};
8use serde::{Deserialize, Serialize};
9use shared_types::Field;
10
11#[derive(Debug, Clone)]
14pub struct InputLayerNodeData<F: Field> {
15 pub corresponding_input_node_id: NodeId,
18 pub data: Vec<InputShredData<F>>,
20}
21
22impl<F: Field> InputLayerNodeData<F> {
23 pub fn new(corresponding_input_node_id: NodeId, data: Vec<InputShredData<F>>) -> Self {
26 Self {
27 corresponding_input_node_id,
28 data,
29 }
30 }
31}
32
33#[derive(Debug, Clone)]
34pub struct InputShredData<F: Field> {
36 pub corresponding_input_shred_id: NodeId,
38 pub data: MultilinearExtension<F>,
40}
41
42impl<F: Field> InputShredData<F> {
43 pub fn new(corresponding_input_shred_id: NodeId, data: MultilinearExtension<F>) -> Self {
45 Self {
46 corresponding_input_shred_id,
47 data,
48 }
49 }
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct InputShred {
56 id: NodeId,
57 parent: NodeId,
58 num_vars: usize,
59}
60
61impl CircuitNode for InputShred {
62 fn id(&self) -> NodeId {
63 self.id
64 }
65
66 fn sources(&self) -> Vec<NodeId> {
67 vec![]
68 }
69
70 fn get_num_vars(&self) -> usize {
71 self.num_vars
72 }
73}
74
75impl InputShred {
76 pub fn new(num_vars: usize, source: &InputLayerNode) -> Self {
81 let id = NodeId::new();
82 let parent = source.id();
83
84 InputShred {
85 id,
86 parent,
87 num_vars,
88 }
89 }
90
91 pub fn get_parent(&self) -> NodeId {
93 self.parent
94 }
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
100pub enum HyraxInputDType {
101 U8,
103 I8,
105}
106
107#[derive(Debug, Clone)]
108pub struct InputLayerNode {
110 id: NodeId,
111 input_layer_id: LayerId,
112 pub input_shreds: Vec<InputShred>,
114}
115
116impl CircuitNode for InputLayerNode {
117 fn id(&self) -> NodeId {
118 self.id
119 }
120
121 fn sources(&self) -> Vec<NodeId> {
122 vec![]
123 }
124
125 fn get_num_vars(&self) -> usize {
126 todo!()
127 }
128}
129
130impl InputLayerNode {
131 pub fn new(input_shreds: Option<Vec<InputShred>>) -> Self {
134 InputLayerNode {
135 id: NodeId::new(),
136 input_layer_id: LayerId::next_input_layer_id(),
137 input_shreds: input_shreds.unwrap_or_default(),
138 }
139 }
140
141 pub fn add_shred(&mut self, shred: InputShred) {
143 self.input_shreds.push(shred);
144 }
145
146 pub fn input_layer_id(&self) -> LayerId {
148 self.input_layer_id
149 }
150}