Struct ExprDag
pub struct ExprDag { /* private fields */ }Description
A non-empty, structurally validated expression arena with output roots.
Implementations§
§impl ExprDag
impl ExprDag
pub fn verify_time_derivative(
&self,
storage: ExprId,
accumulation: ExprId,
) -> Result<(), TimeDerivativeProofError>
pub fn verify_time_derivative( &self, storage: ExprId, accumulation: ExprId, ) -> Result<(), TimeDerivativeProofError>
Check that accumulation is the first time derivative of storage.
Both IDs are interpreted in this DAG, whether or not they are output roots.
Fields are independent unknowns whose time derivatives are the matching
SymbolRef::Derivative; Parameters are constant, and model time has derivative
one. The caller must already have established real scalar types, consistent
dimensions and supports, continuous Field eligibility, and the activation context
of the owning Relation. This check does not establish them, and it does not
permit floating-point reassociation.
Supported expressions are real scalar constants, Fields, Parameters, time,
negation, addition, subtraction, multiplication, nonnegative integer powers, and
retained scalar polynomial pure definitions. Coordinate-map factors keep their
selectors and normalized polynomial rows; an accumulation action must match each
mapped row’s time rate and use model time. Polynomial pullbacks substitute the
coordinate identities. For first mapped continuous scalar Fields, the chain rule
uses the map, the physical time rate, and the coordinate partials. Nested
pullbacks of unknown Fields and nested factor-valued motion are not supported.
Only accumulation may read Field time derivatives and first mapped coordinate
partials. Branches, guards, divisions, other spatial operators, discrete reads,
Ports, and other scalar functions are rejected, even when algebraic cancellation
would remove them.
Binary64 literals are taken as their exact dyadic values, never as a guessed
decimal rational. Non-finite values and dyadics outside ExactRational bounds
are rejected. Retained definitions keep their original rational coefficients.
Inputs are limited to 4096 DAG nodes, and the cumulative count of normalized
terms plus factors to 262144, in addition to the polynomial work limits.
The check compares normalized coefficients and exponents directly; it never calls executable differentiation or builds an execution DAG.
§impl ExprDag
impl ExprDag
pub fn nodes(&self) -> &[ExprNode]
pub fn nodes(&self) -> &[ExprNode]
Expression nodes in deterministic topological order.
pub fn roots(&self) -> &[ExprId]
pub fn roots(&self) -> &[ExprId]
Output roots in caller-defined order; their meaning belongs to the consumer.
pub const fn definitions(
&self,
) -> &BTreeMap<OperatorDefinitionDigest, PureOperatorDefinition>
pub const fn definitions( &self, ) -> &BTreeMap<OperatorDefinitionDigest, PureOperatorDefinition>
Pure-operator definitions, ordered by digest.
pub const fn properties(&self) -> &BTreeMap<ExprId, PropertyRelease>
pub const fn properties(&self) -> &BTreeMap<ExprId, PropertyRelease>
Property-release bindings on value and application nodes.
pub fn definition(
&self,
digest: OperatorDefinitionDigest,
) -> Option<&PureOperatorDefinition>
pub fn definition( &self, digest: OperatorDefinitionDigest, ) -> Option<&PureOperatorDefinition>
Resolve one application digest against this expression’s closed table.
pub fn node_id(&self, index: u32) -> Option<ExprId>
pub fn node_id(&self, index: u32) -> Option<ExprId>
Resolve a wire arena index only when it belongs to this expression.
Trait Implementations§
§impl Clone for ExprDag
impl Clone for ExprDag
§impl Debug for ExprDag
impl Debug for ExprDag
§impl PartialEq for ExprDag
impl PartialEq for ExprDag
§fn eq(&self, other: &ExprDag) -> bool
fn eq(&self, other: &ExprDag) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for ExprDag
Auto Trait Implementations§
impl Freeze for ExprDag
impl RefUnwindSafe for ExprDag
impl Send for ExprDag
impl Sync for ExprDag
impl Unpin for ExprDag
impl UnsafeUnpin for ExprDag
impl UnwindSafe for ExprDag
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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.