Struct ScalarOperatorIr
pub struct ScalarOperatorIr { /* private fields */ }Description
Compact scalar SSA Operator IR lowered from one residual DAG.
Implementations§
§impl ScalarOperatorIr
impl ScalarOperatorIr
pub fn lower(expression: &ExprDag) -> Result<ScalarOperatorIr, Diagnostic>
pub fn lower(expression: &ExprDag) -> Result<ScalarOperatorIr, Diagnostic>
Lower a canonical expression DAG into dense symbol slots and scalar instructions without changing operation order.
§Errors
Returns EQ0701 if an operand/root index is inconsistent with the DAG
contract.
pub fn symbols(&self) -> &[SymbolRef]
pub fn symbols(&self) -> &[SymbolRef]
Dense symbol order expected by Self::evaluate.
pub fn instruction_count(&self) -> usize
pub fn instruction_count(&self) -> usize
Number of scalar SSA instructions.
pub fn residual_count(&self) -> usize
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>
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.
§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>
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>
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>
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
impl Clone for ScalarOperatorIr
§impl Debug for ScalarOperatorIr
impl Debug for ScalarOperatorIr
§impl PartialEq for ScalarOperatorIr
impl PartialEq for ScalarOperatorIr
§fn eq(&self, other: &ScalarOperatorIr) -> bool
fn eq(&self, other: &ScalarOperatorIr) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for ScalarOperatorIr
Auto Trait Implementations§
impl Freeze for ScalarOperatorIr
impl RefUnwindSafe for ScalarOperatorIr
impl Send for ScalarOperatorIr
impl Sync for ScalarOperatorIr
impl Unpin for ScalarOperatorIr
impl UnsafeUnpin for ScalarOperatorIr
impl UnwindSafe for ScalarOperatorIr
Blanket Implementations§
Source§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
§fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
§impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
§type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
§fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
Source§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, Dst> ConvAsUtil<Dst> for T
impl<T, Dst> ConvAsUtil<Dst> for T
§fn approx(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
§impl<T> ConvUtil for T
impl<T> ConvUtil for T
§fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
§fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
§fn into_as<Dst>(self) -> Dstwhere
Self: Sized + Into<Dst>,
fn into_as<Dst>(self) -> Dstwhere
Self: Sized + Into<Dst>,
§fn try_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + TryInto<Dst>,
fn try_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + TryInto<Dst>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> From<T> for T
impl<T> From<T> for T
Source§impl<T, U> Into<U> for Twhere
U: From<T>,
impl<T, U> Into<U> for Twhere
U: From<T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>where
F: FnOnce(&Self) -> bool,
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>where
F: FnOnce(&Self) -> bool,
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
impl<T> Pointable for T
Source§impl<T> Same for T
impl<T> Same for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.