@@ -266,45 +266,60 @@ pub struct ExpWindowDiagAdaptStats {
266
266
267
267
#[ cfg( feature = "arrow" ) ]
268
268
pub struct ExpWindowDiagAdaptStatsBuilder {
269
- mass_matrix_inv : MutableFixedSizeListArray < MutablePrimitiveArray < f64 > > ,
269
+ mass_matrix_inv : Option < MutableFixedSizeListArray < MutablePrimitiveArray < f64 > > > ,
270
270
}
271
271
272
272
#[ cfg( feature = "arrow" ) ]
273
273
impl ArrowBuilder < ExpWindowDiagAdaptStats > for ExpWindowDiagAdaptStatsBuilder {
274
274
fn append_value ( & mut self , value : & ExpWindowDiagAdaptStats ) {
275
- self . mass_matrix_inv
276
- . try_push (
277
- value
278
- . mass_matrix_inv
279
- . as_ref ( )
280
- . map ( |vals| vals. iter ( ) . map ( |& x| Some ( x) ) ) ,
281
- )
282
- . unwrap ( ) ;
275
+ if let Some ( store) = self . mass_matrix_inv . as_mut ( ) {
276
+ store
277
+ . try_push (
278
+ value
279
+ . mass_matrix_inv
280
+ . as_ref ( )
281
+ . map ( |vals| vals. iter ( ) . map ( |& x| Some ( x) ) ) ,
282
+ )
283
+ . unwrap ( ) ;
284
+ }
283
285
}
284
286
285
- fn finalize ( mut self ) -> StructArray {
286
- let fields = vec ! [ Field :: new(
287
- "mass_matrix_inv" ,
288
- self . mass_matrix_inv. data_type( ) . clone( ) ,
289
- true ,
290
- ) ] ;
287
+ fn finalize ( self ) -> StructArray {
288
+ if let Some ( mut store) = self . mass_matrix_inv {
289
+ let fields = vec ! [ Field :: new(
290
+ "mass_matrix_inv" ,
291
+ store. data_type( ) . clone( ) ,
292
+ true ,
293
+ ) ] ;
291
294
292
- let arrays = vec ! [ self . mass_matrix_inv . as_box( ) ] ;
295
+ let arrays = vec ! [ store . as_box( ) ] ;
293
296
294
- StructArray :: new ( DataType :: Struct ( fields) , arrays, None )
297
+ StructArray :: new ( DataType :: Struct ( fields) , arrays, None )
298
+ } else {
299
+ StructArray :: new ( DataType :: Struct ( vec ! [ ] ) , vec ! [ ] , None )
300
+ }
295
301
}
296
302
}
297
303
298
304
#[ cfg( feature = "arrow" ) ]
299
305
impl ArrowRow for ExpWindowDiagAdaptStats {
300
306
type Builder = ExpWindowDiagAdaptStatsBuilder ;
301
307
302
- fn new_builder ( dim : usize , _settings : & SamplerArgs ) -> Self :: Builder {
303
- let items = MutablePrimitiveArray :: new ( ) ;
304
- // TODO Add only based on settings
305
- let values = MutableFixedSizeListArray :: new_with_field ( items, "item" , false , dim) ;
306
- Self :: Builder {
307
- mass_matrix_inv : values,
308
+ fn new_builder ( dim : usize , settings : & SamplerArgs ) -> Self :: Builder {
309
+ if settings
310
+ . mass_matrix_adapt
311
+ . mass_matrix_options
312
+ . store_mass_matrix
313
+ {
314
+ let items = MutablePrimitiveArray :: new ( ) ;
315
+ let values = MutableFixedSizeListArray :: new_with_field ( items, "item" , false , dim) ;
316
+ Self :: Builder {
317
+ mass_matrix_inv : Some ( values) ,
318
+ }
319
+ } else {
320
+ Self :: Builder {
321
+ mass_matrix_inv : None ,
322
+ }
308
323
}
309
324
}
310
325
}
0 commit comments