From 5c3aeb5c0c47185de07611f69a78c6d3062b9838 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Aug 2026 19:08:14 +0000 Subject: [PATCH 1/3] Initial plan From 3e476caaf51bdc3e3c9073c080fa82401e804647 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Aug 2026 19:12:52 +0000 Subject: [PATCH 2/3] Preserve unnamed optional outputs during optimization Co-authored-by: justinchuby <11205048+justinchuby@users.noreply.github.com> --- onnxscript/optimizer/_optimizer.py | 1 - onnxscript/optimizer/_optimizer_test.py | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/onnxscript/optimizer/_optimizer.py b/onnxscript/optimizer/_optimizer.py index 36beb7f848..f0fea7346f 100644 --- a/onnxscript/optimizer/_optimizer.py +++ b/onnxscript/optimizer/_optimizer.py @@ -65,7 +65,6 @@ def optimize_ir( common_passes.DeduplicateInitializersPass(), common_passes.CommonSubexpressionEliminationPass(), common_passes.OutputFixPass(), - common_passes.NameFixPass(), ] if inline: # Inline all functions first before optimizing diff --git a/onnxscript/optimizer/_optimizer_test.py b/onnxscript/optimizer/_optimizer_test.py index 05064fbc70..cc4fa69eb8 100644 --- a/onnxscript/optimizer/_optimizer_test.py +++ b/onnxscript/optimizer/_optimizer_test.py @@ -84,6 +84,30 @@ def test_static_split_to_sequence_with_uneven_split_ir(self): self.assertEqual(len(model_ir.graph.node(0).outputs), 2) self.assertEqual(model_ir.graph.node(0).op_type, "Split") + def test_unused_outputs_remain_unnamed(self): + model_proto = onnx.parser.parse_model( + """ + + main_graph ( + float[1, 2, 3, 3] x, + float[2] scale, + float[2] bias, + float[2] mean, + float[2] variance + ) => (float[1, 2, 3, 3] y) { + y, running_mean, running_var = BatchNormalization + (x, scale, bias, mean, variance) + } + """ + ) + model_ir = ir.serde.deserialize_model(model_proto) + + optimizer.optimize_ir(model_ir, num_iterations=1, onnx_shape_inference=False) + + self.assertEqual( + [output.name for output in model_ir.graph.node(0).outputs], ["y", "", ""] + ) + if __name__ == "__main__": unittest.main() From 0fc3b8b76c3d0915077bf90556cb13ccf4e8c4bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:22:07 +0000 Subject: [PATCH 3/3] Retain name fixing for optional outputs Co-authored-by: justinchuby <11205048+justinchuby@users.noreply.github.com> --- onnxscript/optimizer/_optimizer.py | 2 ++ onnxscript/optimizer/_optimizer_test.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/onnxscript/optimizer/_optimizer.py b/onnxscript/optimizer/_optimizer.py index f0fea7346f..1f7f342c35 100644 --- a/onnxscript/optimizer/_optimizer.py +++ b/onnxscript/optimizer/_optimizer.py @@ -65,6 +65,8 @@ def optimize_ir( common_passes.DeduplicateInitializersPass(), common_passes.CommonSubexpressionEliminationPass(), common_passes.OutputFixPass(), + common_passes.NameFixPass(), + common_passes.RemoveUnusedNodesPass(), ] if inline: # Inline all functions first before optimizing diff --git a/onnxscript/optimizer/_optimizer_test.py b/onnxscript/optimizer/_optimizer_test.py index cc4fa69eb8..4385bd7e61 100644 --- a/onnxscript/optimizer/_optimizer_test.py +++ b/onnxscript/optimizer/_optimizer_test.py @@ -84,7 +84,7 @@ def test_static_split_to_sequence_with_uneven_split_ir(self): self.assertEqual(len(model_ir.graph.node(0).outputs), 2) self.assertEqual(model_ir.graph.node(0).op_type, "Split") - def test_unused_outputs_remain_unnamed(self): + def test_name_fix_preserves_unnamed_unused_outputs(self): model_proto = onnx.parser.parse_model( """ @@ -101,9 +101,11 @@ def test_unused_outputs_remain_unnamed(self): """ ) model_ir = ir.serde.deserialize_model(model_proto) + model_ir.graph.inputs[1].name = "x" optimizer.optimize_ir(model_ir, num_iterations=1, onnx_shape_inference=False) + self.assertEqual([input.name for input in model_ir.graph.inputs[:2]], ["x", "x_1"]) self.assertEqual( [output.name for output in model_ir.graph.node(0).outputs], ["y", "", ""] )