Cast#
Domain:
ai.onnxSince version: 25
The operator casts the elements of a given input tensor to a data type specified by the ‘to’ argument and returns an output tensor of the same size in the converted type. The ‘to’ argument must be one of the data types specified in the ‘DataType’ enum field in the TensorProto message.
Inputs
input (T1): Input tensor to be cast.
Outputs
output (T2): Output tensor with the same shape as input with type specified by the ‘to’ argument
Attributes
round_mode (string): Rounding mode for conversion to float8e8m0. It only applies to casting to float8e8m0 and is
upby default.up: round to nearest value away from zero,down: round to nearest value towards zero,nearest: round to nearest value and ties round up.saturate (int): The parameter defines how the conversion behaves if an input value is out of range of the destination type. It only applies for float 8 conversion (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz). It is true by default. All cases are fully described in two tables inserted in the operator description.
to (int): The data type to which the elements of the input tensor are cast. Strictly must be one of the types from DataType enum in TensorProto.
Type Constraints
T1: Constrain input types. Casting from complex is not supported. Allowed types: tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(float8e8m0), tensor(int16), tensor(int2), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint2), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8).
T2: Constrain output types. Casting to complex is not supported. Allowed types: tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(float8e8m0), tensor(int16), tensor(int2), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint2), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8).
Examples#
test_cc_cast_FLOAT16_to_INT2
Node:
Cast(input) -> (output)
Attributes:
to = 26
Inputs:
input: shape=(7, 1), dtype=float16
[[-3.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[ 2.],
[ 3.]]
Outputs:
output: shape=(7, 1), dtype=int2
[[1],
[-2],
[-1],
[0],
[1],
[-2],
[-1]]
test_cc_cast_FLOAT16_to_UINT2
Node:
Cast(input) -> (output)
Attributes:
to = 25
Inputs:
input: shape=(7, 1), dtype=float16
[[-3.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[ 2.],
[ 3.]]
Outputs:
output: shape=(7, 1), dtype=uint2
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
test_cc_cast_FLOAT_to_INT2
Node:
Cast(input) -> (output)
Attributes:
to = 26
Inputs:
input: shape=(7, 1), dtype=float32
[[-3.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[ 2.],
[ 3.]]
Outputs:
output: shape=(7, 1), dtype=int2
[[1],
[-2],
[-1],
[0],
[1],
[-2],
[-1]]
test_cc_cast_FLOAT_to_UINT2
Node:
Cast(input) -> (output)
Attributes:
to = 25
Inputs:
input: shape=(7, 1), dtype=float32
[[-3.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[ 2.],
[ 3.]]
Outputs:
output: shape=(7, 1), dtype=uint2
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
test_cc_cast_INT2_to_FLOAT
Node:
Cast(input) -> (output)
Attributes:
to = 1
Inputs:
input: shape=(7, 1), dtype=int2
[[1],
[-2],
[-1],
[0],
[1],
[-2],
[-1]]
Outputs:
output: shape=(7, 1), dtype=float32
[[ 1.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[-2.],
[-1.]]
test_cc_cast_INT2_to_FLOAT16
Node:
Cast(input) -> (output)
Attributes:
to = 10
Inputs:
input: shape=(7, 1), dtype=int2
[[1],
[-2],
[-1],
[0],
[1],
[-2],
[-1]]
Outputs:
output: shape=(7, 1), dtype=float16
[[ 1.],
[-2.],
[-1.],
[ 0.],
[ 1.],
[-2.],
[-1.]]
test_cc_cast_INT2_to_INT8
Node:
Cast(input) -> (output)
Attributes:
to = 3
Inputs:
input: shape=(7, 1), dtype=int2
[[1],
[-2],
[-1],
[0],
[1],
[-2],
[-1]]
Outputs:
output: shape=(7, 1), dtype=int8
[[ 1],
[-2],
[-1],
[ 0],
[ 1],
[-2],
[-1]]
test_cc_cast_UINT2_to_FLOAT
Node:
Cast(input) -> (output)
Attributes:
to = 1
Inputs:
input: shape=(7, 1), dtype=uint2
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
Outputs:
output: shape=(7, 1), dtype=float32
[[1.],
[2.],
[3.],
[0.],
[1.],
[2.],
[3.]]
test_cc_cast_UINT2_to_FLOAT16
Node:
Cast(input) -> (output)
Attributes:
to = 10
Inputs:
input: shape=(7, 1), dtype=uint2
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
Outputs:
output: shape=(7, 1), dtype=float16
[[1.],
[2.],
[3.],
[0.],
[1.],
[2.],
[3.]]
test_cc_cast_UINT2_to_UINT8
Node:
Cast(input) -> (output)
Attributes:
to = 2
Inputs:
input: shape=(7, 1), dtype=uint2
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
Outputs:
output: shape=(7, 1), dtype=uint8
[[1],
[2],
[3],
[0],
[1],
[2],
[3]]
Differences with previous version (24)#
SchemaDiff: Cast (domain 'ai.onnx')
old version: 24
new version: 25
breaking: no
Type constraints:
changed ‘T1’: added types: [‘tensor(int2)’, ‘tensor(uint2)’]
changed ‘T2’: added types: [‘tensor(int2)’, ‘tensor(uint2)’]