Source code for srdatalog.ir.hir.provenance

'''Provenance tracking for rule/clause rewriting passes.

Mirrors src/srdatalog/provenance.nim. The HIR JSON emitter writes a
`"provenance": {...}` sub-object only when the kind is `pkCompilerGen`,
so user-written rules and clauses keep the default `UserProvenance`
sentinel and emit no extra JSON keys.
'''

from __future__ import annotations

from dataclasses import dataclass
from enum import Enum


[docs] class ProvenanceKind(Enum): USER = "pkUser" COMPILER_GEN = "pkCompilerGen" DERIVED = "pkDerived"
[docs] @dataclass(frozen=True) class Provenance: kind: ProvenanceKind = ProvenanceKind.USER parent_rule: str = "" derived_from: str = "" transform_pass: str = ""
USER_PROVENANCE: Provenance = Provenance()
[docs] def compiler_gen(parent_rule: str, derived_from: str, transform_pass: str) -> Provenance: '''Construct a Provenance for a compiler-generated rule or clause.''' return Provenance( kind=ProvenanceKind.COMPILER_GEN, parent_rule=parent_rule, derived_from=derived_from, transform_pass=transform_pass, )