现代公共 API 的类型支持¶
现代 API 提供内联类型注解及符合 PEP 561
的 fuzzyroutines/py.typed 标记。支持 CPython 3.13 和 3.14。
可从 fuzzyroutines 或专门模块导入现代名称;两条路径保留相同类型和运行时对象。
MembershipScalar 接受内置浮点数及 numbers.Real 实现,包括整数和 fractions.Fraction。
联合类型显式包含 float,因为静态检查器不会把所有内置数值都建模为 numbers.Real 子类。
运行时验证仍拒绝布尔值、非有限坐标和无效隶属度。静态注解不编码这些数值限制。
MembershipCallable 是结构化契约:函数、可调用对象或绑定方法必须接受每个
MembershipScalar 坐标,并返回 MembershipScalar。
仅标注为接受 float 的回调所承诺的范围小于完整域。
自定义隶属函数回调应使用公共标量别名:
from fractions import Fraction
from fuzzyroutines import (
ContinuousUniverse,
MembershipCallable,
MembershipScalar,
ScalarFuzzySet,
)
def CustomMembership(coordinate: MembershipScalar) -> MembershipScalar:
"""Return a constant rational membership grade."""
return Fraction(1, 2)
membership: MembershipCallable = CustomMembership
fuzzySet = ScalarFuzzySet(ContinuousUniverse(0, 1, True, True), membership)
grade: MembershipScalar = fuzzySet.Membership(0.5)
标量结果保持为 MembershipScalar,因此注解不要求将有理数或其他实数算术强制转换为浮点数。
解析属性操作要求标准 MembershipFunction 或可信解析来源;
一般回调不具备这些操作需要的解析依据。
DeriveProperties 根据传入论域选择 ContinuousFuzzyProperties 或 DiscreteFuzzyProperties。
采样操作返回独立的采样依据类型。尺度查找返回 LinguisticTerm | None,
因此调用者必须处理术语缺失情况。
Typeshed 通过兼容复数的接口建模 numbers.Real 算术,推断的结果类型比实数标量操作更宽。
在已经验证的内部算术边界,较窄的 cast(float, value) 为检查器提供实数算术视图。
typing.cast 在运行时返回同一对象,不调用 float(value),也不改变有理数算术。
公共结果保留更广泛的标量契约,现代诊断仍接受完整类型检查。
不可变 dataclass 字段和只读隶属函数参数映射对检查器可见。 算子及分析函数要求各自特定的策略和域类型;传入其他策略族属于类型错误。
可复现检查¶
将固定版本的检查器与运行时依赖分开安装:
python -m pip install -r requirements-typing.txt
python -m tools.typecheck
固定的 mypy 1.19.1 支持声明的 Python 版本和 PEP 695 别名; 其传递依赖也固定在同一文件中。源代码检查禁用增量复用, 成功结果不依赖先前缓存。CI wheel 构建器及构建后端也采用固定的开发依赖版本, 并禁用构建隔离。
mypy.ini 使用严格检查、诊断代码和未生效的忽略指令报告,
显式覆盖包根、每个现代模块(包括内部数值验证)、检查命令及全部静态调用方。
没有全局错误抑制。历史 FuzzyRoutines 门面、_legacy 适配器
和可执行 Examples 模块具有范围严格限定的跳过导入边界。
它们保留运行时兼容契约,但不属于现代类型支持承诺。
tests/typing 中的调用方样例包含有效导入、数值输入、自定义回调、策略使用、
不可变结果及精确返回类型断言。预期无效的调用和赋值标注具体诊断代码。
如果签名变为 Any,或以其他方式开始接受无效用法,
原先必要的忽略指令会变为多余,从而使检查失败。
已安装 wheel 的边界¶
Public modern typing 工作流在两个受支持 Python 版本上检查源契约并构建 wheel。
它将 wheel 和固定检查器安装到新的虚拟环境,然后运行:
/path/to/isolated/environment/bin/python /path/to/checkout/tools/typecheck.py --installed
此模式验证 Python 解析到工作树之外的包,并确认安装包包含 py.typed。
它将全部调用方样例复制到仓库之外的临时目录,在那里以隔离 Python 路径、
清空 MYPYPATH 与 PYTHONPATH、使用全新缓存的方式运行 mypy。
因此调用方样例检查的是 wheel 注解,而不是偶然找到工作树中的源文件。
临时探针在成功或失败后均删除;导入与检查器失败保留非零退出码。