@@ -125,26 +125,24 @@ fn encode_decode(
125125 fsl : & FixedSizeListArray ,
126126 config : & TurboQuantConfig ,
127127) -> VortexResult < ( Vec < f32 > , Vec < f32 > ) > {
128+ let mut ctx = SESSION . create_execution_ctx ( ) ;
128129 let original: Vec < f32 > = {
129- let prim = fsl. elements ( ) . to_canonical ( ) . unwrap ( ) . into_primitive ( ) ;
130+ let prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
130131 prim. as_slice :: < f32 > ( ) . to_vec ( )
131132 } ;
132133 let ext = make_vector_ext ( fsl) ;
133134 let config = config. clone ( ) ;
134- let mut ctx = SESSION . create_execution_ctx ( ) ;
135135 let encoded = turboquant_encode ( ext. as_view ( ) , & config, & mut ctx) ?;
136136 let decoded_ext = encoded. execute :: < ExtensionArray > ( & mut ctx) ?;
137137 let decoded_fsl = decoded_ext
138138 . storage_array ( )
139- . to_canonical ( )
140- . unwrap ( )
141- . into_fixed_size_list ( ) ;
139+ . clone ( )
140+ . execute :: < FixedSizeListArray > ( & mut ctx) ?;
142141 let decoded_elements: Vec < f32 > = {
143142 let prim = decoded_fsl
144143 . elements ( )
145- . to_canonical ( )
146- . unwrap ( )
147- . into_primitive ( ) ;
144+ . clone ( )
145+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
148146 prim. as_slice :: < f32 > ( ) . to_vec ( )
149147 } ;
150148 Ok ( ( original, decoded_elements) )
@@ -409,8 +407,8 @@ fn f16_input_encodes_successfully() -> VortexResult<()> {
409407 let decoded_ext = encoded. execute :: < ExtensionArray > ( & mut ctx) ?;
410408 let decoded_fsl = decoded_ext
411409 . storage_array ( )
412- . to_canonical ( ) ?
413- . into_fixed_size_list ( ) ;
410+ . clone ( )
411+ . execute :: < FixedSizeListArray > ( & mut ctx ) ? ;
414412 assert_eq ! ( decoded_fsl. len( ) , num_rows) ;
415413 Ok ( ( ) )
416414}
@@ -470,9 +468,12 @@ fn stored_rotation_signs_produce_correct_decode() -> VortexResult<()> {
470468 . execute :: < ExtensionArray > ( & mut ctx) ?;
471469 let decoded_fsl = decoded_ext
472470 . storage_array ( )
473- . to_canonical ( ) ?
474- . into_fixed_size_list ( ) ;
475- let decoded = decoded_fsl. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
471+ . clone ( )
472+ . execute :: < FixedSizeListArray > ( & mut ctx) ?;
473+ let decoded = decoded_fsl
474+ . elements ( )
475+ . clone ( )
476+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
476477 let decoded_slice = decoded. as_slice :: < f32 > ( ) ;
477478
478479 // Verify stored signs match seed-derived signs.
@@ -514,20 +515,26 @@ fn slice_preserves_data() -> VortexResult<()> {
514515 let full_decoded = encoded. clone ( ) . execute :: < ExtensionArray > ( & mut ctx) ?;
515516 let full_fsl = full_decoded
516517 . storage_array ( )
517- . to_canonical ( ) ?
518- . into_fixed_size_list ( ) ;
518+ . clone ( )
519+ . execute :: < FixedSizeListArray > ( & mut ctx ) ? ;
519520 let expected = full_fsl. slice ( 5 ..10 ) ?;
520- let expected_prim = expected. to_canonical ( ) ?. into_fixed_size_list ( ) ;
521- let expected_elements = expected_prim. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
521+ let expected_fsl = expected. execute :: < FixedSizeListArray > ( & mut ctx) ?;
522+ let expected_elements = expected_fsl
523+ . elements ( )
524+ . clone ( )
525+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
522526
523527 // Slice then decompress.
524528 let sliced = encoded. slice ( 5 ..10 ) ?;
525529 let sliced_decoded = sliced. execute :: < ExtensionArray > ( & mut ctx) ?;
526530 let sliced_fsl = sliced_decoded
527531 . storage_array ( )
528- . to_canonical ( ) ?
529- . into_fixed_size_list ( ) ;
530- let actual_elements = sliced_fsl. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
532+ . clone ( )
533+ . execute :: < FixedSizeListArray > ( & mut ctx) ?;
534+ let actual_elements = sliced_fsl
535+ . elements ( )
536+ . clone ( )
537+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
531538
532539 assert_eq ! (
533540 expected_elements. as_slice:: <f32 >( ) ,
@@ -570,10 +577,10 @@ fn l2_norm_readthrough() -> VortexResult<()> {
570577 let tq = encoded. as_opt :: < TurboQuant > ( ) . unwrap ( ) ;
571578
572579 // Stored norms should match the actual L2 norms of the input.
573- let norms_prim = tq. norms ( ) . to_canonical ( ) ? . into_primitive ( ) ;
580+ let norms_prim = tq. norms ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
574581 let stored_norms = norms_prim. as_slice :: < f32 > ( ) ;
575582
576- let input_prim = fsl. elements ( ) . to_canonical ( ) ? . into_primitive ( ) ;
583+ let input_prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
577584 let input_f32 = input_prim. as_slice :: < f32 > ( ) ;
578585 for row in 0 ..10 {
579586 let vec = & input_f32[ row * 128 ..( row + 1 ) * 128 ] ;
@@ -601,7 +608,7 @@ fn cosine_similarity_quantized_accuracy() -> VortexResult<()> {
601608 let tq = encoded. as_opt :: < TurboQuant > ( ) . unwrap ( ) ;
602609
603610 // Compute exact cosine similarity from original data.
604- let input_prim = fsl. elements ( ) . to_canonical ( ) ? . into_primitive ( ) ;
611+ let input_prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
605612 let input_f32 = input_prim. as_slice :: < f32 > ( ) ;
606613
607614 // Read quantized codes, norms, and centroids for approximate computation.
@@ -610,7 +617,10 @@ fn cosine_similarity_quantized_accuracy() -> VortexResult<()> {
610617 let norms_prim = tq. norms ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx) ?;
611618 let norms = norms_prim. as_slice :: < f32 > ( ) ;
612619 let codes_fsl = tq. codes ( ) . clone ( ) . execute :: < FixedSizeListArray > ( & mut ctx) ?;
613- let codes_prim = codes_fsl. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
620+ let codes_prim = codes_fsl
621+ . elements ( )
622+ . clone ( )
623+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
614624 let all_codes = codes_prim. as_slice :: < u8 > ( ) ;
615625 let centroids_prim = tq. centroids ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx) ?;
616626 let centroid_vals = centroids_prim. as_slice :: < f32 > ( ) ;
@@ -674,15 +684,18 @@ fn dot_product_quantized_accuracy() -> VortexResult<()> {
674684 let encoded = turboquant_encode ( ext. as_view ( ) , & config, & mut ctx) ?;
675685 let tq = encoded. as_opt :: < TurboQuant > ( ) . unwrap ( ) ;
676686
677- let input_prim = fsl. elements ( ) . to_canonical ( ) ? . into_primitive ( ) ;
687+ let input_prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
678688 let input_f32 = input_prim. as_slice :: < f32 > ( ) ;
679689
680690 let mut ctx = SESSION . create_execution_ctx ( ) ;
681691 let pd = tq. padded_dim ( ) as usize ;
682692 let norms_prim = tq. norms ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx) ?;
683693 let norms = norms_prim. as_slice :: < f32 > ( ) ;
684694 let codes_fsl = tq. codes ( ) . clone ( ) . execute :: < FixedSizeListArray > ( & mut ctx) ?;
685- let codes_prim = codes_fsl. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
695+ let codes_prim = codes_fsl
696+ . elements ( )
697+ . clone ( )
698+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
686699 let all_codes = codes_prim. as_slice :: < u8 > ( ) ;
687700 let centroids_prim = tq. centroids ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx) ?;
688701 let centroid_vals = centroids_prim. as_slice :: < f32 > ( ) ;
@@ -815,13 +828,16 @@ fn nullable_vectors_roundtrip() -> VortexResult<()> {
815828
816829 let decoded_fsl = decoded_ext
817830 . storage_array ( )
818- . to_canonical ( ) ?
819- . into_fixed_size_list ( ) ;
820- let decoded_prim = decoded_fsl. elements ( ) . to_canonical ( ) ?. into_primitive ( ) ;
831+ . clone ( )
832+ . execute :: < FixedSizeListArray > ( & mut ctx) ?;
833+ let decoded_prim = decoded_fsl
834+ . elements ( )
835+ . clone ( )
836+ . execute :: < PrimitiveArray > ( & mut ctx) ?;
821837 let decoded_f32 = decoded_prim. as_slice :: < f32 > ( ) ;
822838
823839 // Original f32 elements for non-null row comparison.
824- let orig_prim = fsl. elements ( ) . to_canonical ( ) ? . into_primitive ( ) ;
840+ let orig_prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
825841 let orig_f32 = orig_prim. as_slice :: < f32 > ( ) ;
826842
827843 // Non-null rows should have reasonable reconstruction (within MSE bounds).
@@ -889,7 +905,7 @@ fn nullable_l2_norm_readthrough() -> VortexResult<()> {
889905 let norms: PrimitiveArray = norm_sfn. into_array ( ) . execute ( & mut ctx) ?;
890906
891907 // Null rows should have null norms, valid rows should have correct norms.
892- let orig_prim = fsl. elements ( ) . to_canonical ( ) ? . into_primitive ( ) ;
908+ let orig_prim = fsl. elements ( ) . clone ( ) . execute :: < PrimitiveArray > ( & mut ctx ) ? ;
893909 let orig_f32 = orig_prim. as_slice :: < f32 > ( ) ;
894910 for row in 0 ..5 {
895911 if row % 2 == 0 {
0 commit comments