Struct RelationDef
pub struct RelationDef { /* private fields */ }Description
Ordered mathematical conditions together with their authored operands. How the conditions are enforced numerically is not part of the Model definition.
Implementations§
§impl RelationDef
impl RelationDef
pub const fn is_probability_law(&self) -> bool
pub const fn is_probability_law(&self) -> bool
Whether this Relation defines an immutable probability measure rather than an activated equation or evolution law.
pub fn probability_mass(
id: Id<Relation>,
expression: ExprDag,
outcomes: Id<Enum>,
weights: ExprId,
) -> Result<RelationDef, Diagnostic>
pub fn probability_mass( id: Id<Relation>, expression: ExprDag, outcomes: Id<Enum>, weights: ExprId, ) -> Result<RelationDef, Diagnostic>
Define normalized mass on an exact ordered declaration of named outcomes.
The retained weights are proportional masses: normalization is part of this law’s meaning, not a clipping or repair step. Whole-Model admission requires one dimensionless nonnegative real weight per outcome and positive total mass.
pub fn probability_density(
id: Id<Relation>,
expression: ExprDag,
domain: Id<Domain>,
measure: ObservableMeasure,
density: ExprId,
) -> Result<RelationDef, Diagnostic>
pub fn probability_density( id: Id<Relation>, expression: ExprDag, domain: Id<Domain>, measure: ObservableMeasure, density: ExprId, ) -> Result<RelationDef, Diagnostic>
Define normalized probability relative to one explicit continuous measure.
The retained density has inverse-measure units. Its finite positive normalizing integral belongs to the law. Admission must prove this integral and nonnegativity; a quadrature sample alone is not that proof.
§impl RelationDef
impl RelationDef
pub fn new(
id: Id<Relation>,
expression: ExprDag,
) -> Result<RelationDef, Diagnostic>
pub fn new( id: Id<Relation>, expression: ExprDag, ) -> Result<RelationDef, Diagnostic>
Define equalities from consecutive left/right expression root pairs.
§Errors
Rejects an odd number of roots.
pub fn with_conditions(
id: Id<Relation>,
expression: ExprDag,
conditions: Vec<RelationConditionKind>,
) -> Result<RelationDef, Diagnostic>
pub fn with_conditions( id: Id<Relation>, expression: ExprDag, conditions: Vec<RelationConditionKind>, ) -> Result<RelationDef, Diagnostic>
Define typed mathematical conditions with one descriptor per root pair. Complementarity implies that both operands are nonnegative. Units, real order, and support are checked by semantic admission.
§Errors
Rejects unpaired roots or a mismatched descriptor count.
pub fn initial(
id: Id<Relation>,
expression: ExprDag,
) -> Result<RelationDef, Diagnostic>
pub fn initial( id: Id<Relation>, expression: ExprDag, ) -> Result<RelationDef, Diagnostic>
Define simultaneous equalities used only for fresh initialization.
§Errors
Rejects an odd number of roots.
pub const fn is_initial(&self) -> bool
pub const fn is_initial(&self) -> bool
Whether these conditions apply only to fresh initialization.
pub const fn expression(&self) -> &ExprDag
pub const fn expression(&self) -> &ExprDag
Expression arena holding all condition operands.
pub fn conditions(&self) -> Option<&[RelationConditionKind]>
pub fn conditions(&self) -> Option<&[RelationConditionKind]>
Mathematical condition descriptors in authored order, when this is a condition Relation.
pub const fn meaning(&self) -> &RelationMeaning
pub const fn meaning(&self) -> &RelationMeaning
Mathematical meaning, including the terms of a physical Law.
pub fn conservation(
id: Id<Relation>,
expression: ExprDag,
terms: ConservationTerms,
) -> Result<RelationDef, Diagnostic>
pub fn conservation( id: Id<Relation>, expression: ExprDag, terms: ConservationTerms, ) -> Result<RelationDef, Diagnostic>
Define a physical conservation Law from its balance operands.
§Errors
Rejects a term descriptor that does not name exactly the balance roots.
pub fn noise(
id: Id<Relation>,
expression: ExprDag,
process: NoiseProcess,
parameter: ExprId,
independent: bool,
) -> Result<RelationDef, Diagnostic>
pub fn noise( id: Id<Relation>, expression: ExprDag, process: NoiseProcess, parameter: ExprId, independent: bool, ) -> Result<RelationDef, Diagnostic>
Define a nominal process Law from its exact parameter root.
pub fn stochastic(
id: Id<Relation>,
expression: ExprDag,
target: Id<Field>,
calculus: Option<StochasticCalculus>,
drift: Option<ExprId>,
diffusions: Vec<(Id<Relation>, ExprId)>,
jumps: Vec<(Id<Relation>, ExprId)>,
) -> Result<RelationDef, Diagnostic>
pub fn stochastic( id: Id<Relation>, expression: ExprDag, target: Id<Field>, calculus: Option<StochasticCalculus>, drift: Option<ExprId>, diffusions: Vec<(Id<Relation>, ExprId)>, jumps: Vec<(Id<Relation>, ExprId)>, ) -> Result<RelationDef, Diagnostic>
Define stochastic evolution; coefficients are values, never equation sides.
pub fn has_constraints(&self) -> bool
pub fn has_constraints(&self) -> bool
Whether a numerical realization must explicitly enforce constraints.
pub fn equation_sides(&self) -> Result<impl ExactSizeIterator, Diagnostic>
pub fn equation_sides(&self) -> Result<impl ExactSizeIterator, Diagnostic>
Operand pairs in order. Check conditions() before forming residuals:
an inequality or complementarity pair is not an equality to subtract.
§Errors
Process and stochastic evolution Laws have no equality residual projection.
§impl RelationDef
impl RelationDef
pub fn validate_conditions<I>(
&self,
typed: &TypedResidual<I>,
support: Option<&SpatialSupport<I>>,
) -> Result<(), TypeViolation<I>>where
I: Clone + Eq,
pub fn validate_conditions<I>(
&self,
typed: &TypedResidual<I>,
support: Option<&SpatialSupport<I>>,
) -> Result<(), TypeViolation<I>>where
I: Clone + Eq,
Check the conditions against independently inferred operand types. The caller must infer the complete DAG first.
§Errors
Rejects incompatible equality/inequality types, non-real ordered values, unsupported frames, and distinct complementarity supports.
Trait Implementations§
§impl Clone for RelationDef
impl Clone for RelationDef
§impl Debug for RelationDef
impl Debug for RelationDef
§impl From<RelationDef> for KernelNode
impl From<RelationDef> for KernelNode
§fn from(value: RelationDef) -> KernelNode
fn from(value: RelationDef) -> KernelNode
§impl PartialEq for RelationDef
impl PartialEq for RelationDef
§fn eq(&self, other: &RelationDef) -> bool
fn eq(&self, other: &RelationDef) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for RelationDef
Auto Trait Implementations§
impl Freeze for RelationDef
impl RefUnwindSafe for RelationDef
impl Send for RelationDef
impl Sync for RelationDef
impl Unpin for RelationDef
impl UnsafeUnpin for RelationDef
impl UnwindSafe for RelationDef
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.