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.739263620.0391877932
+0.282806962
+0.120196562 0.29614022
+0.118727722
+0.317983182
+0.4142629820.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.739263620.0391877932
+0.282806962
+0.120196562 0.29614022
+0.118727722
+0.317983182
+0.4142629820.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)),