Skip to content

lawref.expansion

Независимая эталонная развёртка профиля law.expansion/0.1 (SPEC §279.1, DECISION-0126).

Как и term_sugar, это намеренно маленький рукописный разбор поверхности expansion/expand: модуль не импортирует и не вызывает lawc, чтобы байтовый differential (verify/ci/gates/differential/check_expansions.py) сравнивал две по-настоящему разные реализации одного prose-контракта. Принимается ровно закрытый профиль §279.1; всё вне него отвергается громко — либо диагностикой профиля (LDC-E1335…LDC-E1342, §279.1.10), либо ExpansionSyntaxError там, где сама поверхность вне узкого среза оракула (qualified-ссылки, формулы scope сложнее конъюнкции атомов).

Вход — тексты файлов пакета (обычные модули с отношениями и экземплярами) и предъявленный контекст пина §279.1.8; выход — порождённые узлы CLIR с contentHash, диагностики и карта §279.1.9.

Attributes

NameDescription
BUDGET_CASESNo description.
BUDGET_LISTNo description.
BUDGET_NODESNo description.
BUDGET_PREMISESNo description.
MAP_FORMATNo description.
MAP_FORMAT_02No description.
PROFILENo description.
PROFILESNo description.
PROFILE_02No description.

Classes

NameDescription
ArgumentNo description.
CaseNo description.
DateTermДатовый терм границы окна §279.2.2: связыватель Date, литерал даты либо
DefinitionNo description.
DeonticHeadДеонтическая голова emit §279.2.3.
DiagnosticNo description.
EmitPriorityNo description.
EmitRuleNo description.
ExpansionSyntaxErrorПоверхность вне узкого среза эталонной реализации.
ExternalRoleRefprefer A.role over B в обычном priority — §279.1.6.
InstanceNo description.
LabelNo description.
MetaLiteralNo description.
ModuleNo description.
ParamTypeNo description.
PremiseNo description.
ResultNo description.

Functions

NameDescription
expand_packageРазвернуть все экземпляры пакета; files — имя файла → текст (порядок сборки).
expansion_mapКарта §279.1.9 с привязкой к digest полных канонических байтов CLIR.
pack_content_hashNo description.

BUDGET_CASESattributemodule attribute#

BUDGET_CASES = 32

BUDGET_LISTattributemodule attribute#

BUDGET_LIST = 32

BUDGET_NODESattributemodule attribute#

BUDGET_NODES = 128

BUDGET_PREMISESattributemodule attribute#

BUDGET_PREMISES = 64

MAP_FORMATattributemodule attribute#

MAP_FORMAT = 'law.expansion-map/0.1'

MAP_FORMAT_02attributemodule attribute#

MAP_FORMAT_02 = 'law.expansion-map/0.2'

PROFILEattributemodule attribute#

PROFILE = 'law.expansion/0.1'

PROFILESattributemodule attribute#

PROFILES = frozenset({PROFILE, PROFILE_02})

PROFILE_02attributemodule attribute#

PROFILE_02 = 'law.expansion/0.2'

Argumentclassdataclass#

class Argument(name: str, kind: str, values: tuple[str, ...] = (), spans: tuple[tuple[int, int], ...] = (), quantity: tuple[str, str] | None = None, quantity_span: tuple[int, int] = (0, 0))

kindattributeinstance attribute#

kind: str

nameattributeinstance attribute#

name: str

quantityattributeclass attributeinstance attribute#

quantity: tuple[str, str] | None = None

quantity_spanattributeclass attributeinstance attribute#

quantity_span: tuple[int, int] = (0, 0)

spansattributeclass attributeinstance attribute#

spans: tuple[tuple[int, int], ...] = ()

valuesattributeclass attributeinstance attribute#

values: tuple[str, ...] = ()

Caseclassdataclass#

class Case(param: str, name: str, name_span: tuple[int, int], labels: list[Label], anchors: list[str], arguments: dict[str, Argument])

anchorsattributeinstance attribute#

anchors: list[str]

argumentsattributeinstance attribute#

arguments: dict[str, Argument]

labelsattributeinstance attribute#

labels: list[Label]

nameattributeinstance attribute#

name: str

name_spanattributeinstance attribute#

name_span: tuple[int, int]

paramattributeinstance attribute#

param: str

DateTermclassdataclass#

class DateTerm(kind: str, value: str, quantity: str = '', span: tuple[int, int] = (0, 0))

Датовый терм границы окна §279.2.2: связыватель Date, литерал даты либо календарный шаг add_calendar_period(<binder>, <quantity>).

kindattributeinstance attribute#

kind: str

quantityattributeclass attributeinstance attribute#

quantity: str = ''

spanattributeclass attributeinstance attribute#

span: tuple[int, int] = (0, 0)

valueattributeinstance attribute#

value: str

Definitionclassdataclass#

class Definition(name: str, params: dict[str, ParamType], exports: dict[str, tuple[str, ...]], emits: list[EmitRule | EmitPriority], file: str, alias: str = '', local: bool = True, pin: dict | None = None, profile: str = PROFILE_02)

aliasattributeclass attributeinstance attribute#

alias: str = ''

emitsattributeinstance attribute#

emits: list[EmitRule | EmitPriority]

exportsattributeinstance attribute#

exports: dict[str, tuple[str, ...]]

fileattributeinstance attribute#

file: str

localattributeclass attributeinstance attribute#

local: bool = True

nameattributeinstance attribute#

name: str

paramsattributeinstance attribute#

params: dict[str, ParamType]

pinattributeclass attributeinstance attribute#

pin: dict | None = None

profileattributeclass attributeinstance attribute#

profile: str = PROFILE_02

DeonticHeadclassdataclass#

class DeonticHead(modality: str, path: tuple[str, ...], bearer: str, beneficiary: str | None, goal_kind: str, goal: MetaLiteral, start: DateTerm, end: DateTerm, end_inclusive: bool, spans: dict[str, tuple[int, int]])

Деонтическая голова emit §279.2.3.

bearerattributeinstance attribute#

bearer: str

beneficiaryattributeinstance attribute#

beneficiary: str | None

endattributeinstance attribute#

end: DateTerm

end_inclusiveattributeinstance attribute#

end_inclusive: bool

goalattributeinstance attribute#

goal: MetaLiteral

goal_kindattributeinstance attribute#

goal_kind: str

modalityattributeinstance attribute#

modality: str

pathattributeinstance attribute#

path: tuple[str, ...]

spansattributeinstance attribute#

spans: dict[str, tuple[int, int]]

startattributeinstance attribute#

start: DateTerm

Diagnosticclassdataclass#

class Diagnostic(code: str, message: str, span: tuple[int, int] = (0, 0), file: str = '')

codeattributeinstance attribute#

code: str

fileattributeclass attributeinstance attribute#

file: str = ''

messageattributeinstance attribute#

message: str

spanattributeclass attributeinstance attribute#

span: tuple[int, int] = (0, 0)

EmitPriorityclassdataclass#

class EmitPriority(path: tuple[str, ...], path_span: tuple[int, int], prefer: tuple[str, ...], over: tuple[str, ...], reason: str, labels_from: tuple[str, ...] | None, labels_prefix: str, source_from: tuple[str, ...] | None, source_fallback: bool, case_var: str | None, cases_param: str | None = None)

case_varattributeinstance attribute#

case_var: str | None

cases_paramattributeclass attributeinstance attribute#

cases_param: str | None = None

labels_fromattributeinstance attribute#

labels_from: tuple[str, ...] | None

labels_prefixattributeinstance attribute#

labels_prefix: str

overattributeinstance attribute#

over: tuple[str, ...]

pathattributeinstance attribute#

path: tuple[str, ...]

path_spanattributeinstance attribute#

path_span: tuple[int, int]

preferattributeinstance attribute#

prefer: tuple[str, ...]

reasonattributeinstance attribute#

reason: str

source_fallbackattributeinstance attribute#

source_fallback: bool

source_fromattributeinstance attribute#

source_from: tuple[str, ...] | None

EmitRuleclassdataclass#

class EmitRule(path: tuple[str, ...], path_span: tuple[int, int], strength: str, binders: list[str], premises: list[Premise], head: MetaLiteral | None, head_kind: str, scope_from_self: bool, effective_from_self: bool, labels_from: tuple[str, ...] | None, labels_prefix: str, source_from: tuple[str, ...] | None, source_fallback: bool, case_var: str | None, cases_param: str | None = None, deontic: DeonticHead | None = None)

bindersattributeinstance attribute#

binders: list[str]

case_varattributeinstance attribute#

case_var: str | None

cases_paramattributeclass attributeinstance attribute#

cases_param: str | None = None

deonticattributeclass attributeinstance attribute#

deontic: DeonticHead | None = None

effective_from_selfattributeinstance attribute#

effective_from_self: bool

headattributeinstance attribute#

head: MetaLiteral | None

head_kindattributeinstance attribute#

head_kind: str

labels_fromattributeinstance attribute#

labels_from: tuple[str, ...] | None

labels_prefixattributeinstance attribute#

labels_prefix: str

pathattributeinstance attribute#

path: tuple[str, ...]

path_spanattributeinstance attribute#

path_span: tuple[int, int]

premisesattributeinstance attribute#

premises: list[Premise]

scope_from_selfattributeinstance attribute#

scope_from_self: bool

source_fallbackattributeinstance attribute#

source_fallback: bool

source_fromattributeinstance attribute#

source_from: tuple[str, ...] | None

strengthattributeinstance attribute#

strength: str

ExpansionSyntaxErrorclass#

class ExpansionSyntaxError(TermSyntaxError)

Bases: TermSyntaxError

Поверхность вне узкого среза эталонной реализации.

ExternalRoleRefclassdataclass#

class ExternalRoleRef(instance: str, role: str, span: tuple[int, int], file: str)

prefer A.role over B в обычном priority — §279.1.6.

fileattributeinstance attribute#

file: str

instanceattributeinstance attribute#

instance: str

roleattributeinstance attribute#

role: str

spanattributeinstance attribute#

span: tuple[int, int]

Instanceclassdataclass#

class Instance(reference: str, name: str, name_span: tuple[int, int], labels: list[Label], anchors: list[str], explicit_id: str | None, binds: dict[str, tuple[str, str, tuple[int, int]]], arguments: dict[str, Argument], cases: list[Case], scope: tuple[tuple[str, tuple[str, ...]], ...] | None, effective: dict | None, file: str, scope_span: tuple[int, int] = (0, 0), effective_span: tuple[int, int] = (0, 0))

anchorsattributeinstance attribute#

anchors: list[str]

argumentsattributeinstance attribute#

arguments: dict[str, Argument]

bindsattributeinstance attribute#

binds: dict[str, tuple[str, str, tuple[int, int]]]

casesattributeinstance attribute#

cases: list[Case]

effectiveattributeinstance attribute#

effective: dict | None

effective_spanattributeclass attributeinstance attribute#

effective_span: tuple[int, int] = (0, 0)

explicit_idattributeinstance attribute#

explicit_id: str | None

fileattributeinstance attribute#

file: str

labelsattributeinstance attribute#

labels: list[Label]

nameattributeinstance attribute#

name: str

name_spanattributeinstance attribute#

name_span: tuple[int, int]

referenceattributeinstance attribute#

reference: str

scopeattributeinstance attribute#

scope: tuple[tuple[str, tuple[str, ...]], ...] | None

scope_spanattributeclass attributeinstance attribute#

scope_span: tuple[int, int] = (0, 0)

Labelclassdataclass#

class Label(language: str, status: str, text: str, forms: tuple[tuple[str, str], ...] = ())

formsattributeclass attributeinstance attribute#

forms: tuple[tuple[str, str], ...] = ()

languageattributeinstance attribute#

language: str

statusattributeinstance attribute#

status: str

textattributeinstance attribute#

text: str

MetaLiteralclassdataclass#

class MetaLiteral(relation: tuple[str, ...], args: tuple[str, ...], negated: bool = False)

argsattributeinstance attribute#

args: tuple[str, ...]

negatedattributeclass attributeinstance attribute#

negated: bool = False

relationattributeinstance attribute#

relation: tuple[str, ...]

Moduleclassdataclass#

class Module(file: str, text: str, namespace: str, relations: dict[str, list[tuple[str, str]]], types: set[str], declared_ids: dict[str, tuple[int, int]], definitions: list[Definition], instances: list[Instance], role_refs: list[ExternalRoleRef], constants: dict[str, tuple[str, str]], parents: dict[str, str], aliases: dict[str, str], entities: set[str], imports: set[str])

aliasesattributeinstance attribute#

aliases: dict[str, str]

constantsattributeinstance attribute#

constants: dict[str, tuple[str, str]]

declared_idsattributeinstance attribute#

declared_ids: dict[str, tuple[int, int]]

definitionsattributeinstance attribute#

definitions: list[Definition]

entitiesattributeinstance attribute#

entities: set[str]

fileattributeinstance attribute#

file: str

importsattributeinstance attribute#

imports: set[str]

instancesattributeinstance attribute#

instances: list[Instance]

namespaceattributeinstance attribute#

namespace: str

parentsattributeinstance attribute#

parents: dict[str, str]

relationsattributeinstance attribute#

relations: dict[str, list[tuple[str, str]]]

role_refsattributeinstance attribute#

role_refs: list[ExternalRoleRef]

textattributeinstance attribute#

text: str

typesattributeinstance attribute#

types: set[str]

ParamTypeclassdataclass#

class ParamType(kind: str, binders: tuple[str, ...] = (), min_len: int = 0, fields: dict[str, 'ParamType'] = dict(), value_type: str | None = None)

bindersattributeclass attributeinstance attribute#

binders: tuple[str, ...] = ()

fieldsattributeclass attributeinstance attribute#

fields: dict[str, 'ParamType'] = field(default_factory=dict)

kindattributeinstance attribute#

kind: str

min_lenattributeclass attributeinstance attribute#

min_len: int = 0

value_typeattributeclass attributeinstance attribute#

value_type: str | None = None

Premiseclassdataclass#

class Premise(kind: str, literal: MetaLiteral | None = None, var: str = '', source: tuple[str, ...] = (), event: str = '', day: str = '', events: MetaLiteral | None = None, window: str = '', threshold: str = '')

dayattributeclass attributeinstance attribute#

day: str = ''

eventattributeclass attributeinstance attribute#

event: str = ''

eventsattributeclass attributeinstance attribute#

events: MetaLiteral | None = None

kindattributeinstance attribute#

kind: str

literalattributeclass attributeinstance attribute#

literal: MetaLiteral | None = None

sourceattributeclass attributeinstance attribute#

source: tuple[str, ...] = ()

thresholdattributeclass attributeinstance attribute#

threshold: str = ''

varattributeclass attributeinstance attribute#

var: str = ''

windowattributeclass attributeinstance attribute#

window: str = ''

Resultclassdataclass#

class Result(nodes: list[dict], diagnostics: list[Diagnostic], entries: list[dict], definitions: list[dict], role_ids: dict[str, str])

definitionsattributeinstance attribute#

definitions: list[dict]

diagnosticsattributeinstance attribute#

diagnostics: list[Diagnostic]

entriesattributeinstance attribute#

entries: list[dict]

nodesattributeinstance attribute#

nodes: list[dict]

role_idsattributeinstance attribute#

role_ids: dict[str, str]

okproperty#

ok: bool

expand_packagefunction#

def expand_package(files: dict[str, str], context: list[dict] | None = None, base_dir: Path | None = None, declared_aliases: list[str] | None = None, imports: dict[str, str] | None = None, import_descriptors: list[dict] | None = None) -> Result

Развернуть все экземпляры пакета; files — имя файла → текст (порядок сборки).

context — записи --expansions (§279.1.8), пути root — от base_dir; declared_aliases — алиасы [expansions] манифеста: объявленный и не предъявленный контекстом — LDC-E1340, не LDC-E1336; imports — имя пакета → namespace предъявленных зависимостей §23 (qualified-ссылки pkg::rel в аргументах разрешаются в <namespace>#rel).

expansion_mapfunction#

def expansion_map(result: Result, namespace: str, artifact_bytes: bytes) -> dict

Карта §279.1.9 с привязкой к digest полных канонических байтов CLIR.

pack_content_hashfunction#

def pack_content_hash(root: Path, entry: str) -> str

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.