ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

scikit-image 使命宣言解读:SKIP 2 定义的项目价值观、技术原则与决策依据

scikit-image 使命宣言解读:SKIP 2 定义的项目价值观、技术原则与决策依据 计算机视觉图像处理科学计算【免费下载链接】scikit-imageImage processing in Python项目地址https://gitcode.com/gh_mirrors/sc/scikit-image点击查看免费下载导读SKIP 2 — scikit-image mission statement 是 scikit-image 官方以提案SKIP形式正式通过的使命宣言与价值观文档。它回答了一个根本问题作为一个科学图像分析库scikit-image 应当追求什么、拒绝什么以及每一项 API 设计与技术取舍背后遵循的原则。本文以该文档为骨架结合仓库中的源码、测试与配置实例逐条解读其使命与价值观说明这些抽象原则如何落地为可验证的工程实践帮助你理解 scikit-image 的设计哲学也为参与贡献或深度使用该库提供决策依据。SKIP 是什么SKIP 2 在提案体系中的位置SKIPscikit-image proposal是 scikit-image 项目的正式提案机制用于记录重大新特性、收集社区意见并沉淀设计决策参见 SKIP 0 — Purpose and Process。SKIP 分为 Standards Track、Informational 与 Process 三类SKIP 2 属于Process 类型状态为Active创建于2018-12-08对应skimage 0.16版本由 Juan Nunez-Iglesias、Stéfan van der Walt、Josh Warner、François Boulogne、Emmanuelle Gouillart、Mark Harfouche、Lars Grüter、Egor Panfilov、Gregory Lee 等九位项目核心成员共同署名。该文档的使命非常明确将下述宣言正式采纳为 scikit-image 的使命声明并使之在项目主页、README、贡献者指南与核心开发者指南中占据突出位置此后所有关于 API 与项目未来的决策都将以本文档为参照基准具体决策机制见 SKIP 1 — scikit-image governance and decision-making。提案的缘起是 2018 年 7 月 Juan 发表的公开博客文章《The road to scikit-image 1.0》经社区长时间征集意见后正式成文。作者在文档中坦言过去几年 scikit-image 略有漂移adrift新老贡献者各取所需地添加小功能后又消失一段时间——这种模式值得鼓励但缺少方向感没有集中的路线图许多贡献因难以达到项目严格但大多未成文的代码标准而搁浅。SKIP 2 的使命之一就是把这套标准从未成文变为成文。使命成为 Python 科学图像分析的参考库文档开宗明义scikit-image 的目标是成为 Python 中科学图像分析的参考库reference library。这一目标通过五个途径达成每一条都对应可验证的工程实践。易用易装依赖审慎与文档完备beingeasy to use and install谨慎接纳新依赖有时剔除现有依赖或将之改为可选API 中所有函数都有详尽 docstring说明预期输入与输出。这一点在仓库中有直接体现。requirements/default.txt 是项目运行时核心依赖清单仅包含 numpy、scipy、networkx、pillow、imageio、tifffile、packaging、lazy-loader 八项且文件头部注明由 tools/generate_requirements.py 生成、勿直接编辑体现依赖纳入的流程化管控——这正是谨慎对待新依赖的制度化落地。可选功能则拆分至 requirements/optional.txt保证基础安装轻量。一致的 API参数命名与位置的统一providing aconsistent API概念上相同的参数在函数签名中应具有相同的名称与位置。这是 scikit-image 对使用者的核心承诺学会一个函数的参数约定即可迁移到整个库的其他函数。从源码结构看各子模块的公开入口均通过统一的__init__.py导出如 src/skimage/util/init.py并配以.pyi类型桩文件从结构上约束了 API 的一致性。正确性优先接近 100% 测试覆盖与双人审查ensuringcorrectness测试覆盖率接近 100%代码在被纳入库之前至少经过两位核心开发者的审查。仓库中 tests/skimage 与 tests/skimage2 目录按子模块镜像组织color、feature、filters、graph、io、measure、metrics、morphology、registration、restoration、segmentation、transform、util 等每个模块都有对应测试文件此外 src/skimage/conftest.py 与 src/skimage/_doctest_adapters.py 还承担了 docstring 示例的 doctest 验证确保文档中的代码示例可运行、结果正确。双人审查机制则在 SKIP 1 的决策规则中明文规定代码与重大文档变更需两位核心开发者同意且无人提出异议。珍视用户数据函数式 API 与输入数组保护caring for usersdata采用函数式functionalAPI除非用户明确要求否则不修改输入数组。这是 scikit-image 最重要的工程承诺之一输入数组默认只读。以 src/_skimage2/util/_invert.py 的invert函数为例其实现使用np.subtract(max_val, image, dtypeimage.dtype)、~image、-image等操作全部返回新数组而非就地修改并在 docstring 中逐 dtype 说明反转变换语义无符号整数从 dtype 最大值减、有符号整数从 -1 减、浮点从 1 或 0 减。这种输出新结果、原数据不动的函数式风格贯穿全库。图像处理教育教学型文档promotingeducation in image processing配以广泛的教学文档。仓库 doc/examples 按应用场景组织了大量 gallery 示例applications、color_exposure、edges、features_detection、filters、segmentation、transform 等每个示例都展示某函数在真实科学应用中的用法doc/source/user_guide 提供入门教程与概念指南。教育被当作产品的一部分来建设。价值观社区、科学与可读性在使命之外SKIP 2 还正式确立了六条价值观它们是未成文文化的成文化包容inclusive持续欢迎并指导首次贡献的新人社区驱动community-drivenAPI 与功能决策由用户需求驱动而非核心团队的偏好参见 治理文档优先服务科学应用优先于 Photoshop、GIMP 式的消费级图像编辑因此常优先支持 n 维数据拒绝缺乏科学价值的花哨滤镜可读性优先于极致性能简单可读的实现优先——宁愿慢 20%只要代码行数减半重视教育与文档所有函数应有 NumPy 风格 docstring最好带示例以及展示科学应用的 gallery 示例核心开发者积极参与完成文档示例不做魔法no magic使用 NumPy 数组而非花哨的 façade 对象倾向于教育用户而非替用户做决定——但不排斥合理的默认值。不做魔法是讨论度最高的条款之一。脚注记录NumPy 数组的采用、包容性、导师制与文档这几条获得了最广泛的支持Mark Harfouche、Royi Avital、Greg Lee 等均表示 1。本文档的定位scikit-image 的Python 之禅文档用了一个精妙的类比定位自身正如 Python 之禅Zen of Python与 PEP8 指导大多数 Python 代码的风格与实现细节本文档将指导 scikit-image 的未来决策——无论是代码风格、是否接受新功能、是否引入新依赖还是其他方方面面。换言之它是一份决策的价值观字典而不是操作手册任何该不该做 X的争论最终都应回到这份文档寻求原则性答案。被否决的想法元数据处理与魔法层SKIP 2 的 Alternatives 一节如实记录了原始讨论中被否决的两个议题体现了社区决策的透明性元数据处理被否决作者原建议在 1.0 之前引入某种元数据处理能力。Mark Harfouche、Curtis Rueden、Dan Allan 等提出(a) scikit-image 或许不需要处理元数据可以专注做一个健壮的底层库由 XArray 之类的库在其上附加元数据能力(b) 元数据支持可以在不破坏 1.0 API 的前提下日后添加。作者认同这些观点并坦承元数据处理极难暂不列入议程。魔法思维被否决Philipp Hanslovsky 建议在某些语境下魔法是可取的好的解决方案是在非魔法层之上构建一个魔法层。作者同意这一评估但明确在 1.0 之前scikit-image 应当保持为非魔法层。这两个否决案例恰好反向印证了价值观中优先服务科学应用聚焦底层、不越界与不做魔法先教育用户的取舍逻辑。向后兼容与治理关联向后兼容文档明确声明本 SKIP 只是把 scikit-image 原本未成文的文化正式化因此不带来任何向后兼容性问题。治理关联使命与价值观的变更属于重大治理事项。按 SKIP 1 的规则修改本治理模型或使命、愿景、价值观需要提交 SKIP 并走完整决策流程除非核心开发者一致同意决策过程采用寻求共识consensus seeking模式僵局时由五人规模的 Steering Council 裁决。CC0 版权本文档以 CC0 1.0 公有领域贡献许可发布并鼓励在适当场合注明出处CC0BY。从源码看价值观的落地以下三个例子展示抽象的价值观如何转化为仓库中可验证的具体形态。示例 1invert的函数式实现与文档实践src/_skimage2/util/_invert.py 的invert函数集中体现了三条价值观珍视用户数据全部实现路径布尔取反、无符号整数np.subtract(max_val, image)、有符号整数np.subtract(-1, image)、浮点-image或np.subtract(1, image)都生成新数组绝不就地修改输入不做魔法函数签名简单invert(image, signed_floatFalse)dtype 差异行为在 docstring 中逐条明文说明并通过 4 个 doctest 示例np.uint8、np.int8、正浮点、有符号浮点教育用户而非替用户猜正确性与教育docstring 的 Examples 由 src/skimage/_doctest_adapters.py 接入 doctest 体系示例结果错误会被 CI 捕获。示例 2审慎的依赖清单requirements/default.txt 仅保留八项核心依赖且由 tools/generate_requirements.py 自动生成——对应easy to use and install中谨慎接纳新依赖、必要时剔除或改可选的承诺requirements/optional.txt 与 requirements/test.txt 则把可选功能与测试环境进一步隔离。示例 3gallery 示例与测试镜像结构doc/examples 下每个子目录都以plot_*.py组织教学示例如 plot_denoise.py、plot_regionprops.py对应重视教育与文档而 tests/skimage 与 tests/skimage2 两套按模块镜像的测试树对应确保正确性、测试覆盖率接近 100%——项目甚至为迁移到skimage2新命名空间维护了平行测试集见 tests/skimage2/test_skimage2.py。小结SKIP 2 不是一份普通的路线图而是 scikit-image 项目的宪法式文件它以成为 Python 科学图像分析的参考库为使命以包容、社区驱动、服务科学、可读性优先、重视教育与文档、不做魔法为价值观并如实记录了元数据处理与魔法层两个被否决的方案。此后所有 API 决策、依赖取舍与代码风格讨论都可以、也应该回到这份文档寻找原则依据。当你阅读 scikit-image 源码、参与贡献或选择它为你的科学图像分析工具时这份文档就是理解其一切设计取舍的钥匙。想进一步阅读的仓库路径SKIP 提案索引见 doc/source/skips/index.md价值观的站点落地版见 doc/source/about/values.md配套的决策机制见 SKIP 1 治理文档SKIP 提交格式与状态流转见 SKIP 0 流程文档。赞分享计算机视觉图像处理科学计算【免费下载链接】scikit-imageImage processing in Python项目地址https://gitcode.com/gh_mirrors/sc/scikit-image点击查看免费下载相关推荐scikit-image 治理与决策机制全解读SKIP 1 治理章程深度剖析scikit image 治理与决策机制全解读SKIP 1 治理章程深度剖析 本篇技术指南围绕 scikit image 项目官方治理文档 SKIP 1Go计算机视觉图像处理科学计算NetworkX 使命与价值观全解析参考库定位、工程准则与源码落地实践NetworkX 使命与价值观全解析参考库定位、工程准则与源码落地实践 本文依据仓库 doc/developer/values.rst https://lin图计算数据分析科学计算AIHawk 配置指南3步让 AI 浏览器代理跑起来AIHawk 配置指南3步让 AI 浏览器代理跑起来 AIHawk包名 invisible playwright_mcp 是一个 AI 浏览器代理你用一计算机视觉图像处理科学计算上一篇使用 MkDocs Material 内置 Blog 插件构建文档站点博客从零配置到元数据全解析下一篇Backstage 软件模板自定义字段扩展Custom Field Extensions开发指南为 Scaffolder 表单注入自定义 React 字段创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表