import onnx
from onnx import helper, TensorProto
def create_deep_chain_model(depth=30):
input_tensor = helper.make_tensor_value_info("input", TensorProto.FLOAT, [1, 4])
output_tensor = helper.make_tensor_value_info("output", TensorProto.FLOAT, [1, 4])
nodes = []
current_input = "input"
for i in range(depth):
op_type = "Relu" if i % 2 == 0 else "Abs"
output_name = f"chain_{i}" if i < depth - 1 else "output"
nodes.append(
helper.make_node(
op_type, [current_input], [output_name], name=f"{op_type.lower()}_{i}"
)
)
current_input = output_name
graph = helper.make_graph(
nodes,
"deep_chain_model",
[input_tensor],
[output_tensor],
)
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():
depth = 30
model = create_deep_chain_model(depth)
output_path = "../fixtures/deep_chain.onnx"
onnx.save(model, output_path)
print(f"Model saved to {output_path}")
print(f"\nModel info:")
print(f" Chain depth: {depth} operations")
print(f" Pattern: Relu → Abs → Relu → Abs → ...")
print(f" Tests type inference convergence with deep graphs")
if __name__ == "__main__":
main()