算子变更影响与迁移说明模板

本模板用于记录会影响算子使用者、调用方或部署环境的变更。典型场景包括接口调整、支持范围变化、输出语义变化、安装路径变化、弃用旧入口和修复可能改变结果的缺陷。

何时需要

出现以下任一情况时,建议在 PR 描述或算子文档中附迁移说明:

  • 输入、输出或属性的名称、顺序、必选性、类型、shape、默认值发生变化。
  • 可选输出、错误处理、数值精度、排序或确定性行为发生变化。
  • ACLNN、PyTorch Extension 或其他公开调用入口发生变化。
  • 支持的芯片、CANN 版本、format、动态 shape 范围发生变化。
  • 构建命令、安装包、vendor 路径或环境变量发生变化。
  • 旧能力被弃用、替换或移除。

仅内部重构且公开行为、构建安装和性能口径均不变时,可以不填写完整模板,但应在 PR 中明确“无用户可见变化”及其验证依据。

兼容性分类

分类 定义 示例
compatible 旧调用无需修改,结果语义和部署方式保持兼容 新增可选属性且默认值保持旧行为
behavior-change 调用仍可运行,但结果、错误处理或性能特征可能变化 修复排序、舍入、异常输入处理
migration-required 用户需要修改调用、配置、构建或部署步骤 参数重命名、输出顺序调整、安装路径变化
deprecated 旧入口仍可用,但已计划移除 提供新 API,同时保留旧 wrapper
removed 旧入口或能力已不可用 删除旧 API、dtype 或芯片支持

不能确定兼容性时标记为“待确认”,不要默认写成兼容。

模板正文

# `<operator_name>` 变更影响与迁移说明

## 变更概览

| 项目 | 内容 |
| --- | --- |
| 关联 PR / Issue | `<链接或编号>` |
| 变更类型 | `<接口 / 行为 / 支持范围 / 构建安装 / 弃用 / 缺陷修复>` |
| 兼容性分类 | `<compatible / behavior-change / migration-required / deprecated / removed>` |
| 影响版本或 Commit | `<version / sha>` |
| 目标用户 | `<Python / ACLNN C++ / 直调 / 部署维护者 / 全部>` |

用 2-3 句话说明为什么需要本次变更,以及使用者是否必须采取操作。

## 影响范围

| 接口面 | 是否影响 | 说明 |
| --- | --- | --- |
| 输入 / 输出 | `<是 / 否>` | `<名称、顺序、数量、必选性>` |
| dtype / format | `<是 / 否>` | `<新增、移除或行为变化>` |
| shape / rank | `<是 / 否>` | `<动态范围、边界和推导关系>` |
| 属性 | `<是 / 否>` | `<类型、默认值和值域>` |
| 数值或结果语义 | `<是 / 否>` | `<精度、排序、确定性、有效区间>` |
| ACLNN 接口 | `<是 / 否>` | `<函数名和参数>` |
| Python / PyTorch 接口 | `<是 / 否>` | `<函数名、参数和返回值>` |
| 芯片 / CANN | `<是 / 否>` | `<支持范围>` |
| 构建 / 安装 | `<是 / 否>` | `<命令、包名、路径和环境变量>` |
| 性能特征 | `<是 / 否>` | `<仅说明已验证变化,不填写推测>` |

## 变更前后对照

### 接口或配置

| 项目 | 变更前 | 变更后 | 兼容性影响 |
| --- | --- | --- | --- |
| `<parameter / output / command>` | `<old>` | `<new>` | `<impact>` |

### 行为

| 场景 | 变更前 | 变更后 | 用户需要关注 |
| --- | --- | --- | --- |
| `<boundary / special value / optional output>` | `<old behavior>` | `<new behavior>` | `<action or none>` |

所有描述应来自代码、测试或文档证据。无法验证的行为标记为“待验证”。

## 用户迁移步骤

### 调用代码

变更前:

```python
<old call>
```

变更后:

```python
<new call>
```

### 构建或安装

```bash
# 变更前
<old command>

# 变更后
<new command>
```

### 配置或环境变量

| 旧配置 | 新配置 | 操作 |
| --- | --- | --- |
| `<old>` | `<new>` | `<add / replace / remove>` |

如果无需用户迁移,写明:

```text
无需修改调用或部署步骤;默认行为保持兼容。
```

并列出验证该结论的测试或对照证据。

## 弃用与移除计划(可选)

| 项目 | 内容 |
| --- | --- |
| 弃用入口 | `<API / attribute / path>` |
| 替代入口 | `<replacement>` |
| 弃用开始 | `<version / date / commit>` |
| 计划移除 | `<version / date;未确定则写待定>` |
| 过渡期行为 | `<warning / alias / compatibility wrapper>` |

不要承诺未经维护者确认的发布日期。

## 回滚方案

- 回滚条件:`<哪些失败或兼容问题触发回滚>`
- 回滚方式:`<revert commit / 恢复旧包 / 切换旧接口>`
- 数据或产物兼容:`<是否需要清理缓存、重装包或恢复配置>`
- 回滚验证:`<命令和预期结果>`

如果变更不可安全回滚,必须说明原因和替代恢复方式。

## 验证证据

| 验证项 | 命令 / 用例 | 结果 | 证据 |
| --- | --- | --- | --- |
| 旧调用兼容性 | `<command>` | `<PASS / FAIL / NOT_RUN>` | `<summary>` |
| 新调用正确性 | `<command>` | `<PASS / FAIL / NOT_RUN>` | `<summary>` |
| 边界与异常输入 | `<command>` | `<PASS / FAIL / NOT_RUN>` | `<summary>` |
| 安装 / 升级 | `<command>` | `<PASS / FAIL / NOT_RUN>` | `<summary>` |
| 回滚 | `<command>` | `<PASS / FAIL / NOT_RUN>` | `<summary>` |

没有 NPU 或目标环境时,使用 `NOT_RUN` 并说明原因,不要写成通过。

## 已知限制与未解决问题

- `<未覆盖平台、尚未迁移入口、兼容层限制或后续 Issue>`

## 面向发布说明的摘要

```text
<一句话说明用户可见变化>
迁移动作:<无需操作 / 需要修改调用 / 需要重新安装>
兼容性:<classification>
```

提交前检查

  • 兼容性分类与实际用户动作一致。
  • 旧行为和新行为均有可定位的代码、测试或文档依据。
  • 所有受影响的公开入口、输出语义和安装方式均已覆盖。
  • 迁移步骤可以从干净环境执行,不包含本地绝对路径。
  • 弃用时间线经过维护者确认;未确认的日期标记为待定。
  • 回滚方案包含触发条件、操作和验证。
  • 未执行验证项明确标记为 NOT_RUN
  • 文档不包含账号、令牌、设备地址、私有数据或内部链接。