From af09d4532f14b331da60f52022bfa47f9ed0e7d5 Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Fri, 23 Feb 2024 18:59:12 +0530 Subject: [PATCH 1/6] feat: global_maxpool --- .all-contributorsrc | 12 ++- src/numbers.cairo | 10 +- src/operators/ml/svm/svm_classifier.cairo | 2 - src/operators/nn/functional.cairo | 1 + src/operators/nn/functional/conv.cairo | 26 ++--- .../nn/functional/depth_to_space.cairo | 3 +- .../nn/functional/global_maxpool.cairo | 64 +++++++++++++ .../nn/functional/softmax_zero.cairo | 4 +- .../nn/implementations/nn_fp16x16.cairo | 12 ++- .../nn/implementations/nn_fp32x32.cairo | 12 ++- .../nn/implementations/nn_fp64x64.cairo | 12 ++- .../nn/implementations/nn_fp8x23.cairo | 8 +- src/operators/nn/implementations/nn_i32.cairo | 8 +- src/operators/nn/implementations/nn_i8.cairo | 8 +- src/operators/nn/implementations/nn_u32.cairo | 8 +- src/operators/tensor/core.cairo | 18 ++-- src/operators/tensor/helpers.cairo | 12 +-- .../tensor/implementations/tensor_bool.cairo | 24 ++--- .../implementations/tensor_complex64.cairo | 22 +++-- .../implementations/tensor_fp16x16.cairo | 27 +++--- .../implementations/tensor_fp16x16wide.cairo | 32 ++++--- .../implementations/tensor_fp32x32.cairo | 25 +++-- .../implementations/tensor_fp64x64.cairo | 25 +++-- .../implementations/tensor_fp8x23.cairo | 30 +++--- .../implementations/tensor_fp8x23wide.cairo | 23 +++-- .../tensor/implementations/tensor_i32.cairo | 36 +++---- .../tensor/implementations/tensor_i8.cairo | 30 +++--- .../tensor/implementations/tensor_u32.cairo | 32 +++---- .../tensor/manipulation/optional.cairo | 7 +- .../manipulation/reverse_sequence.cairo | 64 ++++++------- src/operators/tensor/manipulation/split.cairo | 7 +- .../manipulation/split_to_sequence.cairo | 50 ++++------ .../tensor/math/blackman_window.cairo | 4 +- .../tensor/math/hamming_window.cairo | 4 +- src/operators/tensor/math/hann_window.cairo | 4 +- src/operators/tensor/math/onehot.cairo | 1 - .../tensor/math/random_uniform_like.cairo | 17 ++-- src/operators/tensor/math/range.cairo | 4 +- src/operators/tensor/math/resize.cairo | 8 +- src/operators/tensor/math/scatter.cairo | 9 +- src/operators/tensor/math/scatter_nd.cairo | 64 ++++++------- .../quantization/dequantize_linear.cairo | 1 - .../dynamic_quantize_linear.cairo | 19 ++-- tests/nodes/random_uniform_like_fp16x16.cairo | 7 +- tests/nodes/random_uniform_like_fp8x23.cairo | 7 +- tests/nodes/range_fp16x16.cairo | 6 +- tests/nodes/range_fp8x23.cairo | 6 +- tests/nodes/range_i32.cairo | 2 +- tests/nodes/range_i8.cairo | 2 +- tests/nodes/range_u32.cairo | 2 +- ...se_sequence_different_dimensions_1_6.cairo | 7 +- ...se_sequence_different_dimensions_2_4.cairo | 7 +- ...uence_different_dimensions_3x9_batch.cairo | 7 +- ...quence_different_dimensions_3x9_time.cairo | 7 +- ...se_sequence_different_dimensions_4_5.cairo | 7 +- ...equence_fp16x16_2d_batch_equal_parts.cairo | 7 +- ...sequence_fp16x16_2d_time_equal_parts.cairo | 7 +- ...e_sequence_fp16x16_batch_equal_parts.cairo | 7 +- ...se_sequence_fp16x16_time_equal_parts.cairo | 7 +- ...se_sequence_i32_2d_batch_equal_parts.cairo | 7 +- ...rse_sequence_i32_2d_time_equal_parts.cairo | 7 +- ...verse_sequence_i32_batch_equal_parts.cairo | 7 +- ...everse_sequence_i32_time_equal_parts.cairo | 7 +- ...rse_sequence_i8_2d_batch_equal_parts.cairo | 7 +- ...erse_sequence_i8_2d_time_equal_parts.cairo | 7 +- ...everse_sequence_i8_batch_equal_parts.cairo | 7 +- ...reverse_sequence_i8_time_equal_parts.cairo | 7 +- .../reverse_sequence_time_equal_parts.cairo | 7 +- ...se_sequence_u32_2d_batch_equal_parts.cairo | 7 +- ...rse_sequence_u32_2d_time_equal_parts.cairo | 7 +- .../reverse_sequence_u32_3x3_batch.cairo | 7 +- .../nodes/reverse_sequence_u32_3x3_time.cairo | 7 +- .../reverse_sequence_u32_4x4_batch.cairo | 7 +- .../nodes/reverse_sequence_u32_4x4_time.cairo | 7 +- .../reverse_sequence_u32_zero_size.cairo | 7 +- tests/nodes/scatter_nd_fp16x16_3d_add.cairo | 3 +- .../nodes/scatter_nd_fp16x16_3d_default.cairo | 2 +- tests/nodes/scatter_nd_fp16x16_3d_max.cairo | 3 +- tests/nodes/scatter_nd_fp16x16_3d_min.cairo | 3 +- tests/nodes/scatter_nd_fp16x16_3d_mul.cairo | 3 +- tests/nodes/scatter_nd_fp8x23_3d_add.cairo | 3 +- .../nodes/scatter_nd_fp8x23_3d_default.cairo | 2 +- tests/nodes/scatter_nd_fp8x23_3d_max.cairo | 3 +- tests/nodes/scatter_nd_fp8x23_3d_min.cairo | 3 +- tests/nodes/scatter_nd_fp8x23_3d_mul.cairo | 3 +- tests/nodes/scatter_nd_u32_add.cairo | 3 +- tests/nodes/scatter_nd_u32_default.cairo | 2 +- tests/nodes/scatter_nd_u32_max.cairo | 3 +- tests/nodes/scatter_nd_u32_min.cairo | 3 +- tests/nodes/scatter_nd_u32_mul.cairo | 3 +- ...t_to_sequence_fp16x16_1d_equal_parts.cairo | 7 +- .../split_to_sequence_fp16x16_1d_uneven.cairo | 7 +- ...o_sequence_fp16x16_1d_variable_parts.cairo | 9 +- ...t_to_sequence_fp16x16_2d_equal_parts.cairo | 7 +- .../split_to_sequence_fp16x16_2d_uneven.cairo | 7 +- ...o_sequence_fp16x16_2d_variable_parts.cairo | 9 +- .../split_to_sequence_fp16x16_zero_size.cairo | 9 +- ...split_to_sequence_u32_1d_equal_parts.cairo | 7 +- .../split_to_sequence_u32_1d_uneven.cairo | 7 +- ...it_to_sequence_u32_1d_variable_parts.cairo | 9 +- ...split_to_sequence_u32_2d_equal_parts.cairo | 7 +- .../split_to_sequence_u32_2d_uneven.cairo | 7 +- ...it_to_sequence_u32_2d_variable_parts.cairo | 9 +- .../split_to_sequence_u32_zero_size.cairo | 9 +- .../optional/optional_get_element_test.cairo | 14 +-- .../optional/optional_has_element_test.cairo | 14 +-- tests/operators/optional/optional_test.cairo | 94 +++++++++++++------ tests/performance.cairo | 2 +- .../dynamic_quantize_linear_test.cairo | 2 +- .../dynamic_quantize_linear_fp_test.cairo | 22 ++--- 110 files changed, 811 insertions(+), 485 deletions(-) create mode 100644 src/operators/nn/functional/global_maxpool.cairo diff --git a/.all-contributorsrc b/.all-contributorsrc index befc08f85..94f7656ac 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -277,8 +277,9 @@ "profile": "https://github.com/tekkac", "contributions": [ "doc" - ], + ] }, + { "login": "canacechan", "name": "canacechan", "avatar_url": "https://avatars.githubusercontent.com/u/127183619?v=4", @@ -286,6 +287,15 @@ "contributions": [ "code" ] + }, + { + "login": "RajeshRk18", + "name": "Rajesh", + "avatar_url": "https://avatars.githubusercontent.com/u/87425610?v=4", + "profile": "https://github.com/RajeshRk18", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/src/numbers.cairo b/src/numbers.cairo index 156fc5bf5..2ef2237a0 100644 --- a/src/numbers.cairo +++ b/src/numbers.cairo @@ -1432,7 +1432,7 @@ impl FP32x32Number of NumberTrait { impl I8Number of NumberTrait { fn new(mag: i8, sign: bool) -> i8 { - if sign{ + if sign { return -mag; } mag @@ -1777,7 +1777,7 @@ impl I8IntoFP32x32 of Into { impl I16Number of NumberTrait { fn new(mag: i16, sign: bool) -> i16 { - if sign{ + if sign { return -mag; } mag @@ -2070,7 +2070,7 @@ impl I16DivEq of DivEq { impl I32Number of NumberTrait { fn new(mag: i32, sign: bool) -> i32 { - if sign{ + if sign { return -mag; } mag @@ -2376,7 +2376,7 @@ impl I32IntoU32 of Into { impl I64Number of NumberTrait { fn new(mag: i64, sign: bool) -> i64 { - if sign{ + if sign { return -mag; } mag @@ -2669,7 +2669,7 @@ impl I64DivEq of DivEq { impl I128Number of NumberTrait { fn new(mag: i128, sign: bool) -> i128 { - if sign{ + if sign { return -mag; } mag diff --git a/src/operators/ml/svm/svm_classifier.cairo b/src/operators/ml/svm/svm_classifier.cairo index fcaee16e3..3b45cc4b7 100644 --- a/src/operators/ml/svm/svm_classifier.cairo +++ b/src/operators/ml/svm/svm_classifier.cairo @@ -678,7 +678,6 @@ fn compute_final_scores< has_proba: bool, classlabels: Span ) -> (usize, Tensor) { - let (max_class, max_weight) = if votes.len() > 0 { let max_class = argmax_span(votes); let max_weight = *votes.at(max_class); @@ -725,7 +724,6 @@ fn write_scores< >( n_classes: usize, scores: Tensor, post_transform: POST_TRANSFORM, add_second_class: usize ) -> Tensor { - let new_scores = if n_classes >= 2 { let new_scores = match post_transform { POST_TRANSFORM::NONE => scores, diff --git a/src/operators/nn/functional.cairo b/src/operators/nn/functional.cairo index 45e1c1ec9..48e146933 100644 --- a/src/operators/nn/functional.cairo +++ b/src/operators/nn/functional.cairo @@ -16,3 +16,4 @@ mod conv_transpose; mod depth_to_space; mod space_to_depth; mod conv; +mod global_maxpool; diff --git a/src/operators/nn/functional/conv.cairo b/src/operators/nn/functional/conv.cairo index 926bcb2b5..3f49807bf 100644 --- a/src/operators/nn/functional/conv.cairo +++ b/src/operators/nn/functional/conv.cairo @@ -41,7 +41,7 @@ fn conv< strides: Option>, ) -> Tensor { let nd = (*X).shape.len() - 2; - + assert((*X).shape.len() >= 3, 'X must have at least 3 dim'); let dilations = match dilations { Option::Some(dilations) => dilations, @@ -1410,14 +1410,10 @@ fn min(mut a: Span) -> usize { let mut min = *a.at(0); loop { match a.pop_front() { - Option::Some(v) => { - if *v < min { - min = *v; - }; - }, - Option::None => { - break min; - } + Option::Some(v) => { if *v < min { + min = *v; + }; }, + Option::None => { break min; } }; } } @@ -1429,14 +1425,10 @@ fn max(mut a: Span) -> usize { let mut max = *a.at(0); loop { match a.pop_front() { - Option::Some(v) => { - if *v > max { - max = *v; - }; - }, - Option::None => { - break max; - } + Option::Some(v) => { if *v > max { + max = *v; + }; }, + Option::None => { break max; } }; } } diff --git a/src/operators/nn/functional/depth_to_space.cairo b/src/operators/nn/functional/depth_to_space.cairo index c9efe3f66..2d9ce040c 100644 --- a/src/operators/nn/functional/depth_to_space.cairo +++ b/src/operators/nn/functional/depth_to_space.cairo @@ -35,8 +35,7 @@ fn depth_to_space< let reshaped = (tensor).reshape(target_shape: tmpshape.span()); let transposed = reshaped.transpose(axes: array![0, 3, 4, 1, 5, 2].span()); return transposed.reshape(target_shape: finalshape.span()); - } - else { + } else { // assert mode == "CRD" let tmpshape = array![*b, *C / (blocksize * blocksize), blocksize, blocksize, *H, *W]; let reshaped = (tensor).reshape(target_shape: tmpshape.span()); diff --git a/src/operators/nn/functional/global_maxpool.cairo b/src/operators/nn/functional/global_maxpool.cairo new file mode 100644 index 000000000..fa0116ea7 --- /dev/null +++ b/src/operators/nn/functional/global_maxpool.cairo @@ -0,0 +1,64 @@ +use core::array::ArrayTrait; +use core::array::SpanTrait; +use orion::numbers::NumberTrait; +use core::option::OptionTrait; +use orion::operators::tensor::core::{Tensor, TensorTrait}; +use orion::operators::tensor::math::max_in_tensor::max_in_tensor; + +/// Cf: NNTrait::global_maxpool docstring +fn global_maxpool< + T, + MAG, + impl TNumber: NumberTrait, + impl TTensor: TensorTrait, + impl TPartialOrd: PartialOrd, + impl TCopy: Copy, + impl TDrop: Drop +>( + tensor: @Tensor +) -> Tensor { + assert((*tensor).shape.len() == 4, 'Must be a 4D tensor'); + + let mut data = (*tensor).data; + let mut global_max_vals = ArrayTrait::new(); + + let mut accum = 0; + + let N = (*tensor).shape.at(0); + let C = (*tensor).shape.at(1); + let H = (*tensor).shape.at(2); + let W = (*tensor).shape.at(3); + + // height * width + let mut area = *H * *W; + + loop { + let mut sub_tensor = ArrayTrait::new(); + + loop { + match data.pop_front() { + Option::Some(data) => { + if accum % area == 0 { + break (); + } else { + sub_tensor.append(*data); + accum += 1; + } + }, + Option::None => { break; }, + }; + }; + + let sub_tensor_max = max_in_tensor::(sub_tensor.span()); + + global_max_vals.append(sub_tensor_max); + }; + + let singleton_dim: usize = 1; + + let result = TensorTrait::new( + array![*N, *C, singleton_dim, singleton_dim].span(), global_max_vals.span() + ); + + return result; +} diff --git a/src/operators/nn/functional/softmax_zero.cairo b/src/operators/nn/functional/softmax_zero.cairo index e90dd4784..328e46ffa 100644 --- a/src/operators/nn/functional/softmax_zero.cairo +++ b/src/operators/nn/functional/softmax_zero.cairo @@ -176,7 +176,9 @@ fn reduce_sum_no_zero< let mut index: usize = 0; loop { let output_indices = unravel_index(index, output_shape); - let mut current_sum = accumulate_sum::(*self.data, *self.shape, output_indices, axis); + let mut current_sum = accumulate_sum::< + T + >(*self.data, *self.shape, output_indices, axis); if current_sum == NumberTrait::zero() { current_sum = NumberTrait::one(); diff --git a/src/operators/nn/implementations/nn_fp16x16.cairo b/src/operators/nn/implementations/nn_fp16x16.cairo index 3e1ae2dff..edf7b59c7 100644 --- a/src/operators/nn/implementations/nn_fp16x16.cairo +++ b/src/operators/nn/implementations/nn_fp16x16.cairo @@ -61,10 +61,12 @@ impl FP16x16NN of NNTrait { functional::hard_sigmoid::hard_sigmoid(*tensor, alpha, beta) } - fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { + fn depth_to_space( + tensor: @Tensor, blocksize: usize, mode: felt252 + ) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -90,7 +92,7 @@ impl FP16x16NN of NNTrait { ) -> Tensor { functional::grid_sample::grid_sample(X, grid, align_corner, mode, padding_mode) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -101,7 +103,7 @@ impl FP16x16NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -129,7 +131,7 @@ impl FP16x16NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_fp32x32.cairo b/src/operators/nn/implementations/nn_fp32x32.cairo index 2a12d137e..db99af01b 100644 --- a/src/operators/nn/implementations/nn_fp32x32.cairo +++ b/src/operators/nn/implementations/nn_fp32x32.cairo @@ -55,10 +55,12 @@ impl FP32x32NN of NNTrait { functional::hard_sigmoid::hard_sigmoid(*tensor, alpha, beta) } - fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { + fn depth_to_space( + tensor: @Tensor, blocksize: usize, mode: felt252 + ) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -84,7 +86,7 @@ impl FP32x32NN of NNTrait { ) -> Tensor { functional::grid_sample::grid_sample(X, grid, align_corner, mode, padding_mode) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -95,7 +97,7 @@ impl FP32x32NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -123,7 +125,7 @@ impl FP32x32NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_fp64x64.cairo b/src/operators/nn/implementations/nn_fp64x64.cairo index a56c7c1f5..935af584c 100644 --- a/src/operators/nn/implementations/nn_fp64x64.cairo +++ b/src/operators/nn/implementations/nn_fp64x64.cairo @@ -55,10 +55,12 @@ impl FP64x64NN of NNTrait { functional::hard_sigmoid::hard_sigmoid(*tensor, alpha, beta) } - fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { + fn depth_to_space( + tensor: @Tensor, blocksize: usize, mode: felt252 + ) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -84,7 +86,7 @@ impl FP64x64NN of NNTrait { ) -> Tensor { functional::grid_sample::grid_sample(X, grid, align_corner, mode, padding_mode) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -95,7 +97,7 @@ impl FP64x64NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -123,7 +125,7 @@ impl FP64x64NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_fp8x23.cairo b/src/operators/nn/implementations/nn_fp8x23.cairo index 512c259e8..842c115f9 100644 --- a/src/operators/nn/implementations/nn_fp8x23.cairo +++ b/src/operators/nn/implementations/nn_fp8x23.cairo @@ -62,7 +62,7 @@ impl FP8x23NN of NNTrait { fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -88,7 +88,7 @@ impl FP8x23NN of NNTrait { ) -> Tensor { functional::grid_sample::grid_sample(X, grid, align_corner, mode, padding_mode) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -99,7 +99,7 @@ impl FP8x23NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -127,7 +127,7 @@ impl FP8x23NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_i32.cairo b/src/operators/nn/implementations/nn_i32.cairo index 67883ea2a..13a670746 100644 --- a/src/operators/nn/implementations/nn_i32.cairo +++ b/src/operators/nn/implementations/nn_i32.cairo @@ -53,7 +53,7 @@ impl I32NN of NNTrait { fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -79,7 +79,7 @@ impl I32NN of NNTrait { ) -> Tensor { panic(array!['not supported!']) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -90,7 +90,7 @@ impl I32NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -118,7 +118,7 @@ impl I32NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_i8.cairo b/src/operators/nn/implementations/nn_i8.cairo index bd333834c..5d359a91c 100644 --- a/src/operators/nn/implementations/nn_i8.cairo +++ b/src/operators/nn/implementations/nn_i8.cairo @@ -53,7 +53,7 @@ impl I8NN of NNTrait { fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -79,7 +79,7 @@ impl I8NN of NNTrait { ) -> Tensor { panic(array!['not supported!']) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -90,7 +90,7 @@ impl I8NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -118,7 +118,7 @@ impl I8NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/nn/implementations/nn_u32.cairo b/src/operators/nn/implementations/nn_u32.cairo index 15fb25ce0..9e4038fe4 100644 --- a/src/operators/nn/implementations/nn_u32.cairo +++ b/src/operators/nn/implementations/nn_u32.cairo @@ -53,7 +53,7 @@ impl U32NN of NNTrait { fn depth_to_space(tensor: @Tensor, blocksize: usize, mode: felt252) -> Tensor { functional::depth_to_space::depth_to_space(*tensor, blocksize, mode) } - + fn space_to_depth(tensor: @Tensor, blocksize: usize) -> Tensor { functional::space_to_depth::space_to_depth(*tensor, blocksize) } @@ -79,7 +79,7 @@ impl U32NN of NNTrait { ) -> Tensor { panic(array!['not supported!']) } - + fn col2im( data: @Tensor, image_shape: Span, @@ -90,7 +90,7 @@ impl U32NN of NNTrait { ) -> Tensor { functional::col2im::col2im(data, image_shape, block_shape, dilations, pads, strides,) } - + fn conv_transpose( X: @Tensor, W: @Tensor, @@ -118,7 +118,7 @@ impl U32NN of NNTrait { strides ) } - + fn conv( X: @Tensor, W: @Tensor, diff --git a/src/operators/tensor/core.cairo b/src/operators/tensor/core.cairo index 23018044d..222b0f423 100644 --- a/src/operators/tensor/core.cairo +++ b/src/operators/tensor/core.cairo @@ -5224,7 +5224,10 @@ trait TensorTrait { /// ``` /// fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor; /// # tensor.scatter_nd /// @@ -5304,10 +5307,7 @@ trait TensorTrait { /// ``` /// fn scatter_nd( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor; /// # tensor.dynamic_quantize_linear /// @@ -5364,9 +5364,7 @@ trait TensorTrait { /// >>> ([133, 233, 236, 255, -18, -0], [0.02745], [128] /// ``` /// - fn dynamic_quantize_linear( - self: @Tensor - ) -> (Tensor, Tensor, Tensor); + fn dynamic_quantize_linear(self: @Tensor) -> (Tensor, Tensor, Tensor); /// # tensor.optional /// /// ```rust @@ -5664,7 +5662,9 @@ trait TensorTrait { /// >>> [[[[7299130, 4884492]], [[2339070, 1559536]], [[3448557, 984617]], [[5745934, 3670947]], [[4665989, 3079292]], [[3375288, 948254]], [[3749966, 4911069]], [[1358829, 4368105]]]] /// ``` /// - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor; + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor; } /// Cf: TensorTrait::new docstring diff --git a/src/operators/tensor/helpers.cairo b/src/operators/tensor/helpers.cairo index caa8d3b21..931eeb0af 100644 --- a/src/operators/tensor/helpers.cairo +++ b/src/operators/tensor/helpers.cairo @@ -511,7 +511,7 @@ impl SpanPartialOrd, +Copy, +PartialEq, +PartialOrd> of Par fn optional_has_element, +Drop, +TensorTrait,>( x: Option> ) -> Tensor { - match x{ + match x { Option::Some => { let mut shape = ArrayTrait::::new(); shape.append(1); @@ -544,12 +544,8 @@ fn optional_has_element, +Drop, +TensorTrait,>( fn optional_get_element, +Drop, +TensorTrait,>( x: Option> ) -> Tensor { - match x{ - Option::Some(ele) => { - ele - }, - Option::None => { - panic(array!['The input is an empty', 'optional-type.']) - } + match x { + Option::Some(ele) => { ele }, + Option::None => { panic(array!['The input is an empty', 'optional-type.']) } } } diff --git a/src/operators/tensor/implementations/tensor_bool.cairo b/src/operators/tensor/implementations/tensor_bool.cairo index f894937dc..e75405743 100644 --- a/src/operators/tensor/implementations/tensor_bool.cairo +++ b/src/operators/tensor/implementations/tensor_bool.cairo @@ -492,26 +492,26 @@ impl BoolTensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ - panic(array!['not supported!']) + ) -> (Tensor::, Tensor::, Tensor) { + panic(array!['not supported!']) } fn scatter_nd( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor { panic(array!['not supported!']) } @@ -532,7 +532,9 @@ impl BoolTensor of TensorTrait { panic(array!['not supported!']) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { panic(array!['not supported!']) } } diff --git a/src/operators/tensor/implementations/tensor_complex64.cairo b/src/operators/tensor/implementations/tensor_complex64.cairo index e035b6a64..84b3edb21 100644 --- a/src/operators/tensor/implementations/tensor_complex64.cairo +++ b/src/operators/tensor/implementations/tensor_complex64.cairo @@ -499,7 +499,10 @@ impl Complex64Tensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } @@ -522,10 +525,15 @@ impl Complex64Tensor of TensorTrait { panic(array!['not supported!']) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, + high: Option, + low: Option, + seed: Option + ) -> Tensor { panic(array!['not supported!']) } - + fn range(start: complex64, end: complex64, step: complex64) -> Tensor { panic(array!['not supported!']) } @@ -541,17 +549,17 @@ impl Complex64Tensor of TensorTrait { fn blackman_window(size: complex64, periodic: Option) -> Tensor { panic(array!['not supported!']) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor ) -> (Tensor::, Tensor::, Tensor) { diff --git a/src/operators/tensor/implementations/tensor_fp16x16.cairo b/src/operators/tensor/implementations/tensor_fp16x16.cairo index 4dd2dd8d3..05dd23ea2 100644 --- a/src/operators/tensor/implementations/tensor_fp16x16.cairo +++ b/src/operators/tensor/implementations/tensor_fp16x16.cairo @@ -562,10 +562,12 @@ impl FP16x16Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP16x16, end: FP16x16, step: FP16x16) -> Tensor { math::range::range(start, end, step) } @@ -581,7 +583,7 @@ impl FP16x16Tensor of TensorTrait { fn blackman_window(size: FP16x16, periodic: Option) -> Tensor { math::blackman_window::blackman_window(size, FP16x16 { mag: PI, sign: false }, periodic) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { @@ -589,29 +591,32 @@ impl FP16x16Tensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - - fn optional(self: @Tensor) -> Option>{ + + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(255, false), NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(1, false), - ) + ) } - + fn scatter_nd( self: @Tensor, updates: Tensor, diff --git a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo index 6fb17db32..54aadbd3e 100644 --- a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo +++ b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo @@ -514,10 +514,15 @@ impl FP16x16WTensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, + high: Option, + low: Option, + seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP16x16W, end: FP16x16W, step: FP16x16W) -> Tensor { math::range::range(start, end, step) } @@ -533,37 +538,40 @@ impl FP16x16WTensor of TensorTrait { fn blackman_window(size: FP16x16W, periodic: Option) -> Tensor { math::blackman_window::blackman_window(size, FP16x16W { mag: PI, sign: false }, periodic) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - + fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - - fn optional(self: @Tensor) -> Option>{ + + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(255, false), NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(1, false), - ) + ) } - + fn scatter_nd( self: @Tensor, updates: Tensor, diff --git a/src/operators/tensor/implementations/tensor_fp32x32.cairo b/src/operators/tensor/implementations/tensor_fp32x32.cairo index e2380b70a..7402cd761 100644 --- a/src/operators/tensor/implementations/tensor_fp32x32.cairo +++ b/src/operators/tensor/implementations/tensor_fp32x32.cairo @@ -562,10 +562,12 @@ impl FP32x32Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP32x32, end: FP32x32, step: FP32x32) -> Tensor { math::range::range(start, end, step) } @@ -581,7 +583,7 @@ impl FP32x32Tensor of TensorTrait { fn blackman_window(size: FP32x32, periodic: Option) -> Tensor { panic(array!['not supported!']) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { @@ -589,27 +591,30 @@ impl FP32x32Tensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(255, false), NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(1, false), - ) + ) } - + fn scatter_nd( self: @Tensor, updates: Tensor, diff --git a/src/operators/tensor/implementations/tensor_fp64x64.cairo b/src/operators/tensor/implementations/tensor_fp64x64.cairo index 982ef5860..4477b0025 100644 --- a/src/operators/tensor/implementations/tensor_fp64x64.cairo +++ b/src/operators/tensor/implementations/tensor_fp64x64.cairo @@ -562,10 +562,12 @@ impl FP64x64Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP64x64, end: FP64x64, step: FP64x64) -> Tensor { math::range::range(start, end, step) } @@ -581,7 +583,7 @@ impl FP64x64Tensor of TensorTrait { fn blackman_window(size: FP64x64, periodic: Option) -> Tensor { panic(array!['not supported!']) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { @@ -589,26 +591,29 @@ impl FP64x64Tensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - - fn optional(self: @Tensor) -> Option>{ + + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(255, false), NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(1, false), - ) + ) } fn scatter_nd( diff --git a/src/operators/tensor/implementations/tensor_fp8x23.cairo b/src/operators/tensor/implementations/tensor_fp8x23.cairo index b38c70e65..c16b7feed 100644 --- a/src/operators/tensor/implementations/tensor_fp8x23.cairo +++ b/src/operators/tensor/implementations/tensor_fp8x23.cairo @@ -561,10 +561,12 @@ impl FP8x23Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP8x23, end: FP8x23, step: FP8x23) -> Tensor { math::range::range(start, end, step) } @@ -580,36 +582,36 @@ impl FP8x23Tensor of TensorTrait { fn blackman_window(size: FP8x23, periodic: Option) -> Tensor { math::blackman_window::blackman_window(size, FP8x23 { mag: PI, sign: false }, periodic) } - + fn split_to_sequence( - self: @Tensor, - axis: usize, - keepdims: usize, - split: Option> + self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - + fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(255, false), NumberTrait::new_unscaled(0, false), NumberTrait::new_unscaled(1, false), - ) + ) } fn scatter_nd( diff --git a/src/operators/tensor/implementations/tensor_fp8x23wide.cairo b/src/operators/tensor/implementations/tensor_fp8x23wide.cairo index 51456e6fc..0e5ecc074 100644 --- a/src/operators/tensor/implementations/tensor_fp8x23wide.cairo +++ b/src/operators/tensor/implementations/tensor_fp8x23wide.cairo @@ -500,10 +500,12 @@ impl FP8x23WTensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { math::random_uniform_like::random_uniform_like(*tensor, high, low, seed) } - + fn range(start: FP8x23W, end: FP8x23W, step: FP8x23W) -> Tensor { math::range::range(start, end, step) } @@ -519,26 +521,29 @@ impl FP8x23WTensor of TensorTrait { fn blackman_window(size: FP8x23W, periodic: Option) -> Tensor { math::blackman_window::blackman_window(size, FP8x23W { mag: PI, sign: false }, periodic) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - + fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - + fn dynamic_quantize_linear( self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + ) -> (Tensor::, Tensor::, Tensor) { quantization::dynamic_quantize_linear::dynamic_quantize_linear( self, NumberTrait::new_unscaled(0, false), diff --git a/src/operators/tensor/implementations/tensor_i32.cairo b/src/operators/tensor/implementations/tensor_i32.cairo index a756ea72f..5e637d4ff 100644 --- a/src/operators/tensor/implementations/tensor_i32.cairo +++ b/src/operators/tensor/implementations/tensor_i32.cairo @@ -536,10 +536,12 @@ impl I32Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { panic(array!['not supported!']) } - + fn range(start: i32, end: i32, step: i32) -> Tensor { math::range::range(start, end, step) } @@ -555,35 +557,33 @@ impl I32Tensor of TensorTrait { fn blackman_window(size: i32, periodic: Option) -> Tensor { panic(array!['not supported!']) } - + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - + fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - - fn optional(self: @Tensor) -> Option>{ - manipulation::optional::optional(self) + + + fn optional(self: @Tensor) -> Option> { + manipulation::optional::optional(self) } - - fn dynamic_quantize_linear( - self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + + fn dynamic_quantize_linear(self: @Tensor) -> (Tensor::, Tensor::, Tensor) { panic(array!['not supported!']) } - + fn scatter_nd( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor { math::scatter_nd::scatter_nd(self, updates, indices, reduction) } diff --git a/src/operators/tensor/implementations/tensor_i8.cairo b/src/operators/tensor/implementations/tensor_i8.cairo index 38d12dbe4..a5f9476c1 100644 --- a/src/operators/tensor/implementations/tensor_i8.cairo +++ b/src/operators/tensor/implementations/tensor_i8.cairo @@ -540,10 +540,12 @@ impl I8Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { panic(array!['not supported!']) } - + fn range(start: i8, end: i8, step: i8) -> Tensor { math::range::range(start, end, step) } @@ -559,8 +561,8 @@ impl I8Tensor of TensorTrait { fn blackman_window(size: i8, periodic: Option) -> Tensor { panic(array!['not supported!']) } - - + + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { @@ -568,26 +570,24 @@ impl I8Tensor of TensorTrait { } fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - - fn optional(self: @Tensor) -> Option>{ + + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - - fn dynamic_quantize_linear( - self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ + + fn dynamic_quantize_linear(self: @Tensor) -> (Tensor::, Tensor::, Tensor) { panic(array!['not supported!']) } fn scatter_nd( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor { math::scatter_nd::scatter_nd(self, updates, indices, reduction) } diff --git a/src/operators/tensor/implementations/tensor_u32.cairo b/src/operators/tensor/implementations/tensor_u32.cairo index 599681d13..00ab75b1d 100644 --- a/src/operators/tensor/implementations/tensor_u32.cairo +++ b/src/operators/tensor/implementations/tensor_u32.cairo @@ -483,10 +483,12 @@ impl U32Tensor of TensorTrait { manipulation::split::split(self, axis, num_outputs, spl) } - fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor { + fn random_uniform_like( + tensor: @Tensor, high: Option, low: Option, seed: Option + ) -> Tensor { panic(array!['not supported!']) } - + fn range(start: u32, end: u32, step: u32) -> Tensor { math::range::range(start, end, step) } @@ -502,35 +504,33 @@ impl U32Tensor of TensorTrait { fn blackman_window(size: u32, periodic: Option) -> Tensor { panic(array!['not supported!']) } - - + + fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { manipulation::split_to_sequence::split_to_sequence(self, axis, keepdims, split) } - + fn reverse_sequence( - self: @Tensor, sequence_lens: Tensor, batch_axis: Option, time_axis: Option + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, + time_axis: Option ) -> Tensor { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } - + fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } - fn dynamic_quantize_linear( - self: @Tensor - ) -> (Tensor::, Tensor::, Tensor){ - panic(array!['not supported!']) + fn dynamic_quantize_linear(self: @Tensor) -> (Tensor::, Tensor::, Tensor) { + panic(array!['not supported!']) } - + fn scatter_nd( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor { math::scatter_nd::scatter_nd(self, updates, indices, reduction) } diff --git a/src/operators/tensor/manipulation/optional.cairo b/src/operators/tensor/manipulation/optional.cairo index e57e35e69..2a8019826 100644 --- a/src/operators/tensor/manipulation/optional.cairo +++ b/src/operators/tensor/manipulation/optional.cairo @@ -2,12 +2,7 @@ use core::option::OptionTrait; use orion::operators::tensor::{Tensor, TensorTrait}; /// Cf: TensorTrait::optional docstring -fn optional< - T, - +Copy, - +Drop, - impl TOption: OptionTrait ->( +fn optional, +Drop, impl TOption: OptionTrait>( self: @Tensor ) -> Option> { Option::Some(*self) diff --git a/src/operators/tensor/manipulation/reverse_sequence.cairo b/src/operators/tensor/manipulation/reverse_sequence.cairo index efec92399..4035e125c 100644 --- a/src/operators/tensor/manipulation/reverse_sequence.cairo +++ b/src/operators/tensor/manipulation/reverse_sequence.cairo @@ -2,26 +2,21 @@ use core::array::{ArrayTrait, SpanTrait}; use orion::operators::tensor::{TensorTrait, Tensor}; /// Cf: TensorTrait::reverse_sequence docstring -fn reverse_sequence< - T, - impl TTensor: TensorTrait, - impl TCopy: Copy, - impl TDrop: Drop ->( - self: @Tensor, - sequence_lens: Tensor, - batch_axis: Option, +fn reverse_sequence, impl TCopy: Copy, impl TDrop: Drop>( + self: @Tensor, + sequence_lens: Tensor, + batch_axis: Option, time_axis: Option -) -> Tensor{ +) -> Tensor { let shape = *self.shape; let mut data: Array = array![]; let has_batch_axis: usize = match batch_axis { - Option::Some(value) => { - assert!((value != 0) || (value != 1), "batch_axis must be one of 1 or 0."); - value - }, - Option::None => 0, + Option::Some(value) => { + assert!((value != 0) || (value != 1), "batch_axis must be one of 1 or 0."); + value + }, + Option::None => 0, }; let has_time_axis: usize = match time_axis { Option::Some(value) => { @@ -41,40 +36,38 @@ fn reverse_sequence< let mut index: Array = reverse_index(*self.shape, sequence_lens, control); loop { match index.pop_front() { - Option::Some(ele) => { - data.append(*((*self).data).at(ele)); - }, - Option::None => { - break; - } + Option::Some(ele) => { data.append(*((*self).data).at(ele)); }, + Option::None => { break; } } }; - + TensorTrait::::new(shape, data.span()) } -fn reverse_index( - shape: Span, sequence_lens: Tensor, control: bool -) -> Array { +fn reverse_index(shape: Span, sequence_lens: Tensor, control: bool) -> Array { let x: usize = *shape.at(0); let y: usize = *shape.at(1); let mut result = ArrayTrait::::new(); if control { // [i, slice] - assert!(sequence_lens.data.len() <= x,"The length of sequence_lens cannot exceed batch_axis"); + assert!( + sequence_lens.data.len() <= x, "The length of sequence_lens cannot exceed batch_axis" + ); let mut i: usize = 0; loop { if i >= x { break; } - + let reverse: usize = (*sequence_lens.data.at(i)); - assert!(reverse <= y && reverse >= 1, "sequence_lens must be greater than one and less than batch_size"); + assert!( + reverse <= y && reverse >= 1, + "sequence_lens must be greater than one and less than batch_size" + ); let mut j: usize = reverse - 1; loop { - if j == 0 { result.append(i * y + j); break; @@ -95,7 +88,9 @@ fn reverse_index( }; } else { // [slice, i] - assert!(sequence_lens.data.len() <= y,"The length of sequence_lens cannot exceed time_axis"); + assert!( + sequence_lens.data.len() <= y, "The length of sequence_lens cannot exceed time_axis" + ); let mut tmp = ArrayTrait::::new(); let mut i: usize = 0; loop { @@ -103,7 +98,10 @@ fn reverse_index( break; } let reverse: usize = *sequence_lens.data.at(i); - assert!(reverse <= x && reverse >= 1, "sequence_lens must be greater than one and less than batch_size"); + assert!( + reverse <= x && reverse >= 1, + "sequence_lens must be greater than one and less than batch_size" + ); let mut j: usize = reverse - 1; loop { @@ -125,7 +123,7 @@ fn reverse_index( i += 1; }; let tmp = tmp.span(); - let mut i : usize = 0; + let mut i: usize = 0; loop { if i > x - 1 { break; @@ -142,4 +140,4 @@ fn reverse_index( }; } result -} \ No newline at end of file +} diff --git a/src/operators/tensor/manipulation/split.cairo b/src/operators/tensor/manipulation/split.cairo index 3919c034f..65b787c84 100644 --- a/src/operators/tensor/manipulation/split.cairo +++ b/src/operators/tensor/manipulation/split.cairo @@ -4,12 +4,7 @@ use core::option::OptionTrait; use orion::operators::matrix::{MutMatrixTrait, MutMatrix, MutMatrixImpl}; /// Cf: TensorTrait::split docstring -fn split< - T, - +Copy, - +Drop, - +TensorTrait, ->( +fn split, +Drop, +TensorTrait,>( self: @Tensor, axis: usize, num_outputs: Option, split: Option> ) -> Array> { let has_num_outputs = match num_outputs { diff --git a/src/operators/tensor/manipulation/split_to_sequence.cairo b/src/operators/tensor/manipulation/split_to_sequence.cairo index 7ff3ff8db..0c73613ec 100644 --- a/src/operators/tensor/manipulation/split_to_sequence.cairo +++ b/src/operators/tensor/manipulation/split_to_sequence.cairo @@ -4,12 +4,7 @@ use core::option::OptionTrait; use orion::operators::matrix::{MutMatrixTrait, MutMatrix, MutMatrixImpl}; /// Cf: NNTrait::split docstring -fn split_to_sequence< - T, - +Copy, - +Drop, - +TensorTrait, ->( +fn split_to_sequence, +Drop, +TensorTrait,>( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { let has_split = match split { @@ -19,26 +14,25 @@ fn split_to_sequence< let mut has_num_outputs = false; let mut split_unwrap: Tensor = TensorTrait::new(array![1].span(), array![1].span()); - if (!has_split){ + if (!has_split) { let split_length = *(*self.shape).at(axis); let mut split_data: Array = array![]; let mut i = 0; - loop{ + loop { if (i >= split_length) { break; - } + } split_data.append(1); - i += 1; + i += 1; }; split_unwrap = TensorTrait::new(array![split_length].span(), split_data.span()); - }else if (split.unwrap().data.len() == 1 && *(split.unwrap().shape.at(0)) == 1) { + } else if (split.unwrap().data.len() == 1 && *(split.unwrap().shape.at(0)) == 1) { // A scalar has_num_outputs = true; split_unwrap = split.unwrap(); - }else{ + } else { split_unwrap = split.unwrap(); } - let mut splited_t: Array> = array![]; @@ -52,27 +46,27 @@ fn split_to_sequence< splited_t = split_has_split(self, axis, split_unwrap); } - if (keepdims==0 && has_split==false) { + if (keepdims == 0 && has_split == false) { let mut splited_t_temp: Array> = array![]; let mut i = 0; - loop{ + loop { if (i >= splited_t.len()) { break; } let mut shape: Array = array![]; let mut j = 0; let shape_in_splited: Span = *splited_t.at(i).shape; - loop{ - if ( j >= shape_in_splited.len()) { + loop { + if (j >= shape_in_splited.len()) { break; } - if (j!=axis) { - shape.append(*shape_in_splited.at(j)) + if (j != axis) { + shape.append(*shape_in_splited.at(j)) } - j += 1; + j += 1; }; splited_t_temp.append(splited_t[i].reshape(shape.span())); - i += 1; + i += 1; }; return splited_t_temp; } @@ -82,12 +76,7 @@ fn split_to_sequence< /// Subfunction split for tensors (wth num_outputs). /// Cf: TensorTrait::split docstring -fn split_num_outputs< - T, - +Copy, - +Drop, - +TensorTrait, ->( +fn split_num_outputs, +Drop, +TensorTrait,>( t: @Tensor, mut axis: usize, num_outputs: usize ) -> Array> { let mut splited_t: Array> = array![]; @@ -174,12 +163,7 @@ fn split_num_outputs< /// Subfunction split for tensors (wth split). /// Cf: TensorTrait::split docstring -fn split_has_split< - T, - +Copy, - +Drop, - +TensorTrait, ->( +fn split_has_split, +Drop, +TensorTrait,>( t: @Tensor, axis: usize, split: Tensor ) -> Array> { let mut splited_t: Array> = array![]; diff --git a/src/operators/tensor/math/blackman_window.cairo b/src/operators/tensor/math/blackman_window.cairo index 29f4d2903..80c28c661 100644 --- a/src/operators/tensor/math/blackman_window.cairo +++ b/src/operators/tensor/math/blackman_window.cairo @@ -25,7 +25,9 @@ fn blackman_window< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(size: T, PI: T, periodic: Option) -> Tensor { +>( + size: T, PI: T, periodic: Option +) -> Tensor { let start: T = NumberTrait::zero(); let one_step: T = NumberTrait::one(); let two: T = one_step + one_step; diff --git a/src/operators/tensor/math/hamming_window.cairo b/src/operators/tensor/math/hamming_window.cairo index 216590f09..48de38662 100644 --- a/src/operators/tensor/math/hamming_window.cairo +++ b/src/operators/tensor/math/hamming_window.cairo @@ -25,7 +25,9 @@ fn hamming_window< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(size: T, PI: T, periodic: Option) -> Tensor { +>( + size: T, PI: T, periodic: Option +) -> Tensor { let start: T = NumberTrait::zero(); let one_step: T = NumberTrait::one(); let two: T = one_step + one_step; diff --git a/src/operators/tensor/math/hann_window.cairo b/src/operators/tensor/math/hann_window.cairo index 05aa3b923..6af220f9c 100644 --- a/src/operators/tensor/math/hann_window.cairo +++ b/src/operators/tensor/math/hann_window.cairo @@ -25,7 +25,9 @@ fn hann_window< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(size: T, PI: T, periodic: Option) -> Tensor { +>( + size: T, PI: T, periodic: Option +) -> Tensor { let start: T = NumberTrait::zero(); let one_step: T = NumberTrait::one(); let ni = TensorTrait::range(start, size, one_step); diff --git a/src/operators/tensor/math/onehot.cairo b/src/operators/tensor/math/onehot.cairo index bad9c9ef0..ff4e0b6ad 100644 --- a/src/operators/tensor/math/onehot.cairo +++ b/src/operators/tensor/math/onehot.cairo @@ -104,7 +104,6 @@ fn onehot_encode< index += 1; }; - output_tensor = output_tensor.transpose(tranpose_axes.span()); } diff --git a/src/operators/tensor/math/random_uniform_like.cairo b/src/operators/tensor/math/random_uniform_like.cairo index 0b9c06cda..fa048fbcd 100644 --- a/src/operators/tensor/math/random_uniform_like.cairo +++ b/src/operators/tensor/math/random_uniform_like.cairo @@ -30,8 +30,9 @@ fn random_uniform_like< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(tensor: Tensor, high: Option, low: Option, seed:Option) -> Tensor { - +>( + tensor: Tensor, high: Option, low: Option, seed: Option +) -> Tensor { let mut seed: usize = match seed { Option::Some(seed) => seed, Option::None => NumberTrait::max_value(), @@ -45,8 +46,8 @@ fn random_uniform_like< Option::None => NumberTrait::zero(), }; assert!(high > low, "high must be larger than low"); - let res = tensor_get_state(tensor,seed,high,low); - + let res = tensor_get_state(tensor, seed, high, low); + return res; } @@ -67,7 +68,9 @@ fn tensor_get_state< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(tensor: Tensor, mut seed: usize, high: T, low: T) -> Tensor { +>( + tensor: Tensor, mut seed: usize, high: T, low: T +) -> Tensor { let mut data = ArrayTrait::new(); let mut count = (tensor.data).len(); let mut i = 0; @@ -105,7 +108,9 @@ fn hash_random_range< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(seed: usize, min: T, max: T) -> T { +>( + seed: usize, min: T, max: T +) -> T { let mut key = PedersenHasherImpl::new(); let hash: felt252 = key.hash(seed.into(), 1); let a: u128 = 4294967295; diff --git a/src/operators/tensor/math/range.cairo b/src/operators/tensor/math/range.cairo index a21f7f2b0..d08d4a086 100644 --- a/src/operators/tensor/math/range.cairo +++ b/src/operators/tensor/math/range.cairo @@ -23,7 +23,9 @@ fn range< impl TAddEq: AddEq, impl TCopy: Copy, impl TDrop: Drop, ->(mut start: T, end: T, step: T) -> Tensor { +>( + mut start: T, end: T, step: T +) -> Tensor { let mut result: Array = ArrayTrait::::new(); let zero: T = NumberTrait::zero(); loop { diff --git a/src/operators/tensor/math/resize.cairo b/src/operators/tensor/math/resize.cairo index 961fc3853..551a631b2 100644 --- a/src/operators/tensor/math/resize.cairo +++ b/src/operators/tensor/math/resize.cairo @@ -915,9 +915,7 @@ fn interpolate_1d_with_x< let mut coeffs = match mode { MODE::NEAREST => { let coeffs = match antialias { - Option::Some => core::panic_with_felt252( - 'antialias not for mode NEAREST' - ), + Option::Some => core::panic_with_felt252('antialias not for mode NEAREST'), Option::None => { nearest_coeffs(ratio, nearest_mode) }, }; coeffs @@ -938,9 +936,7 @@ fn interpolate_1d_with_x< }, MODE::CUBIC => { let coeffs = match antialias { - Option::Some => { - cubic_coeffs_antialias(ratio, scale_factor, cubic_coeff_a) - }, + Option::Some => { cubic_coeffs_antialias(ratio, scale_factor, cubic_coeff_a) }, Option::None => { cubic_coeffs(ratio, cubic_coeff_a) }, }; coeffs diff --git a/src/operators/tensor/math/scatter.cairo b/src/operators/tensor/math/scatter.cairo index a108ae4e2..5806a154d 100644 --- a/src/operators/tensor/math/scatter.cairo +++ b/src/operators/tensor/math/scatter.cairo @@ -68,25 +68,20 @@ fn scatter< *data_shape_copy.pop_front().unwrap(); *indices_shape_copy.pop_front().unwrap(); - let mut indices_loop: usize = 1; let mut data_loop: usize = 1; if (axis == 0) { loop { match indices_shape_copy.pop_front() { - Option::Some(val) => { - indices_loop *= *val; - }, + Option::Some(val) => { indices_loop *= *val; }, Option::None => { break; } }; }; loop { match data_shape_copy.pop_front() { - Option::Some(val) => { - data_loop *= *val; - }, + Option::Some(val) => { data_loop *= *val; }, Option::None => { break; } }; }; diff --git a/src/operators/tensor/math/scatter_nd.cairo b/src/operators/tensor/math/scatter_nd.cairo index 61535f618..3631b9012 100644 --- a/src/operators/tensor/math/scatter_nd.cairo +++ b/src/operators/tensor/math/scatter_nd.cairo @@ -24,12 +24,8 @@ fn scatter_nd< impl TPartialOrd: PartialOrd, impl TPartialEq: PartialEq, >( - self: @Tensor, - updates: Tensor, - indices: Tensor, - reduction: Option + self: @Tensor, updates: Tensor, indices: Tensor, reduction: Option ) -> Tensor { - let reduction = match reduction { Option::Some(val) => val, Option::None => 'none' @@ -44,7 +40,7 @@ fn scatter_nd< assert(*indices_last_axis <= data_rank, 'must be <= data rank'); let ind_max = indices.data.max().unwrap(); - if (data_rank > 1){ + if (data_rank > 1) { assert(ind_max < data_rank, 'index is out of bound'); } @@ -53,7 +49,7 @@ fn scatter_nd< loop { match indices_shape.pop_front() { - Option::Some(val) => { batch_dims_shape.append(*val);}, + Option::Some(val) => { batch_dims_shape.append(*val); }, Option::None => { break; } }; }; @@ -61,11 +57,11 @@ fn scatter_nd< let mut data_shape_clone = data_shape.clone(); loop { match data_shape_clone.pop_front() { - Option::Some(val) => { + Option::Some(val) => { if (ind >= *indices_last_axis) { batch_dims_shape.append(*val); - } - }, + } + }, Option::None => { break; } }; }; @@ -73,10 +69,8 @@ fn scatter_nd< let mut ind: usize = 0; loop { match batch_dims_shape.pop_front() { - Option::Some(val) => { - assert(val == *updates_shape[ind], 'must be same'); - }, - Option::None => { break; } + Option::Some(val) => { assert(val == *updates_shape[ind], 'must be same'); }, + Option::None => { break; } }; }; @@ -89,7 +83,7 @@ fn scatter_nd< if data_rank >= 1 { loop { match data_shape_clone.pop_front() { - Option::Some(val) => { indexer *= *val;}, + Option::Some(val) => { indexer *= *val; }, Option::None => { break; } }; } @@ -99,7 +93,7 @@ fn scatter_nd< let mut dict_ind: usize = 1; loop { match data_indices.pop_front() { - Option::Some(val) => { + Option::Some(val) => { updates_index_dict.insert((*val).into(), dict_ind); dict_ind += 1; }, @@ -113,62 +107,59 @@ fn scatter_nd< let mut inner_index: usize = 0; let num = *data_shape_first.unwrap(); loop { - if (index == num){ + if (index == num) { break; } let comp_index = updates_index_dict.get(index.into()); if (comp_index == 0) { loop { - if (inner_index == indexer) { + if (inner_index == indexer) { inner_index = 0; - break; + break; } let val = *data.at((index * indexer) + inner_index); output_data.append(val); inner_index += 1; }; - } - else { + } else { loop { - if (inner_index == indexer) { + if (inner_index == indexer) { inner_index = 0; - break; + break; } - if (reduction == 'none'){ - let val = data_updates.at(((comp_index-1) * indexer) + inner_index); + if (reduction == 'none') { + let val = data_updates.at(((comp_index - 1) * indexer) + inner_index); output_data.append(*val); } if (reduction == 'add') { - let val = data_updates.at(((comp_index-1) * indexer) + inner_index); + let val = data_updates.at(((comp_index - 1) * indexer) + inner_index); let data_val = *data.at((index * indexer) + inner_index); output_data.append(*val + data_val); } if (reduction == 'mul') { - let val = data_updates.at(((comp_index-1) * indexer) + inner_index); + let val = data_updates.at(((comp_index - 1) * indexer) + inner_index); let data_val = *data.at((index * indexer) + inner_index); output_data.append((*val) * data_val); } if (reduction == 'max') { - let val = data_updates.at(((comp_index-1) * indexer) + inner_index); + let val = data_updates.at(((comp_index - 1) * indexer) + inner_index); let data_val = *data.at((index * indexer) + inner_index); if (*val > data_val) { output_data.append(*val); - } - else { + } else { output_data.append(data_val); } - } + } if (reduction == 'min') { - let val = data_updates.at(((comp_index-1) * indexer) + inner_index); + let val = data_updates.at(((comp_index - 1) * indexer) + inner_index); let data_val = *data.at((index * indexer) + inner_index); if (*val > data_val) { output_data.append(data_val); - } - else { + } else { output_data.append(*val); } - } + } inner_index += 1; } } @@ -177,5 +168,4 @@ fn scatter_nd< let mut output_tensor = TensorTrait::::new(*self.shape, output_data.span()); return output_tensor; - -} \ No newline at end of file +} diff --git a/src/operators/tensor/quantization/dequantize_linear.cairo b/src/operators/tensor/quantization/dequantize_linear.cairo index b17c4a2d3..f9df20802 100644 --- a/src/operators/tensor/quantization/dequantize_linear.cairo +++ b/src/operators/tensor/quantization/dequantize_linear.cairo @@ -45,7 +45,6 @@ fn dequantize_per_axis< >( x: @Tensor, x_scale: @Tensor, x_zero_point: @Tensor ) -> Tensor:: { - (*x - *x_zero_point) * *x_scale } diff --git a/src/operators/tensor/quantization/dynamic_quantize_linear.cairo b/src/operators/tensor/quantization/dynamic_quantize_linear.cairo index 085132e92..d096f8776 100644 --- a/src/operators/tensor/quantization/dynamic_quantize_linear.cairo +++ b/src/operators/tensor/quantization/dynamic_quantize_linear.cairo @@ -42,17 +42,16 @@ fn dynamic_quantize_linear< let y_scale_value: T = (x_max - x_min) / (max - min); if x_max == x_min { y_scale_values.append(one); - }else{ + } else { y_scale_values.append(y_scale_value); } - - + let mut y_scale_tensor_shape = ArrayTrait::new(); y_scale_tensor_shape.append(y_scale_values.len()); - let y_scale = TensorTrait::::new( - shape: y_scale_tensor_shape.span(), data: y_scale_values.span(), - ); + let y_scale = TensorTrait::< + T + >::new(shape: y_scale_tensor_shape.span(), data: y_scale_values.span(),); // intermediate_zero_point = qmin - min(x)/y_scale let intermediate_zero_point: T = min - x_min / y_scale_value; @@ -67,12 +66,12 @@ fn dynamic_quantize_linear< let mut y_zero_point_values = ArrayTrait::new(); y_zero_point_values.append(y_zero_point_value); - let mut y_zero_point = TensorTrait::::new( - shape: y_zero_point_tensor_shape.span(), data: y_zero_point_values.span(), - ); + let mut y_zero_point = TensorTrait::< + T + >::new(shape: y_zero_point_tensor_shape.span(), data: y_zero_point_values.span(),); // y_zero_point = y_zero_point.round(); // tensor only supported! // y = saturate (round (x / y_scale) + y_zero_point) return (quantize_linear(x, @y_scale, @y_zero_point, min, max), y_scale, y_zero_point); -} \ No newline at end of file +} diff --git a/tests/nodes/random_uniform_like_fp16x16.cairo b/tests/nodes/random_uniform_like_fp16x16.cairo index 951a567b8..cc8fa60a9 100644 --- a/tests/nodes/random_uniform_like_fp16x16.cairo +++ b/tests/nodes/random_uniform_like_fp16x16.cairo @@ -15,7 +15,12 @@ fn test_random_uniform_like_fp16x16() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = TensorTrait::random_uniform_like(@input_0, Option::Some(FP16x16 { mag: 655360, sign: false }),Option::Some(FP16x16 { mag: 65536, sign: false }), Option::Some(354145)); + let y_0 = TensorTrait::random_uniform_like( + @input_0, + Option::Some(FP16x16 { mag: 655360, sign: false }), + Option::Some(FP16x16 { mag: 65536, sign: false }), + Option::Some(354145) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/random_uniform_like_fp8x23.cairo b/tests/nodes/random_uniform_like_fp8x23.cairo index 06c1ad47d..b4192e536 100644 --- a/tests/nodes/random_uniform_like_fp8x23.cairo +++ b/tests/nodes/random_uniform_like_fp8x23.cairo @@ -15,7 +15,12 @@ fn test_random_uniform_like_fp8x23() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = TensorTrait::random_uniform_like(@input_0, Option::Some(FP8x23 { mag: 83886080, sign: false }),Option::Some(FP8x23 { mag: 8388608, sign: false }), Option::Some(354145)); + let y_0 = TensorTrait::random_uniform_like( + @input_0, + Option::Some(FP8x23 { mag: 83886080, sign: false }), + Option::Some(FP8x23 { mag: 8388608, sign: false }), + Option::Some(354145) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/range_fp16x16.cairo b/tests/nodes/range_fp16x16.cairo index efacd031c..331a4fc61 100644 --- a/tests/nodes/range_fp16x16.cairo +++ b/tests/nodes/range_fp16x16.cairo @@ -13,7 +13,11 @@ use orion::numbers::{FixedTrait, FP16x16}; fn test_range_fp16x16() { let z_0 = output_0::output_0(); - let y_0 = TensorTrait::range(FP16x16 { mag: 65536, sign: false },FP16x16 { mag: 1638400, sign: false },FP16x16 { mag: 196608, sign: false }); + let y_0 = TensorTrait::range( + FP16x16 { mag: 65536, sign: false }, + FP16x16 { mag: 1638400, sign: false }, + FP16x16 { mag: 196608, sign: false } + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/range_fp8x23.cairo b/tests/nodes/range_fp8x23.cairo index c299a96ab..ac218e22b 100644 --- a/tests/nodes/range_fp8x23.cairo +++ b/tests/nodes/range_fp8x23.cairo @@ -13,7 +13,11 @@ use orion::numbers::{FixedTrait, FP8x23}; fn test_range_fp8x23() { let z_0 = output_0::output_0(); - let y_0 = TensorTrait::range(FP8x23 { mag: 8388608, sign: false },FP8x23 { mag: 41943040, sign: false },FP8x23 { mag: 2516582, sign: false }); + let y_0 = TensorTrait::range( + FP8x23 { mag: 8388608, sign: false }, + FP8x23 { mag: 41943040, sign: false }, + FP8x23 { mag: 2516582, sign: false } + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/range_i32.cairo b/tests/nodes/range_i32.cairo index 786094089..90580f17c 100644 --- a/tests/nodes/range_i32.cairo +++ b/tests/nodes/range_i32.cairo @@ -13,7 +13,7 @@ use orion::numbers::NumberTrait; fn test_range_i32() { let z_0 = output_0::output_0(); - let y_0 = TensorTrait::range(21,2,-3); + let y_0 = TensorTrait::range(21, 2, -3); assert_eq(y_0, z_0); } diff --git a/tests/nodes/range_i8.cairo b/tests/nodes/range_i8.cairo index 90c9917cd..088a2cd7d 100644 --- a/tests/nodes/range_i8.cairo +++ b/tests/nodes/range_i8.cairo @@ -13,7 +13,7 @@ use orion::numbers::NumberTrait; fn test_range_i8() { let z_0 = output_0::output_0(); - let y_0 = TensorTrait::range(-1,25,3); + let y_0 = TensorTrait::range(-1, 25, 3); assert_eq(y_0, z_0); } diff --git a/tests/nodes/range_u32.cairo b/tests/nodes/range_u32.cairo index fcaa30ca0..aacb50f4b 100644 --- a/tests/nodes/range_u32.cairo +++ b/tests/nodes/range_u32.cairo @@ -13,7 +13,7 @@ use orion::numbers::NumberTrait; fn test_range_u32() { let z_0 = output_0::output_0(); - let y_0 = TensorTrait::range(1,25,3); + let y_0 = TensorTrait::range(1, 25, 3); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_different_dimensions_1_6.cairo b/tests/nodes/reverse_sequence_different_dimensions_1_6.cairo index 1ae01e30b..e98d95345 100644 --- a/tests/nodes/reverse_sequence_different_dimensions_1_6.cairo +++ b/tests/nodes/reverse_sequence_different_dimensions_1_6.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_different_dimensions_1_6() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![1].span(), array![5].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![1].span(), array![5].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_different_dimensions_2_4.cairo b/tests/nodes/reverse_sequence_different_dimensions_2_4.cairo index 3fc2a4d28..96ddce2b2 100644 --- a/tests/nodes/reverse_sequence_different_dimensions_2_4.cairo +++ b/tests/nodes/reverse_sequence_different_dimensions_2_4.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_different_dimensions_2_4() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![2,2,2,2].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![2, 2, 2, 2].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_different_dimensions_3x9_batch.cairo b/tests/nodes/reverse_sequence_different_dimensions_3x9_batch.cairo index 254ade4de..b22a61862 100644 --- a/tests/nodes/reverse_sequence_different_dimensions_3x9_batch.cairo +++ b/tests/nodes/reverse_sequence_different_dimensions_3x9_batch.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_different_dimensions_3x9_batch() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![3].span(), array![7,8,9].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![3].span(), array![7, 8, 9].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_different_dimensions_3x9_time.cairo b/tests/nodes/reverse_sequence_different_dimensions_3x9_time.cairo index aa8667bdd..f1e961f08 100644 --- a/tests/nodes/reverse_sequence_different_dimensions_3x9_time.cairo +++ b/tests/nodes/reverse_sequence_different_dimensions_3x9_time.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_different_dimensions_3x9_time() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![9].span(), array![3,2,3,2,3,2,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![9].span(), array![3, 2, 3, 2, 3, 2, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_different_dimensions_4_5.cairo b/tests/nodes/reverse_sequence_different_dimensions_4_5.cairo index 053f187e1..e1986a7b7 100644 --- a/tests/nodes/reverse_sequence_different_dimensions_4_5.cairo +++ b/tests/nodes/reverse_sequence_different_dimensions_4_5.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_different_dimensions_4_5() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![5,4,3,2].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![5, 4, 3, 2].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_fp16x16_2d_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_fp16x16_2d_batch_equal_parts.cairo index 9dcfd511c..697231f17 100644 --- a/tests/nodes/reverse_sequence_fp16x16_2d_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_fp16x16_2d_batch_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_fp16x16_2d_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_fp16x16_2d_time_equal_parts.cairo b/tests/nodes/reverse_sequence_fp16x16_2d_time_equal_parts.cairo index 518db31ca..af77e1a55 100644 --- a/tests/nodes/reverse_sequence_fp16x16_2d_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_fp16x16_2d_time_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_fp16x16_2d_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_fp16x16_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_fp16x16_batch_equal_parts.cairo index c1bcdbc6a..858c62e43 100644 --- a/tests/nodes/reverse_sequence_fp16x16_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_fp16x16_batch_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_fp16x16_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_fp16x16_time_equal_parts.cairo b/tests/nodes/reverse_sequence_fp16x16_time_equal_parts.cairo index c2f27748e..4b576add6 100644 --- a/tests/nodes/reverse_sequence_fp16x16_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_fp16x16_time_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_fp16x16_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i32_2d_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_i32_2d_batch_equal_parts.cairo index 350607eae..85a21abf1 100644 --- a/tests/nodes/reverse_sequence_i32_2d_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i32_2d_batch_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_i32_2d_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i32_2d_time_equal_parts.cairo b/tests/nodes/reverse_sequence_i32_2d_time_equal_parts.cairo index dd47c062e..489ebf8da 100644 --- a/tests/nodes/reverse_sequence_i32_2d_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i32_2d_time_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_i32_2d_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i32_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_i32_batch_equal_parts.cairo index 86f1855e4..4ab9f9559 100644 --- a/tests/nodes/reverse_sequence_i32_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i32_batch_equal_parts.cairo @@ -16,7 +16,12 @@ fn test_reverse_sequence_i32_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i32_time_equal_parts.cairo b/tests/nodes/reverse_sequence_i32_time_equal_parts.cairo index 28c9d0a84..2280f61c3 100644 --- a/tests/nodes/reverse_sequence_i32_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i32_time_equal_parts.cairo @@ -16,7 +16,12 @@ fn test_reverse_sequence_i32_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i8_2d_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_i8_2d_batch_equal_parts.cairo index 7a9ebc438..a2f3e974c 100644 --- a/tests/nodes/reverse_sequence_i8_2d_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i8_2d_batch_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_i8_2d_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i8_2d_time_equal_parts.cairo b/tests/nodes/reverse_sequence_i8_2d_time_equal_parts.cairo index e99616d89..bbb7556ce 100644 --- a/tests/nodes/reverse_sequence_i8_2d_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i8_2d_time_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_i8_2d_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i8_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_i8_batch_equal_parts.cairo index 9b5afdecf..63434d7df 100644 --- a/tests/nodes/reverse_sequence_i8_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i8_batch_equal_parts.cairo @@ -15,7 +15,12 @@ fn test_reverse_sequence_i8_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_i8_time_equal_parts.cairo b/tests/nodes/reverse_sequence_i8_time_equal_parts.cairo index a803ef02e..0f10bac72 100644 --- a/tests/nodes/reverse_sequence_i8_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_i8_time_equal_parts.cairo @@ -16,7 +16,12 @@ fn test_reverse_sequence_i8_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_time_equal_parts.cairo b/tests/nodes/reverse_sequence_time_equal_parts.cairo index a79efe4af..8e102a0ab 100644 --- a/tests/nodes/reverse_sequence_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_time_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_2d_batch_equal_parts.cairo b/tests/nodes/reverse_sequence_u32_2d_batch_equal_parts.cairo index 9dcfc9735..ce8e125b9 100644 --- a/tests/nodes/reverse_sequence_u32_2d_batch_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_u32_2d_batch_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_2d_batch_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_2d_time_equal_parts.cairo b/tests/nodes/reverse_sequence_u32_2d_time_equal_parts.cairo index d89e73242..d2d9606b0 100644 --- a/tests/nodes/reverse_sequence_u32_2d_time_equal_parts.cairo +++ b/tests/nodes/reverse_sequence_u32_2d_time_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_2d_time_equal_parts() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_3x3_batch.cairo b/tests/nodes/reverse_sequence_u32_3x3_batch.cairo index e8ff9ca9d..a95260c33 100644 --- a/tests/nodes/reverse_sequence_u32_3x3_batch.cairo +++ b/tests/nodes/reverse_sequence_u32_3x3_batch.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_3x3_batch() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![3].span(), array![3,1,2].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![3].span(), array![3, 1, 2].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_3x3_time.cairo b/tests/nodes/reverse_sequence_u32_3x3_time.cairo index ac2b62361..12978fe32 100644 --- a/tests/nodes/reverse_sequence_u32_3x3_time.cairo +++ b/tests/nodes/reverse_sequence_u32_3x3_time.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_3x3_time() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![3].span(), array![1,3,3].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![3].span(), array![1, 3, 3].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_4x4_batch.cairo b/tests/nodes/reverse_sequence_u32_4x4_batch.cairo index ce124a89e..dafd62951 100644 --- a/tests/nodes/reverse_sequence_u32_4x4_batch.cairo +++ b/tests/nodes/reverse_sequence_u32_4x4_batch.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_4x4_batch() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![1,2,3,4].span()), Option::Some(0), Option::Some(1)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![1, 2, 3, 4].span()), + Option::Some(0), + Option::Some(1) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_4x4_time.cairo b/tests/nodes/reverse_sequence_u32_4x4_time.cairo index a0d9ca889..d7e42272f 100644 --- a/tests/nodes/reverse_sequence_u32_4x4_time.cairo +++ b/tests/nodes/reverse_sequence_u32_4x4_time.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_4x4_time() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![4].span(), array![4,3,2,1].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![4].span(), array![4, 3, 2, 1].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/reverse_sequence_u32_zero_size.cairo b/tests/nodes/reverse_sequence_u32_zero_size.cairo index cabda40b5..34f18742d 100644 --- a/tests/nodes/reverse_sequence_u32_zero_size.cairo +++ b/tests/nodes/reverse_sequence_u32_zero_size.cairo @@ -14,7 +14,12 @@ fn test_reverse_sequence_u32_zero_size() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let y_0 = input_0.reverse_sequence(TensorTrait::::new(array![0].span(), array![].span()), Option::Some(1), Option::Some(0)); + let y_0 = input_0 + .reverse_sequence( + TensorTrait::::new(array![0].span(), array![].span()), + Option::Some(1), + Option::Some(0) + ); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp16x16_3d_add.cairo b/tests/nodes/scatter_nd_fp16x16_3d_add.cairo index 95b09a56d..d182c89d1 100644 --- a/tests/nodes/scatter_nd_fp16x16_3d_add.cairo +++ b/tests/nodes/scatter_nd_fp16x16_3d_add.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp16x16_3d_add() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('add')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('add')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp16x16_3d_default.cairo b/tests/nodes/scatter_nd_fp16x16_3d_default.cairo index 80bb892de..5cec477a9 100644 --- a/tests/nodes/scatter_nd_fp16x16_3d_default.cairo +++ b/tests/nodes/scatter_nd_fp16x16_3d_default.cairo @@ -20,7 +20,7 @@ fn test_scatter_nd_fp16x16_3d_default() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::None(())); + let y_0 = input_0.scatter_nd(updates: input_1, indices: input_2, reduction: Option::None(())); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp16x16_3d_max.cairo b/tests/nodes/scatter_nd_fp16x16_3d_max.cairo index 84e99545c..5399cffa4 100644 --- a/tests/nodes/scatter_nd_fp16x16_3d_max.cairo +++ b/tests/nodes/scatter_nd_fp16x16_3d_max.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp16x16_3d_max() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('max')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('max')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp16x16_3d_min.cairo b/tests/nodes/scatter_nd_fp16x16_3d_min.cairo index 9ee1c89b6..51f848437 100644 --- a/tests/nodes/scatter_nd_fp16x16_3d_min.cairo +++ b/tests/nodes/scatter_nd_fp16x16_3d_min.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp16x16_3d_min() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('min')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('min')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp16x16_3d_mul.cairo b/tests/nodes/scatter_nd_fp16x16_3d_mul.cairo index 2d5716d98..64fcc74f4 100644 --- a/tests/nodes/scatter_nd_fp16x16_3d_mul.cairo +++ b/tests/nodes/scatter_nd_fp16x16_3d_mul.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp16x16_3d_mul() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('mul')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('mul')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp8x23_3d_add.cairo b/tests/nodes/scatter_nd_fp8x23_3d_add.cairo index 3b748994a..f24e9bcd5 100644 --- a/tests/nodes/scatter_nd_fp8x23_3d_add.cairo +++ b/tests/nodes/scatter_nd_fp8x23_3d_add.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp8x23_3d_add() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('add')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('add')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp8x23_3d_default.cairo b/tests/nodes/scatter_nd_fp8x23_3d_default.cairo index 75dc57f69..36e7ab220 100644 --- a/tests/nodes/scatter_nd_fp8x23_3d_default.cairo +++ b/tests/nodes/scatter_nd_fp8x23_3d_default.cairo @@ -20,7 +20,7 @@ fn test_scatter_nd_fp8x23_3d_default() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::None(())); + let y_0 = input_0.scatter_nd(updates: input_1, indices: input_2, reduction: Option::None(())); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp8x23_3d_max.cairo b/tests/nodes/scatter_nd_fp8x23_3d_max.cairo index d09351807..360dc10a3 100644 --- a/tests/nodes/scatter_nd_fp8x23_3d_max.cairo +++ b/tests/nodes/scatter_nd_fp8x23_3d_max.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp8x23_3d_max() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('max')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('max')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp8x23_3d_min.cairo b/tests/nodes/scatter_nd_fp8x23_3d_min.cairo index dadc8d27d..39ba6a903 100644 --- a/tests/nodes/scatter_nd_fp8x23_3d_min.cairo +++ b/tests/nodes/scatter_nd_fp8x23_3d_min.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp8x23_3d_min() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('min')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('min')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_fp8x23_3d_mul.cairo b/tests/nodes/scatter_nd_fp8x23_3d_mul.cairo index 853780f6c..bb1756dc2 100644 --- a/tests/nodes/scatter_nd_fp8x23_3d_mul.cairo +++ b/tests/nodes/scatter_nd_fp8x23_3d_mul.cairo @@ -20,7 +20,8 @@ fn test_scatter_nd_fp8x23_3d_mul() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('mul')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('mul')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_u32_add.cairo b/tests/nodes/scatter_nd_u32_add.cairo index cf3c4018b..c1112d27d 100644 --- a/tests/nodes/scatter_nd_u32_add.cairo +++ b/tests/nodes/scatter_nd_u32_add.cairo @@ -18,7 +18,8 @@ fn test_scatter_nd_u32_add() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('add')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('add')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_u32_default.cairo b/tests/nodes/scatter_nd_u32_default.cairo index 076d44277..3d832f243 100644 --- a/tests/nodes/scatter_nd_u32_default.cairo +++ b/tests/nodes/scatter_nd_u32_default.cairo @@ -18,7 +18,7 @@ fn test_scatter_nd_u32_default() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::None(())); + let y_0 = input_0.scatter_nd(updates: input_1, indices: input_2, reduction: Option::None(())); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_u32_max.cairo b/tests/nodes/scatter_nd_u32_max.cairo index 5d3a4940d..e64e2b84a 100644 --- a/tests/nodes/scatter_nd_u32_max.cairo +++ b/tests/nodes/scatter_nd_u32_max.cairo @@ -18,7 +18,8 @@ fn test_scatter_nd_u32_max() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('max')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('max')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_u32_min.cairo b/tests/nodes/scatter_nd_u32_min.cairo index 63033d6b7..51b7cb9af 100644 --- a/tests/nodes/scatter_nd_u32_min.cairo +++ b/tests/nodes/scatter_nd_u32_min.cairo @@ -18,7 +18,8 @@ fn test_scatter_nd_u32_min() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('min')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('min')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/scatter_nd_u32_mul.cairo b/tests/nodes/scatter_nd_u32_mul.cairo index b5367e914..8d19773d9 100644 --- a/tests/nodes/scatter_nd_u32_mul.cairo +++ b/tests/nodes/scatter_nd_u32_mul.cairo @@ -18,7 +18,8 @@ fn test_scatter_nd_u32_mul() { let input_2 = input_2::input_2(); let z_0 = output_0::output_0(); - let y_0 = input_0.scatter_nd(updates:input_1, indices:input_2, reduction:Option::Some('mul')); + let y_0 = input_0 + .scatter_nd(updates: input_1, indices: input_2, reduction: Option::Some('mul')); assert_eq(y_0, z_0); } diff --git a/tests/nodes/split_to_sequence_fp16x16_1d_equal_parts.cairo b/tests/nodes/split_to_sequence_fp16x16_1d_equal_parts.cairo index a1ac7a9ec..c585612c3 100644 --- a/tests/nodes/split_to_sequence_fp16x16_1d_equal_parts.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_1d_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_fp16x16_1d_equal_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_1d_uneven.cairo b/tests/nodes/split_to_sequence_fp16x16_1d_uneven.cairo index 42f0dc900..b10b573e3 100644 --- a/tests/nodes/split_to_sequence_fp16x16_1d_uneven.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_1d_uneven.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_fp16x16_1d_uneven() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![4].span()))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![4].span())) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_1d_variable_parts.cairo b/tests/nodes/split_to_sequence_fp16x16_1d_variable_parts.cairo index 1c3faf614..010736d45 100644 --- a/tests/nodes/split_to_sequence_fp16x16_1d_variable_parts.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_1d_variable_parts.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_fp16x16_1d_variable_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some( + TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_2d_equal_parts.cairo b/tests/nodes/split_to_sequence_fp16x16_2d_equal_parts.cairo index 96e743399..7e740f9d7 100644 --- a/tests/nodes/split_to_sequence_fp16x16_2d_equal_parts.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_2d_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_fp16x16_2d_equal_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![2].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![2].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_2d_uneven.cairo b/tests/nodes/split_to_sequence_fp16x16_2d_uneven.cairo index bfd1f8cec..2ca6dd030 100644 --- a/tests/nodes/split_to_sequence_fp16x16_2d_uneven.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_2d_uneven.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_fp16x16_2d_uneven() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_2d_variable_parts.cairo b/tests/nodes/split_to_sequence_fp16x16_2d_variable_parts.cairo index 5cd4e1845..9cdd54aa0 100644 --- a/tests/nodes/split_to_sequence_fp16x16_2d_variable_parts.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_2d_variable_parts.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_fp16x16_2d_variable_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some( + TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_fp16x16_zero_size.cairo b/tests/nodes/split_to_sequence_fp16x16_zero_size.cairo index e8ecfba30..a9f7bed3e 100644 --- a/tests/nodes/split_to_sequence_fp16x16_zero_size.cairo +++ b/tests/nodes/split_to_sequence_fp16x16_zero_size.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_fp16x16_zero_size() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![3].span(), data: array![0, 0, 0].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some( + TensorTrait::::new(shape: array![3].span(), data: array![0, 0, 0].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_1d_equal_parts.cairo b/tests/nodes/split_to_sequence_u32_1d_equal_parts.cairo index 9c14470b5..74995267f 100644 --- a/tests/nodes/split_to_sequence_u32_1d_equal_parts.cairo +++ b/tests/nodes/split_to_sequence_u32_1d_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_u32_1d_equal_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_1d_uneven.cairo b/tests/nodes/split_to_sequence_u32_1d_uneven.cairo index 0dfb5547f..f72378a1e 100644 --- a/tests/nodes/split_to_sequence_u32_1d_uneven.cairo +++ b/tests/nodes/split_to_sequence_u32_1d_uneven.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_u32_1d_uneven() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![4].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![4].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_1d_variable_parts.cairo b/tests/nodes/split_to_sequence_u32_1d_variable_parts.cairo index 4df4fbee7..62a16a2e3 100644 --- a/tests/nodes/split_to_sequence_u32_1d_variable_parts.cairo +++ b/tests/nodes/split_to_sequence_u32_1d_variable_parts.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_u32_1d_variable_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some( + TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_2d_equal_parts.cairo b/tests/nodes/split_to_sequence_u32_2d_equal_parts.cairo index 24c06c857..8cd2fa373 100644 --- a/tests/nodes/split_to_sequence_u32_2d_equal_parts.cairo +++ b/tests/nodes/split_to_sequence_u32_2d_equal_parts.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_u32_2d_equal_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![2].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![2].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_2d_uneven.cairo b/tests/nodes/split_to_sequence_u32_2d_uneven.cairo index 7ab6604be..839576e6d 100644 --- a/tests/nodes/split_to_sequence_u32_2d_uneven.cairo +++ b/tests/nodes/split_to_sequence_u32_2d_uneven.cairo @@ -14,7 +14,12 @@ fn test_split_to_sequence_u32_2d_uneven() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some(TensorTrait::::new(shape: array![1].span(), data: array![3].span(),)) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_2d_variable_parts.cairo b/tests/nodes/split_to_sequence_u32_2d_variable_parts.cairo index dc81b4325..1bb3b017b 100644 --- a/tests/nodes/split_to_sequence_u32_2d_variable_parts.cairo +++ b/tests/nodes/split_to_sequence_u32_2d_variable_parts.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_u32_2d_variable_parts() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(1, 1, Option::Some(TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),))); + let y = input_0 + .split_to_sequence( + 1, + 1, + Option::Some( + TensorTrait::::new(shape: array![2].span(), data: array![2, 4].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/nodes/split_to_sequence_u32_zero_size.cairo b/tests/nodes/split_to_sequence_u32_zero_size.cairo index 815ba7d4e..9f24d154d 100644 --- a/tests/nodes/split_to_sequence_u32_zero_size.cairo +++ b/tests/nodes/split_to_sequence_u32_zero_size.cairo @@ -14,7 +14,14 @@ fn test_split_to_sequence_u32_zero_size() { let input_0 = input_0::input_0(); let z = output_0::output_0(); - let y = input_0.split_to_sequence(0, 1, Option::Some(TensorTrait::::new(shape: array![3].span(), data: array![0, 0, 0].span(),))); + let y = input_0 + .split_to_sequence( + 0, + 1, + Option::Some( + TensorTrait::::new(shape: array![3].span(), data: array![0, 0, 0].span(),) + ) + ); assert_seq_eq(y, z); } diff --git a/tests/operators/optional/optional_get_element_test.cairo b/tests/operators/optional/optional_get_element_test.cairo index 576e12cd6..ef6c68097 100644 --- a/tests/operators/optional/optional_get_element_test.cairo +++ b/tests/operators/optional/optional_get_element_test.cairo @@ -14,17 +14,7 @@ fn optional_get_element_i8_test() { i8 >::new( shape: array![4, 2].span(), - data: array![ - 1_i8, - 2_i8, - 3_i8, - 4_i8, - 5_i8, - 6_i8, - 7_i8, - 8_i8 - ] - .span(), + data: array![1_i8, 2_i8, 3_i8, 4_i8, 5_i8, 6_i8, 7_i8, 8_i8].span(), ); let ele = optional_get_element(a.optional()); @@ -67,4 +57,4 @@ fn optional_get_element_fp16x16_test() { assert(*(ele.data).at(5) == *(a.data).at(5), 'ele[5] == a[5]'); assert(*(ele.data).at(6) == *(a.data).at(6), 'ele[6] == a[6]'); assert(*(ele.data).at(7) == *(a.data).at(7), 'ele[7] == a[7]'); -} \ No newline at end of file +} diff --git a/tests/operators/optional/optional_has_element_test.cairo b/tests/operators/optional/optional_has_element_test.cairo index f08bdcc73..7aedbb9bd 100644 --- a/tests/operators/optional/optional_has_element_test.cairo +++ b/tests/operators/optional/optional_has_element_test.cairo @@ -14,17 +14,7 @@ fn optional_has_element_i8_test() { i8 >::new( shape: array![4, 2].span(), - data: array![ - 1_i8, - 2_i8, - 3_i8, - 4_i8, - 5_i8, - 6_i8, - 7_i8, - 8_i8 - ] - .span(), + data: array![1_i8, 2_i8, 3_i8, 4_i8, 5_i8, 6_i8, 7_i8, 8_i8].span(), ); let a_optional = a.optional(); let has_ele = optional_has_element(a_optional); @@ -64,4 +54,4 @@ fn optional_has_element_none_test() { let has_ele = optional_has_element(a); assert(*(has_ele.data).at(0) == false, 'has_ele[0] == false'); -} \ No newline at end of file +} diff --git a/tests/operators/optional/optional_test.cairo b/tests/operators/optional/optional_test.cairo index 3632e173a..06c31e3b4 100644 --- a/tests/operators/optional/optional_test.cairo +++ b/tests/operators/optional/optional_test.cairo @@ -14,28 +14,42 @@ fn optional_i8_test() { i8 >::new( shape: array![4, 2].span(), - data: array![ - 1_i8, - 2_i8, - 3_i8, - 4_i8, - 5_i8, - 6_i8, - 7_i8, - 8_i8 - ] - .span(), + data: array![1_i8, 2_i8, 3_i8, 4_i8, 5_i8, 6_i8, 7_i8, 8_i8].span(), ); let a_optional = a.optional(); - assert(*(optional_get_element(a_optional).data).at(0) == *(a.data).at(0), 'a_optional[0] == Option(a)[0]'); - assert(*(optional_get_element(a_optional).data).at(1) == *(a.data).at(1), 'a_optional[1] == Option(a)[1]'); - assert(*(optional_get_element(a_optional).data).at(2) == *(a.data).at(2), 'a_optional[2] == Option(a)[2]'); - assert(*(optional_get_element(a_optional).data).at(3) == *(a.data).at(3), 'a_optional[3] == Option(a)[3]'); - assert(*(optional_get_element(a_optional).data).at(4) == *(a.data).at(4), 'a_optional[4] == Option(a)[4]'); - assert(*(optional_get_element(a_optional).data).at(5) == *(a.data).at(5), 'a_optional[5] == Option(a)[5]'); - assert(*(optional_get_element(a_optional).data).at(6) == *(a.data).at(6), 'a_optional[6] == Option(a)[6]'); - assert(*(optional_get_element(a_optional).data).at(7) == *(a.data).at(7), 'a_optional[7] == Option(a)[7]'); + assert( + *(optional_get_element(a_optional).data).at(0) == *(a.data).at(0), + 'a_optional[0] == Option(a)[0]' + ); + assert( + *(optional_get_element(a_optional).data).at(1) == *(a.data).at(1), + 'a_optional[1] == Option(a)[1]' + ); + assert( + *(optional_get_element(a_optional).data).at(2) == *(a.data).at(2), + 'a_optional[2] == Option(a)[2]' + ); + assert( + *(optional_get_element(a_optional).data).at(3) == *(a.data).at(3), + 'a_optional[3] == Option(a)[3]' + ); + assert( + *(optional_get_element(a_optional).data).at(4) == *(a.data).at(4), + 'a_optional[4] == Option(a)[4]' + ); + assert( + *(optional_get_element(a_optional).data).at(5) == *(a.data).at(5), + 'a_optional[5] == Option(a)[5]' + ); + assert( + *(optional_get_element(a_optional).data).at(6) == *(a.data).at(6), + 'a_optional[6] == Option(a)[6]' + ); + assert( + *(optional_get_element(a_optional).data).at(7) == *(a.data).at(7), + 'a_optional[7] == Option(a)[7]' + ); } #[test] @@ -59,12 +73,36 @@ fn optional_fp16x16_test() { ); let a_optional = a.optional(); - assert(*(optional_get_element(a_optional).data).at(0) == *(a.data).at(0), 'a_optional[0] == Option(a)[0]'); - assert(*(optional_get_element(a_optional).data).at(1) == *(a.data).at(1), 'a_optional[1] == Option(a)[1]'); - assert(*(optional_get_element(a_optional).data).at(2) == *(a.data).at(2), 'a_optional[2] == Option(a)[2]'); - assert(*(optional_get_element(a_optional).data).at(3) == *(a.data).at(3), 'a_optional[3] == Option(a)[3]'); - assert(*(optional_get_element(a_optional).data).at(4) == *(a.data).at(4), 'a_optional[4] == Option(a)[4]'); - assert(*(optional_get_element(a_optional).data).at(5) == *(a.data).at(5), 'a_optional[5] == Option(a)[5]'); - assert(*(optional_get_element(a_optional).data).at(6) == *(a.data).at(6), 'a_optional[6] == Option(a)[6]'); - assert(*(optional_get_element(a_optional).data).at(7) == *(a.data).at(7), 'a_optional[7] == Option(a)[7]'); -} \ No newline at end of file + assert( + *(optional_get_element(a_optional).data).at(0) == *(a.data).at(0), + 'a_optional[0] == Option(a)[0]' + ); + assert( + *(optional_get_element(a_optional).data).at(1) == *(a.data).at(1), + 'a_optional[1] == Option(a)[1]' + ); + assert( + *(optional_get_element(a_optional).data).at(2) == *(a.data).at(2), + 'a_optional[2] == Option(a)[2]' + ); + assert( + *(optional_get_element(a_optional).data).at(3) == *(a.data).at(3), + 'a_optional[3] == Option(a)[3]' + ); + assert( + *(optional_get_element(a_optional).data).at(4) == *(a.data).at(4), + 'a_optional[4] == Option(a)[4]' + ); + assert( + *(optional_get_element(a_optional).data).at(5) == *(a.data).at(5), + 'a_optional[5] == Option(a)[5]' + ); + assert( + *(optional_get_element(a_optional).data).at(6) == *(a.data).at(6), + 'a_optional[6] == Option(a)[6]' + ); + assert( + *(optional_get_element(a_optional).data).at(7) == *(a.data).at(7), + 'a_optional[7] == Option(a)[7]' + ); +} diff --git a/tests/performance.cairo b/tests/performance.cairo index da71869ed..14012d1cb 100644 --- a/tests/performance.cairo +++ b/tests/performance.cairo @@ -1,3 +1,3 @@ mod quantize_linear_test; mod dequantize_linear_test; -mod dynamic_quantize_linear_test; \ No newline at end of file +mod dynamic_quantize_linear_test; diff --git a/tests/performance/dynamic_quantize_linear_test.cairo b/tests/performance/dynamic_quantize_linear_test.cairo index bbd43eb29..dc6c5315b 100644 --- a/tests/performance/dynamic_quantize_linear_test.cairo +++ b/tests/performance/dynamic_quantize_linear_test.cairo @@ -1 +1 @@ -mod dynamic_quantize_linear_fp_test; \ No newline at end of file +mod dynamic_quantize_linear_fp_test; diff --git a/tests/performance/dynamic_quantize_linear_test/dynamic_quantize_linear_fp_test.cairo b/tests/performance/dynamic_quantize_linear_test/dynamic_quantize_linear_fp_test.cairo index e1817dff9..c16277b85 100644 --- a/tests/performance/dynamic_quantize_linear_test/dynamic_quantize_linear_fp_test.cairo +++ b/tests/performance/dynamic_quantize_linear_test/dynamic_quantize_linear_fp_test.cairo @@ -19,11 +19,11 @@ mod fp8x23 { shape.append(6); let mut data = ArrayTrait::::new(); data.append(FixedTrait::new(0, false)); - data.append(FixedTrait::new(587203, false)); // 0.07 - data.append(FixedTrait::new(838861, false)); // 0.1 - data.append(FixedTrait::new(1677722, false)); // 0.2 - data.append(FixedTrait::new(4194304, false)); // 0.5 - data.append(FixedTrait::new(7549747, false)); // 0.9 + data.append(FixedTrait::new(587203, false)); // 0.07 + data.append(FixedTrait::new(838861, false)); // 0.1 + data.append(FixedTrait::new(1677722, false)); // 0.2 + data.append(FixedTrait::new(4194304, false)); // 0.5 + data.append(FixedTrait::new(7549747, false)); // 0.9 let x = TensorTrait::new(shape.span(), data.span()); @@ -61,12 +61,12 @@ mod fp16x16 { let mut shape = ArrayTrait::::new(); shape.append(6); let mut data = ArrayTrait::::new(); - data.append(FixedTrait::new(10945, false)); // 0.167 - data.append(FixedTrait::new(190054, false)); // 2.9 - data.append(FixedTrait::new_unscaled(3, false)); // 3.0 - data.append(FixedTrait::new(229376, false)); // 3.5 - data.append(FixedTrait::new_unscaled(3, true)); // -3.0 - data.append(FixedTrait::new(229376, true)); // -3.5 + data.append(FixedTrait::new(10945, false)); // 0.167 + data.append(FixedTrait::new(190054, false)); // 2.9 + data.append(FixedTrait::new_unscaled(3, false)); // 3.0 + data.append(FixedTrait::new(229376, false)); // 3.5 + data.append(FixedTrait::new_unscaled(3, true)); // -3.0 + data.append(FixedTrait::new(229376, true)); // -3.5 let x = TensorTrait::new(shape.span(), data.span()); From 6d49fd2ff4750642efeabc87631ad5a155b33a03 Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Fri, 23 Feb 2024 20:56:05 +0530 Subject: [PATCH 2/6] add global maxpool test --- tests/operators.cairo | 1 + tests/operators/global_maxpool_test.cairo | 127 ++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 tests/operators/global_maxpool_test.cairo diff --git a/tests/operators.cairo b/tests/operators.cairo index b2228224c..67808581c 100644 --- a/tests/operators.cairo +++ b/tests/operators.cairo @@ -5,3 +5,4 @@ mod qlinear_add_test; mod constant_of_shape_test; mod qlinear_leakyrelu_test; mod optional; +mod global_maxpool_test; diff --git a/tests/operators/global_maxpool_test.cairo b/tests/operators/global_maxpool_test.cairo new file mode 100644 index 000000000..42969bea4 --- /dev/null +++ b/tests/operators/global_maxpool_test.cairo @@ -0,0 +1,127 @@ +use core::array::{ArrayTrait, SpanTrait}; +use orion::operators::tensor::{TensorTrait, Tensor, U32Tensor}; +use core::debug::PrintTrait; +use orion::operators::functional::global_maxpool; +#[test] +#[available_gas(200000000000)] +fn global_maxpool_test() { + let data = array![ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96 + ]; + let a = TensorTrait::::new(array![2, 3, 4, 4].span(), data.span()); + let actual = global_maxpool(@a); + + // shape test + assert(*actual.data.at(0) == 2, 'N must be 2'); + assert(*actual.data.at(1) == 3, 'C must be 3'); + assert(*actual.data.at(2) == 1, 'H must be 1'); + assert(*actual.data.at(3) == 1, 'W must be 1'); + + let expected = TensorTrait::< + u32 + >::new(array![2, 3, 1, 1].span(), array![16, 32, 48, 64, 80, 96].span()); + + let eq = actual.equal(@expected); + + assert(*eq.data.at(0) == 1); + assert(*eq.data.at(1) == 1); + assert(*eq.data.at(2) == 1); + assert(*eq.data.at(3) == 1); + assert(*eq.data.at(4) == 1); + assert(*eq.data.at(5) == 1); +} From aa2581809f9cdbfcef2480c00b6688214b9af4c2 Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Sat, 24 Feb 2024 02:07:00 +0530 Subject: [PATCH 3/6] add impl --- docs/CHANGELOG.md | 8 +- docs/SUMMARY.md | 1 + docs/framework/compatibility.md | 3 +- .../operators/neural-network/README.md | 2 +- .../neural-network/nn.global_maxpool.md | 61 ++++++++++++++ nodegen/node/global_maxpool.py | 55 +++++++++++++ src/operators/nn/core.cairo | 63 +++++++++++++++ .../nn/functional/global_maxpool.cairo | 14 ++-- .../nn/implementations/nn_fp16x16.cairo | 4 + .../nn/implementations/nn_fp32x32.cairo | 4 + .../nn/implementations/nn_fp64x64.cairo | 4 + .../nn/implementations/nn_fp8x23.cairo | 4 + src/operators/nn/implementations/nn_i32.cairo | 4 + src/operators/nn/implementations/nn_i8.cairo | 4 + src/operators/nn/implementations/nn_u32.cairo | 4 + tests/nodes.cairo | 3 + tests/nodes/global_maxpool_fp16x16.cairo | 20 +++++ .../global_maxpool_fp16x16/input_0.cairo | 79 +++++++++++++++++++ .../global_maxpool_fp16x16/output_0.cairo | 19 +++++ tests/nodes/global_maxpool_fp8x23.cairo | 20 +++++ .../nodes/global_maxpool_fp8x23/input_0.cairo | 79 +++++++++++++++++++ .../global_maxpool_fp8x23/output_0.cairo | 19 +++++ tests/operators/global_maxpool_test.cairo | 2 +- 23 files changed, 465 insertions(+), 11 deletions(-) create mode 100644 docs/framework/operators/neural-network/nn.global_maxpool.md create mode 100644 nodegen/node/global_maxpool.py create mode 100644 tests/nodes/global_maxpool_fp16x16.cairo create mode 100644 tests/nodes/global_maxpool_fp16x16/input_0.cairo create mode 100644 tests/nodes/global_maxpool_fp16x16/output_0.cairo create mode 100644 tests/nodes/global_maxpool_fp8x23.cairo create mode 100644 tests/nodes/global_maxpool_fp8x23/input_0.cairo create mode 100644 tests/nodes/global_maxpool_fp8x23/output_0.cairo diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 16a00107b..938926488 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -3,11 +3,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] - 2024-02-24 + +## Added +- Global Maxpool operator + ## [Unreleased] - 2024-01-17 ## Added - Scatter Nd Operator. -- + ## [Unreleased] - 2023-12-25 ## Added diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index d867a96ba..d78157720 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -171,6 +171,7 @@ * [nn.thresholded\_relu](framework/operators/neural-network/nn.thresholded\_relu.md) * [nn.gemm](framework/operators/neural-network/nn.gemm.md) * [nn.grid\_sample](framework/operators/neural-network/nn.grid\_sample.md) + * [nn.global_maxpool](framework/operators/neural-network/nn.global_maxpool.md) * [nn.col2im](framework/operators/neural-network/nn.col2im.md) * [nn.conv_transpose](framework/operators/neural-network/nn.conv\_transpose.md) * [nn.conv](framework/operators/neural-network/nn.conv.md) diff --git a/docs/framework/compatibility.md b/docs/framework/compatibility.md index a05d3bbce..788e03b80 100644 --- a/docs/framework/compatibility.md +++ b/docs/framework/compatibility.md @@ -124,5 +124,6 @@ You can see below the list of current supported ONNX Operators: | [HammingWindow](operators/tensor/tensor.tensor.hamming_window.md) | :white\_check\_mark: | | [BlackmanWindow](operators/tensor/tensor.tensor.blackman_window.md) | :white\_check\_mark: | | [RandomUniformLike](operators/tensor/tensor.tensor.random_uniform_like.md) | :white\_check\_mark: | +| [GlobalMaxpool](operators/neural-network/nn.global_maxpool.md) | :white\_check\_mark: | -Current Operators support: **117/156 (75%)** +Current Operators support: **118/156 (75%)** diff --git a/docs/framework/operators/neural-network/README.md b/docs/framework/operators/neural-network/README.md index b24ad9e40..11d41335a 100644 --- a/docs/framework/operators/neural-network/README.md +++ b/docs/framework/operators/neural-network/README.md @@ -39,4 +39,4 @@ Orion supports currently these `NN` types. | [`nn.col2im`](nn.col2im.md) | Rearranges column blocks back into a multidimensional image | | [`nn.conv_transpose`](nn.conv\_transpose.md) | Performs the convolution transpose of the input data tensor and weigth tensor. | | [`nn.conv`](nn.conv.md) | Performs the convolution of the input data tensor and weigth tensor. | - +| [`nn.global_maxpool`](nn.global_maxpool.md) | Computes the global maxpooling of the input tensor. \ No newline at end of file diff --git a/docs/framework/operators/neural-network/nn.global_maxpool.md b/docs/framework/operators/neural-network/nn.global_maxpool.md new file mode 100644 index 000000000..727907710 --- /dev/null +++ b/docs/framework/operators/neural-network/nn.global_maxpool.md @@ -0,0 +1,61 @@ +#NNTrait::global_maxpool + +```rust + fn global_maxpool( + X: @Tensor, + ) -> Tensor; +``` + +Given an input tensor X, cmputes the global maxpooling. + +## Args + +* `X`(`@Tensor`) - Input tensor of shape (N, C, H, W), where N is the batch size, C is the number of channels, and H and W are the height and the width of the data. For non image case, the dimensions are in the form of (N x C x D1 x D2 ... Dn), where N is the batch size. + +## Returns + +A `Tensor` of shape (N, C, 1, 1). For non-image case, a `Tensor` of shape (N, C, 1,..,1_n). + +## Example + + ```rust + use orion::operators::nn::NNTrait; + use orion::operators::tensor::{Tensor, TensorTrait}; + +fn example_global_maxpool() -> Tensor { + + let mut shape = ArrayTrait::::new(); + shape.append(1); + shape.append(2); + shape.append(4); + shape.append(2); + + let mut data = ArrayTrait::::new(); + data.append(36); + data.append(63); + data.append(57); + data.append(62); + data.append(13); + data.append(87); + data.append(44); + data.append(6); + data.append(35); + data.append(35); + data.append(75); + data.append(63); + data.append(49); + data.append(11); + data.append(45); + data.append(11); + + let mut X = TensorTrait::new(shape.span(), data.span()); + + return NNTrait::global_maxpool( + @X + ); +} + +>>> [[[87] + [75]]] + +```` \ No newline at end of file diff --git a/nodegen/node/global_maxpool.py b/nodegen/node/global_maxpool.py new file mode 100644 index 000000000..3591db37a --- /dev/null +++ b/nodegen/node/global_maxpool.py @@ -0,0 +1,55 @@ +import numpy as np +from nodegen.node import RunAll +from ..helpers import make_test, to_fp, Tensor, Dtype, FixedImpl, Trait + +def global_maxpool(data: np.ndarray) -> np.ndarray: + spatial_shape = np.ndim(data) - 2 + + result = np.max(data, axis=tuple(range(spatial_shape, spatial_shape + 2))) + + # Add singleton dimensions + for _ in range(spatial_shape): + result = np.expand_dims(result, -1) + + return result + +class Global_maxpool(RunAll): + + @staticmethod + # We test here with fp8x23 implementation. + def fp8x23(): + # Create a random numpy array: + x = np.random.randint(-3, 3, (2, 2, 4, 4)).astype(np.float64) + # Ddefine the expected result: + y = global_maxpool(x) + # Convert the input and output to Tensor class, similar to Orion's Tensor struct: + x = Tensor(Dtype.FP8x23, x.shape, to_fp(x.flatten(), FixedImpl.FP8x23)) + # Convert the floats values in `y` to fixed points with `to_fp` method: + y = Tensor(Dtype.FP8x23, y.shape, to_fp(y.flatten(), FixedImpl.FP8x23)) + + # Define the name of the generated folder. + name = "global_maxpool_fp8x23" + # Invoke `make_test` method to generate corresponding Cairo tests: + make_test( + [x], # List of input tensors. + y, # The expected output result. + "NNTrait::global_maxpool(@input_0)", # The code signature. + name, # The name of the generated folder. + Trait.NN # The trait, if the function is present in either the TensorTrait or NNTrait. + ) + + # We test here with fp16x16 implementation. + @staticmethod + def fp16x16(): + x = np.random.uniform(-3, 3, (2, 2, 4, 4)).astype(np.float64) + y = global_maxpool(x) + + x = Tensor(Dtype.FP16x16, x.shape, to_fp( + x.flatten(), FixedImpl.FP16x16)) + y = Tensor(Dtype.FP16x16, y.shape, to_fp( + y.flatten(), FixedImpl.FP16x16)) + + name = "global_maxpool_fp16x16" + make_test([x], y, "NNTrait::global_maxpool(@input_0)", + name, Trait.NN) + diff --git a/src/operators/nn/core.cairo b/src/operators/nn/core.cairo index 93f9242c0..9fb674480 100644 --- a/src/operators/nn/core.cairo +++ b/src/operators/nn/core.cairo @@ -18,6 +18,7 @@ use orion::operators::tensor::core::Tensor; /// col2im - Rearranges column blocks back into a multidimensional image /// conv_transpose - Performs the convolution transpose of the input data tensor and weigth tensor. /// conv - Performs the convolution of the input data tensor and weigth tensor. +/// global_maxpool - Performs the global maxpooling of the input tensor. trait NNTrait { /// # NNTrait::relu /// @@ -1304,4 +1305,66 @@ trait NNTrait { mode: Option, padding_mode: Option, ) -> Tensor; + /// #NNTrait::global_maxpool + /// + /// ```rust + /// fn global_maxpool( + /// X: @Tensor, + /// ) -> Tensor; + /// ``` + /// + /// Given an input tensor X, cmputes the global maxpooling. + /// + /// ## Args + /// + /// * `X`(`@Tensor`) - Input tensor of shape (N, C, H, W), where N is the batch size, C is the number of channels, and H and W are the height and the width of the data. For non image case, the dimensions are in the form of (N x C x D1 x D2 ... Dn), where N is the batch size. + /// + /// ## Returns + /// + /// A `Tensor` of shape (N, C, 1, 1). For non-image case, a `Tensor` of shape (N, C, 1,..,1_n). + /// + /// ## Example + /// + /// ```rust + /// use orion::operators::nn::NNTrait; + /// use orion::operators::tensor::{Tensor, TensorTrait}; + /// + /// fn example_global_maxpool() -> Tensor { + /// + /// let mut shape = ArrayTrait::::new(); + /// shape.append(1); + /// shape.append(2); + /// shape.append(4); + /// shape.append(2); + /// + /// let mut data = ArrayTrait::::new(); + /// data.append(36); + /// data.append(63); + /// data.append(57); + /// data.append(62); + /// data.append(13); + /// data.append(87); + /// data.append(44); + /// data.append(6); + /// data.append(35); + /// data.append(35); + /// data.append(75); + /// data.append(63); + /// data.append(49); + /// data.append(11); + /// data.append(45); + /// data.append(11); + /// + /// let mut X = TensorTrait::new(shape.span(), data.span()); + /// + /// return NNTrait::global_maxpool( + /// @X + /// ); + /// } + /// + /// >>> [[[87] + /// [75]]] + /// + /// ```` + fn global_maxpool(X: @Tensor) -> Tensor; } diff --git a/src/operators/nn/functional/global_maxpool.cairo b/src/operators/nn/functional/global_maxpool.cairo index fa0116ea7..541e2d6fc 100644 --- a/src/operators/nn/functional/global_maxpool.cairo +++ b/src/operators/nn/functional/global_maxpool.cairo @@ -15,19 +15,19 @@ fn global_maxpool< impl TCopy: Copy, impl TDrop: Drop >( - tensor: @Tensor + X: @Tensor ) -> Tensor { - assert((*tensor).shape.len() == 4, 'Must be a 4D tensor'); + assert((*X).shape.len() == 4, 'Must be a 4D tensor'); - let mut data = (*tensor).data; + let mut data = (*X).data; let mut global_max_vals = ArrayTrait::new(); let mut accum = 0; - let N = (*tensor).shape.at(0); - let C = (*tensor).shape.at(1); - let H = (*tensor).shape.at(2); - let W = (*tensor).shape.at(3); + let N = (*X).shape.at(0); + let C = (*X).shape.at(1); + let H = (*X).shape.at(2); + let W = (*X).shape.at(3); // height * width let mut area = *H * *W; diff --git a/src/operators/nn/implementations/nn_fp16x16.cairo b/src/operators/nn/implementations/nn_fp16x16.cairo index edf7b59c7..fe9c4734e 100644 --- a/src/operators/nn/implementations/nn_fp16x16.cairo +++ b/src/operators/nn/implementations/nn_fp16x16.cairo @@ -145,4 +145,8 @@ impl FP16x16NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_fp32x32.cairo b/src/operators/nn/implementations/nn_fp32x32.cairo index db99af01b..86033f5de 100644 --- a/src/operators/nn/implementations/nn_fp32x32.cairo +++ b/src/operators/nn/implementations/nn_fp32x32.cairo @@ -139,4 +139,8 @@ impl FP32x32NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_fp64x64.cairo b/src/operators/nn/implementations/nn_fp64x64.cairo index 935af584c..1182cbf0e 100644 --- a/src/operators/nn/implementations/nn_fp64x64.cairo +++ b/src/operators/nn/implementations/nn_fp64x64.cairo @@ -139,4 +139,8 @@ impl FP64x64NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_fp8x23.cairo b/src/operators/nn/implementations/nn_fp8x23.cairo index 842c115f9..b078bb33d 100644 --- a/src/operators/nn/implementations/nn_fp8x23.cairo +++ b/src/operators/nn/implementations/nn_fp8x23.cairo @@ -141,4 +141,8 @@ impl FP8x23NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_i32.cairo b/src/operators/nn/implementations/nn_i32.cairo index 13a670746..539fc4b51 100644 --- a/src/operators/nn/implementations/nn_i32.cairo +++ b/src/operators/nn/implementations/nn_i32.cairo @@ -132,4 +132,8 @@ impl I32NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_i8.cairo b/src/operators/nn/implementations/nn_i8.cairo index 5d359a91c..84ef96632 100644 --- a/src/operators/nn/implementations/nn_i8.cairo +++ b/src/operators/nn/implementations/nn_i8.cairo @@ -132,4 +132,8 @@ impl I8NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/src/operators/nn/implementations/nn_u32.cairo b/src/operators/nn/implementations/nn_u32.cairo index 9e4038fe4..cbff0a184 100644 --- a/src/operators/nn/implementations/nn_u32.cairo +++ b/src/operators/nn/implementations/nn_u32.cairo @@ -132,4 +132,8 @@ impl U32NN of NNTrait { ) -> Tensor { functional::conv::conv(X, W, B, auto_pad, dilations, group, kernel_shape, pads, strides) } + + fn global_maxpool(X: @Tensor) -> Tensor { + functional::global_maxpool::global_maxpool(X) + } } diff --git a/tests/nodes.cairo b/tests/nodes.cairo index 8814cfb80..d92b0935b 100644 --- a/tests/nodes.cairo +++ b/tests/nodes.cairo @@ -1039,3 +1039,6 @@ mod conv_2D_with_autopad_same; mod conv_2D_with_strides_asymmetric_padding; mod conv_2D_with_strides_with_padding; mod conv_4D_with_padding; +mod global_maxpool_fp16x16; +mod global_maxpool_fp64x64; +mod global_maxpool_fp8x23; diff --git a/tests/nodes/global_maxpool_fp16x16.cairo b/tests/nodes/global_maxpool_fp16x16.cairo new file mode 100644 index 000000000..6eed36392 --- /dev/null +++ b/tests/nodes/global_maxpool_fp16x16.cairo @@ -0,0 +1,20 @@ +mod input_0; +mod output_0; + + +use orion::operators::tensor::FP16x16TensorPartialEq; +use orion::operators::nn::NNTrait; +use orion::utils::{assert_eq, assert_seq_eq}; +use orion::operators::nn::FP16x16NN; +use orion::numbers::FixedTrait; + +#[test] +#[available_gas(2000000000)] +fn test_global_maxpool_fp16x16() { + let input_0 = input_0::input_0(); + let z_0 = output_0::output_0(); + + let (y_0) = NNTrait::global_maxpool(@input_0); + + assert_eq(y_0, z_0); +} diff --git a/tests/nodes/global_maxpool_fp16x16/input_0.cairo b/tests/nodes/global_maxpool_fp16x16/input_0.cairo new file mode 100644 index 000000000..724221b4e --- /dev/null +++ b/tests/nodes/global_maxpool_fp16x16/input_0.cairo @@ -0,0 +1,79 @@ +use core::array::{ArrayTrait, SpanTrait}; +use orion::operators::tensor::{TensorTrait, Tensor}; +use orion::operators::tensor::{FP16x16Tensor, FP16x16TensorAdd}; +use orion::numbers::{FixedTrait, FP16x16}; + +fn input_0() -> Tensor { + let mut shape = ArrayTrait::::new(); + shape.append(2); + shape.append(2); + shape.append(4); + shape.append(4); + + let mut data = ArrayTrait::new(); + data.append(FP16x16 { mag: 164043, sign: true }); + data.append(FP16x16 { mag: 104646, sign: true }); + data.append(FP16x16 { mag: 55698, sign: false }); + data.append(FP16x16 { mag: 32881, sign: false }); + data.append(FP16x16 { mag: 146034, sign: false }); + data.append(FP16x16 { mag: 169487, sign: false }); + data.append(FP16x16 { mag: 57375, sign: false }); + data.append(FP16x16 { mag: 44731, sign: true }); + data.append(FP16x16 { mag: 19902, sign: false }); + data.append(FP16x16 { mag: 143975, sign: true }); + data.append(FP16x16 { mag: 87285, sign: true }); + data.append(FP16x16 { mag: 169085, sign: true }); + data.append(FP16x16 { mag: 17520, sign: false }); + data.append(FP16x16 { mag: 144204, sign: false }); + data.append(FP16x16 { mag: 125758, sign: true }); + data.append(FP16x16 { mag: 176789, sign: false }); + data.append(FP16x16 { mag: 159947, sign: false }); + data.append(FP16x16 { mag: 87348, sign: true }); + data.append(FP16x16 { mag: 140134, sign: true }); + data.append(FP16x16 { mag: 114653, sign: false }); + data.append(FP16x16 { mag: 148331, sign: false }); + data.append(FP16x16 { mag: 193053, sign: true }); + data.append(FP16x16 { mag: 140887, sign: true }); + data.append(FP16x16 { mag: 107934, sign: false }); + data.append(FP16x16 { mag: 173999, sign: true }); + data.append(FP16x16 { mag: 151312, sign: true }); + data.append(FP16x16 { mag: 187530, sign: true }); + data.append(FP16x16 { mag: 70129, sign: true }); + data.append(FP16x16 { mag: 125123, sign: true }); + data.append(FP16x16 { mag: 14905, sign: false }); + data.append(FP16x16 { mag: 129411, sign: true }); + data.append(FP16x16 { mag: 23476, sign: false }); + data.append(FP16x16 { mag: 92752, sign: true }); + data.append(FP16x16 { mag: 73965, sign: true }); + data.append(FP16x16 { mag: 98412, sign: true }); + data.append(FP16x16 { mag: 94400, sign: false }); + data.append(FP16x16 { mag: 121493, sign: false }); + data.append(FP16x16 { mag: 140013, sign: true }); + data.append(FP16x16 { mag: 140845, sign: false }); + data.append(FP16x16 { mag: 13335, sign: true }); + data.append(FP16x16 { mag: 20479, sign: true }); + data.append(FP16x16 { mag: 155317, sign: true }); + data.append(FP16x16 { mag: 6854, sign: false }); + data.append(FP16x16 { mag: 144641, sign: true }); + data.append(FP16x16 { mag: 12856, sign: true }); + data.append(FP16x16 { mag: 174414, sign: false }); + data.append(FP16x16 { mag: 104363, sign: true }); + data.append(FP16x16 { mag: 118457, sign: false }); + data.append(FP16x16 { mag: 6076, sign: true }); + data.append(FP16x16 { mag: 14842, sign: false }); + data.append(FP16x16 { mag: 21658, sign: true }); + data.append(FP16x16 { mag: 109028, sign: false }); + data.append(FP16x16 { mag: 155965, sign: false }); + data.append(FP16x16 { mag: 101837, sign: false }); + data.append(FP16x16 { mag: 74259, sign: true }); + data.append(FP16x16 { mag: 98164, sign: false }); + data.append(FP16x16 { mag: 192946, sign: true }); + data.append(FP16x16 { mag: 48144, sign: false }); + data.append(FP16x16 { mag: 55205, sign: false }); + data.append(FP16x16 { mag: 130531, sign: false }); + data.append(FP16x16 { mag: 69028, sign: true }); + data.append(FP16x16 { mag: 9247, sign: true }); + data.append(FP16x16 { mag: 179345, sign: false }); + data.append(FP16x16 { mag: 7901, sign: false }); + TensorTrait::new(shape.span(), data.span()) +} diff --git a/tests/nodes/global_maxpool_fp16x16/output_0.cairo b/tests/nodes/global_maxpool_fp16x16/output_0.cairo new file mode 100644 index 000000000..00bd12155 --- /dev/null +++ b/tests/nodes/global_maxpool_fp16x16/output_0.cairo @@ -0,0 +1,19 @@ +use core::array::{ArrayTrait, SpanTrait}; +use orion::operators::tensor::{TensorTrait, Tensor}; +use orion::operators::tensor::{FP16x16Tensor, FP16x16TensorAdd}; +use orion::numbers::{FixedTrait, FP16x16}; + +fn output_0() -> Tensor { + let mut shape = ArrayTrait::::new(); + shape.append(2); + shape.append(2); + shape.append(1); + shape.append(1); + + let mut data = ArrayTrait::new(); + data.append(FP16x16 { mag: 176789, sign: false }); + data.append(FP16x16 { mag: 159947, sign: false }); + data.append(FP16x16 { mag: 174414, sign: false }); + data.append(FP16x16 { mag: 179345, sign: false }); + TensorTrait::new(shape.span(), data.span()) +} diff --git a/tests/nodes/global_maxpool_fp8x23.cairo b/tests/nodes/global_maxpool_fp8x23.cairo new file mode 100644 index 000000000..5ca6881fe --- /dev/null +++ b/tests/nodes/global_maxpool_fp8x23.cairo @@ -0,0 +1,20 @@ +mod input_0; +mod output_0; + + +use orion::operators::tensor::FP8x23TensorPartialEq; +use orion::operators::nn::NNTrait; +use orion::utils::{assert_eq, assert_seq_eq}; +use orion::numbers::FixedTrait; +use orion::operators::nn::FP8x23NN; + +#[test] +#[available_gas(2000000000)] +fn test_global_maxpool_fp8x23() { + let input_0 = input_0::input_0(); + let z_0 = output_0::output_0(); + + let (y_0) = NNTrait::global_maxpool(@input_0); + + assert_eq(y_0, z_0); +} diff --git a/tests/nodes/global_maxpool_fp8x23/input_0.cairo b/tests/nodes/global_maxpool_fp8x23/input_0.cairo new file mode 100644 index 000000000..7bedc589c --- /dev/null +++ b/tests/nodes/global_maxpool_fp8x23/input_0.cairo @@ -0,0 +1,79 @@ +use core::array::{ArrayTrait, SpanTrait}; +use orion::operators::tensor::{TensorTrait, Tensor}; +use orion::operators::tensor::{FP8x23Tensor, FP8x23TensorAdd}; +use orion::numbers::{FixedTrait, FP8x23}; + +fn input_0() -> Tensor { + let mut shape = ArrayTrait::::new(); + shape.append(2); + shape.append(2); + shape.append(4); + shape.append(4); + + let mut data = ArrayTrait::new(); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 25165824, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: true }); + data.append(FP8x23 { mag: 8388608, sign: false }); + data.append(FP8x23 { mag: 0, sign: false }); + data.append(FP8x23 { mag: 8388608, sign: true }); + data.append(FP8x23 { mag: 16777216, sign: true }); + TensorTrait::new(shape.span(), data.span()) +} diff --git a/tests/nodes/global_maxpool_fp8x23/output_0.cairo b/tests/nodes/global_maxpool_fp8x23/output_0.cairo new file mode 100644 index 000000000..58b455e1b --- /dev/null +++ b/tests/nodes/global_maxpool_fp8x23/output_0.cairo @@ -0,0 +1,19 @@ +use core::array::{ArrayTrait, SpanTrait}; +use orion::operators::tensor::{TensorTrait, Tensor}; +use orion::operators::tensor::{FP8x23Tensor, FP8x23TensorAdd}; +use orion::numbers::{FixedTrait, FP8x23}; + +fn output_0() -> Tensor { + let mut shape = ArrayTrait::::new(); + shape.append(2); + shape.append(2); + shape.append(1); + shape.append(1); + + let mut data = ArrayTrait::new(); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + data.append(FP8x23 { mag: 16777216, sign: false }); + TensorTrait::new(shape.span(), data.span()) +} diff --git a/tests/operators/global_maxpool_test.cairo b/tests/operators/global_maxpool_test.cairo index 42969bea4..54fecc3f6 100644 --- a/tests/operators/global_maxpool_test.cairo +++ b/tests/operators/global_maxpool_test.cairo @@ -1,7 +1,7 @@ use core::array::{ArrayTrait, SpanTrait}; use orion::operators::tensor::{TensorTrait, Tensor, U32Tensor}; use core::debug::PrintTrait; -use orion::operators::functional::global_maxpool; +use orion::operators::tensor::math::global_maxpool::global_maxpool; #[test] #[available_gas(200000000000)] fn global_maxpool_test() { From 3a05e012368e837f94a6644de8d0c2c03d4112c5 Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Mon, 26 Feb 2024 13:54:19 +0530 Subject: [PATCH 4/6] chore: fixes --- tests/nodes.cairo | 1 - tests/nodes/global_maxpool_fp16x16.cairo | 2 +- tests/nodes/global_maxpool_fp8x23.cairo | 2 +- tests/operators/global_maxpool_test.cairo | 21 ++++++++------------- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/tests/nodes.cairo b/tests/nodes.cairo index d92b0935b..ab47eb727 100644 --- a/tests/nodes.cairo +++ b/tests/nodes.cairo @@ -1040,5 +1040,4 @@ mod conv_2D_with_strides_asymmetric_padding; mod conv_2D_with_strides_with_padding; mod conv_4D_with_padding; mod global_maxpool_fp16x16; -mod global_maxpool_fp64x64; mod global_maxpool_fp8x23; diff --git a/tests/nodes/global_maxpool_fp16x16.cairo b/tests/nodes/global_maxpool_fp16x16.cairo index 6eed36392..fdfd889ed 100644 --- a/tests/nodes/global_maxpool_fp16x16.cairo +++ b/tests/nodes/global_maxpool_fp16x16.cairo @@ -14,7 +14,7 @@ fn test_global_maxpool_fp16x16() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let (y_0) = NNTrait::global_maxpool(@input_0); + let y_0 = NNTrait::global_maxpool(@input_0); assert_eq(y_0, z_0); } diff --git a/tests/nodes/global_maxpool_fp8x23.cairo b/tests/nodes/global_maxpool_fp8x23.cairo index 5ca6881fe..946215295 100644 --- a/tests/nodes/global_maxpool_fp8x23.cairo +++ b/tests/nodes/global_maxpool_fp8x23.cairo @@ -14,7 +14,7 @@ fn test_global_maxpool_fp8x23() { let input_0 = input_0::input_0(); let z_0 = output_0::output_0(); - let (y_0) = NNTrait::global_maxpool(@input_0); + let y_0 = NNTrait::global_maxpool(@input_0); assert_eq(y_0, z_0); } diff --git a/tests/operators/global_maxpool_test.cairo b/tests/operators/global_maxpool_test.cairo index 54fecc3f6..fab4a6f2d 100644 --- a/tests/operators/global_maxpool_test.cairo +++ b/tests/operators/global_maxpool_test.cairo @@ -1,7 +1,8 @@ use core::array::{ArrayTrait, SpanTrait}; use orion::operators::tensor::{TensorTrait, Tensor, U32Tensor}; use core::debug::PrintTrait; -use orion::operators::tensor::math::global_maxpool::global_maxpool; +use orion::operators::nn::core::NNTrait; +use orion::numbers::NumberTrait; #[test] #[available_gas(200000000000)] fn global_maxpool_test() { @@ -106,22 +107,16 @@ fn global_maxpool_test() { let a = TensorTrait::::new(array![2, 3, 4, 4].span(), data.span()); let actual = global_maxpool(@a); - // shape test - assert(*actual.data.at(0) == 2, 'N must be 2'); - assert(*actual.data.at(1) == 3, 'C must be 3'); - assert(*actual.data.at(2) == 1, 'H must be 1'); - assert(*actual.data.at(3) == 1, 'W must be 1'); - let expected = TensorTrait::< u32 >::new(array![2, 3, 1, 1].span(), array![16, 32, 48, 64, 80, 96].span()); let eq = actual.equal(@expected); - assert(*eq.data.at(0) == 1); - assert(*eq.data.at(1) == 1); - assert(*eq.data.at(2) == 1); - assert(*eq.data.at(3) == 1); - assert(*eq.data.at(4) == 1); - assert(*eq.data.at(5) == 1); + assert(*eq.data[0].into() == 1, 'result[0] == 1'); + assert(*eq.data[1].into() == 1, 'result[1] == 1'); + assert(*eq.data[2].into() == 1, 'result[2] == 1'); + assert(*eq.data[3].into() == 1, 'result[3] == 1'); + assert(*eq.data[4].into() == 1, 'result[4] == 1'); + assert(*eq.data[5].into() == 1, 'result[5] == 1'); } From e17ec83105eb25c5f0e928258900a99c3f179e6e Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Wed, 6 Mar 2024 00:21:00 +0530 Subject: [PATCH 5/6] chore: fixes --- .all-contributorsrc | 8 +- docs/CHANGELOG.md | 4 +- docs/framework/compatibility.md | 3 - src/operators/nn/core.cairo | 6 +- .../nn/functional/depth_to_space.cairo | 4 - .../nn/functional/global_maxpool.cairo | 2 +- src/operators/tensor/core.cairo | 120 ++++++++++++++++++ .../tensor/implementations/tensor_bool.cairo | 3 - .../implementations/tensor_fp16x16.cairo | 8 -- .../implementations/tensor_fp16x16wide.cairo | 8 -- .../implementations/tensor_fp64x64.cairo | 4 - .../tensor/implementations/tensor_i32.cairo | 4 - .../tensor/implementations/tensor_i8.cairo | 4 - .../tensor/implementations/tensor_u32.cairo | 4 - .../manipulation/reverse_sequence.cairo | 15 --- .../manipulation/split_to_sequence.cairo | 27 ---- .../tensor/math/random_uniform_like.cairo | 10 -- src/operators/tensor/math/range.cairo | 4 - src/operators/tensor/math/scatter_nd.cairo | 11 -- .../dynamic_quantize_linear.cairo | 8 -- 20 files changed, 128 insertions(+), 129 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8c0f0f871..a1802dc9d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -289,12 +289,15 @@ ] }, { -<<<<<<< HEAD "login": "RajeshRk18", "name": "Rajesh", "avatar_url": "https://avatars.githubusercontent.com/u/87425610?v=4", "profile": "https://github.com/RajeshRk18", -======= + "contributions": [ + "code" + ] + }, + { "login": "TAdev0", "name": "Tristan", "avatar_url": "https://avatars.githubusercontent.com/u/122918260?v=4", @@ -317,7 +320,6 @@ "name": "Beeyoung", "avatar_url": "https://avatars.githubusercontent.com/u/55970530?v=4", "profile": "http://alankang.xyz", ->>>>>>> main "contributions": [ "code" ] diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 84123b361..8340fec06 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -3,20 +3,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -<<<<<<< HEAD + ## [Unreleased] - 2024-02-24 ## Added - Global Maxpool operator -======= ## [Unreleased] - 2024-02-21 ## Added - Label Encoder. - ->>>>>>> main ## [Unreleased] - 2024-01-17 ## Added diff --git a/docs/framework/compatibility.md b/docs/framework/compatibility.md index 149ef2889..71b5ea5c9 100644 --- a/docs/framework/compatibility.md +++ b/docs/framework/compatibility.md @@ -125,10 +125,7 @@ You can see below the list of current supported ONNX Operators: | [HammingWindow](operators/tensor/tensor.tensor.hamming_window.md) | :white\_check\_mark: | | [BlackmanWindow](operators/tensor/tensor.tensor.blackman_window.md) | :white\_check\_mark: | | [RandomUniformLike](operators/tensor/tensor.tensor.random_uniform_like.md) | :white\_check\_mark: | -<<<<<<< HEAD | [GlobalMaxpool](operators/neural-network/nn.global_maxpool.md) | :white\_check\_mark: | -======= | [LabelEncoder](operators/tensor/tensor.label_encoder.md) | :white\_check\_mark: | ->>>>>>> main Current Operators support: **118/156 (75%)** diff --git a/src/operators/nn/core.cairo b/src/operators/nn/core.cairo index 3d336eeec..624d114b1 100644 --- a/src/operators/nn/core.cairo +++ b/src/operators/nn/core.cairo @@ -16,14 +16,10 @@ use orion::operators::tensor::core::Tensor; /// gemm - Performs General Matrix multiplication. /// grid_sample - Computes the grid sample of the input tensor and input grid. /// col2im - Rearranges column blocks back into a multidimensional image -<<<<<<< HEAD /// conv_transpose - Performs the convolution transpose of the input data tensor and weigth tensor. /// conv - Performs the convolution of the input data tensor and weigth tensor. /// global_maxpool - Performs the global maxpooling of the input tensor. -======= -/// conv_transpose - Performs the convolution transpose of the input data tensor and weight tensor. -/// conv - Performs the convolution of the input data tensor and weight tensor. ->>>>>>> main + trait NNTrait { /// # NNTrait::relu /// diff --git a/src/operators/nn/functional/depth_to_space.cairo b/src/operators/nn/functional/depth_to_space.cairo index 0cb86ce36..161ea46ad 100644 --- a/src/operators/nn/functional/depth_to_space.cairo +++ b/src/operators/nn/functional/depth_to_space.cairo @@ -30,12 +30,8 @@ fn depth_to_space< let tmpshape = array![*b, blocksize, blocksize, *C / (blocksize * blocksize), *H, *W]; let reshaped = (tensor).reshape(target_shape: tmpshape.span()); let transposed = reshaped.transpose(axes: array![0, 3, 4, 1, 5, 2].span()); -<<<<<<< HEAD - return transposed.reshape(target_shape: finalshape.span()); -======= transposed.reshape(target_shape: finalshape.span()) ->>>>>>> main } else { // assert mode == "CRD" let tmpshape = array![*b, *C / (blocksize * blocksize), blocksize, blocksize, *H, *W]; diff --git a/src/operators/nn/functional/global_maxpool.cairo b/src/operators/nn/functional/global_maxpool.cairo index 541e2d6fc..77e262a71 100644 --- a/src/operators/nn/functional/global_maxpool.cairo +++ b/src/operators/nn/functional/global_maxpool.cairo @@ -39,7 +39,7 @@ fn global_maxpool< match data.pop_front() { Option::Some(data) => { if accum % area == 0 { - break (); + break; } else { sub_tensor.append(*data); accum += 1; diff --git a/src/operators/tensor/core.cairo b/src/operators/tensor/core.cairo index 7d0828aae..4ad5f8f49 100644 --- a/src/operators/tensor/core.cairo +++ b/src/operators/tensor/core.cairo @@ -5728,6 +5728,126 @@ trait TensorTrait { /// ``` /// fn random_uniform_like(tensor: @Tensor, high: Option, low: Option, seed: Option) -> Tensor; + /// # tensor.label_encoder + /// + /// ```rust + /// fn label_encoder(self: @Tensor, default_list: Option>, default_tensor: Option>, keys: Option>, keys_tensor: Option>, values: Option>, values_tensor: Option>) -> Tensor; + /// ``` + /// + /// Maps each element in the input tensor to another value. + /// + /// The mapping is determined by the two parallel attributes, 'keys_' and 'values_' attribute. + /// The i-th value in the specified 'keys_' attribute would be mapped to the i-th value in the specified 'values_' attribute. + /// It implies that input's element type and the element type of the specified 'keys_' should be identical while the output type is identical to the specified 'values_' attribute. + /// + /// ## Args + /// + /// * `self`(`@Tensor`) - The input tensor. + /// * `default_list`(`Option>`) - The default span. + /// * `default_tensor`(`Option>`) - The default tensor. + /// * `keys`(`Option>`) - The keys span. + /// * `keys_tensor`(`Option>`) - The keys tensor. + /// * `values`(` Option>`) - The values span. + /// * `values_tensor`(`Option>`) - The values tensor. + /// + /// One and only one of 'default_*'s should be set + /// One and only one of 'keys*'s should be set + /// One and only one of 'values*'s should be set. + /// + /// ## Panics + /// + /// * Panics if the len/shape of keys and values are not the same. + /// + /// ## Returns + /// + /// A new `Tensor` which maps each element in the input tensor to another value.. + /// + /// ## Type Constraints + /// + /// * `T` in (`Tensor`, `Tensor`, `Tensor`, `tensor,`) + /// + /// ## Examples + /// + /// ```rust + /// use array::{ArrayTrait, SpanTrait}; + /// use orion::operators::tensor::U32Tensor; + /// use orion::operators::tensor::{TensorTrait, Tensor, U32Tensor}; + /// + /// fn label_encoder_example() -> Tensor, { + /// fn data() -> Tensor { + /// let mut sizes = ArrayTrait::new(); + /// sizes.append(2); + /// sizes.append(3); + /// let mut data = ArrayTrait::new(); + /// data.append(1); + /// data.append(2); + /// data.append(3); + /// data.append(1); + /// data.append(4); + /// data.append(5); + /// + /// let tensor = TensorTrait::::new(sizes.span(), data.span()); + /// return tensor; + /// } + /// + /// fn keys() -> Tensor { + /// let mut sizes = ArrayTrait::new(); + /// sizes.append(3); + /// sizes.append(1); + /// + /// let mut data = ArrayTrait::new(); + /// data.append(1); + /// data.append(2); + /// data.append(1); + /// + /// let tensor = TensorTrait::::new(sizes.span(), data.span()); + /// return tensor; + /// } + /// + /// fn values() -> Tensor { + /// let mut sizes = ArrayTrait::new(); + /// sizes.append(3); + /// sizes.append(1); + /// + /// let mut data = ArrayTrait::new(); + /// data.append(8); + /// data.append(9); + /// data.append(7); + /// + /// let tensor = TensorTrait::::new(sizes.span(), data.span()); + /// return tensor; + /// } + /// + /// fn default() -> Tensor { + /// let mut sizes = ArrayTrait::new(); + /// sizes.append(1); + /// + /// let mut data = ArrayTrait::new(); + /// data.append(999); + /// + /// let tensor = TensorTrait::::new(sizes.span(), data.span()); + /// return tensor; + /// } + /// + /// let data = data(); + /// let keys = keys(); + /// let values = values(); + /// let default = default(); + /// return data.label_encoder(default_list: Option::None, default_tensor: Option::Some(default), + /// keys: Option::None, keys_tensor: Option::Some(keys), + /// values: Option::None, values_tensor: Option::Some(values)); + /// >>> [7, 9, 999, 7, 999, 999], + /// ``` + /// + fn label_encoder( + self: @Tensor, + default_list: Option>, + default_tensor: Option>, + keys: Option>, + keys_tensor: Option>, + values: Option>, + values_tensor: Option> + ) -> Tensor; } /// Cf: TensorTrait::new docstring diff --git a/src/operators/tensor/implementations/tensor_bool.cairo b/src/operators/tensor/implementations/tensor_bool.cairo index 9ae42b763..612a397cc 100644 --- a/src/operators/tensor/implementations/tensor_bool.cairo +++ b/src/operators/tensor/implementations/tensor_bool.cairo @@ -533,8 +533,6 @@ impl BoolTensor of TensorTrait { fn random_uniform_like( tensor: @Tensor, high: Option, low: Option, seed: Option ) -> Tensor { -<<<<<<< HEAD -======= panic(array!['not supported!']) } @@ -547,7 +545,6 @@ impl BoolTensor of TensorTrait { values: Option>, values_tensor: Option> ) -> Tensor { ->>>>>>> main panic(array!['not supported!']) } } diff --git a/src/operators/tensor/implementations/tensor_fp16x16.cairo b/src/operators/tensor/implementations/tensor_fp16x16.cairo index b45f899be..a37ed0442 100644 --- a/src/operators/tensor/implementations/tensor_fp16x16.cairo +++ b/src/operators/tensor/implementations/tensor_fp16x16.cairo @@ -601,17 +601,9 @@ impl FP16x16Tensor of TensorTrait { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } -<<<<<<< HEAD - - fn optional(self: @Tensor) -> Option> { - manipulation::optional::optional(self) - } - -======= fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } ->>>>>>> main fn dynamic_quantize_linear( self: @Tensor diff --git a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo index eab12a897..2003b28ff 100644 --- a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo +++ b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo @@ -561,17 +561,9 @@ impl FP16x16WTensor of TensorTrait { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } -<<<<<<< HEAD - - fn optional(self: @Tensor) -> Option> { - manipulation::optional::optional(self) - } - -======= fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } ->>>>>>> main fn dynamic_quantize_linear( self: @Tensor diff --git a/src/operators/tensor/implementations/tensor_fp64x64.cairo b/src/operators/tensor/implementations/tensor_fp64x64.cairo index 681d7608c..3a7214d18 100644 --- a/src/operators/tensor/implementations/tensor_fp64x64.cairo +++ b/src/operators/tensor/implementations/tensor_fp64x64.cairo @@ -597,10 +597,6 @@ impl FP64x64Tensor of TensorTrait { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } -<<<<<<< HEAD - -======= ->>>>>>> main fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } diff --git a/src/operators/tensor/implementations/tensor_i32.cairo b/src/operators/tensor/implementations/tensor_i32.cairo index dd664e18a..296876516 100644 --- a/src/operators/tensor/implementations/tensor_i32.cairo +++ b/src/operators/tensor/implementations/tensor_i32.cairo @@ -572,10 +572,6 @@ impl I32Tensor of TensorTrait { manipulation::reverse_sequence::reverse_sequence(self, sequence_lens, batch_axis, time_axis) } -<<<<<<< HEAD - -======= ->>>>>>> main fn optional(self: @Tensor) -> Option> { manipulation::optional::optional(self) } diff --git a/src/operators/tensor/implementations/tensor_i8.cairo b/src/operators/tensor/implementations/tensor_i8.cairo index f96f550c5..42d807c68 100644 --- a/src/operators/tensor/implementations/tensor_i8.cairo +++ b/src/operators/tensor/implementations/tensor_i8.cairo @@ -560,10 +560,6 @@ impl I8Tensor of TensorTrait { panic(array!['not supported!']) } -<<<<<<< HEAD - -======= ->>>>>>> main fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { diff --git a/src/operators/tensor/implementations/tensor_u32.cairo b/src/operators/tensor/implementations/tensor_u32.cairo index 362641864..efb681a86 100644 --- a/src/operators/tensor/implementations/tensor_u32.cairo +++ b/src/operators/tensor/implementations/tensor_u32.cairo @@ -504,10 +504,6 @@ impl U32Tensor of TensorTrait { panic(array!['not supported!']) } -<<<<<<< HEAD - -======= ->>>>>>> main fn split_to_sequence( self: @Tensor, axis: usize, keepdims: usize, split: Option> ) -> Array> { diff --git a/src/operators/tensor/manipulation/reverse_sequence.cairo b/src/operators/tensor/manipulation/reverse_sequence.cairo index cf6bb26c8..8bb45fe9a 100644 --- a/src/operators/tensor/manipulation/reverse_sequence.cairo +++ b/src/operators/tensor/manipulation/reverse_sequence.cairo @@ -57,15 +57,7 @@ fn reverse_index(shape: Span, sequence_lens: Tensor, control: bool sequence_lens.data.len() <= x, "The length of sequence_lens cannot exceed batch_axis" ); let mut i: usize = 0; -<<<<<<< HEAD - loop { - if i >= x { - break; - } - -======= while i != x { ->>>>>>> main let reverse: usize = (*sequence_lens.data.at(i)); assert!( reverse <= y && reverse >= 1, @@ -124,14 +116,7 @@ fn reverse_index(shape: Span, sequence_lens: Tensor, control: bool let tmp = tmp.span(); let mut i: usize = 0; -<<<<<<< HEAD - loop { - if i > x - 1 { - break; - } -======= while i != x { ->>>>>>> main let mut j: usize = 0; while j != y { result.append((*tmp.at(j * x + i))); diff --git a/src/operators/tensor/manipulation/split_to_sequence.cairo b/src/operators/tensor/manipulation/split_to_sequence.cairo index 12ca6c44b..46dbe1af7 100644 --- a/src/operators/tensor/manipulation/split_to_sequence.cairo +++ b/src/operators/tensor/manipulation/split_to_sequence.cairo @@ -16,14 +16,7 @@ fn split_to_sequence, +Drop, +TensorTrait,>( let split_length = *(*self.shape).at(axis); let mut split_data: Array = array![]; let mut i = 0; -<<<<<<< HEAD - loop { - if (i >= split_length) { - break; - } -======= while i != split_length { ->>>>>>> main split_data.append(1); i += 1; }; @@ -49,25 +42,6 @@ fn split_to_sequence, +Drop, +TensorTrait,>( splited_t = split_has_split(self, axis, split_unwrap); } -<<<<<<< HEAD - if (keepdims == 0 && has_split == false) { - let mut splited_t_temp: Array> = array![]; - let mut i = 0; - loop { - if (i >= splited_t.len()) { - break; - } - let mut shape: Array = array![]; - let mut j = 0; - let shape_in_splited: Span = *splited_t.at(i).shape; - loop { - if (j >= shape_in_splited.len()) { - break; - } - if (j != axis) { - shape.append(*shape_in_splited.at(j)) - } -======= if (keepdims == 0 && !has_split) { let mut splited_t_temp: Array> = array![]; let mut i = 0; @@ -80,7 +54,6 @@ fn split_to_sequence, +Drop, +TensorTrait,>( shape.append(*shape_in_splited.at(j)) } ->>>>>>> main j += 1; }; diff --git a/src/operators/tensor/math/random_uniform_like.cairo b/src/operators/tensor/math/random_uniform_like.cairo index e28a3a727..61d993dda 100644 --- a/src/operators/tensor/math/random_uniform_like.cairo +++ b/src/operators/tensor/math/random_uniform_like.cairo @@ -42,12 +42,6 @@ fn random_uniform_like< }; assert!(high > low, "high must be larger than low"); let res = tensor_get_state(tensor, seed, high, low); -<<<<<<< HEAD - - return res; -} -======= ->>>>>>> main res } @@ -71,11 +65,7 @@ fn tensor_get_state< >( tensor: Tensor, mut seed: usize, high: T, low: T ) -> Tensor { -<<<<<<< HEAD - let mut data = ArrayTrait::new(); -======= let mut data = array![]; ->>>>>>> main let mut count = (tensor.data).len(); let mut i = 0; diff --git a/src/operators/tensor/math/range.cairo b/src/operators/tensor/math/range.cairo index 0c39ccdd8..1edc0f628 100644 --- a/src/operators/tensor/math/range.cairo +++ b/src/operators/tensor/math/range.cairo @@ -16,11 +16,7 @@ fn range< >( mut start: T, end: T, step: T ) -> Tensor { -<<<<<<< HEAD - let mut result: Array = ArrayTrait::::new(); -======= let mut result: Array = array![]; ->>>>>>> main let zero: T = NumberTrait::zero(); while !(step >= zero && start >= end) && !(step <= zero && start <= end) { let v = start; diff --git a/src/operators/tensor/math/scatter_nd.cairo b/src/operators/tensor/math/scatter_nd.cairo index f67ee3c06..285949ebd 100644 --- a/src/operators/tensor/math/scatter_nd.cairo +++ b/src/operators/tensor/math/scatter_nd.cairo @@ -98,14 +98,7 @@ fn scatter_nd< let mut index: usize = 0; let mut inner_index: usize = 0; let num = *data_shape_first.unwrap(); -<<<<<<< HEAD - loop { - if (index == num) { - break; - } -======= while index != num { ->>>>>>> main let comp_index = updates_index_dict.get(index.into()); if comp_index == 0 { @@ -163,10 +156,6 @@ fn scatter_nd< }; let mut output_tensor = TensorTrait::::new(*self.shape, output_data.span()); -<<<<<<< HEAD - return output_tensor; -======= output_tensor ->>>>>>> main } diff --git a/src/operators/tensor/quantization/dynamic_quantize_linear.cairo b/src/operators/tensor/quantization/dynamic_quantize_linear.cairo index c1d2780c6..db8be469d 100644 --- a/src/operators/tensor/quantization/dynamic_quantize_linear.cairo +++ b/src/operators/tensor/quantization/dynamic_quantize_linear.cairo @@ -42,11 +42,7 @@ fn dynamic_quantize_linear< y_scale_values.append(y_scale_value); } -<<<<<<< HEAD - let mut y_scale_tensor_shape = ArrayTrait::new(); -======= let mut y_scale_tensor_shape: Array = array![]; ->>>>>>> main y_scale_tensor_shape.append(y_scale_values.len()); let y_scale = TensorTrait::< @@ -73,9 +69,5 @@ fn dynamic_quantize_linear< // y = saturate (round (x / y_scale) + y_zero_point) -<<<<<<< HEAD - return (quantize_linear(x, @y_scale, @y_zero_point, min, max), y_scale, y_zero_point); -======= (quantize_linear(x, @y_scale, @y_zero_point, min, max), y_scale, y_zero_point) ->>>>>>> main } From 39a482587dbc574cb09d7177ce606fd9b5fd8770 Mon Sep 17 00:00:00 2001 From: RajeshRk18 Date: Wed, 6 Mar 2024 00:31:07 +0530 Subject: [PATCH 6/6] chore: fixes --- docs/framework/operators/neural-network/README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docs/framework/operators/neural-network/README.md b/docs/framework/operators/neural-network/README.md index 74b836341..af60daa9a 100644 --- a/docs/framework/operators/neural-network/README.md +++ b/docs/framework/operators/neural-network/README.md @@ -37,12 +37,6 @@ Orion supports currently these `NN` types. | [`nn.gemm`](nn.gemm.md) | Performs General Matrix multiplication. | | [`nn.grid_sample`](nn.grid\_sample.md) | Computes the grid sample of the input tensor and input grid. | | [`nn.col2im`](nn.col2im.md) | Rearranges column blocks back into a multidimensional image | -<<<<<<< HEAD | [`nn.conv_transpose`](nn.conv\_transpose.md) | Performs the convolution transpose of the input data tensor and weigth tensor. | | [`nn.conv`](nn.conv.md) | Performs the convolution of the input data tensor and weigth tensor. | -| [`nn.global_maxpool`](nn.global_maxpool.md) | Computes the global maxpooling of the input tensor. -======= -| [`nn.conv_transpose`](nn.conv\_transpose.md) | Performs the convolution transpose of the input data tensor and weight tensor. | -| [`nn.conv`](nn.conv.md) | Performs the convolution of the input data tensor and weight tensor. | - ->>>>>>> main +| [`nn.global_maxpool`](nn.global_maxpool.md) | Computes the global maxpooling of the input tensor. | \ No newline at end of file