mod transition_graph

module transition_graph

Action-conditioned structural transition evidence. Action-conditioned transition counts over target-blind structural microstates.

Structural descriptors determine the microstate labels supplied to this module. They do not determine attraction-region membership. Region evidence comes from repeated dynamics under a named proposal action, with a fixed probe action kept separate from adaptive search and transport actions.

Enums

enum TransitionGraphError

Error that leaves the requested posterior undefined.

InvalidConcentration

The symmetric Dirichlet concentration must be finite and positive.

CountOverflow

A transition count cannot be represented by u64.

NodeIndexOverflow

A structural microstate index cannot be extended to a node count.

ZeroDiffusionSteps

Diffusion time must contain at least one transition step.

InvalidMaximumDistance

Complete-linkage distance must be finite and nonnegative.

ZeroMinimumProbes

A resolved region requires at least one fixed-probe observation.

enum TransitionOutcome

Destination observed for one perturb–quench attempt.

Resolved(usize)

The quench reached a classified structural microstate.

Unresolved

The result was invalid, unclassified, or outside the represented set.

Structs and Unions

struct AttractionRegionConfig

Target-blind coarse-graining parameters for attraction regions.

probe_action: String

Action whose repeated dynamics define comparable return behaviour.

concentration: f64

Symmetric Dirichlet concentration for all resolved states and U.

diffusion_steps: usize

Number of probe-operator steps used in diffusion distance.

maximum_distance: f64

Maximum complete-linkage diffusion distance within one region.

minimum_probes: u64

Resolved probe returns required before a microstate can merge.

struct TransitionGraph

Append-only transition evidence separated by proposal action.

Implementations

impl TransitionGraph

Functions

fn attraction_regions(&self, config: &AttractionRegionConfig) -> Result<Vec<Vec<usize>>, TransitionGraphError>

Deterministic complete-linkage attraction regions from fixed-probe dynamics.

The unresolved posterior column is retained as an evidence diagnostic. Diffusion propagates on the resolved conditional operator. Eligibility counts resolved returns only: a node below minimum_probes resolved returns, including one whose probes are all unresolved, stays a singleton unresolved region and cannot merge.

fn count(&self, action: &str, from: usize, outcome: TransitionOutcome) -> u64

Exact count for one action-conditioned transition outcome.

fn new() -> Self

Create an empty graph.

fn node_count(&self) -> usize

Number of structural microstates represented by any observation.

fn observations(&self, action: &str, from: usize) -> u64

Total observations leaving from under exactly one action.

The total includes unresolved probes. Region eligibility uses Self::resolved_returns instead, so unresolved mass stays in the posterior without certifying shared return dynamics.

fn observe(&mut self, action: impl Into<String>, from: usize, outcome: TransitionOutcome) -> Result<(), TransitionGraphError>

Record one source, action, and resolved or unresolved destination.

fn posterior_matrix(&self, action: &str, concentration: f64) -> Result<Array2<f64>, TransitionGraphError>

Dirichlet-posterior mean transition matrix for exactly one action.

Columns 0..node_count are resolved destinations. The final column is the unresolved outcome. A symmetric pseudocount keeps every row proper before probes have reached all destinations.

fn register_node(&mut self, node: usize) -> Result<(), TransitionGraphError>

Ensure that a structural microstate exists before it has outgoing data.

fn resolved_returns(&self, action: &str, from: usize) -> u64

Resolved returns leaving from under exactly one action.

fn uncertainty(&self, action: &str, from: usize, concentration: f64) -> Option<f64>

Inverse posterior concentration for one action-conditioned source row.