From a78fd054a12dd7c51ee0e873dd4c3cc21b72a2cf Mon Sep 17 00:00:00 2001 From: tlopex <820958424@qq.com> Date: Thu, 2 Oct 2025 16:37:29 -0400 Subject: [PATCH 1/3] finish1 --- python/tvm/relax/frontend/torch/base_fx_graph_translator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/tvm/relax/frontend/torch/base_fx_graph_translator.py b/python/tvm/relax/frontend/torch/base_fx_graph_translator.py index 12b460e859ac..d776e30500bb 100644 --- a/python/tvm/relax/frontend/torch/base_fx_graph_translator.py +++ b/python/tvm/relax/frontend/torch/base_fx_graph_translator.py @@ -102,6 +102,9 @@ def _retrieve_args(self, node): return [self._retrieve_args(x) for x in node] elif isinstance(node, dict): return {self._retrieve_args(k): self._retrieve_args(v) for k, v in node.items()} + elif node is None: + # Convert None to a Relax null_value expression + return relax.op.null_value() else: return node From c8503c49db7df990787ac7760cf03aca00865890 Mon Sep 17 00:00:00 2001 From: tlopex <820958424@qq.com> Date: Thu, 2 Oct 2025 16:41:34 -0400 Subject: [PATCH 2/3] finish2 --- python/tvm/relax/frontend/torch/base_fx_graph_translator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/tvm/relax/frontend/torch/base_fx_graph_translator.py b/python/tvm/relax/frontend/torch/base_fx_graph_translator.py index d776e30500bb..c1cbd3416c57 100644 --- a/python/tvm/relax/frontend/torch/base_fx_graph_translator.py +++ b/python/tvm/relax/frontend/torch/base_fx_graph_translator.py @@ -103,7 +103,6 @@ def _retrieve_args(self, node): elif isinstance(node, dict): return {self._retrieve_args(k): self._retrieve_args(v) for k, v in node.items()} elif node is None: - # Convert None to a Relax null_value expression return relax.op.null_value() else: return node From 5f8f9d5d5761a718c86c580bee57a4f3dfeeda45 Mon Sep 17 00:00:00 2001 From: tlopex <820958424@qq.com> Date: Sat, 4 Oct 2025 12:41:39 -0400 Subject: [PATCH 3/3] add unittest --- .../test_frontend_from_exported_program.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/python/relax/test_frontend_from_exported_program.py b/tests/python/relax/test_frontend_from_exported_program.py index 4b0672ccc144..b35af088b530 100644 --- a/tests/python/relax/test_frontend_from_exported_program.py +++ b/tests/python/relax/test_frontend_from_exported_program.py @@ -6028,5 +6028,27 @@ def forward(self, x): np.testing.assert_allclose(pytorch_output2.numpy(), tvm_output2_np, rtol=1e-4, atol=1e-5) +def test_tensor_none_tuple(): + example_args = (torch.tensor([1.0, 2.0, 3.0]),) + + class TensorNoneModel(Module): + def forward(self, x): + return x + 1, None + + @tvm.script.ir_module + class Expected: + @R.function + def main( + x: R.Tensor((3,), dtype="float32") + ) -> R.Tuple(R.Tensor((3,), dtype="float32"), R.Object): + with R.dataflow(): + lv: R.Tensor((3,), dtype="float32") = R.add(x, R.const(1.0, "float32")) + gv: R.Tuple(R.Tensor((3,), dtype="float32"), R.Object) = (lv, R.null_value()) + R.output(gv) + return gv + + verify_model(TensorNoneModel(), example_args, {}, Expected) + + if __name__ == "__main__": tvm.testing.main()