资讯详情

资讯详情

NumPy NEP 撰写模板全解析:提案写作规范与从 Draft 到 Final 的完整流程

科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载NumPy 通过 NEPNumPy Enhancement ProposalNumPy 增强提案机制来设计重大功能与记录社区决策而 doc/neps/nep-template.rst 正是每个 NEP 必须遵循的统一写作模板它规定了头部字段、章节顺序与发布流程边界。本文以该模板为骨架结合 NEP 0 — Purpose and process 中定义的提案流程与 构建索引脚本 中的元数据校验逻辑完整讲解 NEP 的写作规范、格式要求、状态机流转与自动化约束读完即可掌握撰写一份合格 NEP 的全部要点。模板在 NumPy 提案体系中的定位在深入模板细节之前需要先理解 NEP 机制本身。根据 NEP 0 的定义NEP 是一份向 NumPy 社区提供信息、或描述 NumPy 新功能及其流程/环境的设计文档它需要给出该功能的简洁技术规范technical specification与采纳理由rationale。NEP 是社区提出重大新功能、收集意见并沉淀设计决策的主要载体作者负责在社区内建立共识并记录反对意见。NEP 分为三种类型NEP 0 中的定义Standards Track描述 NumPy 的新功能或新实现Informational描述设计问题或提供一般性指南不提出新功能Process描述 NumPy 周边流程或提议对流程的修改需要社区共识。在 NEP 0 的Format and template一节中明确规定每一份 NEP 都必须以模板文件 nep-template.rst 为起点撰写。提案以 Draft草稿状态通过 GitHub Pull Request 提交到doc/neps目录文件命名为nep-n.rstn为分配的四位编号例如nep-0000.rst。也就是说本文讲解的模板不是可选的样式建议而是进入 NEP 流程的强制性格式约束。头部字段Header PreambleNEP 的身份信息模板要求每个 NEP 以:字段名: 值形式的 reStructuredText 字段列表开头。根据模板自身与 NEP 0 的Header Preamble小节头部字段如下字段必需性取值/格式说明:Author:必需作者真实姓名可选附邮箱多作者每行一个:Status:必需Draft/Active/Accepted/Deferred/Rejected/Withdrawn/Final/Superseded:Type:必需Standards Track/Process模板中的取值枚举:Created:必需创建日期模板示例为yyyy-mm-dd格式:Requires:可选依赖的其他 NEP 编号:NumPy-Version:可选目标 NumPy 版本号:Replaces:可选被本 NEP 取代的 NEP 编号:Replaced-By:可选取代本 NEP 的 NEP 编号:Resolution:可选有前置条件决议链接 URLAccepted/Rejected/Withdrawn状态必需需要注意几个细节字段顺序NEP 0 明确要求头部字段必须按给定顺序出现Author、Status、Type、Created在前其余可选字段在后。Author 格式带邮箱时形如Random J. User addressdom.ain不带邮箱时只写姓名多作者时每位作者独占一行。Date 格式差异模板中的Created示例为yyyy-mm-dd如 NEP 50 的2021-05-21而 NEP 0 的示例代码块写作dd-mmm-yyyy实际仓库中的 NEP如 nep-0050-scalar-promotion.rst均采用yyyy-mm-dd形式。Status 的取值在模板和 NEP 0 中保持一致这是模板作为写作契约被自动化校验的基础见下文 build_index.py 一节。正文标准章节模板规定的 11 个章节逐一拆解模板正文定义了固定章节骨架每个 NEP 都应依此组织内容。以下是逐章节的写作要点全部来自模板中的指导文字Abstract摘要用简短篇幅说明本 NEP 将达成什么。模板特别提示标题中的长破折号是—elongated dash不是普通连字符-——这一看似琐碎的规定会被构建工具强制校验。Motivation and scope动机与范围描述变更的必要性现有问题是什么、影响哪些人、试图解决什么、为什么值得做同时明确界定范围与关键需求防止提案失控膨胀。Usage and impact用法与影响从NumPy 使用者的视角撰写主要以只有在本 NEP 被采纳实现后才能写出的代码示例来展示新功能如何被使用以及其对生态的影响。模板强调此章节只在解释功能所必需时才包含实现细节——详细的技术实现应留到后面的章节。Backward compatibility向后兼容性说明本 NEP 会以哪些方式破坏向后兼容。模板在这里给出了一条重要的流程约束发送到邮件列表的帖子应只包含截至本节为止的内容即从 Abstract 到 Backward compatibility目的是让对详细技术讨论不感兴趣、但对用法和影响有看法的用户只阅读这份高层摘要。Detailed description详细描述提供变更的详细技术描述包括新功能的用法示例、预期使用场景和示意用的伪代码pseudo-code。这是技术评审的主战场。Related work相关工作列出相关/相似的技术不要求穷尽只需覆盖主要的先例与相关成果即可。即使只列出其他库中的类似方案也符合要求。Implementation实现列出实现 NEP 所需的主要步骤尽可能标注步骤间的依赖关系、哪些步骤可以省略实现过程中应逐步补充相关 Pull Request 的链接。模板特别说明NEP 不要求在一个 PR 中完成分阶段实现是合理的。Alternatives备选方案如果存在解决同一问题的其他方案在此讨论并说明为何选择当前方案。这一节体现社区决策的透明性。Discussion讨论通常只是一个包含讨论链接的列表例如邮件列表线程或相关的 GitHub issue 链接。NEP 0 要求当提案进入接受流程时必须在 Discussion 中链接到最终的评审邮件线程。References and footnotes参考文献与脚注放置引用与脚注。模板的脚注示例给出了 NEP 许可要求每份 NEP 必须要么明确标注为公有领域public domain要么采用 Open Publication License 许可——模板本身即是公有领域声明的范例。Copyright版权以一句话声明版权归属模板的默认写法为This document has been placed in the public domain.并引用第 1 条脚注说明许可依据。头部与正文之外写作时的流程性约束模板中散落在正文之间的流程提示同样是 NEP 写作的一部分邮件列表同步PR 就绪后需要向 numpy-discussion 邮件列表发帖内容为截至 Backward compatibility 的各章节将列表讨论限定在用法与影响层面而 PR 上的讨论范围更广可以包含实现细节。尽早合并PR 应尽早合并无论讨论结论如何后续通过追加 PR 更新内容、由维护者设置状态与讨论链接。原型先行Standards Track NEP 由设计文档 参考实现两部分组成NEP 0 建议至少同步开发原型实现通常以标注 WIP 的 PR 形式提交因为听起来不错的主意往往在实现考验下变得不切实际。模板的自动化校验build_index.py 如何解读 NEP 元数据模板之所以必须严格遵守格式是因为仓库提供了自动化工具对其进行校验与索引。阅读 doc/neps/tools/build_index.py 的源码可以看到模板约定被落实为如下硬性规则元数据解析脚本用正则:([a-zA-Z\-]*): (.*)逐行解析每个nep-*.rst文件的头部字段得到Status、Type等标签——这正是模板头部字段格式必须统一的原因。标题校验每个 NEP 的标题必须形如NEP 编号 — 标题且其中的破折号必须是模板中强调的特殊长破折号—脚本会对不匹配的标题直接抛出RuntimeError报错信息中再次强调该字符的特殊性。这就是模板中那条elongated dash注释的工程落点。状态一致性检查状态为Accepted/Rejected/Withdrawn的 NEP 必须带:Resolution:字段否则报错——与 NEP 0 中至少应添加 Resolution 头部并链接到邮件列表归档线程的要求一一对应状态为Superseded的 NEP 必须带:Replaced-By:字段且被指向的 NEP 必须带:Replaces:字段并反向包含本 NEP 编号任何带:Replaces:字段的 NEP其引用的旧 NEP 必须处于Superseded状态。模板本身被排除脚本顶部ignore (nep-template.rst)表明模板文件不参与索引生成它是规则制定者而非提案本身。脚本运行后会用 Jinja2 将元数据渲染进 meta.rst.tmpl、accepted.rst.tmpl 等分类模板生成 NEP 索引页面doc/neps/Makefile 中index目标即执行python3 tools/build_index.py随后调用 Sphinx 构建。这意味着一份不合规的模板写法会导致整个 NEP 文档站点构建失败。提案状态机与从模板到定稿的完整流程配合模板头部:Status:字段的取值NEP 0 定义了完整的生命周期见 NEP 0 的 Review and resolution 一节所有 NEP 以Draft状态创建讨论后达成共识则变为Accepted参考实现完成并合入主仓库后状态改为Final若希望在大范围反馈后再承诺长期稳定可标记为Provisional有条件接受该状态仍可能在合入后因反馈而被 Rejected/Withdrawn因此 NEP 0 建议优先收缩提案范围以避免依赖此状态进展停滞时可标记Deferred由作者或核心开发者设定被证明不可行时标记Rejected作者自己放弃或认可更优的竞争提案时标记Withdrawn被其他 NEP 取代时标记SupersededProcess 类 NEP 若本就不打算完结如 NEP 0 自身可长期保持Active。接受流程同样有明确规则当提案准备接受时需向邮件列表发送主题为Proposal to accept NEP #编号: 标题的邮件包含最新版 NEP 链接、主要分歧点及解决方式并声明若无实质性反对意见7 天后接受。最终评议期不得少于 7 天通过后发送确认邮件、将:Status:改为Accepted并把:Resolution:指向该邮件。若存在实质性反对意见则维持 Draft 继续讨论。争议无法化解时可提请 NumPy Steering Council 裁决。此外Final 状态的 Standards Track NEP 原则上不再修改代码与文档才是最终参考而 Process NEP 可随时间更新。从模板到真实提案仓库中的范例对照模板是骨架真实 NEP 则是血肉。对照仓库中已落地的提案可以直观看到模板约定的实际形态nep-0000.rstNEP 0Status: Active、Type: Process元 NEP定义了整个提案机制本身其头部即采用模板格式正文包含 What is a NEP、Types、NEP workflow、Review and resolution、Format and template 等章节是 Process 类 NEP 的活范例nep-0050-scalar-promotion.rstNEP 50Status: Final、Type: Standards Track展示已完结的 Standards Track 提案形态正文以 Abstract 开篇并给出可直接运行的代码示例nep-0052-python-api-cleanup.rstNEP 52Status: Final、Type: Standards Track多作者头部每位作者一行、含邮箱以及:Resolution:指向邮件列表归档的写法正是模板与 NEP 0 要求的标准示范。写作新 NEP 时推荐以 nep-template.rst 为起点逐节填充参考上述已定稿提案的行文密度提交 PR 前运行 build_index.py 验证元数据与状态一致性即可保证提案从格式上顺利进入社区讨论与评审流程。赞分享科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载相关推荐Apache DolphinScheduler Issue 撰写指南从标题规范到模板化流程的完整贡献实践Apache DolphinScheduler Issue 撰写指南从标题规范到模板化流程的完整贡献实践 在 Apache DolphinScheduler任务调度数据编排工作流自动化后端大数据NumPy NEP 提案体系与开发路线图完全指南从 NEP 0 流程到 doc/neps 目录结构解析NumPy NEP 提案体系与开发路线图完全指南从 NEP 0 流程到 doc/neps 目录结构解析 本文是 NumPy 增强提案NEPNumPy En科学计算数据分析EUIElastic UI Framework变更日志Changelog规范从撰写到自动汇合的完整流程EUIElastic UI Framework变更日志Changelog规范从撰写到自动汇合的完整流程 本文基于 Elastic UI Framewo前端UI组件设计系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →