diff --git a/docs/Changelog.md b/docs/Changelog.md index 8abf5261c05..15a2e6db830 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -19607,6 +19607,41 @@ This version of the operator has been available since version 15 of the default
Constrain output types to all numeric tensors and bool tensors.
+### **CastLike-15** + + The operator casts the elements of a given input tensor (the first input) to + the same data type as the elements of the second input tensor. + See documentation of the Cast operator for further details. + +#### Version + +This version of the operator has been available since version 15 of the default ONNX operator set. + +#### Inputs + +
+
input (differentiable) : T1
+
Input tensor to be cast.
+
target_type (non-differentiable) : T2
+
The (first) input tensor will be cast to produce a tensor of the same type as this (second input) tensor.
+
+ +#### Outputs + +
+
output (differentiable) : T2
+
Output tensor produced by casting the first input tensor to have the same type as the second input tensor.
+
+ +#### Type Constraints + +
+
T1 : tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(bool), tensor(string), tensor(bfloat16)
+
Constrain input types. Casting from complex is not supported.
+
T2 : tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(bool), tensor(string), tensor(bfloat16)
+
Constrain output types. Casting to complex is not supported.
+
+ ### **Optional-15** Construct an optional type value containing either an empty optional of a certain type specified by the attribute, diff --git a/docs/Operators.md b/docs/Operators.md index c2480a5fc79..a25efb9ef6d 100644 --- a/docs/Operators.md +++ b/docs/Operators.md @@ -169,6 +169,7 @@ For an operator input/output's differentiability, it can be differentiable, |Xor|7, 1| |**Function**|**Since version**| |Bernoulli|15| +|CastLike|15| |Celu|12| |DynamicQuantizeLinear|11| |GreaterOrEqual|12| @@ -2530,6 +2531,129 @@ for from_type, to_type in test_cases: +### **CastLike** + + The operator casts the elements of a given input tensor (the first input) to + the same data type as the elements of the second input tensor. + See documentation of the Cast operator for further details. + +#### Version + +This version of the operator has been available since version 15 of the default ONNX operator set. + +#### Inputs + +
+
input (differentiable) : T1
+
Input tensor to be cast.
+
target_type (non-differentiable) : T2
+
The (first) input tensor will be cast to produce a tensor of the same type as this (second input) tensor.
+
+ +#### Outputs + +
+
output (differentiable) : T2
+
Output tensor produced by casting the first input tensor to have the same type as the second input tensor.
+
+ +#### Type Constraints + +
+
T1 : tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(bool), tensor(string), tensor(bfloat16)
+
Constrain input types. Casting from complex is not supported.
+
T2 : tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(bool), tensor(string), tensor(bfloat16)
+
Constrain output types. Casting to complex is not supported.
+
+ + +#### Examples + +
+castlike + +```python +shape = (3, 4) +test_cases = [ + ('FLOAT', 'FLOAT16'), + ('FLOAT', 'DOUBLE'), + ('FLOAT16', 'FLOAT'), + ('FLOAT16', 'DOUBLE'), + ('DOUBLE', 'FLOAT'), + ('DOUBLE', 'FLOAT16'), + ('FLOAT', 'STRING'), + ('STRING', 'FLOAT'), + ('FLOAT', 'BFLOAT16'), + ('BFLOAT16', 'FLOAT'), +] + +for from_type, to_type in test_cases: + input_type_proto = None + output_type_proto = None + if 'BFLOAT16' == from_type or 'BFLOAT16' == to_type: + np_fp32 = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.float32) + little_endisan = sys.byteorder == 'little' + np_uint16_view = np_fp32.view(dtype=np.uint16) + np_bfp16 = np_uint16_view[1::2] if little_endisan else np_uint16_view[0::2] + if 'BFLOAT16' == to_type: + assert from_type == 'FLOAT' + input = np_fp32.reshape([3, 4]) + output = np_bfp16.reshape([3, 4]) + input_type = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + else: + assert to_type == 'FLOAT' + input = np_bfp16.reshape([3, 4]) + #convert bfloat to FLOAT + np_fp32_zeros = np.zeros((len(np_bfp16) * 2,), dtype=np.uint16) + if little_endisan: + np_fp32_zeros[1::2] = np_bfp16 + else: + np_fp32_zeros[0::2] = np_bfp16 + np_fp32_from_bfloat = np_fp32_zeros.view(dtype=np.float32) + output = np_fp32_from_bfloat.reshape([3, 4]) + input_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + elif 'STRING' != from_type: + input = np.random.random_sample(shape).astype( + TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, from_type)]) + if ('STRING' == to_type): + # Converting input to str, then give it np.object dtype for generating script + ss = [] + for i in input.flatten(): + s = str(i).encode('utf-8') + su = s.decode('utf-8') + ss.append(su) + + output = np.array(ss).astype(np.object).reshape([3, 4]) + else: + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + else: + input = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.dtype(np.object)).reshape([3, 4]) + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + like = output.flatten()[0:1] + node = onnx.helper.make_node( + 'CastLike', + inputs=['input', 'like'], + outputs=['output'], + ) + if input_type_proto and output_type_proto: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type, + input_type_protos=[input_type_proto, output_type_proto], + output_type_protos=[output_type_proto]) + else: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type) +``` + +
+ + ### **Ceil** Ceil takes one input data (Tensor) and produces one output data diff --git a/docs/TestCoverage.md b/docs/TestCoverage.md index 7c28b808080..a0bc6ba37c0 100644 --- a/docs/TestCoverage.md +++ b/docs/TestCoverage.md @@ -6,7 +6,7 @@ * [Overall Test Coverage](#overall-test-coverage) # Node Test Coverage ## Summary -Node tests have covered 151/167 (90.42%, 5 generators excluded) common operators. +Node tests have covered 152/168 (90.48%, 5 generators excluded) common operators. Node tests have covered 0/0 (N/A) experimental operators. @@ -1717,6 +1717,93 @@ for from_type, to_type in test_cases: +### CastLike +There are 1 test cases, listed as following: +
+castlike + +```python +shape = (3, 4) +test_cases = [ + ('FLOAT', 'FLOAT16'), + ('FLOAT', 'DOUBLE'), + ('FLOAT16', 'FLOAT'), + ('FLOAT16', 'DOUBLE'), + ('DOUBLE', 'FLOAT'), + ('DOUBLE', 'FLOAT16'), + ('FLOAT', 'STRING'), + ('STRING', 'FLOAT'), + ('FLOAT', 'BFLOAT16'), + ('BFLOAT16', 'FLOAT'), +] + +for from_type, to_type in test_cases: + input_type_proto = None + output_type_proto = None + if 'BFLOAT16' == from_type or 'BFLOAT16' == to_type: + np_fp32 = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.float32) + little_endisan = sys.byteorder == 'little' + np_uint16_view = np_fp32.view(dtype=np.uint16) + np_bfp16 = np_uint16_view[1::2] if little_endisan else np_uint16_view[0::2] + if 'BFLOAT16' == to_type: + assert from_type == 'FLOAT' + input = np_fp32.reshape([3, 4]) + output = np_bfp16.reshape([3, 4]) + input_type = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + else: + assert to_type == 'FLOAT' + input = np_bfp16.reshape([3, 4]) + #convert bfloat to FLOAT + np_fp32_zeros = np.zeros((len(np_bfp16) * 2,), dtype=np.uint16) + if little_endisan: + np_fp32_zeros[1::2] = np_bfp16 + else: + np_fp32_zeros[0::2] = np_bfp16 + np_fp32_from_bfloat = np_fp32_zeros.view(dtype=np.float32) + output = np_fp32_from_bfloat.reshape([3, 4]) + input_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + elif 'STRING' != from_type: + input = np.random.random_sample(shape).astype( + TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, from_type)]) + if ('STRING' == to_type): + # Converting input to str, then give it np.object dtype for generating script + ss = [] + for i in input.flatten(): + s = str(i).encode('utf-8') + su = s.decode('utf-8') + ss.append(su) + + output = np.array(ss).astype(np.object).reshape([3, 4]) + else: + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + else: + input = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.dtype(np.object)).reshape([3, 4]) + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + like = output.flatten()[0:1] + node = onnx.helper.make_node( + 'CastLike', + inputs=['input', 'like'], + outputs=['output'], + ) + if input_type_proto and output_type_proto: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type, + input_type_protos=[input_type_proto, output_type_proto], + output_type_protos=[output_type_proto]) + else: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type) +``` + +
+ + ### Ceil There are 1 test cases, listed as following:
diff --git a/onnx/backend/test/case/node/__init__.py b/onnx/backend/test/case/node/__init__.py index 0234f849d47..0974fa42c0d 100644 --- a/onnx/backend/test/case/node/__init__.py +++ b/onnx/backend/test/case/node/__init__.py @@ -109,7 +109,7 @@ def _extract_value_info(input, name, type_proto=None): # type: (Union[List[Any] raise NotImplementedError("_extract_value_info: both input and type_proto arguments cannot be None.") elif isinstance(input, list): elem_type = onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[input[0].dtype] - shape = input[0].shape + shape = None tensor_type_proto = onnx.helper.make_tensor_type_proto(elem_type, shape) type_proto = onnx.helper.make_sequence_type_proto(tensor_type_proto) else: diff --git a/onnx/backend/test/case/node/castlike.py b/onnx/backend/test/case/node/castlike.py new file mode 100644 index 00000000000..c2bc2018d86 --- /dev/null +++ b/onnx/backend/test/case/node/castlike.py @@ -0,0 +1,100 @@ +# SPDX-License-Identifier: Apache-2.0 + +# coding: utf-8 + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import numpy as np # type: ignore + +import onnx +from onnx import TensorProto +from onnx.mapping import TENSOR_TYPE_TO_NP_TYPE + +from ..base import Base +from . import expect +import sys + + +class CastLike(Base): + + @staticmethod + def export(): # type: () -> None + shape = (3, 4) + test_cases = [ + ('FLOAT', 'FLOAT16'), + ('FLOAT', 'DOUBLE'), + ('FLOAT16', 'FLOAT'), + ('FLOAT16', 'DOUBLE'), + ('DOUBLE', 'FLOAT'), + ('DOUBLE', 'FLOAT16'), + ('FLOAT', 'STRING'), + ('STRING', 'FLOAT'), + ('FLOAT', 'BFLOAT16'), + ('BFLOAT16', 'FLOAT'), + ] + + for from_type, to_type in test_cases: + input_type_proto = None + output_type_proto = None + if 'BFLOAT16' == from_type or 'BFLOAT16' == to_type: + np_fp32 = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.float32) + little_endisan = sys.byteorder == 'little' + np_uint16_view = np_fp32.view(dtype=np.uint16) + np_bfp16 = np_uint16_view[1::2] if little_endisan else np_uint16_view[0::2] + if 'BFLOAT16' == to_type: + assert from_type == 'FLOAT' + input = np_fp32.reshape([3, 4]) + output = np_bfp16.reshape([3, 4]) + input_type = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + else: + assert to_type == 'FLOAT' + input = np_bfp16.reshape([3, 4]) + #convert bfloat to FLOAT + np_fp32_zeros = np.zeros((len(np_bfp16) * 2,), dtype=np.uint16) + if little_endisan: + np_fp32_zeros[1::2] = np_bfp16 + else: + np_fp32_zeros[0::2] = np_bfp16 + np_fp32_from_bfloat = np_fp32_zeros.view(dtype=np.float32) + output = np_fp32_from_bfloat.reshape([3, 4]) + input_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.BFLOAT16), None) + output_type_proto = onnx.helper.make_tensor_type_proto(int(TensorProto.FLOAT), None) + elif 'STRING' != from_type: + input = np.random.random_sample(shape).astype( + TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, from_type)]) + if ('STRING' == to_type): + # Converting input to str, then give it np.object dtype for generating script + ss = [] + for i in input.flatten(): + s = str(i).encode('utf-8') + su = s.decode('utf-8') + ss.append(su) + + output = np.array(ss).astype(np.object).reshape([3, 4]) + else: + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + else: + input = np.array([u'0.47892547', u'0.48033667', u'0.49968487', u'0.81910545', + u'0.47031248', u'0.816468', u'0.21087195', u'0.7229038', + u'NaN', u'INF', u'+INF', u'-INF'], dtype=np.dtype(np.object)).reshape([3, 4]) + output = input.astype(TENSOR_TYPE_TO_NP_TYPE[getattr(TensorProto, to_type)]) + like = output.flatten()[0:1] + node = onnx.helper.make_node( + 'CastLike', + inputs=['input', 'like'], + outputs=['output'], + ) + if input_type_proto and output_type_proto: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type, + input_type_protos=[input_type_proto, output_type_proto], + output_type_protos=[output_type_proto]) + else: + expect(node, inputs=[input, like], outputs=[output], + name='test_castlike_' + from_type + '_to_' + to_type) diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/model.onnx b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/model.onnx new file mode 100644 index 00000000000..f3cc97f688a --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_BFLOAT16_to_FLOATZ +input +  + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..e7fbb216db4 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ>>>Q?>Q?W>9? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..c739ea465af Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..80a9fe87a0b Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/model.onnx new file mode 100644 index 00000000000..b3598c7ca2f Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..e7fbb216db4 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ>>>Q?>Q?W>9? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..c739ea465af Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..80a9fe87a0b Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/model.onnx b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/model.onnx new file mode 100644 index 00000000000..363c44c5d77 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_DOUBLE_to_FLOATZ +input +   + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..2f262521e8f --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/input_0.pb @@ -0,0 +1 @@ + BinputJ`Rd/?\ G?X'L ??F ?+ ?ԛ?|3):y? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..5f760bfd848 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/test_data_set_0/output_0.pb @@ -0,0 +1 @@ +BoutputJ0>L8>j?a>}?=U>R.%>2'?p>I>Jz> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/model.onnx b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/model.onnx new file mode 100644 index 00000000000..ead7aa56c58 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/model.onnx @@ -0,0 +1,18 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_DOUBLE_to_FLOAT16Z +input +   + +Z +like + + + +b +output +  + + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..a1a2cd292a8 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..1b6f2322234 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/input_1.pb @@ -0,0 +1,2 @@ + +BlikeJ1 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..05ff0b52aab --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/test_data_set_0/output_0.pb @@ -0,0 +1,2 @@ + +BoutputJ1/@9l0J25:7.:&.;7 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/model.onnx new file mode 100644 index 00000000000..5e792442a74 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..a1a2cd292a8 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..1b6f2322234 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/input_1.pb @@ -0,0 +1,2 @@ + +BlikeJ1 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..05ff0b52aab --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/test_data_set_0/output_0.pb @@ -0,0 +1,2 @@ + +BoutputJ1/@9l0J25:7.:&.;7 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/model.onnx new file mode 100644 index 00000000000..6081f696723 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..2f262521e8f --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/input_0.pb @@ -0,0 +1 @@ + BinputJ`Rd/?\ G?X'L ??F ?+ ?ԛ?|3):y? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..5f760bfd848 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/test_data_set_0/output_0.pb @@ -0,0 +1 @@ +BoutputJ0>L8>j?a>}?=U>R.%>2'?p>I>Jz> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/model.onnx new file mode 100644 index 00000000000..bf61a448bec --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/model.onnx @@ -0,0 +1,17 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT16_to_DOUBLEZ +input +  + + +Z +like + +  +b +output +   + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..1454185c4ff --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_0.pb @@ -0,0 +1,2 @@ + +BinputJ88;t9569+V9]92 0 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..a01a391921a Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..6d22219119f Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/model.onnx new file mode 100644 index 00000000000..e6fca86569c Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..1454185c4ff --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_0.pb @@ -0,0 +1,2 @@ + +BinputJ88;t9569+V9]92 0 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..a01a391921a Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..6d22219119f Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/model.onnx new file mode 100644 index 00000000000..74a6b56ca77 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/model.onnx @@ -0,0 +1,17 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT16_to_FLOATZ +input +  + + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..ce7f7bd3693 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_0.pb @@ -0,0 +1,2 @@ + +BinputJ/90;-86<42:L78$8 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..dd2ce497778 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..9e65670828a Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/model.onnx new file mode 100644 index 00000000000..18f1e659f13 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..ce7f7bd3693 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_0.pb @@ -0,0 +1,2 @@ + +BinputJ/90;-86<42:L78$8 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..dd2ce497778 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..9e65670828a Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/model.onnx new file mode 100644 index 00000000000..2ddf9e195f3 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT_to_BFLOAT16Z +input +  + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..fc06bd1b5f4 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..d3235bb24f6 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BlikeJ> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..5d313b3c56c --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/test_data_set_0/output_0.pb @@ -0,0 +1 @@ +BoutputJ>>>Q?>Q?W>9? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/model.onnx new file mode 100644 index 00000000000..8403d07fd98 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..fc06bd1b5f4 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..d3235bb24f6 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BlikeJ> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..5d313b3c56c --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/test_data_set_0/output_0.pb @@ -0,0 +1 @@ +BoutputJ>>>Q?>Q?W>9? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/model.onnx new file mode 100644 index 00000000000..c3489a1b61d --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT_to_DOUBLEZ +input +  + +Z +like + +  +b +output +   + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..a3a4dfd28ad --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0^k?l?Z{=p= <&U?H5G?^?z?L?G>G? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..9d880ecb0e3 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..ab6a834d8e1 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/model.onnx new file mode 100644 index 00000000000..f5064b546b9 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..a3a4dfd28ad --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0^k?l?Z{=p= <&U?H5G?^?z?L?G>G? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..9d880ecb0e3 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/input_1.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..ab6a834d8e1 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/model.onnx new file mode 100644 index 00000000000..43fc912b1d6 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/model.onnx @@ -0,0 +1,18 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT_to_FLOAT16Z +input +  + +Z +like + + + +b +output +  + + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..11115432265 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0  ?7?N?w} ?H>QY%?n >~J?e? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..5b8b689b798 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/input_1.pb @@ -0,0 +1,2 @@ + +BlikeJd8 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..2fa7f21ce78 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/model.onnx new file mode 100644 index 00000000000..fce76c7e483 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..11115432265 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0  ?7?N?w} ?H>QY%?n >~J?e? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..5b8b689b798 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/input_1.pb @@ -0,0 +1,2 @@ + +BlikeJd8 \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..2fa7f21ce78 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/model.onnx new file mode 100644 index 00000000000..be377f75fc4 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_FLOAT_to_STRINGZ +input +  + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..4b0bb0708c6 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0 z?(?a@=?a =̐>)=>'=΢>G>_=E1? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..796cde0030a --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +2 0.9767611Blike \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..8d2b65fc18b --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/test_data_set_0/output_0.pb @@ -0,0 +1,6 @@ +2 0.97676112 0.60484552 0.73926362 0.0391877932 +0.282806962 +0.120196562 0.29614022 +0.118727722 +0.317983182 +0.414262982 0.0641474952 0.6924721Boutput \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/model.onnx new file mode 100644 index 00000000000..24fdcc07bcd Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..4b0bb0708c6 --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BinputJ0 z?(?a@=?a =̐>)=>'=΢>G>_=E1? \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..796cde0030a --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +2 0.9767611Blike \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..8d2b65fc18b --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/test_data_set_0/output_0.pb @@ -0,0 +1,6 @@ +2 0.97676112 0.60484552 0.73926362 0.0391877932 +0.282806962 +0.120196562 0.29614022 +0.118727722 +0.317983182 +0.414262982 0.0641474952 0.6924721Boutput \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/model.onnx b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/model.onnx new file mode 100644 index 00000000000..c3e70b8089b --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/model.onnx @@ -0,0 +1,16 @@ + backend-test: + +input +likeoutput"CastLiketest_castlike_STRING_to_FLOATZ +input +  + +Z +like + + +b +output +  + +B \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..fbe920e572d --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_0.pb @@ -0,0 +1,7 @@ +2 +0.478925472 +0.480336672 +0.499684872 +0.819105452 +0.4703124820.8164682 +0.210871952 0.72290382NaN2INF2+INF2-INFBinput \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..7cb044382ca --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BlikeJ5> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..20e73945090 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/model.onnx b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/model.onnx new file mode 100644 index 00000000000..7014726d599 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/model.onnx differ diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_0.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_0.pb new file mode 100644 index 00000000000..fbe920e572d --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_0.pb @@ -0,0 +1,7 @@ +2 +0.478925472 +0.480336672 +0.499684872 +0.819105452 +0.4703124820.8164682 +0.210871952 0.72290382NaN2INF2+INF2-INFBinput \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_1.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_1.pb new file mode 100644 index 00000000000..7cb044382ca --- /dev/null +++ b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BlikeJ5> \ No newline at end of file diff --git a/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/output_0.pb b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/output_0.pb new file mode 100644 index 00000000000..20e73945090 Binary files /dev/null and b/onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/test_data_set_0/output_0.pb differ diff --git a/onnx/backend/test/runner/__init__.py b/onnx/backend/test/runner/__init__.py index bf2cb920af3..049ed57bf9d 100644 --- a/onnx/backend/test/runner/__init__.py +++ b/onnx/backend/test/runner/__init__.py @@ -58,6 +58,7 @@ def __init__(self, backend, parent_module=None): # type: (Type[Backend], Option self._parent_module = parent_module self._include_patterns = set() # type: Set[Pattern[Text]] self._exclude_patterns = set() # type: Set[Pattern[Text]] + self._xfail_patterns = set() # type: Set[Pattern[Text]] # This is the source of the truth of all test functions. # Properties `test_cases`, `test_suite` and `tests` will be @@ -94,6 +95,10 @@ def exclude(self, pattern): # type: (Text) -> Runner self._exclude_patterns.add(re.compile(pattern)) return self + def xfail(self, pattern): # type: (Text) -> Runner + self._xfail_patterns.add(re.compile(pattern)) + return self + def enable_report(self): # type: () -> Runner import pytest # type: ignore @@ -120,6 +125,9 @@ def _filtered_test_items(self): # type: () -> Dict[Text, Dict[Text, TestItem]] 'matched exclude pattern "{}"'.format( exclude.pattern) )(item.func) + for xfail in self._xfail_patterns: + if xfail.search(name): + item.func = unittest.expectedFailure(item.func) filtered[category][name] = item return filtered diff --git a/onnx/defs/operator_sets.h b/onnx/defs/operator_sets.h index f247370454e..7ad6e8d729a 100644 --- a/onnx/defs/operator_sets.h +++ b/onnx/defs/operator_sets.h @@ -972,6 +972,7 @@ class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 15, Pow); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 15, Optional); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 15, OptionalHasElement); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 15, OptionalGetElement); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 15, CastLike); // Iterate over schema from ai.onnx version 15 class OpSet_Onnx_ver15 { @@ -983,6 +984,7 @@ class OpSet_Onnx_ver15 { fn(GetOpSchema()); fn(GetOpSchema()); fn(GetOpSchema()); + fn(GetOpSchema()); } }; diff --git a/onnx/defs/tensor/defs.cc b/onnx/defs/tensor/defs.cc index 785d79a49b3..c5eab356f0a 100644 --- a/onnx/defs/tensor/defs.cc +++ b/onnx/defs/tensor/defs.cc @@ -4,6 +4,7 @@ #include "onnx/defs/tensor/utils.h" +#include "onnx/defs/function.h" #include #include @@ -103,6 +104,101 @@ ONNX_OPERATOR_SET_SCHEMA( } })); +static const char* CastLike_ver15_doc = R"DOC( +The operator casts the elements of a given input tensor (the first input) to +the same data type as the elements of the second input tensor. +See documentation of the Cast operator for further details. +)DOC"; + +ONNX_OPERATOR_SET_SCHEMA( + CastLike, + 15, + OpSchema() + .SetDoc(CastLike_ver15_doc) + .Input( + 0, + "input", + "Input tensor to be cast.", + "T1", + OpSchema::Single, + true, + 1, + OpSchema::Differentiable) + .Input( + 1, + "target_type", + "The (first) input tensor will be cast to produce a tensor of the same type as this (second input) tensor.", + "T2", + OpSchema::Single, + true, + 1, + OpSchema::NonDifferentiable) + .Output( + 0, + "output", + "Output tensor produced by casting the first input tensor to have the same type as the second input tensor.", + "T2", + OpSchema::Single, + true, + 1, + OpSchema::Differentiable) + .TypeConstraint( + "T1", + { "tensor(float16)", + "tensor(float)", + "tensor(double)", + "tensor(int8)", + "tensor(int16)", + "tensor(int32)", + "tensor(int64)", + "tensor(uint8)", + "tensor(uint16)", + "tensor(uint32)", + "tensor(uint64)", + "tensor(bool)", + "tensor(string)", + "tensor(bfloat16)" }, + "Constrain input types. Casting from complex is not supported.") + .TypeConstraint( + "T2", + { "tensor(float16)", + "tensor(float)", + "tensor(double)", + "tensor(int8)", + "tensor(int16)", + "tensor(int32)", + "tensor(int64)", + "tensor(uint8)", + "tensor(uint16)", + "tensor(uint32)", + "tensor(uint64)", + "tensor(bool)", + "tensor(string)", + "tensor(bfloat16)" }, + "Constrain output types. Casting to complex is not supported.") + .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 1, 0); + if (hasNInputShapes(ctx, 1)) { + propagateShapeFromInputToOutput(ctx, 0, 0); + } +}) +.SetContextDependentFunctionBodyBuilder( + [](const FunctionBodyBuildContext& ctx, + const OpSchema& schema, + FunctionProto& functionProto) -> bool { + auto target_type = ctx.getInputType(1); + if ((target_type == nullptr) || (!target_type->has_tensor_type())) { + // we cannot create a correct function body without knowing the target element type + return false; + } + auto target_elt_type = target_type->tensor_type().elem_type(); + std::vector body{ + // nodes: {outputs, op, inputs, attributes} + { {"output"}, "Cast", {"input"}, {MakeAttribute("to", (int64_t)(target_elt_type))} } + }; + return FunctionBodyHelper::BuildFunctionProto(functionProto, schema, body, {}); +})); + static const char* Reshape_ver14_doc = R"DOC( Reshape the input tensor similar to numpy.reshape. First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor. diff --git a/onnx/test/automatic_upgrade_test.py b/onnx/test/automatic_upgrade_test.py index 687cd353072..1eeaf4bcea1 100644 --- a/onnx/test/automatic_upgrade_test.py +++ b/onnx/test/automatic_upgrade_test.py @@ -59,8 +59,8 @@ def _test_op_upgrade( inputs += [helper.make_tensor_sequence_value_info(name, ttype, shape)] elif is_opt: type_proto = helper.make_tensor_type_proto(ttype, shape) - type_proto2 = helper.make_optional_type_proto(type_proto) - inputs += [helper.make_value_info(name, type_proto2)] + optional_type_proto = helper.make_optional_type_proto(type_proto) + inputs += [helper.make_value_info(name, optional_type_proto)] else: inputs += [helper.make_tensor_value_info(name, ttype, shape)] @@ -80,8 +80,8 @@ def _test_op_upgrade( outputs += [helper.make_tensor_sequence_value_info(name, ttype, shape)] elif is_opt: type_proto = helper.make_tensor_type_proto(ttype, shape) - type_proto2 = helper.make_optional_type_proto(type_proto) - outputs += [helper.make_value_info(name, type_proto2)] + optional_type_proto = helper.make_optional_type_proto(type_proto) + outputs += [helper.make_value_info(name, optional_type_proto)] else: outputs += [helper.make_tensor_value_info(name, ttype, shape)] @@ -1026,6 +1026,13 @@ def test_Xor(self): # type: () -> None [TensorProto.BOOL, TensorProto.BOOL], [TensorProto.BOOL] ) + def test_CastLike(self): # type: () -> None + self._test_op_upgrade('CastLike', 15, + [[2, 3, 4], [2, 1, 4]], + [[2, 3, 4]], + input_types=[TensorProto.FLOAT, TensorProto.FLOAT16], + output_types=[TensorProto.FLOAT16]) + def test_ops_tested(self): # type: () -> None all_schemas = onnx.defs.get_all_schemas() all_op_names = [schema.name for schema in all_schemas if schema.domain == ''] diff --git a/onnx/test/shape_inference_test.py b/onnx/test/shape_inference_test.py index 90a7cb98409..9ab3941597f 100644 --- a/onnx/test/shape_inference_test.py +++ b/onnx/test/shape_inference_test.py @@ -187,6 +187,13 @@ def test_cast(self): # type: () -> None []) self._assert_inferred(graph, [make_tensor_value_info("y", TensorProto.UINT8, (2, 4, 3))]) + def test_cast_like(self): # type: () -> None + graph = self._make_graph( + [("x", TensorProto.FLOAT, (2, 4, 3)), ("t", TensorProto.FLOAT16, ("N",))], + [make_node("CastLike", ["x", "t"], ["y"])], + []) + self._assert_inferred(graph, [make_tensor_value_info("y", TensorProto.FLOAT16, (2, 4, 3))]) + def test_concat(self): # type: () -> None graph = self._make_graph( [("x", TensorProto.FLOAT, (2, 4, 3)),