diff --git a/docs/ContribOperators.md b/docs/ContribOperators.md index 3153511330451..eecbc204f8b76 100644 --- a/docs/ContribOperators.md +++ b/docs/ContribOperators.md @@ -5,21 +5,37 @@ * com.microsoft * com.microsoft.AttnLSTM + * com.microsoft.CDist * com.microsoft.ConvTransposeWithDynamicPads * com.microsoft.CropAndResize + * com.microsoft.DequantizeLinear * com.microsoft.ExpandDims * com.microsoft.FusedConv * com.microsoft.FusedGemm * com.microsoft.GatherND + * com.microsoft.MatMulInteger16 * com.microsoft.MaxpoolWithMask * com.microsoft.MurmurHash3 * com.microsoft.Pad + * com.microsoft.QuantizeLinear * com.microsoft.Range * com.microsoft.ReduceSumInteger * com.microsoft.SampleOp * com.microsoft.Tokenizer * com.microsoft.Unique * com.microsoft.WordConvEmbedding + * experimental com.microsoft.Attention + * experimental com.microsoft.EmbedLayerNormalization + * experimental com.microsoft.Gelu + * experimental com.microsoft.SkipLayerNormalization +* com.microsoft.nchwc + * com.microsoft.nchwc.AveragePool + * com.microsoft.nchwc.Conv + * com.microsoft.nchwc.GlobalAveragePool + * com.microsoft.nchwc.GlobalMaxPool + * com.microsoft.nchwc.MaxPool + * com.microsoft.nchwc.ReorderInput + * com.microsoft.nchwc.ReorderOutput ## com.microsoft ### **com.microsoft.AttnLSTM** @@ -231,6 +247,43 @@ This version of the operator has been available since version 1 of the 'com.micr +### **com.microsoft.CDist** + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft' operator set. + +#### Attributes + +
+
metric : string
+
The distance metric to use. If a string, the distance function can be "braycurtis", "canberra", "chebyshev", "cityblock", "correlation", "cosine", "dice", "euclidean", "hamming", "jaccard", "jensenshannon", "kulsinski", "mahalanobis", "matching", "minkowski", "rogerstanimoto", "russellrao", "seuclidean", "sokalmichener", "sokalsneath", "sqeuclidean", "wminkowski", "yule".
+
+ +#### Inputs + +
+
A : T
+
2D matrix with shape (M,N)
+
B : T
+
2D matrix with shape (K,N)
+
+ +#### Outputs + +
+
C : T
+
A 2D Matrix that represents the distance between each pair of the two collections of inputs.
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(double)
+
Constrains input to only numeric types.
+
+ + ### **com.microsoft.ConvTransposeWithDynamicPads** #### Version @@ -334,6 +387,51 @@ This version of the operator has been available since version 1 of the 'com.micr +### **com.microsoft.DequantizeLinear** + + The linear dequantization operator. It consumes a quantized data, a scale, a zero point and computes the full precision data. + The dequantization formula is y = (x - x_zero_point) * x_scale. + Scale and zero point must have same shape. They must be either scalar (per tensor) or 1-D tensor (per 'axis'). + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft' operator set. + +#### Attributes + +
+
axis : int
+
The axis along which same quantization parameters are applied. It's optional.If it's not specified, it means per-tensor quantization and input 'x_scale' and 'x_zero_point' must be scalars.If it's specified, it means per 'axis' quantization and input 'x_scale' and 'x_zero_point' must be 1-D tensors.
+
+ +#### Inputs + +
+
x : T2
+
N-D quantized Input tensor to be de-quantized.
+
x_scale : T1
+
Scale for input 'x'. It could be a scalar or a 1-D tensor, which means a per-tensor or per-axis quantization.If it's a 1-D tensor, its number of elements should be equal to the dimension value of 'axis' dimension of input 'x'.
+
x_zero_point : T2
+
Zero point for input 'x'. It could be a scalar or a 1-D tensor, which means a per-tensor or per-axis quantization.If it's a 1-D tensor, its number of elements should be equal to the dimension value of 'axis' dimension of input 'x'.
+
+ +#### Outputs + +
+
y : T1
+
N-D full precision output tensor. It has same shape as input 'x'.
+
+ +#### Type Constraints + +
+
T1 : tensor(float)
+
Constrain 'y', 'x_scale' to float tensors.
+
T2 : tensor(int8), tensor(uint8)
+
Constrain 'x_zero_point' and 'x' to 8-bit integer tensors.
+
+ + ### **com.microsoft.ExpandDims** ExpandDims echo operator. @@ -380,7 +478,7 @@ This version of the operator has been available since version 1 of the 'com.micr
activation : string
-
alpha : float
+
activation_params : list of floats
auto_pad : string
@@ -525,6 +623,43 @@ This version of the operator has been available since version 1 of the 'com.micr
+### **com.microsoft.MatMulInteger16** + + Matrix product that behaves like numpy.matmul: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.matmul.html. + The production MUST never overflow. The accumulation may overflow if and only if in 32 bits. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft' operator set. + +#### Inputs + +
+
A : T1
+
N-dimensional matrix A
+
B : T2
+
N-dimensional matrix B
+
+ +#### Outputs + +
+
Y : T3
+
Matrix multiply results from A * B
+
+ +#### Type Constraints + +
+
T1 : tensor(int16), tensor(uint16)
+
Constrain input A data types as 16-bit integer tensor
+
T2 : tensor(int16), tensor(uint16)
+
Constrain input B data types as 16-bit integer tensor
+
T3 : tensor(int32), tensor(uint32)
+
Constrain output Y data types as 32-bit integer tensor.T3 must be tensor(uint32) when both T1 and T2 are tensor(uint16),or must be tensor(int32) when either T1 or T2 is tensor(int16).
+
+ + ### **com.microsoft.MaxpoolWithMask** For internal use. @@ -670,6 +805,51 @@ This version of the operator has been available since version 1 of the 'com.micr +### **com.microsoft.QuantizeLinear** + + The linear quantization operator. It consumes a full precision data, a scale, a zero point and computes the quantized data. + The quantization formula is y = (x / y_scale) + y_zero_point. For (x / y_scale), it computes the nearest integer value to arg (in floating-point format), + rounding halfway cases away from zero. Scale and zero point must have same shape. They must be either scalar (per tensor) or 1-D tensor (per 'axis'). + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft' operator set. + +#### Attributes + +
+
axis : int
+
The axis along which same quantization parameters are applied. It's optional.If it's not specified, it means per-tensor quantization and input 'x_scale' and 'x_zero_point' must be scalars.If it's specified, it means per 'axis' quantization and input 'x_scale' and 'x_zero_point' must be 1-D tensors.
+
+ +#### Inputs + +
+
x : T1
+
N-D full precision Input tensor to be quantized.
+
y_scale : T1
+
Scale for doing quantization to get 'y'. It could be a scalar or a 1-D tensor,which means a per-tensor or per-axis quantization. If it's a 1-D tensor, its number of elements should be equal to the dimension value of 'axis' dimension of input 'x'.
+
y_zero_point : T2
+
Zero point for doing quantization to get 'y'. It could be a scalar or a 1-D tensor, which means a per-tensoror per-axis quantization. If it's a 1-D tensor, its number of elements should be equal to the dimension value of 'axis' dimension of input 'x'.
+
+ +#### Outputs + +
+
y : T2
+
N-D quantized output tensor. It has same shape as input 'x'.
+
+ +#### Type Constraints + +
+
T1 : tensor(float)
+
Constrain 'x', 'y_scale' to float tensors.
+
T2 : tensor(int8), tensor(uint8)
+
Constrain 'y_zero_point' and 'y' to 8-bit integer tensors.
+
+ + ### **com.microsoft.Range** Creates a sequence of numbers that begins at `start` and extends by increments of `delta` @@ -855,11 +1035,11 @@ This version of the operator has been available since version 1 of the 'com.micr ### **com.microsoft.Unique** - Finds all the unique values (deduped list) present in the given input tensor. - This operator returns 3 outputs. - The first output tensor 'uniques' contains all of the unique elements of the input, + Finds all the unique values (deduped list) present in the given input tensor. + This operator returns 3 outputs. + The first output tensor 'uniques' contains all of the unique elements of the input, sorted in the same order that they occur in the input. - The second output tensor 'idx' is the same size as the input and it contains the index + The second output tensor 'idx' is the same size as the input and it contains the index of each value of the input in 'uniques'. The third output tensor 'counts' contains the count of each element of 'uniques' in the input. Example: @@ -948,3 +1128,441 @@ This version of the operator has been available since version 1 of the 'com.micr +### experimental **com.microsoft.Attention** + + Multi-Head Self Attention + +#### Version + +No versioning maintained for experimental ops. +#### Attributes + +
+
num_heads : int (required)
+
Number of attention heads
+
+ +#### Inputs + +
+
input : T
+
3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size
+
weight : T
+
2D input tensor with shape (hidden_size, 3 * hidden_size)
+
bias : T
+
1D input tensor with shape (3 * hidden_size)
+
mask_index : M
+
Attention mask index with shape (batch_size)
+
+ +#### Outputs + +
+
output : T
+
3D output tensor with shape (batch_size, sequence_length, hidden_size)
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(float16)
+
Constrain input and output types to float tensors.
+
M : tensor(int32)
+
Constrain mask index to integer types
+
+ + +### experimental **com.microsoft.EmbedLayerNormalization** + + Embedding Layer Normalization + +#### Version + +No versioning maintained for experimental ops. +#### Inputs + +
+
input_ids : T1
+
2D words IDs with shape (batch_size, sequence_length)
+
segment_ids : T1
+
2D segment IDs with shape (batch_size, sequence_length)
+
mask : T1
+
2D attention mask with shape (batch_size, sequence_length)
+
word_embedding : T
+
2D with shape (,hidden_size)
+
position_embedding : T
+
2D with shape (, hidden_size)
+
segment_embedding : T
+
2D with shape (, hidden_size)
+
gamma : T
+
1D gamma tensor for layer normalization with shape (hidden_size)
+
beta : T
+
1D beta tensor for layer normalization with shape (hidden_size)
+
+ +#### Outputs + +
+
output : T
+
3D output tensor with shape (batch_size, sequence_length, hidden_size)
+
mask_index : T1
+
1D mask_index tensor with shape (batch_size)
+
+ +#### Type Constraints + +
+
T1 : tensor(int32)
+
Constrain input and output integer tensors types
+
T : tensor(float), tensor(float16)
+
Constrain input and output float tensors types.
+
+ + +### experimental **com.microsoft.Gelu** + + Gelu + +#### Version + +No versioning maintained for experimental ops. +#### Inputs + +
+
X : T
+
The input data as Tensor.
+
+ +#### Outputs + +
+
Y : T
+
The output.
+
+ +#### Type Constraints + +
+
T : tensor(float16), tensor(float), tensor(double)
+
Constrain input and output types to float tensors.
+
+ + +### experimental **com.microsoft.SkipLayerNormalization** + + Skip and Layer Normalization Fusion + +#### Version + +No versioning maintained for experimental ops. +#### Inputs + +
+
input : T
+
3D input tensor with shape (batch_size, sequence_length, hidden_size)
+
skip : T
+
3D skip tensor with shape (batch_size, sequence_length, hidden_size)
+
gamma : T
+
1D input tensor with shape (hidden_size)
+
beta : T
+
1D skip tensor with shape (hidden_size
+
+ +#### Outputs + +
+
output : T
+
3D output tensor with shape (batch_size, sequence_length, hidden_size)
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(float16)
+
Constrain input and output types to float or half tensors.
+
+ + +## com.microsoft.nchwc +### **com.microsoft.nchwc.AveragePool** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Attributes + +
+
auto_pad : string
+
+
ceil_mode : int
+
+
count_include_pad : int
+
+
dilations : list of ints
+
+
kernel_shape : list of ints (required)
+
+
pads : list of ints
+
+
strides : list of ints
+
+
+ +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float)
+
Constrain input and output types to float tensors
+
+ + +### **com.microsoft.nchwc.Conv** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Attributes + +
+
activation : string
+
+
activation_params : list of floats
+
+
auto_pad : string
+
+
dilations : list of ints
+
+
group : int
+
+
kernel_shape : list of ints
+
+
pads : list of ints
+
+
strides : list of ints
+
+
+ +#### Inputs (2 - 4) + +
+
X : T
+
+
W : T
+
+
B (optional) : T
+
+
Sum (optional) : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float)
+
Constrain input and output types to float tensors
+
+ + +### **com.microsoft.nchwc.GlobalAveragePool** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float)
+
Constrain input and output types to float tensors
+
+ + +### **com.microsoft.nchwc.GlobalMaxPool** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float)
+
Constrain input and output types to float tensors
+
+ + +### **com.microsoft.nchwc.MaxPool** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Attributes + +
+
auto_pad : string
+
+
ceil_mode : int
+
+
dilations : list of ints
+
+
kernel_shape : list of ints (required)
+
+
pads : list of ints
+
+
storage_order : int
+
+
strides : list of ints
+
+
+ +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float)
+
Constrain input and output types to float tensors
+
+ + +### **com.microsoft.nchwc.ReorderInput** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(int8), tensor(uint8)
+
Constrain input and output types to float/quantized tensors
+
+ + +### **com.microsoft.nchwc.ReorderOutput** + + For internal use. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft.nchwc' operator set. + +#### Attributes + +
+
channels : int
+
+
+ +#### Inputs + +
+
X : T
+
+
+ +#### Outputs + +
+
Y : T
+
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(int8), tensor(uint8)
+
Constrain input and output types to float/quantized tensors
+
+ + diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md index 2cad94aae0481..696e77ac23f9b 100644 --- a/docs/OperatorKernels.md +++ b/docs/OperatorKernels.md @@ -10,165 +10,211 @@ | Op Name | Parameters | OpSet Version | Types Supported | |---------|------------|---------------|-----------------| **Operator Domain:** *ai.onnx.ml* -|Abs|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(int32), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(int64), tensor(double)| +|Abs|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(int64), tensor(double), tensor(uint32), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown| |Acos|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float)| |Acosh|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| -|Add|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +|Add|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| |Affine|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |And|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| | | ||**T1** = tensor(bool)| -|ArgMax|(*in* data:**T**, *out* reduced:**tensor(int64)**)|1+|**T** = tensor(int32), tensor(float)| -|ArgMin|(*in* data:**T**, *out* reduced:**tensor(int64)**)|1+|**T** = tensor(int32), tensor(float)| -|ArrayFeatureExtractor|(*in* X:**T**, *in* Y:**tensor(int64)**, *out* Z:**T**)|1+|**T** = tensor(string), tensor(int32), tensor(float), tensor(int64), tensor(double)| +|ArgMax|(*in* data:**T**, *out* reduced:**tensor(int64)**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ArgMin|(*in* data:**T**, *out* reduced:**tensor(int64)**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ArrayFeatureExtractor|(*in* X:**T**, *in* Y:**tensor(int64)**, *out* Z:**T**)|1+|**T** = tensor(string), tensor(int64), tensor(float), tensor(int32), tensor(double)| |Asin|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float)| |Asinh|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| |Atan|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float)| |Atanh|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| -|AveragePool|(*in* X:**T**, *out* Y:**T**)|10+|**T** = tensor(float)| +|AveragePool|(*in* X:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| +| | |[10, 10]|**T** = tensor(float)| | | |[7, 9]|**T** = tensor(float)| -|BatchNormalization|(*in* X:**T**, *in* scale:**T**, *in* B:**T**, *in* mean:**T**, *in* var:**T**, *out* Y:**T**, *out* mean:**T**, *out* var:**T**, *out* saved_mean:**T**, *out* saved_var:**T**)|[7, 9]|**B** = tensor(float)| +|BatchNormalization|(*in* X:**T**, *in* scale:**T**, *in* B:**T**, *in* mean:**T**, *in* var:**T**, *out* Y:**T**, *out* mean:**T**, *out* var:**T**, *out* saved_mean:**T**, *out* saved_var:**T**)|9+|**B** = tensor(float)| +| | ||**X** = tensor(float)| +| | ||**mean** = tensor(float)| +| | ||**scale** = tensor(float)| +| | ||**var** = tensor(float)| +| | |[7, 8]|**B** = tensor(float)| | | ||**X** = tensor(float)| | | ||**mean** = tensor(float)| | | ||**scale** = tensor(float)| | | ||**var** = tensor(float)| |Binarizer|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| +|BitShift|(*in* X:**T**, *in* Y:**T**, *out* Z:**T**)|11+|**T** = tensor(uint8), tensor(uint32), tensor(uint64)| |Cast|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(string)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | |[6, 9]|**T1** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +| | ||**T2** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[6, 9]|**T1** = tensor(MLFloat16), tensor(int64), tensor(float), tensor(uint32), tensor(double), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown, tensor(bool)| +| | ||**T2** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| |CastMap|(*in* X:**T1**, *out* Y:**T2**)|1+|**T1** = unknown| -| | ||**T2** = tensor(string), tensor(float), tensor(int64)| +| | ||**T2** = tensor(int64), tensor(string), tensor(float)| |CategoryMapper|(*in* X:**T1**, *out* Y:**T2**)|1+|**T1** = tensor(string), tensor(int64)| | | ||**T2** = tensor(string), tensor(int64)| |Ceil|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Clip|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float)| -|Compress|(*in* input:**T**, *in* condition:**T1**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Clip|(*in* input:**T**, *in* min:**T**, *in* max:**T**, *out* output:**T**) or (*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(float)| +| | |[6, 10]|**T** = tensor(float)| +|Compress|(*in* input:**T**, *in* condition:**T1**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| | | ||**T1** = tensor(bool)| -|Concat|(*in* inputs:**T**, *out* concat_result:**T**)|4+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +| | |[9, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**T1** = tensor(bool)| +|Concat|(*in* inputs:**T**, *out* concat_result:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[4, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|ConcatFromSequence|(*in* input_sequence:**S**, *out* concat_result:**T**)|11+|**S** = unknown| |ConstantOfShape|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(int64)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Conv|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| +| | ||**T2** = tensor(MLFloat16), tensor(float), tensor(int64), tensor(double), tensor(uint32), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown, tensor(bool)| +|Conv|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| |ConvInteger|(*in* x:**T1**, *in* w:**T2**, *in* x_zero_point:**T1**, *in* w_zero_point:**T2**, *out* y:**T3**)|10+|**T1** = tensor(uint8)| | | ||**T2** = tensor(uint8)| | | ||**T3** = tensor(int32)| -|ConvTranspose|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| +|ConvTranspose|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| |Cos|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float)| |Cosh|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| |Crop|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|DepthToSpace|(*in* input:**T**, *out* output:**T**)|[1, 4]|**T** = tensor(float)| +|CumSum|(*in* x:**T**, *in* axis:**T2**, *out* y:**T**)|11+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +|DepthToSpace|(*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| |DequantizeLinear|(*in* x:**T**, *in* x_scale:**tensor(float)**, *in* x_zero_point:**T**, *out* y:**tensor(float)**)|10+|**x** = tensor(uint8), unknown| | | ||**x_scale** = tensor(float)| | | ||**x_zero_point** = tensor(uint8), unknown| | | ||**y** = tensor(float)| +|Det|(*in* X:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| |DictVectorizer|(*in* X:**T1**, *out* Y:**T2**)|1+|**T1** = unknown| -| | ||**T2** = tensor(string), tensor(float), tensor(int64), tensor(double)| -|Div|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| -|Dropout|(*in* data:**T**, *out* output:**T**, *out* mask:**T**) or (*in* data:**T**, *out* output:**T**, *out* mask:**T1**)|10+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| +| | ||**T2** = tensor(float), tensor(double), tensor(string), tensor(int64)| +|Div|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +|Dropout|(*in* data:**T**, *out* output:**T**, *out* mask:**T1**) or (*in* data:**T**, *out* output:**T**, *out* mask:**T**)|10+|**T** = tensor(MLFloat16), tensor(double), tensor(float)| | | ||**T1** = tensor(bool)| -| | |[7, 9]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| +| | |[7, 9]|**T** = tensor(MLFloat16), tensor(double), tensor(float)| | | ||**T1** = tensor(bool)| -|DynamicSlice|(*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| +|DynamicQuantizeLinear|(*in* x:**T1**, *out* y:**T2**, *out* y_scale:**tensor(float)**, *out* y_zero_point:**T2**)|11+|**T2** = tensor(uint8)| +|DynamicSlice|(*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *out* output:**T**)|1+|**T** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| |Elu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Equal|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|11+|**T** = tensor(float)| +|Equal|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|11+|**T** = tensor(int64), tensor(float), tensor(bool), tensor(int32)| | | ||**T1** = tensor(bool)| -| | |7+|**T** = tensor(int32), tensor(bool), tensor(int64)| +| | |[7, 10]|**T** = tensor(int64), tensor(bool), tensor(int32)| | | ||**T1** = tensor(bool)| |Erf|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| -|Exp|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float), tensor(double)| -|Expand|(*in* input:**T**, *in* shape:**tensor(int64)**, *out* output:**T**)|8+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|EyeLike|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(uint64), tensor(int32), tensor(float), tensor(int64), tensor(double)| -| | ||**T2** = tensor(uint64), tensor(int32), tensor(float), tensor(int64), tensor(double)| -|FeatureVectorizer|(*in* X:**T1**, *out* Y:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(float), tensor(int64), tensor(double)| -|Flatten|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | |[1, 8]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Exp|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(double), tensor(float)| +|Expand|(*in* input:**T**, *in* shape:**tensor(int64)**, *out* output:**T**)|8+|**T** = tensor(MLFloat16), tensor(float), tensor(int64), tensor(double), tensor(uint32), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown, tensor(bool)| +|EyeLike|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(int64), tensor(float), tensor(int32), tensor(uint64), tensor(double)| +| | ||**T2** = tensor(int64), tensor(float), tensor(int32), tensor(uint64), tensor(double)| +|FeatureVectorizer|(*in* X:**T1**, *out* Y:**tensor(float)**)|1+|**T1** = tensor(int64), tensor(float), tensor(double), tensor(int32)| +|Flatten|(*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[1, 8]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[9, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| |Floor|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|GRU|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *out* Y:**T**, *out* Y_h:**T**)|7+|**T** = tensor(float), tensor(double)| +|GRU|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *out* Y:**T**, *out* Y_h:**T**)|7+|**T** = tensor(double), tensor(float)| | | ||**T1** = tensor(int32)| -|Gather|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -|Gemm|(*in* A:**T**, *in* B:**T**, *in* C:**T**, *out* Y:**T**)|[7, 9]|**T** = tensor(float)| +|Gather|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +| | |[1, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|GatherElements|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|GatherND|(*in* data:**T**, *in* indices:**tensor(int64)**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64)| +|Gemm|(*in* A:**T**, *in* B:**T**, *in* C:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| +| | |[7, 8]|**T** = tensor(float)| +| | |[9, 10]|**T** = tensor(float)| |GlobalAveragePool|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |GlobalLpPool|(*in* X:**T**, *out* Y:**T**)|2+|**T** = tensor(float)| |GlobalMaxPool|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|Greater|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|9+|**T** = tensor(int32), tensor(int64)| +|Greater|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|9+|**T** = tensor(int64), tensor(int32)| | | ||**T1** = tensor(bool)| | | |[7, 9]|**T** = tensor(float)| | | ||**T1** = tensor(bool)| |HardSigmoid|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Hardmax|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Identity|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|If|(*in* cond:**B**, *out* outputs:**V**)|1+|**B** = tensor(bool)| -| | ||**V** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Hardmax|(*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| +|Identity|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|If|(*in* cond:**B**, *out* outputs:**V**)|11+|**B** = tensor(bool)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[1, 10]|**B** = tensor(bool)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| |ImageScaler|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Imputer|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(int64)| +|Imputer|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(int64), tensor(float)| |InstanceNormalization|(*in* input:**T**, *in* scale:**T**, *in* B:**T**, *out* output:**T**)|6+|**T** = tensor(float)| -|IsInf|(*in* X:**T1**, *out* Y:**T2**)|10+|**T1** = tensor(float), tensor(double)| +|IsInf|(*in* X:**T1**, *out* Y:**T2**)|10+|**T1** = tensor(double), tensor(float)| | | ||**T2** = tensor(bool)| -|IsNaN|(*in* X:**T1**, *out* Y:**T2**)|9+|**T1** = tensor(float), tensor(MLFloat16)| +|IsNaN|(*in* X:**T1**, *out* Y:**T2**)|9+|**T1** = tensor(MLFloat16), tensor(float)| | | ||**T2** = tensor(bool)| |LRN|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|LSTM|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *in* initial_c:**T**, *in* P:**T**, *out* Y:**T**, *out* Y_h:**T**, *out* Y_c:**T**)|7+|**T** = tensor(float), tensor(double)| +|LSTM|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *in* initial_c:**T**, *in* P:**T**, *out* Y:**T**, *out* Y_h:**T**, *out* Y_c:**T**)|7+|**T** = tensor(double), tensor(float)| | | ||**T1** = tensor(int32)| -|LabelEncoder|(*in* X:**T1**, *out* Y:**T2**)|2+|**T1** = tensor(string), tensor(float), tensor(int64)| -| | ||**T2** = tensor(string), tensor(float), tensor(int64)| +|LabelEncoder|(*in* X:**T1**, *out* Y:**T2**)|2+|**T1** = tensor(int64), tensor(string), tensor(float)| +| | ||**T2** = tensor(int64), tensor(string), tensor(float)| | | |[1, 1]|**T1** = tensor(string), tensor(int64)| | | ||**T2** = tensor(string), tensor(int64)| +|LayerNormalization|(*in* X:**T**, *in* scale:**T**, *in* B:**T**, *out* Y:**T**, *out* mean:**U**, *out* inv_std_var:**U**)|1+|**T** = tensor(double), tensor(float)| |LeakyRelu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Less|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|9+|**T** = tensor(int32), tensor(int64)| +|Less|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|9+|**T** = tensor(int64), tensor(int32)| | | ||**T1** = tensor(bool)| -| | |[7, 9]|**T** = tensor(float)| +| | |[7, 9]|**T** = tensor(double), tensor(float)| | | ||**T1** = tensor(bool)| -|LinearClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +|LinearClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(int64), tensor(double), tensor(float)| | | ||**T2** = tensor(string), tensor(int64)| |LinearRegressor|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(float)| |Log|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float)| -|LogSoftmax|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Loop|(*in* M:**I**, *in* cond:**B**, *in* v_initial:**V**, *out* v_final_and_scan_outputs:**V**)|1+|**B** = tensor(bool)| +|LogSoftmax|(*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| +|Loop|(*in* M:**I**, *in* cond:**B**, *in* v_initial:**V**, *out* v_final_and_scan_outputs:**V**)|11+|**B** = tensor(bool)| +| | ||**I** = tensor(int64)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[1, 10]|**B** = tensor(bool)| | | ||**I** = tensor(int64)| -| | ||**V** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| |LpNormalization|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|LpPool|(*in* X:**T**, *out* Y:**T**)|2+|**T** = tensor(float)| -|MatMul|(*in* A:**T**, *in* B:**T**, *out* Y:**T**)|[1, 9]|**T** = tensor(float), tensor(double)| -| | |[9, 9]|**T** = tensor(uint64), tensor(int32), tensor(int64), tensor(uint32)| +|LpPool|(*in* X:**T**, *out* Y:**T**)|11+|**T** = tensor(float)| +| | |[2, 10]|**T** = tensor(float)| +|MatMul|(*in* A:**T**, *in* B:**T**, *out* Y:**T**)|9+|**T** = tensor(int64), tensor(float), tensor(uint32), tensor(int32), tensor(uint64), tensor(double)| +| | |[1, 8]|**T** = tensor(double), tensor(float)| |MatMulInteger|(*in* A:**T1**, *in* B:**T2**, *in* a_zero_point:**T1**, *in* b_zero_point:**T2**, *out* Y:**T3**)|10+|**T1** = tensor(uint8)| -| | ||**T2** = tensor(uint8)| +| | ||**T2** = tensor(uint8), unknown| | | ||**T3** = tensor(int32)| -|Max|(*in* data_0:**T**, *out* max:**T**)|8+|**T** = tensor(float), tensor(double)| +|Max|(*in* data_0:**T**, *out* max:**T**)|8+|**T** = tensor(double), tensor(float)| | | |[6, 7]|**T** = tensor(float)| -|MaxPool|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *out* Y:**T**, *out* Indices:**I**)|10+|**I** = tensor(int64)| +|MaxPool|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *out* Y:**T**, *out* Indices:**I**)|11+|**I** = tensor(int64)| | | ||**T** = tensor(float)| | | |[1, 7]|**T** = tensor(float)| +| | |[10, 10]|**I** = tensor(int64)| +| | ||**T** = tensor(float)| | | |[8, 9]|**I** = tensor(int64)| | | ||**T** = tensor(float)| |MaxRoiPool|(*in* X:**T**, *in* rois:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|MaxUnpool|(*in* X:**T1**, *in* I:**T2**, *in* output_shape:**T2**, *out* output:**T1**)|9+|**T1** = tensor(float)| +|MaxUnpool|(*in* X:**T1**, *in* I:**T2**, *in* output_shape:**T2**, *out* output:**T1**)|11+|**T1** = tensor(float)| +| | ||**T2** = tensor(int64)| +| | |[9, 10]|**T1** = tensor(float)| | | ||**T2** = tensor(int64)| |Mean|(*in* data_0:**T**, *out* mean:**T**)|8+|**T** = tensor(float)| | | |[6, 7]|**T** = tensor(float)| -|MeanVarianceNormalization|(*in* X:**T**, *out* Y:**T**) or (*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| +|MeanVarianceNormalization|(*in* input:**T**, *out* output:**T**) or (*in* X:**T**, *out* Y:**T**)|9+|**T** = tensor(float)| | | |[1, 8]|**T** = tensor(float)| |Min|(*in* data_0:**T**, *out* min:**T**)|8+|**T** = tensor(float)| | | |[6, 7]|**T** = tensor(float)| -|Mod|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|10+|**T** = tensor(int32), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Mul|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +|Mod|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|10+|**T** = tensor(MLFloat16), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double)| +|Mul|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| |Multinomial|(*in* input:**T1**, *out* output:**T2**)|7+|**T1** = tensor(float)| -| | ||**T2** = tensor(int32), tensor(int64)| -|Neg|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(int32), tensor(float), unknown| -|NonZero|(*in* X:**T**, *out* Y:**tensor(int64)**)|9+|**T** = tensor(int32), tensor(float), tensor(bool), tensor(int64)| -|Normalizer|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +| | ||**T2** = tensor(int64), tensor(int32)| +|Neg|(*in* X:**T**, *out* Y:**T**)|6+|**T** = unknown, tensor(int32), tensor(double), tensor(float)| +|NonZero|(*in* X:**T**, *out* Y:**tensor(int64)**)|9+|**T** = tensor(int64), tensor(float), tensor(int32), tensor(uint8), tensor(bool)| +|Normalizer|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| |Not|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(bool)| | | ||**T1** = tensor(bool)| -|OneHot|(*in* indices:**T1**, *in* depth:**T2**, *in* values:**T3**, *out* output:**T3**)|9+|**T1** = tensor(int32), tensor(float), tensor(int64)| +|OneHot|(*in* indices:**T1**, *in* depth:**T2**, *in* values:**T3**, *out* output:**T3**)|11+|**T1** = tensor(int32), tensor(float), tensor(int64)| +| | ||**T2** = tensor(int32), tensor(float), tensor(int64)| +| | ||**T3** = tensor(int32), tensor(float), tensor(string), tensor(int64)| +| | |[9, 10]|**T1** = tensor(int32), tensor(float), tensor(int64)| | | ||**T2** = tensor(int32), tensor(float), tensor(int64)| -| | ||**T3** = tensor(string), tensor(int32), tensor(float), tensor(int64)| -|OneHotEncoder|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(string), tensor(float), tensor(int64), tensor(double)| +| | ||**T3** = tensor(int32), tensor(float), tensor(string), tensor(int64)| +|OneHotEncoder|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(float), tensor(double), tensor(string), tensor(int64)| |Or|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| | | ||**T1** = tensor(bool)| |PRelu|(*in* X:**T**, *in* slope:**T**, *out* Y:**T**)|[7, 9]|**T** = tensor(float)| -|Pad|(*in* data:**T**, *out* output:**T**)|2+|**T** = tensor(float)| +|Pad|(*in* data:**T**, *in* pads:**tensor(int64)**, *in* constant_value:**T**, *out* output:**T**) or (*in* data:**T**, *out* output:**T**)|11+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +| | |[2, 10]|**T** = tensor(float)| |ParametricSoftplus|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|Pow|(*in* X:**T**, *in* Y:**T**, *out* Z:**T**)|7+|**T** = tensor(float), tensor(double)| +|Pow|(*in* X:**T**, *in* Y:**T**, *out* Z:**T**)|7+|**T** = tensor(double), tensor(float)| |QLinearConv|(*in* x:**T1**, *in* x_scale:**tensor(float)**, *in* x_zero_point:**T1**, *in* w:**T2**, *in* w_scale:**tensor(float)**, *in* w_zero_point:**T2**, *in* y_scale:**tensor(float)**, *in* y_zero_point:**T3**, *in* B:**T4**, *out* y:**T3**)|10+|**T1** = tensor(uint8)| | | ||**T2** = tensor(uint8)| | | ||**T3** = tensor(uint8)| @@ -181,108 +227,166 @@ | | ||**y_zero_point** = tensor(uint8), unknown| |RNN|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *out* Y:**T**, *out* Y_h:**T**)|7+|**T** = tensor(float)| | | ||**T1** = tensor(int32)| -|RandomNormal|(*out* output:**T**)|1+|**T** = tensor(float), tensor(double)| -|RandomNormalLike|(*in* input:**T1**, *out* output:**T2**)|1+|**T1** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T2** = tensor(float), tensor(double)| -|RandomUniform|(*out* output:**T**)|1+|**T** = tensor(float), tensor(double)| -|RandomUniformLike|(*in* input:**T1**, *out* output:**T2**)|1+|**T1** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T2** = tensor(float), tensor(double)| +|RandomNormal|(*out* output:**T**)|1+|**T** = tensor(double), tensor(float)| +|RandomNormalLike|(*in* input:**T1**, *out* output:**T2**)|1+|**T1** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**T2** = tensor(double), tensor(float)| +|RandomUniform|(*out* output:**T**)|1+|**T** = tensor(double), tensor(float)| +|RandomUniformLike|(*in* input:**T1**, *out* output:**T2**)|1+|**T1** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**T2** = tensor(double), tensor(float)| +|Range|(*in* start:**T**, *in* limit:**T**, *in* delta:**T**, *out* output:**T**)|11+|**T** = tensor(int64), tensor(float), tensor(int32), tensor(int16), tensor(double)| |Reciprocal|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|ReduceL1|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceL2|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceLogSum|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceLogSumExp|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceMax|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceMean|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceMin|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceProd|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float)| -|ReduceSum|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float), tensor(double)| -|ReduceSumSquare|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(int32), tensor(float), tensor(double)| +|ReduceL1|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceL2|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceLogSum|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceLogSumExp|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceMax|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(int64), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(int64), tensor(float)| +|ReduceMean|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceMin|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(int64), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(int64), tensor(float)| +|ReduceProd|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(float)| +|ReduceSum|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +|ReduceSumSquare|(*in* data:**T**, *out* reduced:**T**)|11+|**T** = tensor(int32), tensor(double), tensor(float)| +| | |[1, 10]|**T** = tensor(int32), tensor(double), tensor(float)| |Relu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Reshape|(*in* data:**T**, *in* shape:**tensor(int64)**, *out* reshaped:**T**) or (*in* data:**T**, *out* reshaped:**T**)|5+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Reshape|(*in* data:**T**, *in* shape:**tensor(int64)**, *out* reshaped:**T**) or (*in* data:**T**, *out* reshaped:**T**)|5+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| | | ||**shape** = tensor(int64)| -|Reshape_1||[1, 4]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Resize|(*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**)|10+|**T** = tensor(int32), tensor(float), tensor(uint8)| -|ReverseSequence|(*in* input:**T**, *in* sequence_lens:**tensor(int64)**, *out* Y:**T**)|10+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|RoiAlign|(*in* X:**T1**, *in* rois:**T1**, *in* batch_indices:**T2**, *out* Y:**T1**)|10+|**T** = tensor(float), tensor(double)| +|Reshape_1||[1, 4]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|Resize|(*in* X:**T1**, *in* roi:**T2**, *in* scales:**tensor(float)**, *in* sizes:**tensor(int64)**, *out* Y:**T1**) or (*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**)|11+|**T** = tensor(int32), tensor(uint8), tensor(float)| +| | |[10, 10]|**T** = tensor(int32), tensor(uint8), tensor(float)| +|ReverseSequence|(*in* input:**T**, *in* sequence_lens:**tensor(int64)**, *out* Y:**T**)|10+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|RoiAlign|(*in* X:**T1**, *in* rois:**T1**, *in* batch_indices:**T2**, *out* Y:**T1**)|10+|**T** = tensor(double), tensor(float)| | | ||**T2** = tensor(int64)| -|SVMClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +|Round|(*in* X:**T**, *out* Y:**T**)|11+|**T** = tensor(MLFloat16), tensor(double), tensor(float)| +|SVMClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(int64), tensor(double), tensor(float)| | | ||**T2** = tensor(string), tensor(int64)| |SVMRegressor|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(float)| |Scale|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| |ScaledTanh|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Scaler|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| -|Scan|(*in* sequence_lens:**I**, *in* initial_state_and_scan_inputs:**V**, *out* final_state_and_scan_outputs:**V**) or (*in* initial_state_and_scan_inputs:**V**, *out* final_state_and_scan_outputs:**V**)|9+|**I** = tensor(int64)| -| | ||**V** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Scaler|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +|Scan|(*in* sequence_lens:**I**, *in* initial_state_and_scan_inputs:**V**, *out* final_state_and_scan_outputs:**V**) or (*in* initial_state_and_scan_inputs:**V**, *out* final_state_and_scan_outputs:**V**)|11+|**I** = tensor(int64)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| | | |[8, 8]|**I** = tensor(int64)| -| | ||**V** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Scatter|(*in* data:**T**, *in* indices:**Tind**, *in* updates:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[9, 10]|**I** = tensor(int64)| +| | ||**V** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|Scatter|(*in* data:**T**, *in* indices:**Tind**, *in* updates:**T**, *out* output:**T**)|[9, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|ScatterElements|(*in* data:**T**, *in* indices:**Tind**, *in* updates:**T**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|ScatterND|(*in* data:**T**, *in* indices:**tensor(int64)**, *in* updates:**T**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64)| |Selu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Shape|(*in* data:**T**, *out* shape:**T1**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|SequenceAt|(*in* input_sequence:**S**, *in* position:**I**, *out* tensor:**T**)|11+|**I** = tensor(int64), tensor(int32)| +| | ||**S** = unknown| +| | ||**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|SequenceConstruct|(*in* inputs:**T**, *out* output_sequence:**S**)|11+|**S** = unknown| +| | ||**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|SequenceEmpty|(*out* output:**S**)|11+|**S** = unknown| +|SequenceErase|(*in* input_sequence:**S**, *in* position:**I**, *out* output_sequence:**S**)|11+|**I** = tensor(int64), tensor(int32)| +| | ||**S** = unknown| +|SequenceInsert|(*in* input_sequence:**S**, *in* tensor:**T**, *in* position:**I**, *out* output_sequence:**S**)|11+|**I** = tensor(int64), tensor(int32)| +| | ||**S** = unknown| +|SequenceLength|(*in* input_sequence:**S**, *out* length:**I**)|11+|**I** = tensor(int64)| +| | ||**S** = unknown| +|Shape|(*in* data:**T**, *out* shape:**T1**)|1+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| | | ||**T1** = tensor(int64)| -|Shrink|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Shrink|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double)| |Sigmoid|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Sign|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Sin|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float), tensor(double)| +|Sign|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double)| +|Sin|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(double), tensor(float)| |Sinh|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float)| -|Size|(*in* data:**T**, *out* size:**T1**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(int64), tensor(double)| +|Size|(*in* data:**T**, *out* size:**T1**)|1+|**T** = tensor(string), tensor(float), tensor(int64), tensor(double), tensor(uint32), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown, tensor(bool)| | | ||**T1** = tensor(int64)| -|Slice|(*in* data:**T**, *out* output:**T**) or (*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *in* steps:**Tind**, *out* output:**T**)|10+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -| | |[1, 9]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Softmax|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| +|Slice|(*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *in* steps:**Tind**, *out* output:**T**) or (*in* data:**T**, *out* output:**T**)|11+|**T** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +| | |[1, 9]|**T** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[10, 10]|**T** = tensor(MLFloat16), tensor(string), tensor(float), tensor(int64), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|Softmax|(*in* input:**T**, *out* output:**T**)|11+|**T** = tensor(float)| +| | |[1, 10]|**T** = tensor(float)| |Softplus|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |Softsign|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| |SpaceToDepth|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Split|(*in* input:**T**, *out* outputs:**T**) or (*in* input:**T**, *in* split:**T**, *out* outputs...:**T**)|2+|**T** = tensor(string), tensor(int32), tensor(float)| -|Sqrt|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(double)| -|Squeeze|(*in* data:**T**, *out* squeezed:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|Split|(*in* input:**T**, *in* split:**T**, *out* outputs...:**T**) or (*in* input:**T**, *out* outputs:**T**)|11+|**T** = tensor(int32), tensor(string), tensor(float)| +| | |[2, 10]|**T** = tensor(int32), tensor(string), tensor(float)| +|SplitToSequence|(*in* input:**T**, *in* split:**I**, *out* output_sequence:**S**)|11+|**I** = tensor(int64), tensor(int32)| +| | ||**S** = unknown| +| | ||**T** = tensor(int32), tensor(double), tensor(string), tensor(float)| +|Sqrt|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(double), tensor(float)| +|Squeeze|(*in* data:**T**, *out* squeezed:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[1, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| |StringNormalizer|(*in* X:**tensor(string)**, *out* Y:**tensor(string)**)|10+|**T** = tensor(string)| -|Sub|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +|Sub|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| |Sum|(*in* data_0:**T**, *out* sum:**T**)|8+|**T** = tensor(float)| | | |[6, 7]|**T** = tensor(float)| |Tan|(*in* input:**T**, *out* output:**T**)|7+|**T** = tensor(float)| |Tanh|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float)| -|TfIdfVectorizer|(*in* X:**T**, *out* Y:**T1**)|9+|**T** = tensor(string), tensor(int32), tensor(int64)| +|TfIdfVectorizer|(*in* X:**T**, *out* Y:**T1**)|9+|**T** = tensor(int64), tensor(string), tensor(int32)| | | ||**T1** = tensor(float)| -|ThresholdedRelu|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -| | |10+|**T** = tensor(float)| -|Tile|(*in* input:**T**, *in* tiles:**T**, *in* axis:**T**, *out* output:**T**) or (*in* input:**T**, *in* repeats:**T1**, *out* output:**T**)|6+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(int64), tensor(double)| +|ThresholdedRelu|(*in* X:**T**, *out* Y:**T**)|10+|**T** = tensor(float)| +| | |[1, 9]|**T** = tensor(float)| +|Tile|(*in* input:**T**, *in* tiles:**T**, *in* axis:**T**, *out* output:**T**) or (*in* input:**T**, *in* repeats:**T1**, *out* output:**T**)|6+|**T** = tensor(float), tensor(int64), tensor(double), tensor(uint32), tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), unknown, tensor(bool)| | | ||**T1** = tensor(int64)| -|TopK|(*in* X:**T**, *in* K:**tensor(int64)**, *out* Values:**T**, *out* Indices:**I**) or (*in* X:**T**, *out* Values:**T**, *out* Indices:**I**)|10+|**I** = tensor(int64)| +|TopK|(*in* X:**T**, *in* K:**tensor(int64)**, *out* Values:**T**, *out* Indices:**I**) or (*in* X:**T**, *out* Values:**T**, *out* Indices:**I**)|11+|**I** = tensor(int64)| | | ||**T** = tensor(float)| | | |[1, 9]|**I** = tensor(int64)| | | ||**T** = tensor(float)| -|Transpose|(*in* data:**T**, *out* transposed:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|TreeEnsembleClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(float), tensor(int64), tensor(double)| +| | |[10, 10]|**I** = tensor(int64)| +| | ||**T** = tensor(float)| +|Transpose|(*in* data:**T**, *out* transposed:**T**)|1+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|TreeEnsembleClassifier|(*in* X:**T1**, *out* Y:**T2**, *out* Z:**tensor(float)**)|1+|**T1** = tensor(int32), tensor(int64), tensor(double), tensor(float)| | | ||**T2** = tensor(string), tensor(int64)| -|TreeEnsembleRegressor|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(float)| -|Unsqueeze|(*in* data:**T**, *out* expanded:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Upsample|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**)|[7, 9]|**T** = tensor(int32), tensor(float), tensor(uint8)| -|Where|(*in* condition:**B**, *in* X:**T**, *in* Y:**T**, *out* output:**T**)|9+|**T** = tensor(string), tensor(int32), tensor(float)| +|TreeEnsembleRegressor|(*in* X:**T**, *out* Y:**tensor(float)**)|1+|**T** = tensor(int32), tensor(int64), tensor(double), tensor(float)| +|Unique|(*in* X:**T**, *out* Y:**T**, *out* indices:**tensor(int64)**, *out* inverse_indices:**tensor(int64)**, *out* counts:**tensor(int64)**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|Unsqueeze|(*in* data:**T**, *out* expanded:**T**)|11+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | |[1, 10]|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +|Upsample|(*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**) or (*in* X:**T**, *out* Y:**T**)|[7, 9]|**T** = tensor(int32), tensor(uint8), tensor(float)| +|Where|(*in* condition:**B**, *in* X:**T**, *in* Y:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(int64), tensor(string), tensor(float)| |Xor|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| | | ||**T1** = tensor(bool)| |ZipMap|(*in* X:**tensor(float)**, *out* Z:**T**)|1+|**T** = unknown| | | | | **Operator Domain:** *com.microsoft* -|AttnLSTM|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *in* initial_c:**T**, *in* P:**T**, *in* QW:**T**, *in* MW:**T**, *in* V:**T**, *in* M:**T**, *in* memory_seq_lens:**T1**, *in* AW:**T**, *out* Y:**T**, *out* Y_h:**T**, *out* Y_c:**T**)|1+|**T** = tensor(float), tensor(double)| +|AttnLSTM|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *in* initial_c:**T**, *in* P:**T**, *in* QW:**T**, *in* MW:**T**, *in* V:**T**, *in* M:**T**, *in* memory_seq_lens:**T1**, *in* AW:**T**, *out* Y:**T**, *out* Y_h:**T**, *out* Y_c:**T**)|1+|**T** = tensor(double), tensor(float)| | | ||**T1** = tensor(int32)| +|CDist|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|1+|**T** = tensor(double), tensor(float)| |ConvTransposeWithDynamicPads|(*in* X:**T**, *in* W:**T**, *in* Pads:**tensor(int64)**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |CropAndResize|(*in* X:**T1**, *in* rois:**T1**, *in* batch_indices:**T2**, *in* crop_size:**T2**, *out* Y:**T1**)|1+|**T** = tensor(float)| | | ||**T2** = tensor(int32)| -|ExpandDims|(*in* X:**T**, *in* axis:**tensor(int32)**, *out* Y:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| +|DequantizeLinear|(*in* x:**T2**, *in* x_scale:**T1**, *in* x_zero_point:**T2**, *out* y:**T1**)|1+|**axis** = unknown| +| | ||**x** = tensor(uint8), unknown| +| | ||**x_scale** = tensor(float)| +| | ||**x_zero_point** = tensor(uint8), unknown| +| | ||**y** = tensor(float)| +|ExpandDims|(*in* X:**T**, *in* axis:**tensor(int32)**, *out* Y:**T**)|1+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| | | ||**axis** = tensor(int32)| |FusedConv|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |FusedGemm|(*in* A:**T**, *in* B:**T**, *in* C:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|GatherND|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(string), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| +|GatherND|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|1+|**T** = tensor(MLFloat16), tensor(bfloat16), tensor(string), tensor(int64), tensor(float), tensor(uint32), unknown, tensor(int32), tensor(uint8), tensor(int16), tensor(uint64), tensor(uint16), tensor(double), tensor(bool)| +| | ||**Tind** = tensor(int64), tensor(int32)| +|Gelu|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| +|MatMulInteger16|(*in* A:**T1**, *in* B:**T2**, *out* Y:**T3**)|1+|**T1** = tensor(int16)| +| | ||**T2** = tensor(int16)| +| | ||**T3** = tensor(int32)| |MaxpoolWithMask|(*in* X:**T**, *in* M:**tensor(int32)**, *out* Y:**T**)|1+|**X** = tensor(float)| -|MurmurHash3|(*in* X:**T1**, *out* Y:**T2**)|1+|**T1** = tensor(string), tensor(int32), tensor(uint32)| -| | ||**T2** = tensor(int32), tensor(uint32)| +|MurmurHash3|(*in* X:**T1**, *out* Y:**T2**)|1+|**T1** = tensor(uint32), tensor(string), tensor(int32)| +| | ||**T2** = tensor(uint32), tensor(int32)| |Pad|(*in* data:**T**, *in* pads:**tensor(int64)**, *in* value:**T**, *out* output:**T**)|1+|**T** = tensor(float)| -|Range|(*in* start:**T**, *in* limit:**T**, *in* delta:**T**, *out* Y:**T**)|1+|**T** = tensor(int32), tensor(float), tensor(int64), tensor(int16), tensor(double)| +|QuantizeLinear|(*in* x:**T1**, *in* y_scale:**T1**, *in* y_zero_point:**T2**, *out* y:**T2**)|1+|**axis** = unknown| +| | ||**x** = tensor(float)| +| | ||**y** = tensor(uint8)| +| | ||**y_scale** = tensor(float)| +| | ||**y_zero_point** = tensor(uint8)| +|Range|(*in* start:**T**, *in* limit:**T**, *in* delta:**T**, *out* Y:**T**)|1+|**T** = tensor(int64), tensor(float), tensor(int32), tensor(int16), tensor(double)| |SampleOp|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| |Tokenizer|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(string)| |Unique|(*in* x:**T**, *out* y:**T**, *out* idx:**tensor(int64)**, *out* counts:**tensor(int64)**)|1+|**T** = tensor(float)| @@ -300,171 +404,3 @@ |ReorderOutput|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| | | | | - - -## Operators implemented by CUDAExecutionProvider - -| Op Name | Parameters | OpSet Version | Types Supported | -|---------|------------|---------------|-----------------| -**Operator Domain:** *ai.onnx.ml* -|Abs|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(int32), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Add|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Affine|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|And|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| -| | ||**T1** = tensor(bool)| -|ArgMax|(*in* data:**T**, *out* reduced:**tensor(int64)**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ArgMin|(*in* data:**T**, *out* reduced:**tensor(int64)**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|AveragePool|(*in* X:**T**, *out* Y:**T**)|10+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[7, 9]|**I** = tensor(int64)| -| | ||**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|BatchNormalization|(*in* X:**T**, *in* scale:**T**, *in* B:**T**, *in* mean:**T**, *in* var:**T**, *out* Y:**T**, *out* mean:**T**, *out* var:**T**, *out* saved_mean:**T**, *out* saved_var:**T**)|9+|**B** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**X** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**mean** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**scale** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**var** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[7, 8]|**B** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**X** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**mean** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**scale** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**var** = tensor(float), tensor(MLFloat16), tensor(double)| -|Cast|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | |[6, 8]|**T1** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Ceil|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Compress|(*in* input:**T**, *in* condition:**T1**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T1** = tensor(bool)| -|Concat|(*in* inputs:**T**, *out* concat_result:**T**)|4+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|ConstantOfShape|(*in* input:**T1**, *out* output:**T2**)|9+|**T1** = tensor(int64)| -| | ||**T2** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Conv|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ConvTranspose|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Crop|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Div|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Dropout|(*in* data:**T**, *out* output:**T**, *out* mask:**T**) or (*in* data:**T**, *out* output:**T**, *out* mask:**T1**)|10+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**T1** = tensor(bool)| -| | |[7, 9]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|DynamicSlice|(*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -|Elu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Equal|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(int32), tensor(bool), tensor(int64)| -|Erf|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Exp|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Expand|(*in* input:**T**, *in* shape:**tensor(int64)**, *out* output:**T**)|8+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Flatten|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | |[1, 8]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Floor|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|GRU|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *out* Y:**T**, *out* Y_h:**T**)|7+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**T1** = tensor(int32)| -|Gather|(*in* data:**T**, *in* indices:**Tind**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -|Gemm|(*in* A:**T**, *in* B:**T**, *in* C:**T**, *out* Y:**T**)|9+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[7, 8]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|GlobalAveragePool|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|GlobalMaxPool|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Greater|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|9+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T1** = tensor(bool)| -| | |[7, 8]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|HardSigmoid|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Identity|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|ImageScaler|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|InstanceNormalization|(*in* input:**T**, *in* scale:**T**, *in* B:**T**, *out* output:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|LRN|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|LSTM|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *in* initial_c:**T**, *in* P:**T**, *out* Y:**T**, *out* Y_h:**T**, *out* Y_c:**T**)|7+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**T1** = tensor(int32)| -|LeakyRelu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Log|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|MatMul|(*in* A:**T**, *in* B:**T**, *out* Y:**T**)|9+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[1, 8]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Max|(*in* data_0:**T**, *out* max:**T**)|8+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[6, 7]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|MaxPool|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *out* Y:**T**, *out* Indices:**I**)|10+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[1, 7]|**I** = tensor(int64)| -| | ||**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[8, 9]|**I** = tensor(int64)| -| | ||**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|MemcpyFromHost|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|MemcpyToHost|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Min|(*in* data_0:**T**, *out* min:**T**)|8+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |[6, 7]|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Mul|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Neg|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(int32), tensor(int16), unknown, tensor(float), tensor(MLFloat16), tensor(int64), tensor(double)| -|Or|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| -| | ||**T1** = tensor(bool)| -|PRelu|(*in* X:**T**, *in* slope:**T**, *out* Y:**T**)|7+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Pad|(*in* data:**T**, *out* output:**T**)|2+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ParametricSoftplus|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Pow|(*in* X:**T**, *in* Y:**T**, *out* Z:**T**)|7+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|RNN|(*in* X:**T**, *in* W:**T**, *in* R:**T**, *in* B:**T**, *in* sequence_lens:**T1**, *in* initial_h:**T**, *out* Y:**T**, *out* Y_h:**T**)|7+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**T1** = tensor(int32)| -|Reciprocal|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceL1|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceL2|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceLogSum|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceLogSumExp|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceMax|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceMean|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceMin|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceProd|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceSum|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ReduceSumSquare|(*in* data:**T**, *out* reduced:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Relu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Reshape|(*in* data:**T**, *in* shape:**tensor(int64)**, *out* reshaped:**T**) or (*in* data:**T**, *out* reshaped:**T**)|5+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**shape** = tensor(int64)| -|Reshape_1||[1, 4]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Resize|(*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**)|10+|**T** = tensor(int32), tensor(float), tensor(MLFloat16), tensor(uint8), tensor(double)| -|ScaledTanh|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Selu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Shape|(*in* data:**T**, *out* shape:**T1**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**T1** = tensor(int64)| -|Shrink|(*in* input:**T**, *out* output:**T**)|9+|**T** = tensor(int32), tensor(int16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Sigmoid|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Slice|(*in* data:**T**, *out* output:**T**) or (*in* data:**T**, *in* starts:**Tind**, *in* ends:**Tind**, *in* axes:**Tind**, *in* steps:**Tind**, *out* output:**T**)|10+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -| | |[1, 9]|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | ||**Tind** = tensor(int32), tensor(int64)| -|Softmax|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Softplus|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Softsign|(*in* input:**T**, *out* output:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Split|(*in* input:**T**, *out* outputs:**T**) or (*in* input:**T**, *in* split:**T**, *out* outputs...:**T**)|2+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Sqrt|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Squeeze|(*in* data:**T**, *out* squeezed:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Sub|(*in* A:**T**, *in* B:**T**, *out* C:**T**)|7+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Sum|(*in* data_0:**T**, *out* sum:**T**)|8+|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -| | |[6, 7]|**T** = tensor(int32), tensor(uint32), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Tanh|(*in* input:**T**, *out* output:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|ThresholdedRelu|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | |10+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Tile|(*in* input:**T**, *in* tiles:**T**, *in* axis:**T**, *out* output:**T**) or (*in* input:**T**, *in* repeats:**T1**, *out* output:**T**)|6+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -| | ||**T1** = tensor(int64)| -|Transpose|(*in* data:**T**, *out* transposed:**T**)|1+|**T** = tensor(float), tensor(MLFloat16), tensor(double)| -|Unsqueeze|(*in* data:**T**, *out* expanded:**T**)|1+|**T** = tensor(int32), tensor(bool), tensor(int16), tensor(bfloat16), tensor(uint8), unknown, tensor(uint32), tensor(uint16), tensor(float), tensor(uint64), tensor(MLFloat16), tensor(int64), tensor(double)| -|Upsample|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *in* scales:**tensor(float)**, *out* Y:**T**)|[7, 9]|**T** = tensor(int32), tensor(float), tensor(MLFloat16), tensor(uint8), tensor(double)| -|Xor|(*in* A:**T**, *in* B:**T**, *out* C:**T1**)|7+|**T** = tensor(bool)| -| | ||**T1** = tensor(bool)| -| | -| | -**Operator Domain:** *com.microsoft* -|ConvTransposeWithDynamicPads|(*in* X:**T**, *in* W:**T**, *in* Pads:**tensor(int64)**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -| | -| | - - -## Operators implemented by MKLDNNExecutionProvider - -| Op Name | Parameters | OpSet Version | Types Supported | -|---------|------------|---------------|-----------------| -**Operator Domain:** *ai.onnx.ml* -|AveragePool|(*in* X:**T**, *out* Y:**T**)|[7, 8]|**T** = tensor(float)| -|BatchNormalization|(*in* X:**T**, *in* scale:**T**, *in* B:**T**, *in* mean:**T**, *in* var:**T**, *out* Y:**T**, *out* mean:**T**, *out* var:**T**, *out* saved_mean:**T**, *out* saved_var:**T**)|7+|**T** = tensor(float)| -|Conv|(*in* X:**T**, *in* W:**T**, *in* B:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|Gemm|(*in* A:**T**, *in* B:**T**, *in* C:**T**, *out* Y:**T**)|7+|**T** = tensor(float)| -|GlobalAveragePool|(*in* X:**T**, *out* Y:**T**)|[1, 8]|**T** = tensor(float)| -|GlobalMaxPool|(*in* X:**T**, *out* Y:**T**)|[1, 8]|**T** = tensor(float)| -|LRN|(*in* X:**T**, *out* Y:**T**)|1+|**T** = tensor(float)| -|MaxPool|(*in* X:**T**, *out* Y:**T**) or (*in* X:**T**, *out* Y:**T**, *out* Indices:**I**)|[1, 7]|**T** = tensor(float)| -| | |[8, 8]|**T** = tensor(float)| -|Relu|(*in* X:**T**, *out* Y:**T**)|6+|**T** = tensor(float)| -|Sum|(*in* data_0:**T**, *out* sum:**T**)|6+|**T** = tensor(float)| -| | -| | diff --git a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc index b484911f6d3a3..80901336e80ea 100644 --- a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc +++ b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc @@ -1153,7 +1153,10 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, double, TreeEnsembleClassifier); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, int64_t, TreeEnsembleClassifier); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, int32_t, TreeEnsembleClassifier); -class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, TreeEnsembleRegressor); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, float, TreeEnsembleRegressor); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, double, TreeEnsembleRegressor); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, int64_t, TreeEnsembleRegressor); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, int32_t, TreeEnsembleRegressor); class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, ZipMap); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, float_string, LabelEncoder); @@ -1236,8 +1239,14 @@ Status RegisterOnnxMLOperatorKernels(KernelRegistry& kernel_registry) { TreeEnsembleClassifier)>, BuildKernelCreateInfo, - BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo()).MayInplace(0, 0), - TreeEnsembleRegressor); +#define ADD_IN_TYPE_TREE_ENSEMBLE_REGRESSOR_OP(in_type) \ + ONNX_CPU_OPERATOR_TYPED_ML_KERNEL( \ + TreeEnsembleRegressor, \ + 1, \ + in_type, \ + KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType()).MayInplace(0, 0), \ + TreeEnsembleRegressor); + +ADD_IN_TYPE_TREE_ENSEMBLE_REGRESSOR_OP(float); +ADD_IN_TYPE_TREE_ENSEMBLE_REGRESSOR_OP(double); +ADD_IN_TYPE_TREE_ENSEMBLE_REGRESSOR_OP(int64_t); +ADD_IN_TYPE_TREE_ENSEMBLE_REGRESSOR_OP(int32_t); + template TreeEnsembleRegressor::TreeEnsembleRegressor(const OpKernelInfo& info) diff --git a/onnxruntime/test/providers/cpu/ml/treeregressor_test.cc b/onnxruntime/test/providers/cpu/ml/treeregressor_test.cc index 31cfcc7cadb5b..4d8782e121cc0 100644 --- a/onnxruntime/test/providers/cpu/ml/treeregressor_test.cc +++ b/onnxruntime/test/providers/cpu/ml/treeregressor_test.cc @@ -7,7 +7,8 @@ namespace onnxruntime { namespace test { -void GenTreeAndRunTest(const std::vector& X, const std::vector& base_values, const std::vector& results, const std::string& aggFunction) +template +void GenTreeAndRunTest(const std::vector& X, const std::vector& base_values, const std::vector& results, const std::string& aggFunction) { OpTester test("TreeEnsembleRegressor", 1, onnxruntime::kMLDomain); @@ -51,7 +52,7 @@ void GenTreeAndRunTest(const std::vector& X, const std::vector& ba } // default function is SUM //fill input data - test.AddInput("X", {8, 3}, X); + test.AddInput("X", {8, 3}, X); test.AddOutput("Y", {8, 2}, results); test.Run(); } @@ -60,23 +61,31 @@ TEST(MLOpTest, TreeRegressorMultiTargetAverage) { std::vector X = {1.f, 0.0f, 0.4f, 3.0f, 44.0f, -3.f, 12.0f, 12.9f, -312.f, 23.0f, 11.3f, -222.f, 23.0f, 11.3f, -222.f, 23.0f, 3311.3f, -222.f, 23.0f, 11.3f, -222.f, 43.0f, 413.3f, -114.f}; std::vector results = {1.33333333f, 29.f, 3.f, 14.f, 2.f, 23.f, 2.f, 23.f, 2.f, 23.f, 2.66666667f, 17.f, 2.f, 23.f, 3.f, 14.f}; std::vector base_values{0.f, 0.f}; - GenTreeAndRunTest(X, base_values, results, "AVERAGE"); + GenTreeAndRunTest(X, base_values, results, "AVERAGE"); } TEST(MLOpTest, TreeRegressorMultiTargetMin) { std::vector X = {1.f, 0.0f, 0.4f, 3.0f, 44.0f, -3.f, 12.0f, 12.9f, -312.f, 23.0f, 11.3f, -222.f, 23.0f, 11.3f, -222.f, 23.0f, 3311.3f, -222.f, 23.0f, 11.3f, -222.f, 43.0f, 413.3f, -114.f}; std::vector results = {5.f, 28.f, 8.f, 19.f, 7.f, 28.f, 7.f, 28.f, 7.f, 28.f, 7.f, 19.f, 7.f, 28.f, 8.f, 19.f}; std::vector base_values{5.f, 5.f}; - GenTreeAndRunTest(X, base_values, results, "MIN"); + GenTreeAndRunTest(X, base_values, results, "MIN"); } TEST(MLOpTest, TreeRegressorMultiTargetMax) { std::vector X = {1.f, 0.0f, 0.4f, 3.0f, 44.0f, -3.f, 12.0f, 12.9f, -312.f, 23.0f, 11.3f, -222.f, 23.0f, 11.3f, -222.f, 23.0f, 3311.3f, -222.f, 23.0f, 11.3f, -222.f, 43.0f, 413.3f, -114.f}; std::vector results = {2.f, 41.f, 3.f, 14.f, 2.f, 23.f, 2.f, 23.f, 2.f, 23.f, 3.f, 23.f, 2.f, 23.f, 3.f, 14.f}; std::vector base_values{0.f, 0.f}; - GenTreeAndRunTest(X, base_values, results, "MAX"); + GenTreeAndRunTest(X, base_values, results, "MAX"); } +TEST(MLOpTest, TreeRegressorMultiTargetMaxDouble) { + std::vector X = {1.f, 0.0f, 0.4f, 3.0f, 44.0f, -3.f, 12.0f, 12.9f, -312.f, 23.0f, 11.3f, -222.f, 23.0f, 11.3f, -222.f, 23.0f, 3311.3f, -222.f, 23.0f, 11.3f, -222.f, 43.0f, 413.3f, -114.f}; + std::vector results = {2.f, 41.f, 3.f, 14.f, 2.f, 23.f, 2.f, 23.f, 2.f, 23.f, 3.f, 23.f, 2.f, 23.f, 3.f, 14.f}; + std::vector base_values{0.f, 0.f}; + GenTreeAndRunTest(X, base_values, results, "MAX"); +} + + TEST(MLOpTest, TreeRegressorSingleTargetSum) { OpTester test("TreeEnsembleRegressor", 1, onnxruntime::kMLDomain); diff --git a/tools/ci_build/build.py b/tools/ci_build/build.py index e9cb0b0418c80..cad6cd1ce40f6 100755 --- a/tools/ci_build/build.py +++ b/tools/ci_build/build.py @@ -831,23 +831,23 @@ def generate_documentation(source_dir, build_dir, configs): for config in configs: #copy the gen_doc.py shutil.copy(os.path.join(source_dir,'tools','python','gen_doc.py'), - os.path.join(build_dir,config, config)) + os.path.join(build_dir,config, 'gen_doc.py')) shutil.copy(os.path.join(source_dir,'tools','python','gen_opkernel_doc.py'), - os.path.join(build_dir,config, config)) + os.path.join(build_dir,config, 'gen_opkernel_doc.py')) run_subprocess([ sys.executable, 'gen_doc.py', '--output_path', operator_doc_path ], - cwd = os.path.join(build_dir,config, config)) + cwd = os.path.join(build_dir,config)) run_subprocess([ sys.executable, 'gen_opkernel_doc.py', '--output_path', opkernel_doc_path ], - cwd = os.path.join(build_dir,config, config)) + cwd = os.path.join(build_dir,config)) docdiff = '' try: