迁移说明:从 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 支持及一般性能承诺不是迁移目标。