From 3096af975ac3a4e4fd8e0429967eebae96325c10 Mon Sep 17 00:00:00 2001 From: zhouwei25 Date: Mon, 1 Jun 2026 10:28:39 +0000 Subject: [PATCH 1/2] [Coding Agent] Update API Compatibility Claude Code Skills --- .../skills/add-new-compat-api/SKILL.md | 40 ++++ .../skills/api-change-decider/SKILL.md | 193 +++++++++++++----- .../.claude/skills/api-compatibility/SKILL.md | 60 ++---- 3 files changed, 199 insertions(+), 94 deletions(-) create mode 100644 docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md new file mode 100644 index 00000000000..1cc5d482661 --- /dev/null +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md @@ -0,0 +1,40 @@ +--- +name: add-new-compat-api +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『新增 compat 类型 API』方案。在 `paddle.compat` 命名空间下新增 API,实现与 PyTorch API 行为对齐。 +context: fork +disable-model-invocation: false +--- + +# 与 add-new-api 的关系 + +本文档是 **add-new-api** 的变体,核心流程完全一致,**唯一区别**是新增 API 的存放目录: + +| 方案 | API 存放目录 | 适用场景 | +|------|-------------|---------| +| add-new-api | `Paddle/python/paddle/` (常规目录) | 新增 Paddle 原生 API | +| add-new-compat-api | `Paddle/python/paddle/compat/` (compat 目录) | 新增兼容性 API | + +**请直接参考 add-new-api 的 SKILL.md 完成开发**,并将所有文件路径中的 `Paddle/python/paddle/` 替换为 `Paddle/python/paddle/compat/`。 + +--- + +# 核心差异说明 + +## 实现位置映射 + +| add-new-api 路径 | add-new-compat-api 路径 | +|----------------|------------------------| +| `python/paddle/__init__.py` | `python/paddle/compat/__init__.py` | +| `python/paddle/tensor/math.py` | `python/paddle/compat/__init__.py` | +| `python/paddle/tensor/__init__.py` | `python/paddle/compat/__init__.py` | +| `python/paddle/nn/__init__.py` | `python/paddle/compat/nn/__init__.py` | +| `python/paddle/nn/functional/__init__.py` | `python/paddle/compat/nn/functional/__init__.py` | + + +# 更多细节 + +请参考 **add-new-api** 的 SKILL.md 了解: +- 三种场景的完整工作流程 +- 背景知识(目录组织结构等) +- 注意事项 +- 常见问题处理 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md index 236d9aa44ef..94d1af6e82e 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md @@ -1,8 +1,6 @@ --- name: api-change-decider description: 负责《Paddle API 对齐 PyTorch 项目》中 Step1:方案决策,分析 PyTorch API 与 Paddle API 之间的差异,制定合适的 API 改动方案 -context: fork -agent: Explore disable-model-invocation: false --- @@ -31,14 +29,16 @@ disable-model-invocation: false 2. API 名称和 `_C_ops.xxx` 的 OP 名称一致 - ✅ 正确示例:`paddle.atan` 调用 `_C_ops.atan` - ❌ 错误示例:`paddle.select_scatter` 调用 `_C_ops.set_value_with_tensor`(名称不一致) -3. API 差异**仅为参数名不同或仅多 out 参数**(不涉及参数顺序或个数差异) - - torch 比 paddle 恰好只多一个参数 `out`,其余参数完全一致 - - ✅ 符合:仅多 `out` 一个参数 - - ❌ 不符合:多两个及以上参数、多的参数不是 `out`、还存在参数名不同等其他差异 +3. API 差异**仅涉及以下情况之一或组合**: + - 仅参数名不同 + - 仅多 out 参数 + - 参数名不同 + 仅多 out 参数 + - ❌ 不符合:多两个及以上参数、多的参数不是 `out`、涉及参数顺序差异、存在其他额外参数 + **说明**:当满足此条件时,参数名映射和 out 参数都在 C++ 层统一处理,无需额外组合其他方案。 4. Python 实现中**仅有一次** `_C_ops.xxx` 调用 5. Python 实现中不涉及其他 Paddle API 调用 - - ❌ **禁止**:调用任何其他 paddle API(如 `paddle.where`、`paddle.abs`、`paddle.flatten` 等) - - ❌ **禁止**:调用 Tensor 方法(如 `x.flatten()`、`x.reshape()`、`x.unsqueeze()` 等,这些等同于调用 paddle API) + - ❌ **禁止**:调用任何其他 paddle API(如 `paddle.where`、`paddle.abs`、`paddle.flatten`、`paddle.full`、`paddle.cast` 等) + - ❌ **禁止**:调用 Tensor 方法(如 `x.flatten()`、`x.reshape()`、`x.unsqueeze()`、`x.cast()` 等,这些等同于调用 paddle API) - ❌ **禁止**:使用 `paddle.full_like`、`paddle.zeros_like`、`paddle.cast` 等 - ✅ **允许**:Python 内置函数(如 `len()`、`isinstance()`、`list()`、`range()` 等) - ✅ **允许**:简单的属性访问(如 `x.shape`、`x.dtype`、`x.ndim` 等) @@ -161,9 +161,9 @@ disable-model-invocation: false | 1 | API 完全一致 | 无差异,无需改动 | | 2 | 仅 API 调用方式不一致 | API 路径不一致,但参数完全相同 | | 3 | 仅参数名不一致 | 参数功能相同但参数名称不同 | -| 4 | paddle 参数更多 | Paddle 提供更多可选参数 | +| 4 | paddle 参数更多 | Paddle 支持更多参数 | | 5 | 参数默认值不一致 | 参数默认值不同 | -| 6 | torch 参数更多 | PyTorch 提供更多参数 | +| 6 | torch 参数更多 | PyTorch 支持更多参数 | | 7 | 输入参数用法不一致 | 参数处理方式不同 | | 8 | 输入参数类型不一致 | 参数类型要求不同 | | 9 | 返回参数类型不一致 | 返回值类型或结构不同 | @@ -198,62 +198,153 @@ python -c "import paddle; paddle.Tensor.addmv_" # AttributeError → 路径不 **输出**:记录路径一致性结果(一致/不一致),用于选择决策表。 -### 3.2 查表决策 +### 3.2 执行决策流程 -根据 3.1 的路径一致性结果选择决策表:**路径不一致** → 决策表 A;**路径一致** → 决策表 B。 +根据 3.1 的路径一致性结果选择决策流程图:**路径不一致** → 决策流程图 A;**路径一致** → 决策流程图 B。 -**方案切换说明**:`→` 表示「不满足当前条件则切换到下一个备选方案」。 -- 方案 2 → 方案 1:不满足 C++ 下沉条件 -- 方案 3 → 方案 1:修改会破坏后向兼容 -- 方案 1 → 方案 5:不满足装饰器重载条件 +**针对每个差异分类独立执行流程图**,得到对应方案: +- 仅一个差异分类 → 直接输出该方案 +- 多个差异分类 → 按 3.3 规则组合 -**决策表 A:路径不一致**(必须包含方案 4) +**决策流程图 A:路径不一致** -| 差异分类 | 决策链(→ 备选) | -|----------|------------------| -| 分类 2, 10, 12, 13 | 方案 4(新增 Python 层 API 或 C++ 算子) | -| 分类 3 | 方案 2 + 方案 4(新增 API 别名)→ 方案 1 + 方案 4(新增 API 别名) | -| 分类 4, 5 | 不影响对齐 → 无需修改;否则 → 方案 3 + 方案 4(新增 API 别名)→ 方案 4(新增 Python 层 API) | -| 分类 6 | 仅多 out 且满足方案 2 条件 → 方案 2 + 方案 4(新增 API 别名);否则 → 方案 3 + 方案 4(新增 API 别名)→ 方案 1 + 方案 4(新增 API 别名)→ 方案 4(新增 Python 层 API) | -| 分类 7, 8 | 方案 3 + 方案 4(新增 API 别名)→ 方案 1 + 方案 4(新增 API 别名)→ 方案 4(新增 Python 层 API) | -| 分类 9 | 方案 4(新增 Python 层 API) | -| 分类 11 | 无需修改 | +``` +API 路径不一致 + │ + ├──→ 1. API 完全一致 → 方案 4(新增 API 别名)→ 得到方案 + │ + ├──→ 2. 仅 API 调用方式不一致 → 方案 4(新增 API 别名)→ 得到方案 + │ + ├──→ 3. 仅参数名不一致 → 满足方案 2 条件? + │ ├──→ 是 → 方案 2(C++ 下沉)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 1(Python 装饰器)+ 方案 4(新增 API 别名)→ 得到方案 + │ + ├──→ 4. paddle 参数更多 → 是否影响对齐? + │ ├──→ 否 → 无需修改 → 得到方案 + │ └──→ 是 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 5. 参数默认值不一致 → 是否影响对齐? + │ ├──→ 否 → 无需修改 → 得到方案 + │ └──→ 是 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 6. torch 参数更多 + │ │ + │ ├──→ 仅多 out 参数 → 满足方案 2 条件? + │ │ ├──→ 是 → 方案 2(C++ 下沉)+ 方案 4(新增 API 别名)→ 得到方案 + │ │ └──→ 否 → 方案 3(修改原有 API,新增 out 参数)+ 方案 4(新增 API 别名)→ 得到方案 + │ │ + │ └──→ 多其他参数(非仅 out)→ 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 7. 输入参数用法不一致 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 8. 输入参数类型不一致 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)+ 方案 4(新增 API 别名)→ 得到方案 + │ └──→ 否 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 9. 返回参数类型不一致 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 10. 组合替代实现 → 方案 4(新增 Python 层 API)→ 得到方案 + │ + ├──→ 11. 可删除 → 无需修改 → 得到方案 + │ + ├──→ 12. API 别名 → 方案 4(新增 API 别名)→ 得到方案 + │ + └──→ 13. 功能缺失 → 方案 4(新增 Python 层 API 或 C++ 算子)→ 得到方案 +``` -**决策表 B:路径一致** +**决策流程图 B:路径一致** -| 差异分类 | 决策链(→ 备选) | -|----------|------------------| -| 分类 1, 11 | 无需修改 | -| 分类 3 | 方案 2 → 方案 1 | -| 分类 4, 5 | 不影响对齐 → 无需修改;否则 → 方案 3 → 方案 5 | -| 分类 6 | 仅多 out 且满足方案 2 条件 → 方案 2;否则 → 方案 3 → 方案 1 → 方案 5 | -| 分类 7, 8 | 方案 3 → 方案 1 → 方案 5 | -| 分类 9 | 方案 5 | +``` +API 路径一致 + │ + ├──→ 1. API 完全一致 → 无需修改 → 得到方案 + │ + ├──→ 2. 仅 API 调用方式不一致 → 不可能出现(路径一致时此分类不存在) + │ + ├──→ 3. 仅参数名不一致 → 满足方案 2 条件? + │ ├──→ 是 → 方案 2(C++ 下沉)→ 得到方案 + │ └──→ 否 → 方案 1(Python 装饰器)→ 得到方案 + │ + ├──→ 4. paddle 参数更多 → 是否影响对齐? + │ ├──→ 否 → 无需修改 → 得到方案 + │ └──→ 是 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)→ 得到方案 + │ └──→ 否 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 5. 参数默认值不一致 → 是否影响对齐? + │ ├──→ 否 → 无需修改 → 得到方案 + │ └──→ 是 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)→ 得到方案 + │ └──→ 否 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 6. torch 参数更多 + │ │ + │ ├──→ 仅多 out 参数 → 满足方案 2 条件? + │ │ ├──→ 是 → 方案 2(C++ 下沉)→ 得到方案 + │ │ └──→ 否 → 方案 3(修改原有 API,新增 out 参数)→ 得到方案 + │ │ + │ └──→ 多其他参数(非仅 out)→ 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)→ 得到方案 + │ └──→ 否 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 7. 输入参数用法不一致 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)→ 得到方案 + │ └──→ 否 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 8. 输入参数类型不一致 → 满足方案 3 条件? + │ ├──→ 是 → 方案 3(修改原有 API)→ 得到方案 + │ └──→ 否 → 满足方案 1 条件? + │ ├──→ 是 → 方案 1(Python 装饰器)→ 得到方案 + │ └──→ 否 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 9. 返回参数类型不一致 → 方案 5(新增 compat 类型 API)→ 得到方案 + │ + ├──→ 10. 组合替代实现 → 不可能出现(路径一致时此分类不存在) + │ + ├──→ 11. 可删除 → 无需修改 → 得到方案 + │ + ├──→ 12. API 别名 → 不可能出现(路径一致时此分类不存在) + │ + └──→ 13. 功能缺失 → 不可能出现(路径一致时此分类不存在) +``` ### 3.3 多差异分类组合决策 -当 API 存在多个差异分类时,**逐个差异分类独立查表,再合并方案**。 - -**步骤 1**:遍历每个差异分类,根据决策表独立查表得到对应方案。 +当 API 存在多个差异分类时,**逐个差异分类独立查决策流程图,再合并方案**。 -**步骤 2**:对多个方案执行合并。 +**合并规则**: -| 规则 | 判断条件 | 操作 | -|------|----------|------| +| 规则 | 条件 | 操作 | +|------|------|------| | 去重 | 多个差异分类对应相同方案 | 只保留一个 | | 互斥 | 方案 2 与方案 1 同时出现 | 仅保留方案 2 | | 组合 | 不同方案且不互斥 | 按编号升序,用 `+` 连接 | -**步骤 3**:输出最终组合方案。 - **示例**: -| API | 差异分类 | 查表结果 | 合并结果 | +| API | 差异分类 | 查流程图结果 | 合并结果 | |-----|----------|----------|----------| -| torch.atan | 分类 3 + 分类 6 | 分类 3 → 方案 2;分类 6 → 方案 2 | 方案 2(去重) | -| torch.logspace | 分类 3 + 分类 6 | 分类 3 → 方案 1;分类 6 → 方案 3 | 方案 3 + 方案 1 | -| torch.histc | 分类 2 + 分类 6 + 分类 9 | 分类 2 → 方案 4;分类 6 → 方案 4;分类 9 → 方案 4 | 方案 4(去重) | +| torch.atan | 参数名不一致 + torch 参数更多(仅多 out 参数) | 参数名不一致 → 方案 2;torch 参数更多(仅多 out 参数) → 方案 2 | 方案 2(去重) | +| torch.logspace | 参数名不一致 + torch 参数更多 | 参数名不一致 → 方案 1;torch 参数更多 → 方案 3 | 方案 3 + 方案 1 | # 三、输出要求 @@ -298,14 +389,14 @@ python -c "import paddle; paddle.Tensor.addmv_" # AttributeError → 路径不 **差异分析** - API 路径一致性:一致 -- 差异分类:参数名不一致 + torch 参数更多 +- 差异分类:参数名不一致 + torch 参数更多(仅多 out 参数) - 具体差异: - 参数名映射:`input → x` - 额外参数:torch 多出 `out` **方案决策** - 选择方案:方案 2(C++ 下沉) -- 决策依据:API 路径一致;仅参数名不同 + 多 out 参数,且满足 C++ 下沉全部条件。 +- 决策依据:API 路径一致;差异为"参数名不同 + 仅多 out 参数",满足方案 2 条件 3;且满足 C++ 下沉全部其他条件(调用 `_C_ops.atan`、无其他 Paddle API 调用、无复杂前处理)。 ``` **示例 2:组合方案** @@ -320,7 +411,7 @@ python -c "import paddle; paddle.Tensor.addmv_" # AttributeError → 路径不 **差异分析** - API 路径一致性:一致 -- 差异分类:参数名不一致 + torch 参数更多 +- 差异分类:参数名不一致 + torch 参数更多(多 out/device/requires_grad 等参数) - 具体差异: - 参数名映射:`end → stop, steps → num` - 额外参数:torch 多出 `out, device, requires_grad` @@ -328,7 +419,7 @@ python -c "import paddle; paddle.Tensor.addmv_" # AttributeError → 路径不 **方案决策** - 选择方案:方案 3 + 方案 1 - 决策依据:API 路径一致;新增 out/device/requires_grad 参数可保持后向兼容;参数名差异需通过装饰器适配。 -- 组合说明:方案 3 处理 torch 参数更多;方案 1 处理参数名不一致。 +- 组合说明:方案 3 处理 torch 参数更多(新增参数);方案 1 处理参数名不一致。 ``` # 四、注意事项 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md index e8414dab220..3bb58c7606d 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md @@ -6,39 +6,13 @@ allowed-tools: Read Write Edit Bash Glob Grep Agent Skill WebFetch WebSearch # 一、项目目标 -**使 Paddle API 与 PyTorch API 完全对齐**,实现: +用户提供待对齐的 Pytorch API 列表 $ARGUMENTS,通过调用多个 skill,使 Paddle API 与 PyTorch API 完全对齐,实现: - 对于任意 PyTorch API 用法,只需将 `torch.*` 替换为 `paddle.*` - 计算结果完全一致(数值精度、行为逻辑) -# 二、输入输出规范 +# 二、背景知识 -## 2.1 输入 - -用户提供待对齐的 Pytorch API 列表,格式如下: -```markdown -torch.argmax -torch.log2 -torch.logsumexp -``` - -本轮用户输入的 Pytorch API 为$ARGUMENTS,需对其完成对齐工作。 - -## 2.2 输出 - -用户输入列表的对齐情况,格式示例: -```markdown -# API 对齐结果统计 - -|API 名称|对齐状态|改动方案|备注| -|-|-|-|-| -|torch.argmax|已对齐|方案 2|-| -|torch.log2|已对齐|无需改动|<简介为何无需改动>例如:未查询到差异文件,两者 API 完全一致| -|torch.logsumexp|未对齐|方案 1|<简介失败原因>例如:方案 1 暂不支持修改| -``` - -# 三、背景知识 - -### 3.1 工作目录说明 +### 2.1 工作目录说明 **ROOT_DIR 变量定义**: - `${ROOT_DIR}` 表示项目的根工作目录(如 `/workspace`),通常为包含 `Paddle`、`PaConvert`、`docs` 子目录的父目录 @@ -51,7 +25,7 @@ torch.logsumexp | docs | `${ROOT_DIR}/docs` | Paddle 文档仓库,包含所有 Paddle API 中文文档 | Step5:文档更新 | -### 3.2 相关文件位置 +### 2.2 相关文件位置 |**功能模块**|**检索关键字**|**文件路径**|**举例**|**注意**| |-|-|-|-|-| @@ -63,7 +37,7 @@ torch.logsumexp |Paddle API 兼容性单测位置|`test_api_compatibility_part[1-9]\.py`|`${ROOT_DIR}/Paddle/test/legacy_test/`|test_api_compatibility_part3.py|| |Pytorch API 单测位置|`test_{api_name}.py`|`${ROOT_DIR}/PaConvert/tests/`|test_tan.py|| -### 3.3 Paddle API 架构(5 层调用栈) +### 2.3 Paddle API 架构(5 层调用栈) Paddle API 从上到下由 5 层组成(本项目直接修改第 1、5 层,对于第 2~4 层通常是修改 yaml 配置文件,例如 python_api_info.yaml): @@ -93,7 +67,7 @@ Tensor atan(const Tensor& x, ...) void AtanKernel(const Context& dev_ctx, const DenseTensor& x, DenseTensor* out) ``` -### 3.4 专业术语表 +### 2.4 专业术语表 | 术语 | 定义 | 备注 | |------|------|------| @@ -109,7 +83,7 @@ void AtanKernel(const Context& dev_ctx, const DenseTensor& x, DenseTensor* out) | API 差异文档 | 中文描述了 Pytorch API 与 Paddle API 两者的行为差异 | 位于 `${ROOT_DIR}/docs/docs/guides/model_convert/convert_from_pytorch/api_difference/` 下一级子目录,命名类似 torch.tan.md | | compat 类型 API | 兼容性 API | 为保持后向兼容而添加的 API,能实现除 API 路径之外的完全对齐| -### 3.5 类方法 API 实现原理 +### 2.5 类方法 API 实现原理 **概念**:类方法 API(如 `torch.Tensor.abs`)和普通 API(如 `torch.abs`)是不同 API,但实现一致,合并处理即可。Paddle 通过 patch 机制将方法动态添加到 Tensor 类上。 @@ -162,7 +136,7 @@ tensor_method_func = [ - ✅ 在 patch 文件中搜索,或搜索对应的普通方法 `def abs(` - ❌ 不要搜索 `class Tensor`(方法通过 setattr 动态添加,不在类定义中) -### 3.6 API 信息获取方式 +### 2.6 API 信息获取方式 在开展 API 对齐工作过程中,需要获取 PyTorch API 和 Paddle API 的相关信息。 @@ -201,7 +175,7 @@ x = paddle.to_tensor([1.0, -2.0, 3.0]) print(paddle.abs(x)) ``` -### 3.7 Inplace API 实现原理 +### 2.7 Inplace API 实现原理 **概念说明**: - 注意要区分**inplace API**和**非 inplace API**,两者是不同的 API,不要混为一谈 @@ -237,7 +211,7 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 use_default_mapping : True ``` -# 四、整体工作流程 +# 三、整体工作流程 ## 流程重要约束 1. 接收用户输入的待对齐 API 列表(如 `torch.argmax`, `torch.log2`, `torch.logsumexp`) @@ -314,7 +288,7 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 5. Step5: 文档更新 → 修改 docs 目录文件,更新 paddle.argmax 文档 ``` -# 五、编程风格指南 +# 四、编程风格指南 - 最小化注释;保持简洁;代码应当自解释、自文档化。 - 注释应有实际价值,例如提醒读者一些非显而易见、无法从局部推断的全局背景。 @@ -325,9 +299,9 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 - 新增代码注释仅使用 ASCII 字符,不引入 Unicode 字符(如弯引号、破折号、箭头、非 ASCII 字母)。对未改动注释中已有的 Unicode 保持原样,仅对新增或改写的注释执行此规则。 - 如有不确定,选择更简单、更简洁的实现。 -# 六、各 Skill 说明 +# 五、各 Skill 说明 -## 6.1 总控 Skill:api-compatibility(本文件) +## 5.1 总控 Skill:api-compatibility(本文件) **功能定位**: - 本文件(`api-compatibility`)是项目的**总控 skill**,负责整体统筹规划 @@ -343,7 +317,7 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 - 本项目专用 skill 为下表所列的子 skill - 优先使用本项目专用 skill,确保流程一致性和可控性,除非其无法完成任务,否则**尽量不调用其他 skill** -## 6.2 项目专用 Skill 列表 +## 5.2 项目专用 Skill 列表 | Skill | 对应步骤 | |-------|--------| @@ -357,7 +331,7 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 | `/pytorch-alignment-validator` | Step4:对齐验证 | | `/api-docs-updater` | Step5:文档更新 | -# 七、自进化机制 +# 六、自进化机制 **本项目涉及的所有 skill 均具备自进化能力**,通过持续学习和优化来提升工作质量。修改的 SKILL 目录为:`${ROOT_DIR}/docs/docs/dev_guides/coding_agent/api_compatibility/.claude/skills` @@ -376,11 +350,11 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 - 禁止在 SKILL 中添加任何网络代理的内容,以免安全信息泄露 - 禁止在代码中编写任何网络代理的内容,以免安全信息泄露 -# 八、注意事项 +# 七、注意事项 1. 严格按标准工作流程执行,杜绝自行臆断和跳过步骤 -# 九、常见问题处理 +# 八、常见问题处理 ### Q1:为什么有些 API 对齐失败? From 312c1cc9541ab5343edb5273ca2506b7397d46f5 Mon Sep 17 00:00:00 2001 From: zhouwei25 Date: Mon, 1 Jun 2026 12:35:31 +0000 Subject: [PATCH 2/2] [API Compatibility] select_scatter/sgn/signbit/slice_scatter/tensordot/tril_indices/triu_indices/vander/logaddexp/logspace/moveaxis/nan_to_num/nanmean/nansum/masked_fill Edit By AI Agent Co-Authored-By: Claude Opus 4.6 --- docs/api/paddle/logaddexp_cn.rst | 10 +++++++--- docs/api/paddle/logspace_cn.rst | 4 ++-- docs/api/paddle/moveaxis_cn.rst | 2 +- docs/api/paddle/nan_to_num_cn.rst | 2 +- docs/api/paddle/nanmean_cn.rst | 4 ++-- docs/api/paddle/nansum_cn.rst | 4 ++-- docs/api/paddle/sgn_cn.rst | 8 ++++++-- docs/api/paddle/signbit_cn.rst | 8 ++++++-- docs/api/paddle/slice_scatter_cn.rst | 12 ++++++------ docs/api/paddle/tensordot_cn.rst | 9 +++++---- docs/api/paddle/tril_indices_cn.rst | 6 +++++- docs/api/paddle/triu_indices_cn.rst | 6 +++++- docs/api/paddle/vander_cn.rst | 2 +- .../.claude/skills/api-compatibility/SKILL.md | 4 ++-- .../skills/pytorch-alignment-validator/SKILL.md | 6 +++--- 15 files changed, 54 insertions(+), 33 deletions(-) diff --git a/docs/api/paddle/logaddexp_cn.rst b/docs/api/paddle/logaddexp_cn.rst index f40785948bc..3f98ee6af78 100755 --- a/docs/api/paddle/logaddexp_cn.rst +++ b/docs/api/paddle/logaddexp_cn.rst @@ -3,7 +3,7 @@ logaddexp ------------------------------- -.. py:function:: paddle.logaddexp(x, y, name=None) +.. py:function:: paddle.logaddexp(x, y, name=None, *, out=None) 计算 ``x`` 和 ``y`` 的以 e 为底的指数的和的自然对数。计算公式如下: @@ -12,10 +12,14 @@ logaddexp 参数 :::::::::: - - **x** (Tensor) - 输入的 Tensor,数据类型为:int32,int64,bfloat16,float16,float32、float64。 - - **y** (Tensor) - 输入的 Tensor,数据类型为:int32,int64,bfloat16,float16,float32、float64。 + - **x** (Tensor) - 输入的 Tensor,数据类型为:int32,int64,bfloat16,float16,float32、float64。别名 ``input``。 + - **y** (Tensor) - 输入的 Tensor,数据类型为:int32,int64,bfloat16,float16,float32、float64。别名 ``other``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::: + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::: ``Tensor``,根据上述公式计算的 logaddexp(x) 结果 diff --git a/docs/api/paddle/logspace_cn.rst b/docs/api/paddle/logspace_cn.rst index 280007b0454..5a13dc5bb72 100644 --- a/docs/api/paddle/logspace_cn.rst +++ b/docs/api/paddle/logspace_cn.rst @@ -14,8 +14,8 @@ logspace :::::::::::: - **start** (int|float|Tensor) – ``start`` 是区间开始值以 ``base`` 为底的指数,可以是一个标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型可以是 float32、float64、int32 或者 int64。 - - **stop** (int|float|Tensor) – ``stop`` 是区间结束值以 ``base`` 为底的指数,可以是一个标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型可以是 float32、float64、int32 或者 int64。 - - **num** (int|Tensor) – ``num`` 是给定区间内需要划分的区间数,可以是一个整型标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型需为 int32。 + - **stop** (int|float|Tensor) – ``stop`` 是区间结束值以 ``base`` 为底的指数,可以是一个标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型可以是 float32、float64、int32 或者 int64。别名 ``end``。 + - **num** (int|Tensor) – ``num`` 是给定区间内需要划分的区间数,可以是一个整型标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型需为 int32。别名 ``steps``。 - **base** (int|float|Tensor) – ``base`` 是对数函数的底数,可以是一个标量,或是一个 shape 为 [] 的 0-D Tensor,该 Tensor 的数据类型可以是 float32、float64、int32 或者 int64。 - **dtype** (str|paddle.dtype|np.dtype,可选) – 输出 Tensor 的数据类型,可以是 float32、float64、int32 或者 int64。如果 dtype 的数据类型为 None,输出 Tensor 数据类型为 float32。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/moveaxis_cn.rst b/docs/api/paddle/moveaxis_cn.rst index f8794e2af3d..fe9b7b306e6 100644 --- a/docs/api/paddle/moveaxis_cn.rst +++ b/docs/api/paddle/moveaxis_cn.rst @@ -13,7 +13,7 @@ moveaxis :width: 600 参数 ::::::::: - - **x** (Tensor) - 输入的 N-D Tensor,数据类型为:bool、int32、int64、float32、float64、complex64、complex128。 + - **x** (Tensor) - 输入的 N-D Tensor,数据类型为:bool、int32、int64、float32、float64、complex64、complex128。别名 ``input``。 - **source** (int|tuple|list) - 将被移动的轴的位置,其每个元素必须为不同的整数。 - **destination** (int|tuple|list) - 轴被移动后的目标位置,其每个元素必须为不同的整数。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/nan_to_num_cn.rst b/docs/api/paddle/nan_to_num_cn.rst index c43f31efa0f..10f9089890a 100644 --- a/docs/api/paddle/nan_to_num_cn.rst +++ b/docs/api/paddle/nan_to_num_cn.rst @@ -9,7 +9,7 @@ nan_to_num 参数 ::::::::: - - **x** (Tensor) - 输入变量,类型为 Tensor, 支持 float32、float64 数据类型。 + - **x** (Tensor) - 输入变量,类型为 Tensor, 支持 float32、float64 数据类型。别名 ``input``。 - **nan** (float,可选) - NaN 的替换值,默认为 0。 - **posinf** (float,可选) - +inf 的替换值,默认为 None,表示使用输入 Tensor 的数据类型所能表示的最大值作为 +inf 的替换值。 - **neginf** (float,可选) - -inf 的替换值,默认为 None,表示使用输入 Tensor 的数据类型所能表示的最小值作为 -inf 的替换值。 diff --git a/docs/api/paddle/nanmean_cn.rst b/docs/api/paddle/nanmean_cn.rst index 56a9d5d7755..86ec70c4f7a 100644 --- a/docs/api/paddle/nanmean_cn.rst +++ b/docs/api/paddle/nanmean_cn.rst @@ -11,8 +11,8 @@ nanmean 参数 :::::::::: - - **x** (Tensor) - 输入的 Tensor,数据类型为:bfloat16、float16、float32、float64。 - - **axis** (int|list|tuple,可选) - 指定对 ``x`` 进行计算的轴。``axis`` 可以是 int、list(int)、tuple(int)。如果 ``axis`` 包含多个维度,则沿着 ``axis`` 中的所有轴进行计算。``axis`` 或者其中的元素值应该在范围[-D, D)内,D 是 ``x`` 的维度。如果 ``axis`` 或者其中的元素值小于 0,则等价于 :math:`axis + D`。如果 ``axis`` 是 None,则对 ``x`` 的全部元素计算平均值。默认值为 None。 + - **x** (Tensor) - 输入的 Tensor,数据类型为:bfloat16、float16、float32、float64。别名 ``input``。 + - **axis** (int|list|tuple,可选) - 指定对 ``x`` 进行计算的轴。``axis`` 可以是 int、list(int)、tuple(int)。如果 ``axis`` 包含多个维度,则沿着 ``axis`` 中的所有轴进行计算。``axis`` 或者其中的元素值应该在范围[-D, D)内,D 是 ``x`` 的维度。如果 ``axis`` 或者其中的元素值小于 0,则等价于 :math:`axis + D`。如果 ``axis`` 是 None,则对 ``x`` 的全部元素计算平均值。默认值为 None。别名 ``dim``。 - **keepdim** (bool,可选) - 是否在输出 Tensor 中保留减小的维度。如果 ``keepdim`` 为 True,则输出 Tensor 和 ``x`` 具有相同的维度(减少的维度除外,减少的维度的大小为 1)。否则,输出 Tensor 的形状会在 ``axis`` 上进行 squeeze 操作。默认值为 False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/nansum_cn.rst b/docs/api/paddle/nansum_cn.rst index cdd6cd7f632..d91daae3cee 100644 --- a/docs/api/paddle/nansum_cn.rst +++ b/docs/api/paddle/nansum_cn.rst @@ -9,8 +9,8 @@ nansum 参数 ::::::::: - - **x** (Tensor) - 输入的 Tensor,数据类型为:bfloat16、float16、float32、float64、int32 或 int64。 - - **axis** (int|list|tuple,可选) - 求和运算的维度。如果为 None,则计算所有元素的和并返回包含单个元素的 Tensor 变量,否则必须在 :math:`[−rank(x),rank(x)]` 范围内。如果 :math:`axis [i] <0`,则维度将变为 :math:`rank+axis[i]`,默认值为 None。 + - **x** (Tensor) - 输入的 Tensor,数据类型为:bfloat16、float16、float32、float64、int32 或 int64。别名 ``input``。 + - **axis** (int|list|tuple,可选) - 求和运算的维度。如果为 None,则计算所有元素的和并返回包含单个元素的 Tensor 变量,否则必须在 :math:`[−rank(x),rank(x)]` 范围内。如果 :math:`axis [i] <0`,则维度将变为 :math:`rank+axis[i]`,默认值为 None。别名 ``dim``。 - **dtype** (str|paddle.dtype|np.dtype,可选) - 输出变量的数据类型。若参数为空,则输出变量的数据类型和输入变量相同,默认值为 None。 - **keepdim** (bool) - 是否在输出 Tensor 中保留减小的维度。如 keepdim 为 True,否则结果 Tensor 的维度将比输入 Tensor 小,默认值为 False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/sgn_cn.rst b/docs/api/paddle/sgn_cn.rst index 528efe9369e..61b45d60f0a 100644 --- a/docs/api/paddle/sgn_cn.rst +++ b/docs/api/paddle/sgn_cn.rst @@ -3,7 +3,7 @@ sgn ------------------------------- -.. py:function:: paddle.sgn(x, name=None) +.. py:function:: paddle.sgn(x, name=None, *, out=None) 对于复数 Tensor,此函数返回一个新的 Tensor,其元素与 input 元素的角度相同且绝对值为 1。 @@ -11,9 +11,13 @@ sgn 参数 :::::::::::: - - **x** (Tensor) – 输入 Tensor,数据类型为 float16、float32、float64、complex64 或 complex128。 + - **x** (Tensor) – 输入 Tensor,数据类型为 float16、float32、float64、complex64 或 complex128。别名 ``input``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: Tensor,输出正负号或复数的单位向量,数据的 shape 大小及数据类型和输入 ``x`` 一致。 diff --git a/docs/api/paddle/signbit_cn.rst b/docs/api/paddle/signbit_cn.rst index 32d193663e7..f51780e5d00 100644 --- a/docs/api/paddle/signbit_cn.rst +++ b/docs/api/paddle/signbit_cn.rst @@ -3,15 +3,19 @@ signbit ------------------------------- -.. py:function:: paddle.signbit(x, name=None) +.. py:function:: paddle.signbit(x, name=None, *, out=None) 对输入参数 ``x`` 的每个元素判断是否设置了其符号位,并输出判断值。若存在符号位,则输出 True,否则输出 False。 参数 :::::::::::: - - **x** (Tensor) – 进行符号位判断的多维 Tensor,数据类型为 uint8,int8,int16,int32,int64,bfloat16,float16,float32 或 float64。 + - **x** (Tensor) – 进行符号位判断的多维 Tensor,数据类型为 uint8,int8,int16,int32,int64,bfloat16,float16,float32 或 float64。别名 ``input``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: Tensor,输出掩码,数据的 shape 大小及数据类型和输入 ``x`` 一致。 diff --git a/docs/api/paddle/slice_scatter_cn.rst b/docs/api/paddle/slice_scatter_cn.rst index 7ebc4ae80db..27194549f9c 100644 --- a/docs/api/paddle/slice_scatter_cn.rst +++ b/docs/api/paddle/slice_scatter_cn.rst @@ -16,12 +16,12 @@ slice_scatter 参数 ::::::::: - - **x** (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为: ``bool``、 ``float16``、 ``float32``、 ``float64``、 ``uint8``、 ``int8``、 ``int16``、 ``int32``、 ``int64``、 ``bfloat16``、 ``complex64``、 ``complex128``。 - - **value** (Tensor) - 需要插入的值,数据类型为: ``bool``、 ``float16``、 ``float32``、 ``float64``、 ``uint8``、 ``int8``、 ``int16``、 ``int32``、 ``int64``、 ``bfloat16``、 ``complex64``、 ``complex128``。 - - **axes** (list|tuple) - 指定沿着哪几个维度嵌入对应的值。 - - **starts** (list|tuple) - 嵌入的起始索引。 - - **ends** (list|tuple) - 嵌入的截止索引。 - - **strides** (list|tuple) - 嵌入的步长。 + - **x** (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为: ``bool``、 ``float16``、 ``float32``、 ``float64``、 ``uint8``、 ``int8``、 ``int16``、 ``int32``、 ``int64``、 ``bfloat16``、 ``complex64``、 ``complex128``。别名 ``input``。 + - **value** (Tensor) - 需要插入的值,数据类型为: ``bool``、 ``float16``、 ``float32``、 ``float64``、 ``uint8``、 ``int8``、 ``int16``、 ``int32``、 ``int64``、 ``bfloat16``、 ``complex64``、 ``complex128``。别名 ``src``。 + - **axes** (list|tuple) - 指定沿着哪几个维度嵌入对应的值。别名 ``dim``。 + - **starts** (list|tuple) - 嵌入的起始索引。别名 ``start``。 + - **ends** (list|tuple) - 嵌入的截止索引。别名 ``end``。 + - **strides** (list|tuple) - 嵌入的步长。别名 ``step``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 ``None``。 返回 diff --git a/docs/api/paddle/tensordot_cn.rst b/docs/api/paddle/tensordot_cn.rst index da2ddb2dcb6..a982472c6eb 100644 --- a/docs/api/paddle/tensordot_cn.rst +++ b/docs/api/paddle/tensordot_cn.rst @@ -3,7 +3,7 @@ tensordot ------------------------------- -.. py:function:: paddle.tensordot(x, y, axes=2, name=None) +.. py:function:: paddle.tensordot(x, y, axes=2, name=None, out=None) Tensor 缩并运算(Tensor Contraction),即沿着 axes 给定的多个轴对两个 Tensor 对应元素的乘积进行加和操作。 @@ -20,9 +20,9 @@ shape = [2,2,3]的 ``res`` 张量为 a,b 两个张量沿着 a 张量的最后一 参数 :::::::::::: - - **x** (Tensor)- 缩并运算操作的左 Tensor,数据类型为 ``float16`` 或 ``float32`` 或 ``float64``。 - - **y** (Tensor)- 缩并运算操作的右 Tensor,与 ``x`` 具有相同的数据类型。 - - **axes** (int|tuple|list|Tensor)- 指定对 ``x`` 和 ``y`` 做缩并运算的轴,默认值为整数 2。 + - **x** (Tensor)- 缩并运算操作的左 Tensor,数据类型为 ``float16`` 或 ``float32`` 或 ``float64``。别名 ``a``。 + - **y** (Tensor)- 缩并运算操作的右 Tensor,与 ``x`` 具有相同的数据类型。别名 ``b``。 + - **axes** (int|tuple|list|Tensor)- 指定对 ``x`` 和 ``y`` 做缩并运算的轴,默认值为整数 2。别名 ``dims``。 1. ``axes`` 可以是一个非负整数。若输入的是一个整数 ``n``,则表示对 ``x`` 的后 ``n`` 个轴和对 ``y`` 的前 ``n`` 个轴进行缩并运算。 @@ -32,6 +32,7 @@ shape = [2,2,3]的 ``res`` 张量为 a,b 两个张量沿着 a 张量的最后一 4. ``axes`` 可以是一个 Tensor,这种情况下该 Tensor 会被转换成 list,然后应用前述规则确定做缩并运算的轴。请注意,输入 Tensor 类型的 ``axes`` 只在动态图模式下可用。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 返回 :::::::::::: diff --git a/docs/api/paddle/tril_indices_cn.rst b/docs/api/paddle/tril_indices_cn.rst index b83874ca329..3927e25fa3d 100644 --- a/docs/api/paddle/tril_indices_cn.rst +++ b/docs/api/paddle/tril_indices_cn.rst @@ -3,7 +3,7 @@ tril_indices -------------------------------- -.. py:function:: paddle.tril_indices(row, col, offset=0, dtype='int64') +.. py:function:: paddle.tril_indices(row, col, offset=0, dtype='int64', *, device=None) 返回行数和列数已知的二维矩阵中下三角矩阵元素的行列坐标,其中下三角矩阵为原始矩阵某一对角线左下部分元素的子矩阵。 @@ -19,6 +19,10 @@ tril_indices - **dtype** (int,可选) - 指定输出 Tensor 的数据类型,默认值为 int64。 +关键字参数 +::::::::: + - **device** (str|Place,可选) - 输出 Tensor 的设备位置,可以为字符串或 Place 对象。默认值为 None,表示使用当前设备。 + 返回 ::::::::: Tensor,二维矩阵的下三角矩阵行坐标和列坐标。数据类型和参数 dtype 一致。 diff --git a/docs/api/paddle/triu_indices_cn.rst b/docs/api/paddle/triu_indices_cn.rst index d1896487ab6..90b73fcd42c 100644 --- a/docs/api/paddle/triu_indices_cn.rst +++ b/docs/api/paddle/triu_indices_cn.rst @@ -3,7 +3,7 @@ triu_indices -------------------------------- -.. py:function:: paddle.triu_indices(row, col=None, offset=0, dtype='int64') +.. py:function:: paddle.triu_indices(row, col=None, offset=0, dtype='int64', *, device=None) 返回行数和列数已知的二维矩阵中上三角矩阵元素的行列坐标,坐标的顺序首先按照行号排列,其次按照列号排列,所述上三角矩阵为原始矩阵某一对角线右上部分元素的子矩阵。 @@ -19,6 +19,10 @@ triu_indices - **dtype** (str|np.dtype|paddle.dtype,可选) - 指定输出 Tensor 的数据类型,可以是 int32,int64,默认值为 int64。 +关键字参数 +::::::::: + - **device** (str|Place,可选) - 输出 Tensor 的设备位置,可以为字符串或 Place 对象。默认值为 None,表示使用当前设备。 + 返回 ::::::::: Tensor,返回 row*col 大小矩阵的上三角元素的坐标,其中第一行包含行坐标,第二行包含列坐标 diff --git a/docs/api/paddle/vander_cn.rst b/docs/api/paddle/vander_cn.rst index 5844caebf45..56376c611bd 100644 --- a/docs/api/paddle/vander_cn.rst +++ b/docs/api/paddle/vander_cn.rst @@ -11,7 +11,7 @@ vander 参数 :::::::::: - **x** (Tensor) - 输入的 Tensor,必须是 1-D Tensor, 支持的数据类型:int32、int64、float32、float64、complex64、complex128。 - - **n** (int,可选) - 输出中的列数。如果未指定 n,则返回一个方阵(n = len(x))。 + - **n** (int,可选) - 输出中的列数。如果未指定 n,则返回一个方阵(n = len(x))。别名 ``N``。 - **increasing** (bool,可选) - 列的幂次顺序。如果为 True,则幂次从左到右增加,如果为 False(默认值),则幂次顺序相反。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md index 3bb58c7606d..f05a68a5e70 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md @@ -270,8 +270,8 @@ Paddle 支持自动生成 inplace API,无需在`ops.yaml`中单独配置。当 Step 3.2: 编译并运行(每次改动均需执行) ### Step 4:对齐验证(调用 `/pytorch-alignment-validator` skill) - Step 4.1: 标记已完成的 API(仅首次执行) - Step 4.2: 增加测试用例(仅首次执行) + Step 4.1: 标记已完成的 API + Step 4.2: 增加测试用例 Step 4.3: 运行单元测试(每次改动均需执行) ### Step 5:文档更新(调用 `/api-docs-updater` skill) diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md index 2aa1df67987..8458651e49e 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md @@ -8,15 +8,15 @@ disable-model-invocation: false 请严格按以下 Step 依次执行,不要自行修改或跳过 Step: -## Step 1: 标记已完成的 API(仅首次执行) +## Step 1: 标记已完成的 API 1. 定位文件:`${ROOT_DIR}/PaConvert/paconvert/api_mapping.json` 2. 将已完成的 PyTorch API 的 Matcher 设置为`ChangePrefixMatcher`,其他字段全部删除掉 **注意**: - torch.abs、torch.abs_、torch.Tensor.abs、torch.Tensor.abs_是四个不同的 API,需分别标记为 `ChangePrefixMatcher`。 -- ⚠️ **`ChangePrefixMatcher` 是任务最终验收金标准,不可妥协**:只要 API 已完成代码层面的对齐,就必须标记为 `ChangePrefixMatcher`,**绝对禁止**为了让测试通过而将 Matcher 改为其他类型(如 GenericMatcher、SliceScatterMatcher 等)。 +- ⚠️ **`ChangePrefixMatcher` 是任务最终验收金标准,不可妥协**:只有标记为 `ChangePrefixMatcher`,才能判定API 已完成代码层面的对齐,**绝对禁止**为了让测试通过而将 Matcher 改为其他类型(如 GenericMatcher、SliceScatterMatcher 等)。 -## Step 2: 增加测试用例(仅首次执行) +## Step 2: 增加测试用例 **目的:** 判断是否满足如下测试规范,如不满足,则需增加测试用例使之符合规范 **修改位置:**