chronaxis.core.message_binding
为当前消息表达式声明参数,并把独立消息仓事实关联为运行绑定。
ExpressionParameter将显式单位的配置数值规范成精确FLOAT64。MessageDeclarations 引用当前DeclarationBindings中选定来源的原SignalDefinition,不复制或虚构信号、 普通历史或TTL;当前policy只使用本条消息原字典,不继承上一条值。 MessageSourceEvidence只检查显式来源标签、全仓摘要、条数和首末的结构; MessageBindings将其与完整声明身份关联。真正封存文件的EOF/SHA/条数验证由 执行层bind_message_store负责,单独构造证据不证明来源文件已经读取。
本模块只保存创建后不可修改的配置与有限事实,不读文件、不执行表达式、不加载NumPy或 CAN,也不证明仓来自同一次CAN捕获或DBC单位已核实。这些关联留给实际生产端。 身份使用新版本前缀与固定字段的长度前缀增量SHA,不改变普通绑定的身份协议。 模型及调用者保留的配置由调用者拥有;执行工厂另付其新运行元数据费用。
这是模块参考。日常调用先查公开API索引;下划线对象和嵌套函数供维护者查阅。签名来自固定源码,公开类构造签名经实际Python接口核对。
相关类型
DeclarationBindings、SignalDType、SignalDefinition
对象导航
导入与重导出来源(展开)
from dataclasses import dataclass, field
from hashlib import sha256
from math import isfinite
from .binding import SignalDefinition
from .declarations import DeclarationBindings
from .unit_conversion import binding_version, require_config_version
from .unit_registry import REGISTRY_VERSION, resolve_unit
from .types import SignalDType
from .validation import require_identifier, require_text
from ..timebase.conversion import require_int64_ns_hash_parts
按固定模型字段顺序增量编码文本身份,失败不保活新增整段编码副本。
_hash_parts(parts: tuple[str, ...]) -> str参数
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
parts |
tuple[str, ...] | 是 | 无 | 位置或关键字。parts为本模块已检查的原生文本tuple,首项含独立版本前缀。 |
返回说明
小写SHA-256文本;每段UTF-8字节有长度前缀,分隔符不能造成碰撞。
异常说明
原Unicode、内存或取消错误;不调用外部repr或保存全量canonical文本。
本函数直接报告的具体错误:
TypeError:消息身份只编码已检查的原生文本。
返回类型:str。
源码:src/chronaxis/core/message_binding.py:30(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
ExpressionParameter
保存一个有明确单位、不可被对方重赋单位的FLOAT64配置参数。
只接受原生有限int/float;int须能精确转为有限float,不能静默舍入。 该参数不是信号或裸数字literal,不产生来源依赖和时间保持状态。
class ExpressionParameter属性与数据字段
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
name |
str | 是 | 无 | 表达式使用的安全简单名称。 |
value |
int | float | 是 | 无 | 构造后规范为有限原生float。 |
unit |
str | 是 | 无 | 明确单位标签;不按对方信号自动改写。 |
config_version |
int | 否 | 4 | 参数与绑定同版本,默认使用当前规则。 |
unit_status |
str | 不填写 | 构造时计算 | "verified"表示单位及换算关系已通过程序的单位表检查;"unverified"表示使用未登记的单位文字,程序未验证其物理换算关系。 |
源码:src/chronaxis/core/message_binding.py:56(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
ExpressionParameter.__post_init__
验证参数名称、精确数值及单位,不执行来源或表达式。
ExpressionParameter.__post_init__() -> None参数:无显式参数。
参数说明
无,读取name/value/unit。
返回说明
None,value规范成FLOAT64可精确表示的原生float。
异常说明
TypeError为非原生数值;ValueError为非有限、有损整数或声明非法。
本函数直接报告的具体错误:
TypeError:表达式参数名称和单位需要原生str。TypeError:表达式参数只接受原生int/float,不能为bool。ValueError:表达式参数必须能精确表示为有限FLOAT64。ValueError:表达式参数不能表示为有限FLOAT64。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:69(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
ExpressionParameter.dtype
读取固定数值类型;
ExpressionParameter.dtype: SignalDType装饰器:property。
读取属性,不使用调用括号。
参数说明
无;
返回说明
FLOAT64;
异常说明
无。
返回类型:SignalDType。
源码:src/chronaxis/core/message_binding.py:96(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations
为一个选定来源建立独立的当前消息名称空间,不制造运行证明。
signals引用原声明中的同一SignalDefinition对象。原定义的转换声明保留, 其TTL不在本模型执行;依赖仅能来自selected source。parameters及局部 derived_names不能覆盖原计划任何signal/derived,也不能互相覆盖。
class MessageDeclarations属性与数据字段
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
declarations |
DeclarationBindings | 是 | 无 | 完整原配置声明及身份,非实际文件证明。 |
source |
str | 是 | 无 | 当前消息表达式所属的来源别名;参与公式的信号均须来自该来源,避免将其他消息的旧值混入。 |
parameters |
tuple[ExpressionParameter, ...] | 否 | () | 有明确单位的配置参数。 |
derived_names |
tuple[str, ...] | 否 | () | 当前指标显式登记的局部派生名。 |
message_policy |
str | 否 | 'current_message-v1' | 填"current_message-v1":每次求值只取当前报文中的值,缺值就记录跳过原因,不借用前一条消息或另一条报文的值。 |
config_version |
int | None | 否 | None | 继承原声明,参数必须同版。 |
identity |
str | 不填写 | 构造时计算 | 完整原配置与消息配置的独立声明SHA。 |
源码:src/chronaxis/core/message_binding.py:102(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.__post_init__
核对来源、完整名称空间与policy,生成静态消息声明身份。
MessageDeclarations.__post_init__() -> None参数:无显式参数。
参数说明
无,读取创建后不可修改的字段,不读取文件或DBC。
返回说明
None;保原定义对象,不将声明身份当真实仓EOF证明。
异常说明
TypeError为模型/容器错误;ValueError为来源、名称或policy冲突。
本函数直接报告的具体错误:
TypeError:消息声明需要DeclarationBindings。TypeError:消息来源需要原生str。ValueError:消息来源不在原声明中。TypeError:消息参数与局部派生名称需要带有明确类型的 tuple。ValueError:消息policy仅支持current_message-v1。TypeError:消息局部派生名称需要原生str。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:118(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.extensions
读取宿主注册。
MessageDeclarations.extensions装饰器:property。
读取属性,不使用调用括号。
参数说明
无。
返回说明
冻结注册或None。
异常说明
无。
源码:src/chronaxis/core/message_binding.py:172(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.lookups
读取普通声明中的标定表。
MessageDeclarations.lookups装饰器:property。
读取属性,不使用调用括号。
参数说明
无。
返回说明
冻结tuple。
异常说明
无。
源码:src/chronaxis/core/message_binding.py:177(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.signals
选择同一原定义对象;
MessageDeclarations.signals: tuple[SignalDefinition, ...]装饰器:property。
读取属性,不使用调用括号。
参数说明
无;
返回说明
tuple;
异常说明
无主动异常。
返回类型:tuple[SignalDefinition, ...]。
源码:src/chronaxis/core/message_binding.py:182(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.resolve
只定位本来源原信号,参数名称另由编译器处理。
MessageDeclarations.resolve(name: str) -> SignalDefinition参数
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
name |
str | 是 | 无 | 位置或关键字。name为安全简单信号别名。 |
返回说明
原SignalDefinition对象。
异常说明
ValueError为未知、其他来源或非法名称;不从点号猜测原字段。
返回类型:SignalDefinition。
源码:src/chronaxis/core/message_binding.py:186(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageDeclarations.require_synchronized
检查实际依赖均在本来源,不借其他来源的同步声明引入缓存值。
MessageDeclarations.require_synchronized(names: tuple[str, ...]) -> None参数
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
names |
tuple[str, ...] | 是 | 无 | 位置或关键字。names为展开后的原信号依赖tuple,空依赖合法。 |
返回说明
None;单源当前字典不需要合并其他来源时钟。
异常说明
TypeError为容器错误;ValueError为非本来源或未知依赖。
本函数直接报告的具体错误:
TypeError:消息依赖names需要tuple。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:198(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageSourceEvidence
保存独立解码消息仓的有限事实,仅校结构而不声明真实回读已发生。
decoder_profile/read_identity是仓内显式标签,不认证旧CAN来源。原序SHA 包含记录和值/映射时间;首末可相同,空仓必须两端None且条数为0。
class MessageSourceEvidence属性与数据字段
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
source |
str | 是 | 无 | 本消息来源。 |
session_id |
str | 是 | 无 | 原声明会话。 |
decoder_profile |
str | 是 | 无 | 显式解码来源标签,不冒充计算policy。 |
read_identity |
str | 是 | 无 | 仓的显式读取标识,CAN同次关联由生产端另核。 |
store_sha256 |
str | 是 | 无 | 已封口全消息行流摘要。 |
record_count |
int | 是 | 无 | 全decoded条数,不是普通历史样本数。 |
first_time_ns |
int | None | 是 | 无 | 全仓首条映射坐标,空仓为None。 |
last_time_ns |
int | None | 是 | 无 | 全仓最后坐标,不补采样周期。 |
源码:src/chronaxis/core/message_binding.py:212(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageSourceEvidence.__post_init__
验证有限证据一致性,单独构造不能替代实际EOF校验。
MessageSourceEvidence.__post_init__() -> None参数:无显式参数。
参数说明
无,读取创建后不可修改的字段。
返回说明
None,已知时间规范成原生int。
异常说明
TypeError/ValueError为类型、SHA、条数或首末矛盾;时间超界原样传播。
本函数直接报告的具体错误:
TypeError:消息证据来源、会话及读取标签需要原生str。TypeError:消息仓摘要需要原生str。ValueError:消息仓摘要需要64位小写十六进制SHA-256。ValueError:消息条数需要非负原生int。ValueError:非空消息仓必须有真实首末时间。ValueError:消息仓终点早于起点。ValueError:空消息仓首末必须为None。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:228(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings
关联消息声明与实际仓证据,保持独立于普通DecodedBindings的运行身份。
证据实际性由bind_message_store完整回读负责;本模型只校结构/归属。 不证明普通历史、TTL、DBC字段单位或同次CAN捕获,也不保存逐条记录。
class MessageBindings属性与数据字段
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
declarations |
MessageDeclarations | 是 | 无 | 单源消息配置及完整原声明身份。 |
evidence |
MessageSourceEvidence | 是 | 无 | 执行工厂核实后的仓事实,非手造即证明。 |
config_version |
int | None | 否 | None | 继承消息声明,不允许运行时切换。 |
identity |
str | 不填写 | 构造时计算 | 独立message-binding-v1身份。 |
源码:src/chronaxis/core/message_binding.py:264(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.__post_init__
核对声明与证据来源/会话,增量生成有限运行身份。
MessageBindings.__post_init__() -> None参数:无显式参数。
参数说明
无,读取declarations/evidence。
返回说明
None,不再次打开消息仓。
异常说明
TypeError为模型错误;ValueError为来源/会话不符;编码或取消原错传播。
本函数直接报告的具体错误:
TypeError:消息运行绑定需要MessageDeclarations和MessageSourceEvidence。ValueError:消息仓证据的来源或会话与当前声明不符。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:276(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.extensions
读取宿主注册。
MessageBindings.extensions装饰器:property。
读取属性,不使用调用括号。
参数说明
无。
返回说明
冻结注册或None。
异常说明
无。
源码:src/chronaxis/core/message_binding.py:307(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.lookups
读取消息声明中的标定表。
MessageBindings.lookups装饰器:property。
读取属性,不使用调用括号。
参数说明
无。
返回说明
冻结tuple。
异常说明
无。
源码:src/chronaxis/core/message_binding.py:312(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.signals
读取同一原信号定义;
MessageBindings.signals: tuple[SignalDefinition, ...]装饰器:property。
读取属性,不使用调用括号。
参数说明
无;
返回说明
tuple;
异常说明
无主动异常。
返回类型:tuple[SignalDefinition, ...]。
源码:src/chronaxis/core/message_binding.py:317(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.parameters
读取创建后不可修改的配置参数;
MessageBindings.parameters: tuple[ExpressionParameter, ...]装饰器:property。
读取属性,不使用调用括号。
参数说明
无;
返回说明
tuple;
异常说明
无。
返回类型:tuple[ExpressionParameter, ...]。
源码:src/chronaxis/core/message_binding.py:322(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.derived_names
读取显式局部派生名;
MessageBindings.derived_names: tuple[str, ...]装饰器:property。
读取属性,不使用调用括号。
参数说明
无;
返回说明
tuple;
异常说明
无。
返回类型:tuple[str, ...]。
源码:src/chronaxis/core/message_binding.py:327(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.resolve
按单来源原定义定位信号,不从证据标签生成字段。
MessageBindings.resolve(name: str) -> SignalDefinition参数
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
name |
str | 是 | 无 | 位置或关键字。name为安全别名。 |
返回说明
原SignalDefinition。
异常说明
ValueError为非法、未知或其他来源名称。
返回类型:SignalDefinition。
源码:src/chronaxis/core/message_binding.py:331(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。
MessageBindings.require_synchronized
执行前复核全部依赖属于本来源,不执行普通TTL或时钟合并。
MessageBindings.require_synchronized(names: tuple[str, ...]) -> None参数
| 名称 | 数据类型 | 必填 | 省略时的值 | 用途、取值和效果 |
|---|---|---|---|---|
names |
tuple[str, ...] | 是 | 无 | 位置或关键字。names为原信号依赖tuple。 |
返回说明
返回None,不返回额外的计算值。
异常说明
TypeError/ValueError为容器或非本来源依赖。
返回类型:None。
源码:src/chronaxis/core/message_binding.py:339(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。