跳转至

迁移说明:从 1.0.3 到 2.0.0

这些说明描述已准备好的 2.0.0 候选版本;稳定发布 仍须通过人工就绪审核。 本文补充变更日志、兼容指南 及可执行的历史到现代迁移示例。

升级之前

使用 CPython 3.13 或 3.14,并在应用实际使用的解释器上验证。 Python 3.12 及更早版本不属于 v2 的支持承诺,历史 Python 3.6 分类器不会延续。 包元数据现在由 pyproject.toml 管理,使用标准 wheel 和源代码分发包构建; 历史 setup.py 不再负责版本生成。

当前项目自有代码采用 Apache-2.0,而非历史 MIT 许可证。 重新分发时保留 LICENSE、NOTICE 以及适用的版权和署名声明。 不可变的 1.0.3 基线保留原许可证。参见许可与来源。

导入与历史调用

继续从 fuzzyroutines.FuzzyRoutines 导入历史类和算子。 根包 fuzzyroutines 公开经过筛选的现代 API。 门面的通配符导出包含十五个受支持的函数和类,而不是所有已导入的辅助对象。 原先通过通配符获得 math、copy 或其他辅助模块的应用,必须直接导入这些标准库模块; 门面属性 math 和 copy 也已移除。

受保护的名称及调用形式仍受支持,包括 Defuz()、Fuzzy()、GetLevelByName() 和历史隶属函数标识符。保留历史三角形映射 a=left, b=right, c=peak。 采用现代 Triangle(left, peak, right) 或 Trapezoid 工厂时必须显式转换; 在不同约定之间直接复制位置参数值可能改变形状。

门面拆分保留历史类和函数的模块身份,既有新 pickle 往返测试,也有实际拆分前的样本。 此依据覆盖拆分兼容性,不保证任意 Python 版本之间的 pickle 可移植性。 历史名称及可变级别字典仍可观察; 可观察接口清单 记录了哪些名称在 ADR-0001 较窄的受保护契约之外也有测试。

现在明确失败的输入

升级前检查应用输入:格式错误的值不再产生看似有效的回退结果。 以下数值限制描述历史门面;现代 API 更广泛的 MembershipScalar 契约见 有限标量策略。

  • 标量隶属度必须是 [0, 1] 内有限的 int 或 float。 布尔值、NaN、无穷、字符串及数组类输入会被拒绝。
  • 隶属函数坐标必须是有限的非布尔 int 或 float 标量; [0, 1] 之外的值可以是有效坐标。构造及替换参数要求准确满足函数族声明的 有限参数集合与有效几何。保留的可变参数映射不允许损坏状态静默求值为零。
  • 不定参数组合至少需要一个操作数,验证每个操作数,并拒绝未知函数族。 FuzzyNOT 要求 alpha 位于 (0, 1); FuzzyNOTParabolic 要求 alpha 位于 [1/4, 3/4]。
  • 尺度级别必须包含必需字段;不区分大小写查找时发生冲突的名称会被拒绝。 应使用唯一完整名称,不依赖有歧义的查找。

历史失败仍使用具体的内置异常。现代类别从 fuzzyroutines.exceptions 提供, 保留适用的 TypeError、ValueError 和 ArithmeticError 捕获方式。 自定义隶属函数回调的任意异常会传播,不转换为零,也不重新分类。 参见 PR #274 及已修复错误台账。

数值结果与保留设置

FuzzySet.Defuz() 和 defuzValue 现在根据当前隶属函数参数及 supportSet 边界重新计算。 这些边界是有限积分区间,不是数学支集。 对于受支持函数族,解析矩取代固定采样;其他可调用对象使用自适应积分。 请更新依赖过期质心或已退役 1000 点右端点结果的断言。 已记录历史参考用例的绝对比较界限为 5e-4,并非通用误差承诺。

零面积没有质心,现在通过历史门面抛出 ValueError, 不再由旧采样结果之和间接触发 ZeroDivisionError;请相应更新零面积异常处理器。 现代未定义结果具有显式错误类别;未能解决的自适应积分抛出 CentroidConvergenceError。 应处理这些失败,而不是使用中点或旧缓存值。 现代 CentroidPolicy 控制精度与工作量。 MFunction.accuracy 仍可写入,但质心求值忽略它; FuzzyNOTParabolic 保留的 epsilon 不再控制其解析执行。

Bell 求值保留其参数映射。历史尺度 Fuzzy() 仍在最大值并列时选择排序靠后的级别, 包括所有隶属度均为零的并列情况,并返回原级别字典。 历史不区分大小写查找使用大写完整名称,现代查找使用 Unicode 大小写折叠。 现代模糊化显式规定无匹配及 first、last 或 all 并列策略。 不要静默以现代默认值替换历史选择规则。

逐步采用现代 API

当已实现的现代 API 覆盖应用操作时,使用显式论域、不可变标量集合和隶属函数工厂、 算子策略以及独立积分域。精确属性、α 截集、归一化和关系保留各自的验证依据边界; 采样报告不证明连续行为。语言术语的隶属度及诊断功能也已提供。 现有历史调用不需要整体重命名。

完整迁移指南 链接可执行示例,并解释每条可用路径。 任务 #92 和 #95 的公共现代类型与签名覆盖已经实现, 并在 CPython 3.13 和 3.14 上针对已安装 wheel 检查;参见类型契约。 最终候选版本仍需要自身的 CI 依据。 可选向量化目前是设计决策及包外实验,不是可导入的计算后端。 公共凸性查询、透明缓存、free-threaded 支持及一般性能承诺不是迁移目标。