@@ -78,7 +78,10 @@ impl<'a, T: FieldElement> MultiplicityColumnGenerator<'a, T> {
78
78
. bus_receives
79
79
. iter ( )
80
80
. filter ( |( _, bus_receive) | bus_receive. has_arbitrary_multiplicity ( ) )
81
- . map ( |( bus_id, bus_receive) | {
81
+ . filter_map ( |( bus_id, bus_receive) | {
82
+ if !bus_receive. has_arbitrary_multiplicity ( ) || bus_receive. multiplicity . is_none ( ) {
83
+ return None ;
84
+ }
82
85
log:: trace!( " Building index for bus receive: {bus_receive}" ) ;
83
86
let start = std:: time:: Instant :: now ( ) ;
84
87
@@ -103,25 +106,34 @@ impl<'a, T: FieldElement> MultiplicityColumnGenerator<'a, T> {
103
106
" Done building index, took {}s" ,
104
107
start. elapsed( ) . as_secs_f64( )
105
108
) ;
106
- (
109
+ Some ( (
107
110
* bus_id,
108
111
ReceiveInfo {
109
- multiplicity_column : bus_receive. multiplicity . as_ref ( ) . map ( |mult_expr| {
110
- match mult_expr {
111
- AlgebraicExpression :: Reference ( r) => r. poly_id ,
112
- _ => panic ! ( "Expected simple reference, got: {mult_expr}" ) ,
112
+ multiplicity_column : match bus_receive. multiplicity . as_ref ( ) . unwrap ( ) {
113
+ AlgebraicExpression :: Reference ( r) => r. poly_id ,
114
+ _ => {
115
+ panic ! (
116
+ "Expected simple reference, got: {}" ,
117
+ bus_receive. multiplicity. as_ref( ) . unwrap( )
118
+ )
113
119
}
114
- } ) ,
120
+ } ,
115
121
index,
116
122
size,
117
123
} ,
118
- )
124
+ ) )
119
125
} )
120
126
. collect :: < BTreeMap < _ , _ > > ( ) ;
121
127
for bus_send in identities. iter ( ) . filter_map ( |i| match i {
122
128
Identity :: BusSend ( bus_send) => Some ( bus_send) ,
123
129
_ => None ,
124
130
} ) {
131
+ let bus_receive = receive_infos. get ( & bus_send. bus_id ( ) . unwrap ( ) ) ;
132
+ if bus_receive. is_none ( ) {
133
+ continue ;
134
+ }
135
+ let bus_receive = bus_receive. unwrap ( ) ;
136
+
125
137
log:: trace!( " Incrementing multiplicities for bus send: {bus_send}" ) ;
126
138
let start = std:: time:: Instant :: now ( ) ;
127
139
let ( _, lhs_tuples) = self . get_tuples ( & terminal_values, & bus_send. selected_payload ) ;
@@ -132,13 +144,8 @@ impl<'a, T: FieldElement> MultiplicityColumnGenerator<'a, T> {
132
144
) ;
133
145
let start = std:: time:: Instant :: now ( ) ;
134
146
135
- let bus_receive = receive_infos
136
- . get ( & bus_send. bus_id ( ) . unwrap ( ) )
137
- . expect ( "Bus send without corresponding receive" ) ;
138
-
139
- let multiplicity_column_id = bus_receive. multiplicity_column . unwrap ( ) ;
140
147
let multiplicities = multiplicity_columns
141
- . entry ( multiplicity_column_id )
148
+ . entry ( bus_receive . multiplicity_column )
142
149
. or_insert_with ( || vec ! [ 0 ; bus_receive. size] ) ;
143
150
assert_eq ! ( multiplicities. len( ) , bus_receive. size) ;
144
151
@@ -227,7 +234,7 @@ impl<'a, T: FieldElement> MultiplicityColumnGenerator<'a, T> {
227
234
}
228
235
229
236
struct ReceiveInfo < T > {
230
- multiplicity_column : Option < PolyID > ,
237
+ multiplicity_column : PolyID ,
231
238
index : HashMap < Vec < T > , usize > ,
232
239
size : usize ,
233
240
}
0 commit comments