diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a08086..0a75a49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,9 @@ if(MSVC) target_compile_options(ortki PRIVATE /wd4127) target_compile_definitions(ortki PRIVATE NOMINMAX NOGDI) else() - target_link_options(ortki PRIVATE -Wl,--no-undefined) + if (NOT APPLE) + target_link_options(ortki PRIVATE -Wl,--no-undefined) + endif() endif() set(INCLUDE_DIRS diff --git a/CSharp/OrtKISharp/Operators.cs b/CSharp/OrtKISharp/Operators.cs index 3cc7a7b..430d34b 100644 --- a/CSharp/OrtKISharp/Operators.cs +++ b/CSharp/OrtKISharp/Operators.cs @@ -17,6 +17,9 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_Add(Tensor A, Tensor B); + [DllImport(LibraryName)] + public static extern Tensor ortki_AffineGrid(Tensor theta, Tensor size, long align_corners); + [DllImport(LibraryName)] public static extern Tensor ortki_And(Tensor A, Tensor B); @@ -39,7 +42,7 @@ internal partial class Native public static extern Tensor ortki_Atanh(Tensor input); [DllImport(LibraryName)] - public static extern Tensor ortki_AveragePool(Tensor X, string auto_pad, long ceil_mode, long count_include_pad, long[] kernel_shape, nuint kernel_shape_size, long[] pads, nuint pads_size, long[] strides, nuint strides_size); + public static extern Tensor ortki_AveragePool(Tensor X, string auto_pad, long ceil_mode, long count_include_pad, long[] dilations, nuint dilations_size, long[] kernel_shape, nuint kernel_shape_size, long[] pads, nuint pads_size, long[] strides, nuint strides_size); [DllImport(LibraryName)] public static extern Tensor ortki_Bernoulli(Tensor input, long dtype, float seed); @@ -47,14 +50,26 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_BitShift(Tensor X, Tensor Y, string direction); + [DllImport(LibraryName)] + public static extern Tensor ortki_BitwiseAnd(Tensor A, Tensor B); + + [DllImport(LibraryName)] + public static extern Tensor ortki_BitwiseNot(Tensor X); + + [DllImport(LibraryName)] + public static extern Tensor ortki_BitwiseOr(Tensor A, Tensor B); + + [DllImport(LibraryName)] + public static extern Tensor ortki_BitwiseXor(Tensor A, Tensor B); + [DllImport(LibraryName)] public static extern Tensor ortki_BlackmanWindow(Tensor size, long output_datatype, long periodic); [DllImport(LibraryName)] - public static extern Tensor ortki_Cast(Tensor input, long to); + public static extern Tensor ortki_Cast(Tensor input, long saturate, long to); [DllImport(LibraryName)] - public static extern Tensor ortki_CastLike(Tensor input, Tensor target_type); + public static extern Tensor ortki_CastLike(Tensor input, Tensor target_type, long saturate); [DllImport(LibraryName)] public static extern Tensor ortki_Ceil(Tensor X); @@ -62,9 +77,15 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_Celu(Tensor X, float alpha); + [DllImport(LibraryName)] + public static extern Tensor ortki_CenterCropPad(Tensor input_data, Tensor shape, long[] axes, nuint axes_size); + [DllImport(LibraryName)] public static extern Tensor ortki_Clip(Tensor input, Tensor min, Tensor max); + [DllImport(LibraryName)] + public static extern Tensor ortki_Col2Im(Tensor input, Tensor image_shape, Tensor block_shape, long[] dilations, nuint dilations_size, long[] pads, nuint pads_size, long[] strides, nuint strides_size); + [DllImport(LibraryName)] public static extern Tensor ortki_Compress(Tensor input, Tensor condition, long axis); @@ -93,7 +114,10 @@ internal partial class Native public static extern Tensor ortki_CumSum(Tensor x, Tensor axis, long exclusive, long reverse); [DllImport(LibraryName)] - public static extern Tensor ortki_DFT(Tensor input, Tensor dft_length, long axis, long inverse, long onesided); + public static extern Tensor ortki_DFT(Tensor input, Tensor dft_length, Tensor axis, long inverse, long onesided); + + [DllImport(LibraryName)] + public static extern Tensor ortki_DeformConv(Tensor X, Tensor W, Tensor offset, Tensor B, Tensor mask, long[] dilations, nuint dilations_size, long group, long[] kernel_shape, nuint kernel_shape_size, long offset_group, long[] pads, nuint pads_size, long[] strides, nuint strides_size); [DllImport(LibraryName)] public static extern Tensor ortki_DepthToSpace(Tensor input, long blocksize, string mode); @@ -152,6 +176,9 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_GatherND(Tensor data, Tensor indices, long batch_dims); + [DllImport(LibraryName)] + public static extern Tensor ortki_Gelu(Tensor X, string approximate); + [DllImport(LibraryName)] public static extern Tensor ortki_Gemm(Tensor A, Tensor B, Tensor C, float alpha, float beta, long transA, long transB); @@ -173,6 +200,9 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_GridSample(Tensor X, Tensor grid, long align_corners, string mode, string padding_mode); + [DllImport(LibraryName)] + public static extern Tensor ortki_GroupNormalization(Tensor X, Tensor scale, Tensor bias, float epsilon, long num_groups); + [DllImport(LibraryName)] public static extern Tensor ortki_HammingWindow(Tensor size, long output_datatype, long periodic); @@ -191,6 +221,9 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_Identity(Tensor input); + [DllImport(LibraryName)] + public static extern Tensor ortki_ImageDecoder(Tensor encoded_stream, string pixel_format); + [DllImport(LibraryName)] public static extern Tensor ortki_InstanceNormalization(Tensor input, Tensor scale, Tensor B, float epsilon); @@ -225,7 +258,7 @@ internal partial class Native public static extern Tensor ortki_LpNormalization(Tensor input, long axis, long p); [DllImport(LibraryName)] - public static extern Tensor ortki_LpPool(Tensor X, string auto_pad, long[] kernel_shape, nuint kernel_shape_size, long p, long[] pads, nuint pads_size, long[] strides, nuint strides_size); + public static extern Tensor ortki_LpPool(Tensor X, string auto_pad, long ceil_mode, long[] dilations, nuint dilations_size, long[] kernel_shape, nuint kernel_shape_size, long p, long[] pads, nuint pads_size, long[] strides, nuint strides_size); [DllImport(LibraryName)] public static extern Tensor ortki_MatMul(Tensor A, Tensor B); @@ -257,6 +290,9 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_Min(IntPtr[] data_0, nuint input_size); + [DllImport(LibraryName)] + public static extern Tensor ortki_Mish(Tensor X); + [DllImport(LibraryName)] public static extern Tensor ortki_Mod(Tensor A, Tensor B, long fmod); @@ -297,7 +333,7 @@ internal partial class Native public static extern Tensor ortki_PRelu(Tensor X, Tensor slope); [DllImport(LibraryName)] - public static extern Tensor ortki_Pad(Tensor data, Tensor pads, Tensor constant_value, string mode); + public static extern Tensor ortki_Pad(Tensor data, Tensor pads, Tensor constant_value, Tensor axes, string mode); [DllImport(LibraryName)] public static extern Tensor ortki_Pow(Tensor X, Tensor Y); @@ -309,7 +345,7 @@ internal partial class Native public static extern Tensor ortki_QLinearMatMul(Tensor a, Tensor a_scale, Tensor a_zero_point, Tensor b, Tensor b_scale, Tensor b_zero_point, Tensor y_scale, Tensor y_zero_point); [DllImport(LibraryName)] - public static extern Tensor ortki_QuantizeLinear(Tensor x, Tensor y_scale, Tensor y_zero_point, long axis); + public static extern Tensor ortki_QuantizeLinear(Tensor x, Tensor y_scale, Tensor y_zero_point, long axis, long saturate); [DllImport(LibraryName)] public static extern TensorSeq ortki_RNN(Tensor X, Tensor W, Tensor R, Tensor B, Tensor sequence_lens, Tensor initial_h, float[] activation_alpha, nuint activation_alpha_size, float[] activation_beta, nuint activation_beta_size, string[] activations, nuint activations_size, float clip, string direction, long hidden_size, long layout); @@ -333,34 +369,37 @@ internal partial class Native public static extern Tensor ortki_Reciprocal(Tensor X); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceL1(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceL1(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceL2(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceL2(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceLogSum(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceLogSum(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceLogSumExp(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceLogSumExp(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceMax(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceMax(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceMean(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceMean(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceMin(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceMin(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceProd(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceProd(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] public static extern Tensor ortki_ReduceSum(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); [DllImport(LibraryName)] - public static extern Tensor ortki_ReduceSumSquare(Tensor data, long[] axes, nuint axes_size, long keepdims); + public static extern Tensor ortki_ReduceSumSquare(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes); + + [DllImport(LibraryName)] + public static extern Tensor ortki_RegexFullMatch(Tensor X, string pattern); [DllImport(LibraryName)] public static extern Tensor ortki_Relu(Tensor X); @@ -458,9 +497,15 @@ internal partial class Native [DllImport(LibraryName)] public static extern Tensor ortki_Squeeze(Tensor data, Tensor axes); + [DllImport(LibraryName)] + public static extern Tensor ortki_StringConcat(Tensor X, Tensor Y); + [DllImport(LibraryName)] public static extern Tensor ortki_StringNormalizer(Tensor X, string case_change_action, long is_case_sensitive, string locale, string[] stopwords, nuint stopwords_size); + [DllImport(LibraryName)] + public static extern TensorSeq ortki_StringSplit(Tensor X, string delimiter, long maxsplit); + [DllImport(LibraryName)] public static extern Tensor ortki_Sub(Tensor A, Tensor B); @@ -525,7 +570,7 @@ internal partial class Native public static extern Tensor ortki_Imputer(Tensor X, float[] imputed_value_floats, nuint imputed_value_floats_size, long[] imputed_value_int64s, nuint imputed_value_int64s_size, float replaced_value_float, long replaced_value_int64); [DllImport(LibraryName)] - public static extern Tensor ortki_LabelEncoder(Tensor X, float default_float, long default_int64, string default_string, float[] keys_floats, nuint keys_floats_size, long[] keys_int64s, nuint keys_int64s_size, string[] keys_strings, nuint keys_strings_size, float[] values_floats, nuint values_floats_size, long[] values_int64s, nuint values_int64s_size, string[] values_strings, nuint values_strings_size); + public static extern Tensor ortki_LabelEncoder(Tensor X, float default_float, long default_int64, string default_string, Tensor default_tensor, float[] keys_floats, nuint keys_floats_size, long[] keys_int64s, nuint keys_int64s_size, string[] keys_strings, nuint keys_strings_size, Tensor keys_tensor, float[] values_floats, nuint values_floats_size, long[] values_int64s, nuint values_int64s_size, string[] values_strings, nuint values_strings_size, Tensor values_tensor); [DllImport(LibraryName)] public static extern TensorSeq ortki_LinearClassifier(Tensor X, long[] classlabels_ints, nuint classlabels_ints_size, string[] classlabels_strings, nuint classlabels_strings_size, float[] coefficients, nuint coefficients_size, float[] intercepts, nuint intercepts_size, long multi_class, string post_transform); diff --git a/CSharp/OrtKISharp/OperatorsWrapper.cs b/CSharp/OrtKISharp/OperatorsWrapper.cs index e28bcca..16e05c9 100644 --- a/CSharp/OrtKISharp/OperatorsWrapper.cs +++ b/CSharp/OrtKISharp/OperatorsWrapper.cs @@ -27,6 +27,12 @@ public static Tensor Add(Tensor A, Tensor B) return _tensor; } + public static Tensor AffineGrid(Tensor theta, Tensor size, long align_corners) + { + var _tensor = Native.ortki_AffineGrid(theta, size, align_corners); + return _tensor; + } + public static Tensor And(Tensor A, Tensor B) { var _tensor = Native.ortki_And(A, B); @@ -69,9 +75,9 @@ public static Tensor Atanh(Tensor input) return _tensor; } - public static Tensor AveragePool(Tensor X, string auto_pad, long ceil_mode, long count_include_pad, long[] kernel_shape, long[] pads, long[] strides) + public static Tensor AveragePool(Tensor X, string auto_pad, long ceil_mode, long count_include_pad, long[] dilations, long[] kernel_shape, long[] pads, long[] strides) { - var _tensor = Native.ortki_AveragePool(X, auto_pad, ceil_mode, count_include_pad, kernel_shape, (nuint)kernel_shape.Length, pads, (nuint)pads.Length, strides, (nuint)strides.Length); + var _tensor = Native.ortki_AveragePool(X, auto_pad, ceil_mode, count_include_pad, dilations, (nuint)dilations.Length, kernel_shape, (nuint)kernel_shape.Length, pads, (nuint)pads.Length, strides, (nuint)strides.Length); return _tensor; } @@ -87,21 +93,45 @@ public static Tensor BitShift(Tensor X, Tensor Y, string direction) return _tensor; } + public static Tensor BitwiseAnd(Tensor A, Tensor B) + { + var _tensor = Native.ortki_BitwiseAnd(A, B); + return _tensor; + } + + public static Tensor BitwiseNot(Tensor X) + { + var _tensor = Native.ortki_BitwiseNot(X); + return _tensor; + } + + public static Tensor BitwiseOr(Tensor A, Tensor B) + { + var _tensor = Native.ortki_BitwiseOr(A, B); + return _tensor; + } + + public static Tensor BitwiseXor(Tensor A, Tensor B) + { + var _tensor = Native.ortki_BitwiseXor(A, B); + return _tensor; + } + public static Tensor BlackmanWindow(Tensor size, long output_datatype, long periodic) { var _tensor = Native.ortki_BlackmanWindow(size, output_datatype, periodic); return _tensor; } - public static Tensor Cast(Tensor input, long to) + public static Tensor Cast(Tensor input, long saturate, long to) { - var _tensor = Native.ortki_Cast(input, to); + var _tensor = Native.ortki_Cast(input, saturate, to); return _tensor; } - public static Tensor CastLike(Tensor input, Tensor target_type) + public static Tensor CastLike(Tensor input, Tensor target_type, long saturate) { - var _tensor = Native.ortki_CastLike(input, target_type); + var _tensor = Native.ortki_CastLike(input, target_type, saturate); return _tensor; } @@ -117,12 +147,24 @@ public static Tensor Celu(Tensor X, float alpha) return _tensor; } + public static Tensor CenterCropPad(Tensor input_data, Tensor shape, long[] axes) + { + var _tensor = Native.ortki_CenterCropPad(input_data, shape, axes, (nuint)axes.Length); + return _tensor; + } + public static Tensor Clip(Tensor input, Tensor min, Tensor max) { var _tensor = Native.ortki_Clip(input, min, max); return _tensor; } + public static Tensor Col2Im(Tensor input, Tensor image_shape, Tensor block_shape, long[] dilations, long[] pads, long[] strides) + { + var _tensor = Native.ortki_Col2Im(input, image_shape, block_shape, dilations, (nuint)dilations.Length, pads, (nuint)pads.Length, strides, (nuint)strides.Length); + return _tensor; + } + public static Tensor Compress(Tensor input, Tensor condition, long axis) { var _tensor = Native.ortki_Compress(input, condition, axis); @@ -179,12 +221,18 @@ public static Tensor CumSum(Tensor x, Tensor axis, long exclusive, long reverse) return _tensor; } - public static Tensor DFT(Tensor input, Tensor dft_length, long axis, long inverse, long onesided) + public static Tensor DFT(Tensor input, Tensor dft_length, Tensor axis, long inverse, long onesided) { var _tensor = Native.ortki_DFT(input, dft_length, axis, inverse, onesided); return _tensor; } + public static Tensor DeformConv(Tensor X, Tensor W, Tensor offset, Tensor B, Tensor mask, long[] dilations, long group, long[] kernel_shape, long offset_group, long[] pads, long[] strides) + { + var _tensor = Native.ortki_DeformConv(X, W, offset, B, mask, dilations, (nuint)dilations.Length, group, kernel_shape, (nuint)kernel_shape.Length, offset_group, pads, (nuint)pads.Length, strides, (nuint)strides.Length); + return _tensor; + } + public static Tensor DepthToSpace(Tensor input, long blocksize, string mode) { var _tensor = Native.ortki_DepthToSpace(input, blocksize, mode); @@ -300,6 +348,12 @@ public static Tensor GatherND(Tensor data, Tensor indices, long batch_dims) return _tensor; } + public static Tensor Gelu(Tensor X, string approximate) + { + var _tensor = Native.ortki_Gelu(X, approximate); + return _tensor; + } + public static Tensor Gemm(Tensor A, Tensor B, Tensor C, float alpha, float beta, long transA, long transB) { var _tensor = Native.ortki_Gemm(A, B, C, alpha, beta, transA, transB); @@ -342,6 +396,12 @@ public static Tensor GridSample(Tensor X, Tensor grid, long align_corners, strin return _tensor; } + public static Tensor GroupNormalization(Tensor X, Tensor scale, Tensor bias, float epsilon, long num_groups) + { + var _tensor = Native.ortki_GroupNormalization(X, scale, bias, epsilon, num_groups); + return _tensor; + } + public static Tensor HammingWindow(Tensor size, long output_datatype, long periodic) { var _tensor = Native.ortki_HammingWindow(size, output_datatype, periodic); @@ -378,6 +438,12 @@ public static Tensor Identity(Tensor input) return _tensor; } + public static Tensor ImageDecoder(Tensor encoded_stream, string pixel_format) + { + var _tensor = Native.ortki_ImageDecoder(encoded_stream, pixel_format); + return _tensor; + } + public static Tensor InstanceNormalization(Tensor input, Tensor scale, Tensor B, float epsilon) { var _tensor = Native.ortki_InstanceNormalization(input, scale, B, epsilon); @@ -444,9 +510,9 @@ public static Tensor LpNormalization(Tensor input, long axis, long p) return _tensor; } - public static Tensor LpPool(Tensor X, string auto_pad, long[] kernel_shape, long p, long[] pads, long[] strides) + public static Tensor LpPool(Tensor X, string auto_pad, long ceil_mode, long[] dilations, long[] kernel_shape, long p, long[] pads, long[] strides) { - var _tensor = Native.ortki_LpPool(X, auto_pad, kernel_shape, (nuint)kernel_shape.Length, p, pads, (nuint)pads.Length, strides, (nuint)strides.Length); + var _tensor = Native.ortki_LpPool(X, auto_pad, ceil_mode, dilations, (nuint)dilations.Length, kernel_shape, (nuint)kernel_shape.Length, p, pads, (nuint)pads.Length, strides, (nuint)strides.Length); return _tensor; } @@ -513,6 +579,12 @@ public static Tensor Min(Tensor[] data_0) return _tensor; } + public static Tensor Mish(Tensor X) + { + var _tensor = Native.ortki_Mish(X); + return _tensor; + } + public static Tensor Mod(Tensor A, Tensor B, long fmod) { var _tensor = Native.ortki_Mod(A, B, fmod); @@ -591,9 +663,9 @@ public static Tensor PRelu(Tensor X, Tensor slope) return _tensor; } - public static Tensor Pad(Tensor data, Tensor pads, Tensor constant_value, string mode) + public static Tensor Pad(Tensor data, Tensor pads, Tensor constant_value, Tensor axes, string mode) { - var _tensor = Native.ortki_Pad(data, pads, constant_value, mode); + var _tensor = Native.ortki_Pad(data, pads, constant_value, axes, mode); return _tensor; } @@ -615,9 +687,9 @@ public static Tensor QLinearMatMul(Tensor a, Tensor a_scale, Tensor a_zero_point return _tensor; } - public static Tensor QuantizeLinear(Tensor x, Tensor y_scale, Tensor y_zero_point, long axis) + public static Tensor QuantizeLinear(Tensor x, Tensor y_scale, Tensor y_zero_point, long axis, long saturate) { - var _tensor = Native.ortki_QuantizeLinear(x, y_scale, y_zero_point, axis); + var _tensor = Native.ortki_QuantizeLinear(x, y_scale, y_zero_point, axis, saturate); return _tensor; } @@ -663,51 +735,51 @@ public static Tensor Reciprocal(Tensor X) return _tensor; } - public static Tensor ReduceL1(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceL1(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceL1(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceL1(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceL2(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceL2(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceL2(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceL2(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceLogSum(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceLogSum(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceLogSum(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceLogSum(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceLogSumExp(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceLogSumExp(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceLogSumExp(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceLogSumExp(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceMax(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceMax(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceMax(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceMax(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceMean(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceMean(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceMean(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceMean(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceMin(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceMin(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceMin(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceMin(data, axes, keepdims, noop_with_empty_axes); return _tensor; } - public static Tensor ReduceProd(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceProd(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) { - var _tensor = Native.ortki_ReduceProd(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_ReduceProd(data, axes, keepdims, noop_with_empty_axes); return _tensor; } @@ -717,9 +789,15 @@ public static Tensor ReduceSum(Tensor data, Tensor axes, long keepdims, long noo return _tensor; } - public static Tensor ReduceSumSquare(Tensor data, long[] axes, long keepdims) + public static Tensor ReduceSumSquare(Tensor data, Tensor axes, long keepdims, long noop_with_empty_axes) + { + var _tensor = Native.ortki_ReduceSumSquare(data, axes, keepdims, noop_with_empty_axes); + return _tensor; + } + + public static Tensor RegexFullMatch(Tensor X, string pattern) { - var _tensor = Native.ortki_ReduceSumSquare(data, axes, (nuint)axes.Length, keepdims); + var _tensor = Native.ortki_RegexFullMatch(X, pattern); return _tensor; } @@ -920,12 +998,24 @@ public static Tensor Squeeze(Tensor data, Tensor axes) return _tensor; } + public static Tensor StringConcat(Tensor X, Tensor Y) + { + var _tensor = Native.ortki_StringConcat(X, Y); + return _tensor; + } + public static Tensor StringNormalizer(Tensor X, string case_change_action, long is_case_sensitive, string locale, string[] stopwords) { var _tensor = Native.ortki_StringNormalizer(X, case_change_action, is_case_sensitive, locale, stopwords, (nuint)stopwords.Length); return _tensor; } + public static Tensor[] StringSplit(Tensor X, string delimiter, long maxsplit) + { + var _tensor = Native.ortki_StringSplit(X, delimiter, maxsplit); + return _tensor.ToTensorArray(); + } + public static Tensor Sub(Tensor A, Tensor B) { var _tensor = Native.ortki_Sub(A, B); @@ -1054,9 +1144,9 @@ public static Tensor Imputer(Tensor X, float[] imputed_value_floats, long[] impu return _tensor; } - public static Tensor LabelEncoder(Tensor X, float default_float, long default_int64, string default_string, float[] keys_floats, long[] keys_int64s, string[] keys_strings, float[] values_floats, long[] values_int64s, string[] values_strings) + public static Tensor LabelEncoder(Tensor X, float default_float, long default_int64, string default_string, Tensor default_tensor, float[] keys_floats, long[] keys_int64s, string[] keys_strings, Tensor keys_tensor, float[] values_floats, long[] values_int64s, string[] values_strings, Tensor values_tensor) { - var _tensor = Native.ortki_LabelEncoder(X, default_float, default_int64, default_string, keys_floats, (nuint)keys_floats.Length, keys_int64s, (nuint)keys_int64s.Length, keys_strings, (nuint)keys_strings.Length, values_floats, (nuint)values_floats.Length, values_int64s, (nuint)values_int64s.Length, values_strings, (nuint)values_strings.Length); + var _tensor = Native.ortki_LabelEncoder(X, default_float, default_int64, default_string, default_tensor, keys_floats, (nuint)keys_floats.Length, keys_int64s, (nuint)keys_int64s.Length, keys_strings, (nuint)keys_strings.Length, keys_tensor, values_floats, (nuint)values_floats.Length, values_int64s, (nuint)values_int64s.Length, values_strings, (nuint)values_strings.Length, values_tensor); return _tensor; } diff --git a/conanfile.py b/conanfile.py index 569c1f8..2218d15 100644 --- a/conanfile.py +++ b/conanfile.py @@ -15,14 +15,14 @@ from conan import ConanFile from conan.tools.build import check_min_cppstd -from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.env import VirtualBuildEnv, VirtualRunEnv class ortkiConan(ConanFile): name = "ortki" url = "https://github.com/kendryte/OrtKI" settings = "os", "compiler", "build_type", "arch" - generators = "CMakeToolchain", "CMakeDeps" exports_sources = ["include/*", "src/*", "CMakeLists.txt"] options = { "shared": [True, False], @@ -34,7 +34,7 @@ class ortkiConan(ConanFile): } def requirements(self): - self.requires("onnxruntime/1.14.1") + self.requires("onnxruntime/1.18.1") pass def build_requirements(self): @@ -47,6 +47,10 @@ def generate(self): tc = CMakeToolchain(self) tc.variables["BUILD_SHARED_LIBS"] = self.options.shared tc.generate() + deps = CMakeDeps(self) + deps.generate() + env = VirtualBuildEnv(self) + env.generate() def configure(self): min_cppstd = "17" diff --git a/include/common.h b/include/common.h index 0055e52..ffbe901 100644 --- a/include/common.h +++ b/include/common.h @@ -6,7 +6,7 @@ namespace ortki { // https://onnxruntime.ai/docs/reference/compatibility.html // ortki/onnxruntime/VERSION_NUMBER -#define DEFAULT_OPSET 16 +#define DEFAULT_OPSET 21 #ifdef _WIN32 #define ORTKI_API(ret) extern "C" __declspec(dllexport) ret diff --git a/include/operators.h b/include/operators.h index 3a76eac..f94a908 100644 --- a/include/operators.h +++ b/include/operators.h @@ -5,6 +5,7 @@ ORTKI_API(ortki::OrtKITensor *) ortki_Abs(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Acos(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Acosh(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Add(ortki::OrtKITensor * A, ortki::OrtKITensor * B); +ORTKI_API(ortki::OrtKITensor *) ortki_AffineGrid(ortki::OrtKITensor * theta, ortki::OrtKITensor * size, int64_t align_corners); ORTKI_API(ortki::OrtKITensor *) ortki_And(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_ArgMax(ortki::OrtKITensor * data, int64_t axis, int64_t keepdims, int64_t select_last_index); ORTKI_API(ortki::OrtKITensor *) ortki_ArgMin(ortki::OrtKITensor * data, int64_t axis, int64_t keepdims, int64_t select_last_index); @@ -12,15 +13,21 @@ ORTKI_API(ortki::OrtKITensor *) ortki_Asin(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Asinh(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Atan(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Atanh(ortki::OrtKITensor * input); -ORTKI_API(ortki::OrtKITensor *) ortki_AveragePool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t count_include_pad, int64_t* kernel_shape, size_t kernel_shape_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); +ORTKI_API(ortki::OrtKITensor *) ortki_AveragePool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t count_include_pad, int64_t* dilations, size_t dilations_size, int64_t* kernel_shape, size_t kernel_shape_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); ORTKI_API(ortki::OrtKITensor *) ortki_Bernoulli(ortki::OrtKITensor * input, int64_t dtype, float seed); ORTKI_API(ortki::OrtKITensor *) ortki_BitShift(ortki::OrtKITensor * X, ortki::OrtKITensor * Y, const char* direction); +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseAnd(ortki::OrtKITensor * A, ortki::OrtKITensor * B); +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseNot(ortki::OrtKITensor * X); +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseOr(ortki::OrtKITensor * A, ortki::OrtKITensor * B); +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseXor(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_BlackmanWindow(ortki::OrtKITensor * size, int64_t output_datatype, int64_t periodic); -ORTKI_API(ortki::OrtKITensor *) ortki_Cast(ortki::OrtKITensor * input, int64_t to); -ORTKI_API(ortki::OrtKITensor *) ortki_CastLike(ortki::OrtKITensor * input, ortki::OrtKITensor * target_type); +ORTKI_API(ortki::OrtKITensor *) ortki_Cast(ortki::OrtKITensor * input, int64_t saturate, int64_t to); +ORTKI_API(ortki::OrtKITensor *) ortki_CastLike(ortki::OrtKITensor * input, ortki::OrtKITensor * target_type, int64_t saturate); ORTKI_API(ortki::OrtKITensor *) ortki_Ceil(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Celu(ortki::OrtKITensor * X, float alpha); +ORTKI_API(ortki::OrtKITensor *) ortki_CenterCropPad(ortki::OrtKITensor * input_data, ortki::OrtKITensor * shape, int64_t* axes, size_t axes_size); ORTKI_API(ortki::OrtKITensor *) ortki_Clip(ortki::OrtKITensor * input, ortki::OrtKITensor * min, ortki::OrtKITensor * max); +ORTKI_API(ortki::OrtKITensor *) ortki_Col2Im(ortki::OrtKITensor * input, ortki::OrtKITensor * image_shape, ortki::OrtKITensor * block_shape, int64_t* dilations, size_t dilations_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); ORTKI_API(ortki::OrtKITensor *) ortki_Compress(ortki::OrtKITensor * input, ortki::OrtKITensor * condition, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_Concat(ortki::OrtKITensor ** inputs, size_t input_size, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_ConcatFromSequence(ortki::OrtKITensor ** input_sequence, size_t input_size, int64_t axis, int64_t new_axis); @@ -30,7 +37,8 @@ ORTKI_API(ortki::OrtKITensor *) ortki_ConvTranspose(ortki::OrtKITensor * X, ortk ORTKI_API(ortki::OrtKITensor *) ortki_Cos(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Cosh(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_CumSum(ortki::OrtKITensor * x, ortki::OrtKITensor * axis, int64_t exclusive, int64_t reverse); -ORTKI_API(ortki::OrtKITensor *) ortki_DFT(ortki::OrtKITensor * input, ortki::OrtKITensor * dft_length, int64_t axis, int64_t inverse, int64_t onesided); +ORTKI_API(ortki::OrtKITensor *) ortki_DFT(ortki::OrtKITensor * input, ortki::OrtKITensor * dft_length, ortki::OrtKITensor * axis, int64_t inverse, int64_t onesided); +ORTKI_API(ortki::OrtKITensor *) ortki_DeformConv(ortki::OrtKITensor * X, ortki::OrtKITensor * W, ortki::OrtKITensor * offset, ortki::OrtKITensor * B, ortki::OrtKITensor * mask, int64_t* dilations, size_t dilations_size, int64_t group, int64_t* kernel_shape, size_t kernel_shape_size, int64_t offset_group, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); ORTKI_API(ortki::OrtKITensor *) ortki_DepthToSpace(ortki::OrtKITensor * input, int64_t blocksize, const char* mode); ORTKI_API(ortki::OrtKITensor *) ortki_DequantizeLinear(ortki::OrtKITensor * x, ortki::OrtKITensor * x_scale, ortki::OrtKITensor * x_zero_point, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_Det(ortki::OrtKITensor * X); @@ -50,6 +58,7 @@ ORTKI_API(ortki::OrtKITensorSeq *) ortki_GRU(ortki::OrtKITensor * X, ortki::OrtK ORTKI_API(ortki::OrtKITensor *) ortki_Gather(ortki::OrtKITensor * data, ortki::OrtKITensor * indices, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_GatherElements(ortki::OrtKITensor * data, ortki::OrtKITensor * indices, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_GatherND(ortki::OrtKITensor * data, ortki::OrtKITensor * indices, int64_t batch_dims); +ORTKI_API(ortki::OrtKITensor *) ortki_Gelu(ortki::OrtKITensor * X, const char* approximate); ORTKI_API(ortki::OrtKITensor *) ortki_Gemm(ortki::OrtKITensor * A, ortki::OrtKITensor * B, ortki::OrtKITensor * C, float alpha, float beta, int64_t transA, int64_t transB); ORTKI_API(ortki::OrtKITensor *) ortki_GlobalAveragePool(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_GlobalLpPool(ortki::OrtKITensor * X, int64_t p); @@ -57,12 +66,14 @@ ORTKI_API(ortki::OrtKITensor *) ortki_GlobalMaxPool(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Greater(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_GreaterOrEqual(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_GridSample(ortki::OrtKITensor * X, ortki::OrtKITensor * grid, int64_t align_corners, const char* mode, const char* padding_mode); +ORTKI_API(ortki::OrtKITensor *) ortki_GroupNormalization(ortki::OrtKITensor * X, ortki::OrtKITensor * scale, ortki::OrtKITensor * bias, float epsilon, int64_t num_groups); ORTKI_API(ortki::OrtKITensor *) ortki_HammingWindow(ortki::OrtKITensor * size, int64_t output_datatype, int64_t periodic); ORTKI_API(ortki::OrtKITensor *) ortki_HannWindow(ortki::OrtKITensor * size, int64_t output_datatype, int64_t periodic); ORTKI_API(ortki::OrtKITensor *) ortki_HardSigmoid(ortki::OrtKITensor * X, float alpha, float beta); ORTKI_API(ortki::OrtKITensor *) ortki_HardSwish(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Hardmax(ortki::OrtKITensor * input, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_Identity(ortki::OrtKITensor * input); +ORTKI_API(ortki::OrtKITensor *) ortki_ImageDecoder(ortki::OrtKITensor * encoded_stream, const char* pixel_format); ORTKI_API(ortki::OrtKITensor *) ortki_InstanceNormalization(ortki::OrtKITensor * input, ortki::OrtKITensor * scale, ortki::OrtKITensor * B, float epsilon); ORTKI_API(ortki::OrtKITensor *) ortki_IsInf(ortki::OrtKITensor * X, int64_t detect_negative, int64_t detect_positive); ORTKI_API(ortki::OrtKITensor *) ortki_IsNaN(ortki::OrtKITensor * X); @@ -74,7 +85,7 @@ ORTKI_API(ortki::OrtKITensor *) ortki_LessOrEqual(ortki::OrtKITensor * A, ortki: ORTKI_API(ortki::OrtKITensor *) ortki_Log(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_LogSoftmax(ortki::OrtKITensor * input, int64_t axis); ORTKI_API(ortki::OrtKITensor *) ortki_LpNormalization(ortki::OrtKITensor * input, int64_t axis, int64_t p); -ORTKI_API(ortki::OrtKITensor *) ortki_LpPool(ortki::OrtKITensor * X, const char* auto_pad, int64_t* kernel_shape, size_t kernel_shape_size, int64_t p, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); +ORTKI_API(ortki::OrtKITensor *) ortki_LpPool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t* dilations, size_t dilations_size, int64_t* kernel_shape, size_t kernel_shape_size, int64_t p, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); ORTKI_API(ortki::OrtKITensor *) ortki_MatMul(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_MatMulInteger(ortki::OrtKITensor * A, ortki::OrtKITensor * B, ortki::OrtKITensor * a_zero_point, ortki::OrtKITensor * b_zero_point); ORTKI_API(ortki::OrtKITensor *) ortki_Max(ortki::OrtKITensor ** data_0, size_t input_size); @@ -85,6 +96,7 @@ ORTKI_API(ortki::OrtKITensor *) ortki_Mean(ortki::OrtKITensor ** data_0, size_t ORTKI_API(ortki::OrtKITensor *) ortki_MeanVarianceNormalization(ortki::OrtKITensor * X, int64_t* axes, size_t axes_size); ORTKI_API(ortki::OrtKITensor *) ortki_MelWeightMatrix(ortki::OrtKITensor * num_mel_bins, ortki::OrtKITensor * dft_length, ortki::OrtKITensor * sample_rate, ortki::OrtKITensor * lower_edge_hertz, ortki::OrtKITensor * upper_edge_hertz, int64_t output_datatype); ORTKI_API(ortki::OrtKITensor *) ortki_Min(ortki::OrtKITensor ** data_0, size_t input_size); +ORTKI_API(ortki::OrtKITensor *) ortki_Mish(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Mod(ortki::OrtKITensor * A, ortki::OrtKITensor * B, int64_t fmod); ORTKI_API(ortki::OrtKITensor *) ortki_Mul(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_Multinomial(ortki::OrtKITensor * input, int64_t dtype, int64_t sample_size, float seed); @@ -98,11 +110,11 @@ ORTKI_API(ortki::OrtKITensor *) ortki_OptionalGetElement(ortki::OrtKITensor * in ORTKI_API(ortki::OrtKITensor *) ortki_OptionalHasElement(ortki::OrtKITensor * input); ORTKI_API(ortki::OrtKITensor *) ortki_Or(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_PRelu(ortki::OrtKITensor * X, ortki::OrtKITensor * slope); -ORTKI_API(ortki::OrtKITensor *) ortki_Pad(ortki::OrtKITensor * data, ortki::OrtKITensor * pads, ortki::OrtKITensor * constant_value, const char* mode); +ORTKI_API(ortki::OrtKITensor *) ortki_Pad(ortki::OrtKITensor * data, ortki::OrtKITensor * pads, ortki::OrtKITensor * constant_value, ortki::OrtKITensor * axes, const char* mode); ORTKI_API(ortki::OrtKITensor *) ortki_Pow(ortki::OrtKITensor * X, ortki::OrtKITensor * Y); ORTKI_API(ortki::OrtKITensor *) ortki_QLinearConv(ortki::OrtKITensor * x, ortki::OrtKITensor * x_scale, ortki::OrtKITensor * x_zero_point, ortki::OrtKITensor * w, ortki::OrtKITensor * w_scale, ortki::OrtKITensor * w_zero_point, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point, ortki::OrtKITensor * B, const char* auto_pad, int64_t* dilations, size_t dilations_size, int64_t group, int64_t* kernel_shape, size_t kernel_shape_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size); ORTKI_API(ortki::OrtKITensor *) ortki_QLinearMatMul(ortki::OrtKITensor * a, ortki::OrtKITensor * a_scale, ortki::OrtKITensor * a_zero_point, ortki::OrtKITensor * b, ortki::OrtKITensor * b_scale, ortki::OrtKITensor * b_zero_point, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point); -ORTKI_API(ortki::OrtKITensor *) ortki_QuantizeLinear(ortki::OrtKITensor * x, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point, int64_t axis); +ORTKI_API(ortki::OrtKITensor *) ortki_QuantizeLinear(ortki::OrtKITensor * x, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point, int64_t axis, int64_t saturate); ORTKI_API(ortki::OrtKITensorSeq *) ortki_RNN(ortki::OrtKITensor * X, ortki::OrtKITensor * W, ortki::OrtKITensor * R, ortki::OrtKITensor * B, ortki::OrtKITensor * sequence_lens, ortki::OrtKITensor * initial_h, float* activation_alpha, size_t activation_alpha_size, float* activation_beta, size_t activation_beta_size, const char** activations, size_t activations_size, float clip, const char* direction, int64_t hidden_size, int64_t layout); ORTKI_API(ortki::OrtKITensor *) ortki_RandomNormal(int64_t dtype, float mean, float scale, float seed, int64_t* shape, size_t shape_size); ORTKI_API(ortki::OrtKITensor *) ortki_RandomNormalLike(ortki::OrtKITensor * input, int64_t dtype, float mean, float scale, float seed); @@ -110,16 +122,17 @@ ORTKI_API(ortki::OrtKITensor *) ortki_RandomUniform(int64_t dtype, float high, f ORTKI_API(ortki::OrtKITensor *) ortki_RandomUniformLike(ortki::OrtKITensor * input, int64_t dtype, float high, float low, float seed); ORTKI_API(ortki::OrtKITensor *) ortki_Range(ortki::OrtKITensor * start, ortki::OrtKITensor * limit, ortki::OrtKITensor * delta); ORTKI_API(ortki::OrtKITensor *) ortki_Reciprocal(ortki::OrtKITensor * X); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL1(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL2(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSum(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSumExp(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMax(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMean(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMin(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceProd(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL1(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL2(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSum(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSumExp(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMax(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMean(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMin(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceProd(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); ORTKI_API(ortki::OrtKITensor *) ortki_ReduceSum(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceSumSquare(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims); +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceSumSquare(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes); +ORTKI_API(ortki::OrtKITensor *) ortki_RegexFullMatch(ortki::OrtKITensor * X, const char* pattern); ORTKI_API(ortki::OrtKITensor *) ortki_Relu(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Reshape(ortki::OrtKITensor * data, ortki::OrtKITensor * shape, int64_t allowzero); ORTKI_API(ortki::OrtKITensor *) ortki_ReverseSequence(ortki::OrtKITensor * input, ortki::OrtKITensor * sequence_lens, int64_t batch_axis, int64_t time_axis); @@ -152,7 +165,9 @@ ORTKI_API(ortki::OrtKITensor *) ortki_SpaceToDepth(ortki::OrtKITensor * input, i ORTKI_API(ortki::OrtKITensor *) ortki_SplitToSequence(ortki::OrtKITensor * input, ortki::OrtKITensor * split, int64_t axis, int64_t keepdims); ORTKI_API(ortki::OrtKITensor *) ortki_Sqrt(ortki::OrtKITensor * X); ORTKI_API(ortki::OrtKITensor *) ortki_Squeeze(ortki::OrtKITensor * data, ortki::OrtKITensor * axes); +ORTKI_API(ortki::OrtKITensor *) ortki_StringConcat(ortki::OrtKITensor * X, ortki::OrtKITensor * Y); ORTKI_API(ortki::OrtKITensor *) ortki_StringNormalizer(ortki::OrtKITensor * X, const char* case_change_action, int64_t is_case_sensitive, const char* locale, const char** stopwords, size_t stopwords_size); +ORTKI_API(ortki::OrtKITensorSeq *) ortki_StringSplit(ortki::OrtKITensor * X, const char* delimiter, int64_t maxsplit); ORTKI_API(ortki::OrtKITensor *) ortki_Sub(ortki::OrtKITensor * A, ortki::OrtKITensor * B); ORTKI_API(ortki::OrtKITensor *) ortki_Sum(ortki::OrtKITensor ** data_0, size_t input_size); ORTKI_API(ortki::OrtKITensor *) ortki_Tan(ortki::OrtKITensor * input); @@ -174,7 +189,7 @@ ORTKI_API(ortki::OrtKITensor *) ortki_CategoryMapper(ortki::OrtKITensor * X, int ORTKI_API(ortki::OrtKITensor *) ortki_DictVectorizer(ortki::OrtKITensor * X, int64_t* int64_vocabulary, size_t int64_vocabulary_size, const char** string_vocabulary, size_t string_vocabulary_size); ORTKI_API(ortki::OrtKITensor *) ortki_FeatureVectorizer(ortki::OrtKITensor ** X, size_t input_size, int64_t* inputdimensions, size_t inputdimensions_size); ORTKI_API(ortki::OrtKITensor *) ortki_Imputer(ortki::OrtKITensor * X, float* imputed_value_floats, size_t imputed_value_floats_size, int64_t* imputed_value_int64s, size_t imputed_value_int64s_size, float replaced_value_float, int64_t replaced_value_int64); -ORTKI_API(ortki::OrtKITensor *) ortki_LabelEncoder(ortki::OrtKITensor * X, float default_float, int64_t default_int64, const char* default_string, float* keys_floats, size_t keys_floats_size, int64_t* keys_int64s, size_t keys_int64s_size, const char** keys_strings, size_t keys_strings_size, float* values_floats, size_t values_floats_size, int64_t* values_int64s, size_t values_int64s_size, const char** values_strings, size_t values_strings_size); +ORTKI_API(ortki::OrtKITensor *) ortki_LabelEncoder(ortki::OrtKITensor * X, float default_float, int64_t default_int64, const char* default_string, ortki::OrtKITensor * default_tensor, float* keys_floats, size_t keys_floats_size, int64_t* keys_int64s, size_t keys_int64s_size, const char** keys_strings, size_t keys_strings_size, ortki::OrtKITensor * keys_tensor, float* values_floats, size_t values_floats_size, int64_t* values_int64s, size_t values_int64s_size, const char** values_strings, size_t values_strings_size, ortki::OrtKITensor * values_tensor); ORTKI_API(ortki::OrtKITensorSeq *) ortki_LinearClassifier(ortki::OrtKITensor * X, int64_t* classlabels_ints, size_t classlabels_ints_size, const char** classlabels_strings, size_t classlabels_strings_size, float* coefficients, size_t coefficients_size, float* intercepts, size_t intercepts_size, int64_t multi_class, const char* post_transform); ORTKI_API(ortki::OrtKITensor *) ortki_LinearRegressor(ortki::OrtKITensor * X, float* coefficients, size_t coefficients_size, float* intercepts, size_t intercepts_size, const char* post_transform, int64_t targets); ORTKI_API(ortki::OrtKITensor *) ortki_Normalizer(ortki::OrtKITensor * X, const char* norm); diff --git a/src/c_api.cpp b/src/c_api.cpp index 51bb61e..12aba8b 100644 --- a/src/c_api.cpp +++ b/src/c_api.cpp @@ -67,7 +67,7 @@ ortki::OpExecutor* make_op_executor(const char* name) // onnxruntime::Tensor don't support directly type cast OrtKITensor* tensor_to_type(OrtKITensor* tensor, DataType dataType) { - return ortki_Cast(tensor, dataType); + return ortki_Cast(tensor, 1, dataType); } void tensor_reshape(ortki::OrtKITensor* tensor, int64_t* shape, size_t size) diff --git a/src/operators.cpp b/src/operators.cpp index 05fd02d..07066e6 100644 --- a/src/operators.cpp +++ b/src/operators.cpp @@ -35,6 +35,15 @@ Add.AddInput("B", B); return new ortki::OrtKITensor(Add.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_AffineGrid(ortki::OrtKITensor * theta, ortki::OrtKITensor * size, int64_t align_corners) +{ +ortki::OpExecutor AffineGrid("AffineGrid"); +AffineGrid.AddInput("theta", theta); +AffineGrid.AddInput("size", size); +AffineGrid.AddAttribute("align_corners", align_corners); +return new ortki::OrtKITensor(AffineGrid.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_And(ortki::OrtKITensor * A, ortki::OrtKITensor * B) { ortki::OpExecutor And("And"); @@ -96,13 +105,14 @@ Atanh.AddInput("input", input); return new ortki::OrtKITensor(Atanh.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_AveragePool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t count_include_pad, int64_t* kernel_shape, size_t kernel_shape_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) +ORTKI_API(ortki::OrtKITensor *) ortki_AveragePool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t count_include_pad, int64_t* dilations, size_t dilations_size, int64_t* kernel_shape, size_t kernel_shape_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) { ortki::OpExecutor AveragePool("AveragePool"); AveragePool.AddInput("X", X); AveragePool.AddAttribute("auto_pad", auto_pad); AveragePool.AddAttribute("ceil_mode", ceil_mode); AveragePool.AddAttribute("count_include_pad", count_include_pad); +AveragePool.AddAttribute("dilations", ortki::ToVector(dilations, dilations_size)); AveragePool.AddAttribute("kernel_shape", ortki::ToVector(kernel_shape, kernel_shape_size)); AveragePool.AddAttribute("pads", ortki::ToVector(pads, pads_size)); AveragePool.AddAttribute("strides", ortki::ToVector(strides, strides_size)); @@ -127,6 +137,41 @@ BitShift.AddAttribute("direction", direction); return new ortki::OrtKITensor(BitShift.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseAnd(ortki::OrtKITensor * A, ortki::OrtKITensor * B) +{ +ortki::OpExecutor BitwiseAnd("BitwiseAnd"); +BitwiseAnd.AddInput("A", A); +BitwiseAnd.AddInput("B", B); + +return new ortki::OrtKITensor(BitwiseAnd.Run()[0]); +} + +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseNot(ortki::OrtKITensor * X) +{ +ortki::OpExecutor BitwiseNot("BitwiseNot"); +BitwiseNot.AddInput("X", X); + +return new ortki::OrtKITensor(BitwiseNot.Run()[0]); +} + +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseOr(ortki::OrtKITensor * A, ortki::OrtKITensor * B) +{ +ortki::OpExecutor BitwiseOr("BitwiseOr"); +BitwiseOr.AddInput("A", A); +BitwiseOr.AddInput("B", B); + +return new ortki::OrtKITensor(BitwiseOr.Run()[0]); +} + +ORTKI_API(ortki::OrtKITensor *) ortki_BitwiseXor(ortki::OrtKITensor * A, ortki::OrtKITensor * B) +{ +ortki::OpExecutor BitwiseXor("BitwiseXor"); +BitwiseXor.AddInput("A", A); +BitwiseXor.AddInput("B", B); + +return new ortki::OrtKITensor(BitwiseXor.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_BlackmanWindow(ortki::OrtKITensor * size, int64_t output_datatype, int64_t periodic) { ortki::OpExecutor BlackmanWindow("BlackmanWindow"); @@ -136,20 +181,21 @@ BlackmanWindow.AddAttribute("periodic", periodic); return new ortki::OrtKITensor(BlackmanWindow.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_Cast(ortki::OrtKITensor * input, int64_t to) +ORTKI_API(ortki::OrtKITensor *) ortki_Cast(ortki::OrtKITensor * input, int64_t saturate, int64_t to) { ortki::OpExecutor Cast("Cast"); Cast.AddInput("input", input); +Cast.AddAttribute("saturate", saturate); Cast.AddAttribute("to", to); return new ortki::OrtKITensor(Cast.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_CastLike(ortki::OrtKITensor * input, ortki::OrtKITensor * target_type) +ORTKI_API(ortki::OrtKITensor *) ortki_CastLike(ortki::OrtKITensor * input, ortki::OrtKITensor * target_type, int64_t saturate) { ortki::OpExecutor CastLike("CastLike"); CastLike.AddInput("input", input); CastLike.AddInput("target_type", target_type); - +CastLike.AddAttribute("saturate", saturate); return new ortki::OrtKITensor(CastLike.Run()[0]); } @@ -169,6 +215,15 @@ Celu.AddAttribute("alpha", alpha); return new ortki::OrtKITensor(Celu.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_CenterCropPad(ortki::OrtKITensor * input_data, ortki::OrtKITensor * shape, int64_t* axes, size_t axes_size) +{ +ortki::OpExecutor CenterCropPad("CenterCropPad"); +CenterCropPad.AddInput("input_data", input_data); +CenterCropPad.AddInput("shape", shape); +CenterCropPad.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +return new ortki::OrtKITensor(CenterCropPad.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_Clip(ortki::OrtKITensor * input, ortki::OrtKITensor * min, ortki::OrtKITensor * max) { ortki::OpExecutor Clip("Clip"); @@ -179,6 +234,18 @@ Clip.AddInput("max", max); return new ortki::OrtKITensor(Clip.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_Col2Im(ortki::OrtKITensor * input, ortki::OrtKITensor * image_shape, ortki::OrtKITensor * block_shape, int64_t* dilations, size_t dilations_size, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) +{ +ortki::OpExecutor Col2Im("Col2Im"); +Col2Im.AddInput("input", input); +Col2Im.AddInput("image_shape", image_shape); +Col2Im.AddInput("block_shape", block_shape); +Col2Im.AddAttribute("dilations", ortki::ToVector(dilations, dilations_size)); +Col2Im.AddAttribute("pads", ortki::ToVector(pads, pads_size)); +Col2Im.AddAttribute("strides", ortki::ToVector(strides, strides_size)); +return new ortki::OrtKITensor(Col2Im.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_Compress(ortki::OrtKITensor * input, ortki::OrtKITensor * condition, int64_t axis) { ortki::OpExecutor Compress("Compress"); @@ -283,17 +350,34 @@ CumSum.AddAttribute("reverse", reverse); return new ortki::OrtKITensor(CumSum.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_DFT(ortki::OrtKITensor * input, ortki::OrtKITensor * dft_length, int64_t axis, int64_t inverse, int64_t onesided) +ORTKI_API(ortki::OrtKITensor *) ortki_DFT(ortki::OrtKITensor * input, ortki::OrtKITensor * dft_length, ortki::OrtKITensor * axis, int64_t inverse, int64_t onesided) { ortki::OpExecutor DFT("DFT"); DFT.AddInput("input", input); DFT.AddInput("dft_length", dft_length); -DFT.AddAttribute("axis", axis); +DFT.AddInput("axis", axis); DFT.AddAttribute("inverse", inverse); DFT.AddAttribute("onesided", onesided); return new ortki::OrtKITensor(DFT.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_DeformConv(ortki::OrtKITensor * X, ortki::OrtKITensor * W, ortki::OrtKITensor * offset, ortki::OrtKITensor * B, ortki::OrtKITensor * mask, int64_t* dilations, size_t dilations_size, int64_t group, int64_t* kernel_shape, size_t kernel_shape_size, int64_t offset_group, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) +{ +ortki::OpExecutor DeformConv("DeformConv"); +DeformConv.AddInput("X", X); +DeformConv.AddInput("W", W); +DeformConv.AddInput("offset", offset); +DeformConv.AddInput("B", B); +DeformConv.AddInput("mask", mask); +DeformConv.AddAttribute("dilations", ortki::ToVector(dilations, dilations_size)); +DeformConv.AddAttribute("group", group); +DeformConv.AddAttribute("kernel_shape", ortki::ToVector(kernel_shape, kernel_shape_size)); +DeformConv.AddAttribute("offset_group", offset_group); +DeformConv.AddAttribute("pads", ortki::ToVector(pads, pads_size)); +DeformConv.AddAttribute("strides", ortki::ToVector(strides, strides_size)); +return new ortki::OrtKITensor(DeformConv.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_DepthToSpace(ortki::OrtKITensor * input, int64_t blocksize, const char* mode) { ortki::OpExecutor DepthToSpace("DepthToSpace"); @@ -472,6 +556,14 @@ GatherND.AddAttribute("batch_dims", batch_dims); return new ortki::OrtKITensor(GatherND.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_Gelu(ortki::OrtKITensor * X, const char* approximate) +{ +ortki::OpExecutor Gelu("Gelu"); +Gelu.AddInput("X", X); +Gelu.AddAttribute("approximate", approximate); +return new ortki::OrtKITensor(Gelu.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_Gemm(ortki::OrtKITensor * A, ortki::OrtKITensor * B, ortki::OrtKITensor * C, float alpha, float beta, int64_t transA, int64_t transB) { ortki::OpExecutor Gemm("Gemm"); @@ -538,6 +630,17 @@ GridSample.AddAttribute("padding_mode", padding_mode); return new ortki::OrtKITensor(GridSample.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_GroupNormalization(ortki::OrtKITensor * X, ortki::OrtKITensor * scale, ortki::OrtKITensor * bias, float epsilon, int64_t num_groups) +{ +ortki::OpExecutor GroupNormalization("GroupNormalization"); +GroupNormalization.AddInput("X", X); +GroupNormalization.AddInput("scale", scale); +GroupNormalization.AddInput("bias", bias); +GroupNormalization.AddAttribute("epsilon", epsilon); +GroupNormalization.AddAttribute("num_groups", num_groups); +return new ortki::OrtKITensor(GroupNormalization.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_HammingWindow(ortki::OrtKITensor * size, int64_t output_datatype, int64_t periodic) { ortki::OpExecutor HammingWindow("HammingWindow"); @@ -589,6 +692,14 @@ Identity.AddInput("input", input); return new ortki::OrtKITensor(Identity.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_ImageDecoder(ortki::OrtKITensor * encoded_stream, const char* pixel_format) +{ +ortki::OpExecutor ImageDecoder("ImageDecoder"); +ImageDecoder.AddInput("encoded_stream", encoded_stream); +ImageDecoder.AddAttribute("pixel_format", pixel_format); +return new ortki::OrtKITensor(ImageDecoder.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_InstanceNormalization(ortki::OrtKITensor * input, ortki::OrtKITensor * scale, ortki::OrtKITensor * B, float epsilon) { ortki::OpExecutor InstanceNormalization("InstanceNormalization"); @@ -690,11 +801,13 @@ LpNormalization.AddAttribute("p", p); return new ortki::OrtKITensor(LpNormalization.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_LpPool(ortki::OrtKITensor * X, const char* auto_pad, int64_t* kernel_shape, size_t kernel_shape_size, int64_t p, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) +ORTKI_API(ortki::OrtKITensor *) ortki_LpPool(ortki::OrtKITensor * X, const char* auto_pad, int64_t ceil_mode, int64_t* dilations, size_t dilations_size, int64_t* kernel_shape, size_t kernel_shape_size, int64_t p, int64_t* pads, size_t pads_size, int64_t* strides, size_t strides_size) { ortki::OpExecutor LpPool("LpPool"); LpPool.AddInput("X", X); LpPool.AddAttribute("auto_pad", auto_pad); +LpPool.AddAttribute("ceil_mode", ceil_mode); +LpPool.AddAttribute("dilations", ortki::ToVector(dilations, dilations_size)); LpPool.AddAttribute("kernel_shape", ortki::ToVector(kernel_shape, kernel_shape_size)); LpPool.AddAttribute("p", p); LpPool.AddAttribute("pads", ortki::ToVector(pads, pads_size)); @@ -808,6 +921,14 @@ for(int i = 0; i < input_size; ++i) return new ortki::OrtKITensor(Min.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_Mish(ortki::OrtKITensor * X) +{ +ortki::OpExecutor Mish("Mish"); +Mish.AddInput("X", X); + +return new ortki::OrtKITensor(Mish.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_Mod(ortki::OrtKITensor * A, ortki::OrtKITensor * B, int64_t fmod) { ortki::OpExecutor Mod("Mod"); @@ -927,12 +1048,13 @@ PRelu.AddInput("slope", slope); return new ortki::OrtKITensor(PRelu.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_Pad(ortki::OrtKITensor * data, ortki::OrtKITensor * pads, ortki::OrtKITensor * constant_value, const char* mode) +ORTKI_API(ortki::OrtKITensor *) ortki_Pad(ortki::OrtKITensor * data, ortki::OrtKITensor * pads, ortki::OrtKITensor * constant_value, ortki::OrtKITensor * axes, const char* mode) { ortki::OpExecutor Pad("Pad"); Pad.AddInput("data", data); Pad.AddInput("pads", pads); Pad.AddInput("constant_value", constant_value); +Pad.AddInput("axes", axes); Pad.AddAttribute("mode", mode); return new ortki::OrtKITensor(Pad.Run()[0]); } @@ -982,13 +1104,14 @@ QLinearMatMul.AddInput("y_zero_point", y_zero_point); return new ortki::OrtKITensor(QLinearMatMul.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_QuantizeLinear(ortki::OrtKITensor * x, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point, int64_t axis) +ORTKI_API(ortki::OrtKITensor *) ortki_QuantizeLinear(ortki::OrtKITensor * x, ortki::OrtKITensor * y_scale, ortki::OrtKITensor * y_zero_point, int64_t axis, int64_t saturate) { ortki::OpExecutor QuantizeLinear("QuantizeLinear"); QuantizeLinear.AddInput("x", x); QuantizeLinear.AddInput("y_scale", y_scale); QuantizeLinear.AddInput("y_zero_point", y_zero_point); QuantizeLinear.AddAttribute("axis", axis); +QuantizeLinear.AddAttribute("saturate", saturate); return new ortki::OrtKITensor(QuantizeLinear.Run()[0]); } @@ -1075,75 +1198,83 @@ Reciprocal.AddInput("X", X); return new ortki::OrtKITensor(Reciprocal.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL1(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL1(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceL1("ReduceL1"); ReduceL1.AddInput("data", data); -ReduceL1.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceL1.AddInput("axes", axes); ReduceL1.AddAttribute("keepdims", keepdims); +ReduceL1.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceL1.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL2(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceL2(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceL2("ReduceL2"); ReduceL2.AddInput("data", data); -ReduceL2.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceL2.AddInput("axes", axes); ReduceL2.AddAttribute("keepdims", keepdims); +ReduceL2.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceL2.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSum(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSum(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceLogSum("ReduceLogSum"); ReduceLogSum.AddInput("data", data); -ReduceLogSum.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceLogSum.AddInput("axes", axes); ReduceLogSum.AddAttribute("keepdims", keepdims); +ReduceLogSum.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceLogSum.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSumExp(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceLogSumExp(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceLogSumExp("ReduceLogSumExp"); ReduceLogSumExp.AddInput("data", data); -ReduceLogSumExp.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceLogSumExp.AddInput("axes", axes); ReduceLogSumExp.AddAttribute("keepdims", keepdims); +ReduceLogSumExp.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceLogSumExp.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMax(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMax(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceMax("ReduceMax"); ReduceMax.AddInput("data", data); -ReduceMax.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceMax.AddInput("axes", axes); ReduceMax.AddAttribute("keepdims", keepdims); +ReduceMax.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceMax.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMean(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMean(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceMean("ReduceMean"); ReduceMean.AddInput("data", data); -ReduceMean.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceMean.AddInput("axes", axes); ReduceMean.AddAttribute("keepdims", keepdims); +ReduceMean.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceMean.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMin(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceMin(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceMin("ReduceMin"); ReduceMin.AddInput("data", data); -ReduceMin.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceMin.AddInput("axes", axes); ReduceMin.AddAttribute("keepdims", keepdims); +ReduceMin.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceMin.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceProd(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceProd(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceProd("ReduceProd"); ReduceProd.AddInput("data", data); -ReduceProd.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceProd.AddInput("axes", axes); ReduceProd.AddAttribute("keepdims", keepdims); +ReduceProd.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceProd.Run()[0]); } @@ -1157,15 +1288,24 @@ ReduceSum.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceSum.Run()[0]); } -ORTKI_API(ortki::OrtKITensor *) ortki_ReduceSumSquare(ortki::OrtKITensor * data, int64_t* axes, size_t axes_size, int64_t keepdims) +ORTKI_API(ortki::OrtKITensor *) ortki_ReduceSumSquare(ortki::OrtKITensor * data, ortki::OrtKITensor * axes, int64_t keepdims, int64_t noop_with_empty_axes) { ortki::OpExecutor ReduceSumSquare("ReduceSumSquare"); ReduceSumSquare.AddInput("data", data); -ReduceSumSquare.AddAttribute("axes", ortki::ToVector(axes, axes_size)); +ReduceSumSquare.AddInput("axes", axes); ReduceSumSquare.AddAttribute("keepdims", keepdims); +ReduceSumSquare.AddAttribute("noop_with_empty_axes", noop_with_empty_axes); return new ortki::OrtKITensor(ReduceSumSquare.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_RegexFullMatch(ortki::OrtKITensor * X, const char* pattern) +{ +ortki::OpExecutor RegexFullMatch("RegexFullMatch"); +RegexFullMatch.AddInput("X", X); +RegexFullMatch.AddAttribute("pattern", pattern); +return new ortki::OrtKITensor(RegexFullMatch.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_Relu(ortki::OrtKITensor * X) { ortki::OpExecutor Relu("Relu"); @@ -1469,6 +1609,15 @@ Squeeze.AddInput("axes", axes); return new ortki::OrtKITensor(Squeeze.Run()[0]); } +ORTKI_API(ortki::OrtKITensor *) ortki_StringConcat(ortki::OrtKITensor * X, ortki::OrtKITensor * Y) +{ +ortki::OpExecutor StringConcat("StringConcat"); +StringConcat.AddInput("X", X); +StringConcat.AddInput("Y", Y); + +return new ortki::OrtKITensor(StringConcat.Run()[0]); +} + ORTKI_API(ortki::OrtKITensor *) ortki_StringNormalizer(ortki::OrtKITensor * X, const char* case_change_action, int64_t is_case_sensitive, const char* locale, const char** stopwords, size_t stopwords_size) { ortki::OpExecutor StringNormalizer("StringNormalizer"); @@ -1480,6 +1629,15 @@ StringNormalizer.AddAttribute("stopwords", ortki::ToVector(keys_strings, keys_strings_size)); +LabelEncoder.AddAttribute("keys_tensor", ortki::ToTensor(keys_tensor)); LabelEncoder.AddAttribute("values_floats", ortki::ToVector(values_floats, values_floats_size)); LabelEncoder.AddAttribute("values_int64s", ortki::ToVector(values_int64s, values_int64s_size)); LabelEncoder.AddAttribute("values_strings", ortki::ToVector(values_strings, values_strings_size)); +LabelEncoder.AddAttribute("values_tensor", ortki::ToTensor(values_tensor)); return new ortki::OrtKITensor(LabelEncoder.Run()[0]); } diff --git a/tools/generator.py b/tools/generator.py index a2d1203..abc334f 100644 --- a/tools/generator.py +++ b/tools/generator.py @@ -394,7 +394,7 @@ def make_impl(self) -> str: def capi(schemas) -> str: with io.open(os.path.join('..', 'include', 'operators.h'), 'w+', newline='', encoding="utf-8") as f: s = decl - s += '#include "tensor.h"' + "\n" + s += '#include "c_api.h"' + "\n" s += '#include "operators_patch.h"' + "\n" s += "\n".join([CAPISRC(schema).gen_header() for schema in schemas]) f.write(s)