| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
rdv-support Co-authored-by: sujunwei3<sujunwei3@huawei.com> # message auto-generated for no-merge-commit merge: !931 merge dev into master rdv-support Created-by: sujunwei3 Commit-by: sujunwei3 Merged-by: cann-robot Description: ## 描述 新增 ST(System Test)测试框架支持,集成 ops-test-kit 工具,实现算子精度自动化测试和结果汇总。 主要变更: 1. **CMakeLists.txt**: 新增 DOWNLOAD_OPS_TEST_KIT 选项,通过 FetchContent 按需下载 ops-test-kit 2. **cmake/third_party/ops_test_kit.cmake**: 新增 ops-test-kit 下载逻辑,支持本地 tar.gz 包、Git SSH、Git HTTPS 三种方式 3. **scripts/ci/ops_st_test.sh**: 新增 ST 测试入口脚本,支持按算子、按 SoC 版本灵活配置测试 4. **scripts/ci/ops_test_util.py**: 新增测试结果处理工具,包含精度检查、CSV 汇总、表格化输出等功能 ## 关联的Issue #510 ## 测试 1. **编译构建测试** - 执行 cmake -DDOWNLOAD_OPS_TEST_KIT=ON 验证 ops-test-kit 下载逻辑 - 验证本地包/SSH/HTTPS 三种下载路径均正常工作 2. **ST 测试功能验证** - tests/st目录下补充arch35/*.csv,assets/golden.py - 执行 bash scripts/ci/ops_st_test.sh --soc_version=ascend950 --ops=abs 验证 ST 测试流程 - 验证精度检查结果正确输出(PASS/FAIL 状态、DynPrec/CstPrec/BinPrec 精度值) - 验证汇总表格格式正确显示 3. **兼容性验证** - 验证 DOWNLOAD_OPS_TEST_KIT=OFF 时不影响原有构建流程 - 验证已有 ops-test-kit 目录时跳过下载 ## 文档更新 无文档更新 ## 类型标签 - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!931 | 2 个月前 | |
fix(build): harden shell command invocation Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !884 merge master into master fix(build): harden shell command invocation Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 加固 build 脚本中的 shell 命令调用,防止特殊字符导致的注入和误解析问题。 ### 主要改动 1. **变量加引号** - 防止文件名含空格/特殊字符时产生 word splitting 和 globbing - cat $CHANGED_FILES → cat "$CHANGED_FILES" - rm -rf ${BUILD_PATH}/* → rm -rf "${BUILD_PATH}"/* 2. **移除不必要的 bash -c** - 直接执行命令,减少 shell 解析复杂度 - bash -c "find ${SRC_DIR} ..." → find "${SRC_DIR}" ... - bash -c "python3 script.py $arg" → python3 "script.py" "$arg" 3. **修复 install.sh 的 bug** - 修复 $0rn typo → $orn - 增加安全检查:判断目录存在后再删除 ### 影响范围 - build.sh - cmake/gen_ops_info.cmake - cmake/symbol.cmake - cmake/ut.cmake - scripts/custom/install.sh - tests/ut/op_kernel/scripts/gen_tiling_head_file.sh ### 安全收益 - 防止含空格/特殊字符的文件路径导致注入 - 减少对 shell 解析的依赖,提高可移植性 - 修复潜在的路径遍历漏洞 ## 关联的Issue 关联 Issue: https://gitcode.com/cann/ops-cv/issues/391 ## 测试 - [ ] 本地 build 测试通过 - [ ] CI 流水线通过 ## 类型标签 - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!884 | 2 个月前 | |
Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !1155 merge remove_pr983_upsample into master Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联的Issue https://gitcode.com/cann/ops-cv/issues/636 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1155 | 27 天前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 1 个月前 | |
feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 1 个月前 | |
feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 1 个月前 | |
add some new project features. Co-authored-by: liukejin<liukejin@huawei.com> # message auto-generated for no-merge-commit merge: !91 merge merge_project into master add some new project features. Created-by: liukejin Commit-by: liukejin Merged-by: cann-robot Description: ## 描述 add some new project features. 1. add gen timestamp script to append version_info a timestamp 2. support operators pkg cross-compilation 3. update install scripts 4. cmd support asan cov ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-cv!91 | 7 个月前 | |
fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1095 merge master_merge_proto into master fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 scripts/util/merge_proto.py 的 match_op_proto / match_op_proto_extend 函数内 hard-code 的 regex 有 bug:在带 **前置注释** 或 **头文件 guard** 的 proto 文件上,**贪婪匹配会误吞额外内容**,导致 opname 错位或 op_def 包含不该有的头部。 ### Bug 复现 旧 regex: python re.compile(r"REG_OP\((.+)\).*OP_END_FACTORY_REG\(\1\)", re.DOTALL) 对如下典型 proto 文件: c /* Copyright header ... */ #ifndef OP_AAA_PROTO_H_ #define OP_AAA_PROTO_H_ REG_OP(Add) ... OP_END_FACTORY_REG(Add) #endif 贪婪 (.+) 会**尽量多匹配**,跨过注释 + guard 一直吃到文件末尾的最后一个 ),导致: - opname 捕获到的是 Add) ... OP_END_FACTORY_REG(Add(**不是预期的 Add**) - backreference \1 强制 opname 在 OP_END_FACTORY_REG(...) 里**再出现一次**——大多数情况**整个 match 失败**,match_op_proto 返回 None ### 修复方案 把 hard-coded regex 提到模块级 OP_DEF_PATTERN 统一两处复用: python OP_DEF_PATTERN = re.compile( r"(?:[ \t]*/\*\*?(?:[^*]|\*(?!/))*?\*/[ \t]*\n\s*)?" r"(?P<guard>[ \t]*#\s*ifndef\s+\w+[^\n]*\n" r"[ \t]*#\s*define\s+\w+[^\n]*\n\s*)?" r"REG_OP\((?P<opname>.+?)\)" r".*?OP_END_FACTORY_REG\((?P=opname)\)" r"(?(guard)[^\n]*\n[ \t]*#\s*endif[^\n]*)", re.DOTALL, ) #### 4 个关键改动 | 改动 | 修复什么 | |---|---| | OP_DEF_PATTERN 模块级常量 | 性能(编译 1 次 vs 2 次)+ 行为一致(两处不会漂移)| | (?P<opname>.+?) 非贪婪 | 关键修复:贪婪 (.+) 在多 op / 带注释文件上会误吞内容 | | (?P<opdef>...) 包裹 REG_OP 块 + op_def = match.group("opdef") | 关键修复:只取 REG_OP 内部,**op_def 不再带前置注释 / guard**(避免下游 merge_op_proto 拼接时 N 份 license 重复)| | (?(guard)...#endif...) 条件回溯 | 捕获完整的 #ifndef / #define / REG_OP / #endif 三件套;如果有 guard 就必有 endif,缺一即不匹配(坏源不放过)| | match.group("opname") 替代 match.group(1) | 命名组比数字下标可读,扩展时不依赖顺序 | | 文件末尾补换行 | POSIX 规范 | ### 关键设计点:为什么 op_def 用 opdef group 而不用 group(0) match.group(0) 包含**整段匹配**(comment + guard + REG_OP + #endif)。match.group("opdef") 只包含 REG_OP(...)...OP_END_FACTORY_REG(...) 内部。 **为什么不带 comment / guard 进 op_def**: - 下游 merge_op_proto 拼接到合并文件时会**重复 N 份 license 注释和头文件保护**(N = proto 文件数) - op_def 只需要 **op 自身定义**,注释/guard 是源文件层的语义,跨文件合并时不应该重复 ## 关联的Issue Fixes #605 ## 测试 需补充的测试场景(当前 PR 缺 test,可作为 follow-up): | 场景 | 期望 | |---|---| | 标准 proto(无 comment/guard)| 旧行为完全等价:opname=Add, op_def=Add REG_OP 块 | | 带 copyright 注释 + guard 的标准 proto | 新行为可正确解析(**旧 regex 失败**)| | 1 个 proto 文件含 2 个 op,**共享同一组 guard** | finditer 正确返回 2 个 match,opname 各自正确 | | 用 #pragma once 而非 #ifndef 的 proto | guard group 不匹配(fall back 到只匹配 REG_OP 块),**降级而非崩溃**| | 缺 #endif(坏源)的 proto | 条件回溯失败 → match.group("opdef") 不匹配,函数返回 None(不静默吞错)| | 文件全为 // 行注释 + 无 /* */ | comment group 不匹配(content 是 [^*] 仍 ok),只匹配 REG_OP | ## 文档更新 无(build 工具细节,不需要用户文档) ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧪 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1095 | 1 个月前 | |
【fix】: 修复precommit的oat检查抢资源问题 Co-authored-by: zhangfands<18768316492@163.com> # message auto-generated for no-merge-commit merge: !1052 merge zf1 into master 【fix】: 修复precommit的oat检查抢资源问题 Created-by: zhangfands Commit-by: zhangfands Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复precommit的oat检查抢资源问题 本次针对二个问题进修修复,文件抢资源、pip抢资源 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/566 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ops-cv/pull/1047 进行了测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1052 | 1 个月前 |