From 11e552665d4114fe55879fc07d0ce8bc4e29f974 Mon Sep 17 00:00:00 2001 From: algorithm1832 <737634857@qq.com> Date: Fri, 26 Jun 2026 07:29:59 +0000 Subject: [PATCH 1/5] enhance tensor.nanmean test --- tests/test_Tensor_nanmean.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_Tensor_nanmean.py b/tests/test_Tensor_nanmean.py index 02990932d..9debcebc6 100644 --- a/tests/test_Tensor_nanmean.py +++ b/tests/test_Tensor_nanmean.py @@ -81,7 +81,7 @@ def test_case_6(): import torch input = torch.tensor([[1, 2], [3., float("nan")]]) dim, keepdim = 1, False - result = input.nanmean(dim, keepdim=keepdim) + result = input.nanmean(dtype=torch.float64) """ ) obj.run(pytorch_code, ["result"]) From d0672484c9683fea26aee57471a5bbbe0d73823a Mon Sep 17 00:00:00 2001 From: algorithm1832 <737634857@qq.com> Date: Fri, 26 Jun 2026 07:30:51 +0000 Subject: [PATCH 2/5] 8 apis --- paconvert/api_mapping.json | 98 ++++---------------------------------- 1 file changed, 8 insertions(+), 90 deletions(-) diff --git a/paconvert/api_mapping.json b/paconvert/api_mapping.json index 2b4e144f8..6620bdcda 100644 --- a/paconvert/api_mapping.json +++ b/paconvert/api_mapping.json @@ -1689,9 +1689,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.movedim": { - "Matcher": "ChangeAPIMatcher", - "paddle_api": "paddle.Tensor.moveaxis", - "min_input_args": 2 + "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.msort": { "Matcher": "ChangePrefixMatcher" @@ -1731,18 +1729,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.nanmean": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.Tensor.nanmean", - "min_input_args": 0, - "args_list": [ - "dim", - "keepdim", - "*", - "dtype" - ], - "kwargs_change": { - "dim": "axis" - } + "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.nanmedian": { "Matcher": "GenericMatcher", @@ -1763,19 +1750,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.nansum": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.Tensor.nansum", - "min_input_args": 0, - "args_list": [ - "dim", - "keepdim", - "*", - "dtype" - ], - "kwargs_change": { - "dim": "axis", - "dtype": "dtype" - } + "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.narrow": { "Matcher": "ChangePrefixMatcher" @@ -3604,17 +3579,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.clone": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.clone", - "min_input_args": 1, - "args_list": [ - "input", - "*", - "memory_format" - ], - "kwargs_change": { - "input": "x" - } + "Matcher": "ChangePrefixMatcher" }, "torch.column_stack": { "Matcher": "GenericMatcher", @@ -6586,17 +6551,7 @@ } }, "torch.movedim": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.moveaxis", - "min_input_args": 3, - "args_list": [ - "input", - "source", - "destination" - ], - "kwargs_change": { - "input": "x" - } + "Matcher": "ChangePrefixMatcher" }, "torch.msort": { "Matcher": "ChangePrefixMatcher" @@ -6668,21 +6623,7 @@ } }, "torch.nanmean": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.nanmean", - "min_input_args": 1, - "args_list": [ - "input", - "dim", - "keepdim", - "*", - "dtype", - "out" - ], - "kwargs_change": { - "input": "x", - "dim": "axis" - } + "Matcher": "ChangePrefixMatcher" }, "torch.nanmedian": { "Matcher": "ChangeAPIMatcher", @@ -6692,22 +6633,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.nansum": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.nansum", - "min_input_args": 1, - "args_list": [ - "input", - "dim", - "keepdim", - "*", - "dtype", - "out" - ], - "kwargs_change": { - "input": "x", - "dim": "axis", - "dtype": "dtype" - } + "Matcher": "ChangePrefixMatcher" }, "torch.narrow": { "Matcher": "ChangePrefixMatcher" @@ -10527,15 +10453,7 @@ } }, "torch.set_rng_state": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.set_rng_state", - "min_input_args": 1, - "args_list": [ - "new_state" - ], - "kwargs_change": { - "new_state": "state_list" - } + "Matcher": "ChangePrefixMatcher" }, "torch.sgn": { "Matcher": "GenericMatcher", From d27ad7917b4f2ddce1e1fdc93da3c07a67a88845 Mon Sep 17 00:00:00 2001 From: algorithm1832 <737634857@qq.com> Date: Fri, 26 Jun 2026 08:04:35 +0000 Subject: [PATCH 3/5] tensor.backward and case --- paconvert/api_mapping.json | 17 +---------------- tests/test_Tensor_backward.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/paconvert/api_mapping.json b/paconvert/api_mapping.json index 6620bdcda..e39fb1ec9 100644 --- a/paconvert/api_mapping.json +++ b/paconvert/api_mapping.json @@ -600,22 +600,7 @@ "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.backward": { - "Matcher": "GenericMatcher", - "paddle_api": "paddle.Tensor.backward", - "min_input_args": 0, - "args_list": [ - "gradient", - "retain_graph", - "create_graph", - "inputs" - ], - "kwargs_change": { - "gradient": "grad_tensor" - }, - "unsupport_args": [ - "create_graph", - "inputs" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.baddbmm": { "Matcher": "ChangePrefixMatcher" diff --git a/tests/test_Tensor_backward.py b/tests/test_Tensor_backward.py index 6fc247466..42a2c1df5 100644 --- a/tests/test_Tensor_backward.py +++ b/tests/test_Tensor_backward.py @@ -90,3 +90,18 @@ def test_case_5(): """ ) obj.run(pytorch_code, ["result"]) + + +def test_case_6(): + # Create graph=True + pytorch_code = textwrap.dedent( + """ + import torch + a = torch.tensor([1., 2., 3.], requires_grad=True) + out = a ** 2 + out.sum().backward(create_graph=True) + a.grad = torch.tensor(a.grad, requires_grad=True) + result = a.grad + """ + ) + obj.run(pytorch_code, ["result"]) From 5b532f8012cb75c643a7e60308ac76f5134c61bb Mon Sep 17 00:00:00 2001 From: algorithm1832 <737634857@qq.com> Date: Fri, 26 Jun 2026 08:19:52 +0000 Subject: [PATCH 4/5] 3 apis --- paconvert/api_mapping.json | 6 ++- paconvert/api_matcher.py | 7 --- paconvert/attribute_mapping.json | 2 +- tests/test_nn_init_sparse_.py | 79 ++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 tests/test_nn_init_sparse_.py diff --git a/paconvert/api_mapping.json b/paconvert/api_mapping.json index e39fb1ec9..4935bc090 100644 --- a/paconvert/api_mapping.json +++ b/paconvert/api_mapping.json @@ -5629,8 +5629,7 @@ ] }, "torch.initial_seed": { - "Matcher": "SeedMatcher", - "min_input_args": 0 + "Matcher": "ChangePrefixMatcher" }, "torch.inner": { "Matcher": "ChangePrefixMatcher" @@ -9159,6 +9158,9 @@ "torch.nn.init.orthogonal_": { "Matcher": "ChangePrefixMatcher" }, + "torch.nn.init.sparse_": { + "Matcher": "ChangePrefixMatcher" + }, "torch.nn.init.trunc_normal_": { "Matcher": "ChangePrefixMatcher" }, diff --git a/paconvert/api_matcher.py b/paconvert/api_matcher.py index ee78d4282..ad52765e8 100644 --- a/paconvert/api_matcher.py +++ b/paconvert/api_matcher.py @@ -566,13 +566,6 @@ def generate_code(self, kwargs): return code -class TensorNbytesMatcher(BaseMatcher): - def get_paddle_class_attribute_nodes(self, node): - self.parse_func(node) - code = "{}.size * {}.element_size()".format(self.paddleClass, self.paddleClass) - return ast.parse(code).body - - class DimOrderMatcher(BaseMatcher): def generate_code(self, kwargs): API_TEMPLATE = textwrap.dedent( diff --git a/paconvert/attribute_mapping.json b/paconvert/attribute_mapping.json index 96d4603b8..6f5b9b73b 100644 --- a/paconvert/attribute_mapping.json +++ b/paconvert/attribute_mapping.json @@ -51,7 +51,7 @@ }, "torch.Tensor.names": {}, "torch.Tensor.nbytes": { - "Matcher": "TensorNbytesMatcher" + "Matcher": "ChangePrefixMatcher" }, "torch.Tensor.ndim": { "Matcher": "ChangePrefixMatcher" diff --git a/tests/test_nn_init_sparse_.py b/tests/test_nn_init_sparse_.py new file mode 100644 index 000000000..d2caf0c3d --- /dev/null +++ b/tests/test_nn_init_sparse_.py @@ -0,0 +1,79 @@ +# Copyright (c) 2026 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import textwrap + +from apibase import APIBase + +obj = APIBase("torch.nn.init.sparse_") + + +def test_case_1(): + pytorch_code = textwrap.dedent( + """ + import torch + tensor = torch.empty(3, 5) + torch.nn.init.sparse_(tensor, sparsity=0.1, std=0.01) + result = tensor + """ + ) + obj.run(pytorch_code, ["result"], check_value=False) + + +def test_case_2(): + pytorch_code = textwrap.dedent( + """ + import torch + tensor = torch.empty(4, 6) + torch.nn.init.sparse_(tensor=tensor, sparsity=0.2, std=0.05) + result = tensor + """ + ) + obj.run(pytorch_code, ["result"], check_value=False) + + +def test_case_3(): + pytorch_code = textwrap.dedent( + """ + import torch + tensor = torch.empty(5, 10) + torch.nn.init.sparse_(tensor, std=0.1, sparsity=0.3) + result = tensor + """ + ) + obj.run(pytorch_code, ["result"], check_value=False) + + +def test_case_4(): + pytorch_code = textwrap.dedent( + """ + import torch + tensor = torch.empty(8, 8) + torch.nn.init.sparse_(tensor, 0.5, 0.2) + result = tensor + """ + ) + obj.run(pytorch_code, ["result"], check_value=False) + + +def test_case_5(): + pytorch_code = textwrap.dedent( + """ + import torch + tensor = torch.empty(3, 2) + torch.nn.init.sparse_(sparsity=0.2, std=0.05, tensor=tensor) + result = tensor + """ + ) + obj.run(pytorch_code, ["result"], check_value=False) From 8b7891465ec076a197c372485e1653273b96b3d1 Mon Sep 17 00:00:00 2001 From: algorithm1832 <737634857@qq.com> Date: Fri, 26 Jun 2026 09:03:28 +0000 Subject: [PATCH 5/5] 7 apis --- paconvert/api_mapping.json | 81 ++++---------------------------------- 1 file changed, 7 insertions(+), 74 deletions(-) diff --git a/paconvert/api_mapping.json b/paconvert/api_mapping.json index 4935bc090..3ed36fc8a 100644 --- a/paconvert/api_mapping.json +++ b/paconvert/api_mapping.json @@ -9844,29 +9844,10 @@ ] }, "torch.optim.lr_scheduler.CosineAnnealingLR": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.CosineAnnealingDecay", - "min_input_args": 2, - "args_list": [ - "optimizer", - "T_max", - "eta_min", - "last_epoch", - "verbose" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.optim.lr_scheduler.CosineAnnealingWarmRestarts": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.CosineAnnealingWarmRestarts", - "min_input_args": 2, - "args_list": [ - "optimizer", - "T_0", - "T_mult", - "eta_min", - "last_epoch", - "verbose" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.optim.lr_scheduler.CyclicLR": { "Matcher": "LRSchedulerMatcher", @@ -9903,15 +9884,7 @@ } }, "torch.optim.lr_scheduler.ExponentialLR": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.ExponentialDecay", - "min_input_args": 2, - "args_list": [ - "optimizer", - "gamma", - "last_epoch", - "verbose" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.optim.lr_scheduler.LambdaLR": { "Matcher": "Optim2LrSchedulerMatcher", @@ -9944,16 +9917,7 @@ } }, "torch.optim.lr_scheduler.MultiStepLR": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.MultiStepDecay", - "min_input_args": 2, - "args_list": [ - "optimizer", - "milestones", - "gamma", - "last_epoch", - "verbose" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.optim.lr_scheduler.MultiplicativeLR": { "Matcher": "Optim2LrSchedulerMatcher", @@ -9999,36 +9963,10 @@ ] }, "torch.optim.lr_scheduler.ReduceLROnPlateau": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.ReduceOnPlateau", - "min_input_args": 1, - "args_list": [ - "optimizer", - "mode", - "factor", - "patience", - "threshold", - "threshold_mode", - "cooldown", - "min_lr", - "eps", - "verbose" - ], - "kwargs_change": { - "eps": "epsilon" - } + "Matcher": "ChangePrefixMatcher" }, "torch.optim.lr_scheduler.StepLR": { - "Matcher": "Optim2LrSchedulerMatcher", - "paddle_api": "paddle.optimizer.lr.StepDecay", - "min_input_args": 2, - "args_list": [ - "optimizer", - "step_size", - "gamma", - "last_epoch", - "verbose" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.ormqr": { "Matcher": "GenericMatcher", @@ -11584,12 +11522,7 @@ ] }, "torch.utils.data.TensorDataset": { - "Matcher": "TensorDatasetMatcher", - "paddle_api": "paddle.io.TensorDataset", - "min_input_args": 1, - "args_list": [ - "*tensors" - ] + "Matcher": "ChangePrefixMatcher" }, "torch.utils.data.WeightedRandomSampler": { "Matcher": "GenericMatcher",