srdatalog.ir.hir.semi_naive

HIR Pass 3: Semi-Naive Variant Generation.

Populates base_variants / recursive_variants on each HirStratum.

For each stratum:

  • Non-recursive: one HirRuleVariant per rule (base, delta_idx=-1).

  • Recursive: for each rule, one DELTA variant per body clause whose relation is an SCC member. The variant pins delta_idx to that clause index and sets clause_versions[idx] = DELTA (others FULL).

Mirrors generateVariants in src/srdatalog/hir/semi_naive.nim.

Negations are NOT delta candidates (only positive occurrences of SCC members get incrementalized).

Module Contents

Classes

SemiNaiveVariantPass

Pipeline wrapper. Runs right after stratify (order=100) so downstream HIR transforms that care about variants can assume they exist.

Functions

create_base_variant

create_delta_variant

find_scc_clause_indices

Indices of positive body clauses (Atoms) whose relation is in scc_members.

generate_variants

Populate base_variants and recursive_variants per stratum. Mutates and returns the same HirProgram.

API

class srdatalog.ir.hir.semi_naive.SemiNaiveVariantPass[source]

Pipeline wrapper. Runs right after stratify (order=100) so downstream HIR transforms that care about variants can assume they exist.

info

‘PassInfo(…)’

run(hir: srdatalog.ir.hir.types.HirProgram) srdatalog.ir.hir.types.HirProgram[source]
srdatalog.ir.hir.semi_naive.create_base_variant(rule: srdatalog.dsl.Rule) srdatalog.ir.hir.types.HirRuleVariant[source]
srdatalog.ir.hir.semi_naive.create_delta_variant(rule: srdatalog.dsl.Rule, delta_idx: int) srdatalog.ir.hir.types.HirRuleVariant[source]
srdatalog.ir.hir.semi_naive.find_scc_clause_indices(rule: srdatalog.dsl.Rule, scc_members: set[str]) list[int][source]

Indices of positive body clauses (Atoms) whose relation is in scc_members.

srdatalog.ir.hir.semi_naive.generate_variants(hir: srdatalog.ir.hir.types.HirProgram) srdatalog.ir.hir.types.HirProgram[source]

Populate base_variants and recursive_variants per stratum. Mutates and returns the same HirProgram.