Back to Eqiora docs Skip to main content

ScalarOperatorIr

Struct ScalarOperatorIr 

pub struct ScalarOperatorIr { /* private fields */ }
Description

Compact scalar SSA Operator IR lowered from one residual DAG.

Implementations§

§

impl ScalarOperatorIr

pub fn additive_terms( &self, inputs: &[ValueLiteral], selected: SymbolRef, ) -> Result<Vec<(ScalarOperatorIr, Vec<Ratio<BigInt>>)>, Diagnostic>

Express the selected-symbol dependence as an additive sum of opaque scalar terms, each with a coefficient for every original root. Other inputs are frozen at the typed point. Only addition, subtraction, negation, and factors independent of the selected symbol are expanded. Structurally equal terms have equal canonical IR, including across owners. Active guards remain inside terms; this performs no differentiation. Original demanded primal/domain validation occurs before cancellation.

§Errors

Rejects an invalid point, unsupported scalar projection, or exceeded exact-coefficient budget. Coefficients are exact binary rationals, including their sums and products. This does not evaluate derivatives.

§

impl ScalarOperatorIr

pub fn lower_affine_map_density<I>( typed: &TypedResidual<I>, resolve: &mut impl FnMut(SymbolRef) -> Option<ValueLiteral>, ) -> Result<ScalarOperatorIr, Diagnostic>
where I: Clone + Eq,

Project a density for regularity admission at fixed nonspatial inputs. Coordinate-map factors must have structurally affine mapped coordinates. Their spatially constant Jacobians use the shared LU/conditioning owner. This projection is not a parameter derivative: retained expressions remain authoritative for value evaluation and differentiation.

§Errors

Rejects non-affine maps, spatial coefficients, unavailable fixed inputs, invalid numerical factors and the ordinary scalar projection limits.

pub fn bind_affine_coordinate_map<I>( typed: &TypedResidual<I>, id: ExprId, resolve: &mut impl FnMut(SymbolRef) -> Option<ValueLiteral>, ) -> Result<Vec<BoundAffineScalarIr<ScalarSymbolCoordinate>>, Diagnostic>
where I: Clone + Eq,

Prove and bind the rows of one exact retained coordinate map. Rows follow its target-binding order; columns retain the ordered source coordinate identities. Fixed nonspatial inputs include physical Time. The same scalar SSA affine proof supplies values and Jacobian entries; no point sampling or numerical differentiation is used. Invertibility, orientation and a consecutive motion path remain with their consumers.

§Errors

Rejects a foreign or non-map node, non-affine mapped rows, spatial coefficients, unavailable or mistyped fixed inputs, and resource excess.

§

impl ScalarOperatorIr

pub fn lower(expression: &ExprDag) -> Result<ScalarOperatorIr, Diagnostic>

Lower a canonical expression DAG into dense symbol slots and scalar instructions without changing operation order. Sample/Hold reuse their operand value; activation and memory admission remain with the validated KernelProgram retained by the executor, not this scalar value projection.

§Errors

Returns EQ0701 if an operand/root index is inconsistent with the DAG contract.

§

impl ScalarOperatorIr

pub fn require_regular_density( &self, varying: impl FnMut(SymbolRef) -> bool, ) -> Result<(), Diagnostic>

Require polynomial, sine, cosine and exponential composition with no varying poles or radicals.

varying must identify every input that depends on a coordinate in the density’s support. Other inputs are held fixed; their numerical values must still pass normal evaluation (including nonzero divisors and finite intermediates). This structural check establishes no quadrature error bound and does not admit improper integrals.

§Errors

Rejects varying denominators, negative powers, logarithms or square roots, and operations outside this bounded smooth profile. Callers must separately validate derived input densities.

§

impl ScalarOperatorIr

pub fn evaluate_typed_batch( &self, roots: &[ExprId], inputs: &[Vec<ValueLiteral>], ) -> Result<Vec<Vec<ValueLiteral>>, Diagnostic>

Evaluate real scalar property rows in existing symbols() order. Each row has fresh memoization; total scalar work and retained outputs are each limited to one million before per-row projection/allocation.

§Errors

Rejects wrong row shapes/types, invalid active domains, and aggregate budgets. No partial batch result is returned on failure.

§

impl ScalarOperatorIr

pub fn coordinate_map_factor_jvp( entries: &[f64], direction: &[f64], extent: usize, factor: CoordinateMapFactor, ) -> Result<f64, Diagnostic>

Apply one row-major entry tangent to the existing differential-factor calculus. Entries and tangents use coherent units; the typed map owns their dimensions.

§Errors

Rejects wrong tangent cardinality, nonfinite arithmetic, or the factor’s ordinary singularity/conditioning failures.

pub fn coordinate_map_factor( entries: &[f64], extent: usize, factor: CoordinateMapFactor, ) -> Result<f64, Diagnostic>

Evaluate a differential factor with the same factorization and conditioning profile as finite-map determinants and inverses. Entries use coherent units; the typed coordinate-map owner retains their individual dimensions.

§Errors

Rejects invalid shape, resource exhaustion, nonfinite arithmetic, and (for volume/orientation) a singular or numerically unresolved differential.

§

impl ScalarOperatorIr

pub fn lower_typed_scalar<I>( typed: &TypedResidual<I>, ) -> Result<ScalarOperatorIr, Diagnostic>

Project an admitted real scalar residual for numerical derivative products. Retained definition identity stays in the canonical typed residual; this derived graph uses the existing ordered scalar expansion and input slots. Conditional programs retain their input types so ordinary numerical evaluation and linearization use typed demand and active-branch rules.

§Errors

Rejects non-real or shaped values, invalid typed applications, and the existing scalar projection resource bounds.

§

impl ScalarOperatorIr

pub fn linearize_samples( &self, inputs: &[f64], samples: &[ExprId], ) -> Result<ScalarLinearization<'_>, Diagnostic>

Bind selected scalar constant leaves as numerical sample inputs.

A discretization first projects sampled Field values or gradients to scalar constants. Their source expression IDs become dense tangent slots, without fabricating Semantic Parameters or changing Model meaning. Existing semantic symbols remain frozen. Unknown tangents follow samples order and use the ordinary scalar JVP/VJP executor.

§Errors

Rejects nonconstant, duplicate or missing samples, invalid symbols, and expression operations outside the ordinary scalar derivative profile.

§

impl ScalarOperatorIr

pub fn evaluate_typed( &self, roots: &[ExprId], resolve: &mut dyn FnMut(SymbolRef) -> Option<ValueLiteral>, ) -> Result<Vec<ValueLiteral>, Diagnostic>

Evaluate requested original DAG roots without projecting exact discrete values through floating point. Unreachable symbol slots are never resolved.

§Errors

Rejects missing operands, incompatible values, and checked arithmetic failures.

§

impl ScalarOperatorIr

pub fn linearize_typed( &self, inputs: &[ValueLiteral], roles: &[DifferentiationRole], ) -> Result<ScalarLinearization<'_>, Diagnostic>

Bind a typed point, rejecting demanded active-input boundaries. Inactive branches are type-checked but never evaluated or differentiated. Active inputs must be real scalars. Frozen inputs retain their exact typed values (including nominal discrete outcomes) and have no tangent space. Active input symbols and roles retain their original order.

§Errors

Rejects wrong input types, invalid active domains, comparison ties, square root derivatives at zero, and operations outside the scalar derivative profile.

§

impl ScalarOperatorIr

pub fn symbols(&self) -> &[SymbolRef]

Dense symbol order expected by Self::evaluate.

pub fn instruction_count(&self) -> usize

Number of scalar SSA instructions.

pub fn residual_count(&self) -> usize

Number of residual roots produced by this program.

pub fn constant_symbol_jacobian( &self, variables: &[SymbolRef], ) -> Result<ConstantSymbolJacobian, SymbolicLinearityFailure>

Prove and extract a residual Jacobian that is constant with respect to every other expression symbol.

This is a structural proof over the SSA program, not a numerical probe. Expressions with state-dependent coefficients or nonlinear dependence on any selected variable fail closed. The returned rows follow residual root order and columns follow variables order. A selected-variable-independent predicate may choose between branches with the same coefficients. Required domains remain execution obligations.

§Errors

Returns the first structural reason that a constant Jacobian cannot be proven, or reports a repeated selected variable.

pub fn bind_affine( &self, selected_symbols: &[SymbolRef], bindings: &[(SymbolRef, f64)], ) -> Result<BoundAffineScalarIr, BoundAffineFailure>

Bind every non-selected symbol and prove an exact affine residual form.

The returned form satisfies R(w) = A w + c: rows retain residual-root order, columns retain selected_symbols order, and coefficient/offset arithmetic follows the original SSA instruction order. This admission is structural; it performs no numerical probing or finite differences. Extra bindings are permitted, but every supplied binding is validated.

§Errors

Fails closed for repeated selected symbols, duplicate or non-finite bindings, binding a selected symbol, an unbound symbol read by the IR, nonlinear selected-symbol dependence, non-finite affine arithmetic, or an invalid SSA value reference.

pub fn evaluate(&self, inputs: &[f64]) -> Result<Vec<f64>, Diagnostic>

Evaluate residual roots with values matching Self::symbols.

§Errors

Returns EQ0702 for the wrong input count and EQ0505 for a non-finite intermediate result.

pub fn linearize( &self, inputs: &[f64], roles: &[DifferentiationRole], ) -> Result<ScalarLinearization<'_>, Diagnostic>

Bind one finite point and explicit input roles into an immutable differentiable residual relation.

§Errors

Returns EQ0704 when point/role cardinality differs from the dense symbol order or the point contains a non-finite value.

Trait Implementations§

§

impl Clone for ScalarOperatorIr

§

fn clone(&self) -> ScalarOperatorIr

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for ScalarOperatorIr

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl PartialEq for ScalarOperatorIr

§

fn eq(&self, other: &ScalarOperatorIr) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl StructuralPartialEq for ScalarOperatorIr

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
§

impl<Src, Scheme> ApproxFrom<Src, Scheme> for Src
where Scheme: ApproxScheme,

§

type Err = NoError

The error type produced by a failed conversion.
§

fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>

Convert the given value into an approximately equivalent representation.
§

impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Src
where Dst: ApproxFrom<Src, Scheme>, Scheme: ApproxScheme,

§

type Err = <Dst as ApproxFrom<Src, Scheme>>::Err

The error type produced by a failed conversion.
§

fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>

Convert the subject into an approximately equivalent representation.
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
§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T, Dst> ConvAsUtil<Dst> for T

§

fn approx(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst>,

Approximate the subject with the default scheme.
§

fn approx_by<Scheme>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject with a specific scheme.
§

impl<T> ConvUtil for T

§

fn approx_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst>,

Approximate the subject to a given type with the default scheme.
§

fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject to a given type with a specific scheme.
§

fn into_as<Dst>(self) -> Dst
where Self: Sized + Into<Dst>,

Convert the subject to a given type.
§

fn try_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + TryInto<Dst>,

Attempt to convert the subject to a given type.
§

fn value_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + ValueInto<Dst>,

Attempt a value conversion of the subject to a given type.
§

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

§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<Src> TryFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
§

fn try_from(src: Src) -> Result<Src, <Src as TryFrom<Src>>::Err>

Convert the given value into the subject type.
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<Src, Dst> TryInto<Dst> for Src
where Dst: TryFrom<Src>,

§

type Err = <Dst as TryFrom<Src>>::Err

The error type produced by a failed conversion.
§

fn try_into(self) -> Result<Dst, <Src as TryInto<Dst>>::Err>

Convert the subject into the destination type.
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<Src> ValueFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
§

fn value_from(src: Src) -> Result<Src, <Src as ValueFrom<Src>>::Err>

Convert the given value into an exactly equivalent representation.
§

impl<Src, Dst> ValueInto<Dst> for Src
where Dst: ValueFrom<Src>,

§

type Err = <Dst as ValueFrom<Src>>::Err

The error type produced by a failed conversion.
§

fn value_into(self) -> Result<Dst, <Src as ValueInto<Dst>>::Err>

Convert the subject into an exactly equivalent representation.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

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

§

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

§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

§

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

Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,