import onnx
from onnx import helper, TensorProto
def create_cast_same_type_model():
input_tensor = helper.make_tensor_value_info("input", TensorProto.FLOAT, [2, 3])
output = helper.make_tensor_value_info("output", TensorProto.FLOAT, [2, 3])
nodes = [
helper.make_node("Cast", ["input"], ["cast_out"], name="cast", to=TensorProto.FLOAT),
helper.make_node("Relu", ["cast_out"], ["output"], name="relu"),
]
graph = helper.make_graph(nodes, "cast_noop_model", [input_tensor], [output])
model = helper.make_model(
graph, producer_name="onnx-ir-test", opset_imports=[helper.make_opsetid("", 16)]
)
onnx.checker.check_model(model)
return model
def create_cast_different_type_model():
input_tensor = helper.make_tensor_value_info("input", TensorProto.FLOAT, [2, 3])
output = helper.make_tensor_value_info("output", TensorProto.INT64, [2, 3])
nodes = [
helper.make_node("Cast", ["input"], ["output"], name="cast", to=TensorProto.INT64),
]
graph = helper.make_graph(nodes, "cast_not_noop_model", [input_tensor], [output])
model = helper.make_model(
graph, producer_name="onnx-ir-test", opset_imports=[helper.make_opsetid("", 16)]
)
onnx.checker.check_model(model)
return model
def main():
models = {
"noop_cast_same_type.onnx": create_cast_same_type_model(),
"noop_cast_different_type.onnx": create_cast_different_type_model(),
}
for filename, model in models.items():
output_path = f"../fixtures/{filename}"
onnx.save(model, output_path)
print(f"Saved {output_path}")
print(f" Nodes: {len(model.graph.node)}")
for node in model.graph.node:
print(f" - {node.op_type} ({node.name}): {list(node.input)} -> {list(node.output)}")
if __name__ == "__main__":
main()