import onnx
from onnx import helper, TensorProto
def create_circular_preferences_model():
input1 = helper.make_tensor_value_info("input1", TensorProto.FLOAT, ["N", 4])
input2 = helper.make_tensor_value_info("input2", TensorProto.FLOAT, [2, "M"])
output = helper.make_tensor_value_info("output", TensorProto.FLOAT, [2, 4])
nodes = [
helper.make_node("Relu", ["input1"], ["branch1"], name="relu1"),
helper.make_node("Abs", ["input2"], ["branch2"], name="abs1"),
helper.make_node("Add", ["branch1", "branch2"], ["temp1"], name="add1"),
helper.make_node("Relu", ["temp1"], ["temp2"], name="relu2"),
helper.make_node("Abs", ["temp1"], ["temp3"], name="abs2"),
helper.make_node("Mul", ["temp2", "temp3"], ["output"], name="mul"),
]
graph = helper.make_graph(
nodes,
"circular_preferences_model",
[input1, input2],
[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():
model = create_circular_preferences_model()
output_path = "../fixtures/circular_preferences.onnx"
onnx.save(model, output_path)
print(f"Model saved to {output_path}")
print(f"\nModel info:")
print(f" Complex graph with potential circular preferences")
print(f" Tests type inference convergence")
if __name__ == "__main__":
main()