Skip to main content

IsStable

Struct IsStable 

Source
pub struct IsStable {
    pub margin: f64,
    pub min_samples: u64,
    pub horizon: u64,
    pub register: Mutex<SettleState>,
    /* private fields */
}
Expand description

Condition a per-cycle objective signal into a settled register and a steady-state signal.

Signature: is_stable(objective_value: f64, margin: f64, min_samples: u64, horizon: u64) -> (stable_value: f64, stable: u64)

Each cycle pushes objective_value onto a bounded ring of the most recent horizon samples and reports two outputs:

  • stable_value — the median of the ring, a robust central-tendency estimate of the level the phase is currently producing. This is the register the phase executor reads as the optimizer objective after completion. It is populated from the first sample and, being a median over the window, is resistant to a single trailing empty-window outlier.
  • stable1 when the signal has reached steady state: the ring holds at least min_samples samples and the sample standard deviation is within margin · max(|median|, 1) (a relative band with an absolute floor so a level near zero still settles). Otherwise 0. The executor reads this to decide when settling is complete and the phase may stop.

Declared Nondeterministic: the output depends on the sample history accumulated across calls, not on the current input alone. The eval-spanning ring is the load-bearing aspect.

Fields§

§margin: f64

The margin argument, as given at construction.

§min_samples: u64

The min_samples argument, as given at construction.

§horizon: u64

The horizon argument, as given at construction.

§register: Mutex<SettleState>

The register value, computed once at construction.

Implementations§

Source§

impl IsStable

Source

pub fn new(margin: f64, min_samples: u64, horizon: u64) -> Self

A is_stable node with the given constant arguments.

Trait Implementations§

Source§

impl PolydatNode for IsStable

Source§

fn meta(&self) -> &NodeMeta

Return this node’s metadata (port names and types).
Source§

fn eval(&self, inputs: &[Value], outputs: &mut [Value])

Evaluate the node: read from inputs, write to outputs. Read more
Source§

fn compiled_slot(&self, wire_types: &[PortType]) -> Option<CompiledSlotKit>

Return a slot-compiled closure for nodes with typed-slice ports (§8.4 layer 3): slice inputs read (ptr, len) slot pairs; vector outputs write into kernel-owned scratch. Checked by the compiled-kernel builders AFTER Self::compiled_u64 — pure-scalar nodes never need it. Default None: the node stays on typed eval.
Source§

fn purity(&self) -> Purity

Declare this node’s purity status per the runtime_model.md’s D2 axiom. Default: Purity::Pure. Override to declare an observable side channel (Purity::SideChannel) or eval-call-spanning state (Purity::Nondeterministic). Read more
Source§

fn scratch_layout(&self) -> Vec<ScratchElem>

The scratch entries a state owns for this node’s evaluation (axiom S3), one per entry in the order the node expects them in Self::eval_in. Empty for a node that evaluates over Values alone, which is every node but a native cone.
Source§

fn eval_in( &self, scratch: &mut [ScratchBuf], inputs: &[Value], outputs: &mut [Value], )

Self::eval with the node’s scratch, which the evaluating state owns and hands in: storage belongs to the state, never to the node, which is shared by every state of the program.
Source§

fn commutativity(&self) -> Commutativity

Declare which inputs are interchangeable for this node. Read more
Source§

fn accepts_none_inputs(&self) -> bool

True iff this node should receive Value::None inputs directly rather than have the kernel propagate None through it. Default: false — most nodes follow SRD-74 Rule 1 (None in → None out, no eval invocation). Read more
Source§

fn compiled_u64(&self) -> Option<Box<dyn Fn(&[u64], &mut [u64]) + Send + Sync>>

Return a compiled u64-only evaluation closure, if this node operates entirely in u64 space. Read more
Source§

fn jit_constants(&self) -> Vec<u64>

Return assembly-time constants for JIT compilation. Read more
Source§

fn simd_variant(&self) -> Option<SimdVariant>

Explicit SIMD-native implementation of this scalar node, if one has been registered with a semantic contract. Read more
Source§

fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>

A synthetic fusion node’s view of the subgraph it stands in for (SRD-105 cone extraction). Program-identity hashing (PolydatProgram::canonical_hash) walks THROUGH fusion nodes into this subgraph, so identity is invariant to the engine mix: jit=off and jit=auto compiles of the same source hash identically, and resume-skip matching survives mode changes. Default None: ordinary nodes hash as themselves.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.