OptionalHasElement¶
OptionalHasElement - 18¶
Version¶
domain:
mainsince_version:
18function:
Falsesupport_level:
SupportType.COMMONshape inference:
True
This version of the operator has been available since version 18.
Summary¶
Returns true if (1) the input is an optional-type and contains an element, or, (2) the input is a tensor or sequence type. If the input is not provided or is an empty optional-type, this op returns false.
Inputs¶
Between 0 and 1 inputs.
input (optional, heterogeneous) - O:
The optional input.
Outputs¶
output (heterogeneous) - B:
A scalar boolean tensor. If true, it indicates that optional-type input contains an element. Otherwise, it is empty.
Type Constraints¶
O in (
optional(seq(tensor(bool))),optional(seq(tensor(complex128))),optional(seq(tensor(complex64))),optional(seq(tensor(double))),optional(seq(tensor(float))),optional(seq(tensor(float16))),optional(seq(tensor(int16))),optional(seq(tensor(int32))),optional(seq(tensor(int64))),optional(seq(tensor(int8))),optional(seq(tensor(string))),optional(seq(tensor(uint16))),optional(seq(tensor(uint32))),optional(seq(tensor(uint64))),optional(seq(tensor(uint8))),optional(tensor(bool)),optional(tensor(complex128)),optional(tensor(complex64)),optional(tensor(double)),optional(tensor(float)),optional(tensor(float16)),optional(tensor(int16)),optional(tensor(int32)),optional(tensor(int64)),optional(tensor(int8)),optional(tensor(string)),optional(tensor(uint16)),optional(tensor(uint32)),optional(tensor(uint64)),optional(tensor(uint8)),seq(tensor(bool)),seq(tensor(complex128)),seq(tensor(complex64)),seq(tensor(double)),seq(tensor(float)),seq(tensor(float16)),seq(tensor(int16)),seq(tensor(int32)),seq(tensor(int64)),seq(tensor(int8)),seq(tensor(string)),seq(tensor(uint16)),seq(tensor(uint32)),seq(tensor(uint64)),seq(tensor(uint8)),tensor(bool),tensor(complex128),tensor(complex64),tensor(double),tensor(float),tensor(float16),tensor(int16),tensor(int32),tensor(int64),tensor(int8),tensor(string),tensor(uint16),tensor(uint32),tensor(uint64),tensor(uint8)):Constrain input type to optional tensor and optional sequence types.
B in (
tensor(bool)):Constrain output to a boolean tensor.
Examples¶
default¶
import numpy as np
import onnx
optional = np.array([1, 2, 3, 4]).astype(np.float32)
tensor_type_proto = onnx.helper.make_tensor_type_proto(
elem_type=onnx.TensorProto.FLOAT,
shape=[
4,
],
)
optional_type_proto = onnx.helper.make_optional_type_proto(tensor_type_proto)
# OptionalHasElement takes a tensor or optional as input
for input_type_protos in [tensor_type_proto, optional_type_proto]:
node = onnx.helper.make_node(
"OptionalHasElement", inputs=["optional_input"], outputs=["output"]
)
output = optional_has_element_reference_implementation(optional)
test_name = "test_optional_has_element_" + (
"optional_input"
if input_type_protos == optional_type_proto
else "tensor_input"
)
expect(
node,
inputs=[optional],
outputs=[output],
input_type_protos=[optional_type_proto],
name=test_name,
)
_empty¶
import numpy as np
import onnx
optional = None
tensor_type_proto = onnx.helper.make_tensor_type_proto(
elem_type=onnx.TensorProto.INT32, shape=[]
)
optional_type_proto = onnx.helper.make_optional_type_proto(tensor_type_proto)
# OptionalHasElement takes a tensor or optional as input
for input_type_proto in [tensor_type_proto, optional_type_proto]:
input_name_options = {
"empty": "optional_input",
"empty_no_input_name": "",
"empty_no_input": None,
}
for test_name_surfix, input_name in input_name_options.items():
if input_type_proto == tensor_type_proto and input_name:
# the input tensor cannot be empty if input name is provided.
continue
node = onnx.helper.make_node(
"OptionalHasElement",
inputs=[] if input_name is None else [input_name],
outputs=["output"],
)
output = optional_has_element_reference_implementation(optional)
test_name = (
"test_optional_has_element_"
+ test_name_surfix
+ (
"_optional_input"
if input_type_proto == optional_type_proto
else "_tensor_input"
)
)
expect(
node,
inputs=[optional] if input_name else [],
outputs=[output],
input_type_protos=[input_type_proto] if input_name else [],
name=test_name,
)
OptionalHasElement - 15¶
Version¶
domain:
mainsince_version:
15function:
Falsesupport_level:
SupportType.COMMONshape inference:
True
This version of the operator has been available since version 15.
Summary¶
Returns true if the optional-type input contains an element. If it is an empty optional-type, this op returns false.
Inputs¶
input (heterogeneous) - O:
The optional input.
Outputs¶
output (heterogeneous) - B:
A scalar boolean tensor. If true, it indicates that optional-type input contains an element. Otherwise, it is empty.
Type Constraints¶
O in (
optional(seq(tensor(bool))),optional(seq(tensor(complex128))),optional(seq(tensor(complex64))),optional(seq(tensor(double))),optional(seq(tensor(float))),optional(seq(tensor(float16))),optional(seq(tensor(int16))),optional(seq(tensor(int32))),optional(seq(tensor(int64))),optional(seq(tensor(int8))),optional(seq(tensor(string))),optional(seq(tensor(uint16))),optional(seq(tensor(uint32))),optional(seq(tensor(uint64))),optional(seq(tensor(uint8))),optional(tensor(bool)),optional(tensor(complex128)),optional(tensor(complex64)),optional(tensor(double)),optional(tensor(float)),optional(tensor(float16)),optional(tensor(int16)),optional(tensor(int32)),optional(tensor(int64)),optional(tensor(int8)),optional(tensor(string)),optional(tensor(uint16)),optional(tensor(uint32)),optional(tensor(uint64)),optional(tensor(uint8))):Constrain input type to optional tensor and optional sequence types.
B in (
tensor(bool)):Constrain output to a boolean tensor.