Struct CanonicalEventProgram
pub struct CanonicalEventProgram { /* private fields */ }Description
Canonical explicit-ODE event group lowered to one differentiable reset.
An event group is selected by one Activation. Every Event Activation with
the same structural guard and direction is then included automatically, so
split reset Relations commit and differentiate as one transition. This
first seam admits one flow Relation and a constant full-monomial implicit
Next Jacobian. Coupled reset solves, DAE events, distinct coincident
guards, and mode-dependent post-event flow remain explicit future classes.
Implementations§
§impl CanonicalEventProgram
impl CanonicalEventProgram
pub fn lower(
program: &CpuProgram,
flow: Id<Relation>,
event: Id<Activation>,
) -> Result<CanonicalEventProgram, Diagnostic>
pub fn lower( program: &CpuProgram, flow: Id<Relation>, event: Id<Activation>, ) -> Result<CanonicalEventProgram, Diagnostic>
Lower one continuous explicit ODE and the complete structural event
group containing event.
§Errors
Returns EQ0705 unless the flow is an explicit ODE, the selected node
is an Event Activation, every structurally identical activation is
included, reset symbols are limited to Pre/Next/Parameter/time, and
the combined implicit reset has one constant monomial Next equation
per flow state.
pub const fn flow(&self) -> &FirstOrderProgram
pub const fn flow(&self) -> &FirstOrderProgram
Continuous flow projection used on both sides of this first event seam.
pub fn activations(&self) -> &[Id<Activation>]
pub fn activations(&self) -> &[Id<Activation>]
Structurally identical Event Activations included in the atomic group.
pub const fn direction(&self) -> EventDirection
pub const fn direction(&self) -> EventDirection
Canonical zero-crossing direction.
pub fn parameter_fields(&self) -> &[Id<Parameter>]
pub fn parameter_fields(&self) -> &[Id<Parameter>]
Selected Parameter order shared by guard, reset, and sensitivity data.
pub fn parameters(&self) -> &[f64]
pub fn parameters(&self) -> &[f64]
Revision-captured values in Self::parameter_fields order.
pub fn linearize_at(
&self,
time: f64,
pre_state: &[f64],
guard_tolerance: f64,
) -> Result<CanonicalEventLinearization, Diagnostic>
pub fn linearize_at( &self, time: f64, pre_state: &[f64], guard_tolerance: f64, ) -> Result<CanonicalEventLinearization, Diagnostic>
Linearize the canonical guard, implicit reset, and pre/post flow at one localized event point.
guard_tolerance is explicit localization evidence, not a hidden
derivative tolerance. The transversality test itself rejects only an
exactly grazing guard and enforces the canonical crossing direction.
§Errors
Returns EQ0704/EQ0705 for invalid state shape, a point outside the
guard band, a direction mismatch, grazing, or non-finite actions.
Trait Implementations§
§impl Clone for CanonicalEventProgram
impl Clone for CanonicalEventProgram
§impl Debug for CanonicalEventProgram
impl Debug for CanonicalEventProgram
§impl PartialEq for CanonicalEventProgram
impl PartialEq for CanonicalEventProgram
§fn eq(&self, other: &CanonicalEventProgram) -> bool
fn eq(&self, other: &CanonicalEventProgram) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for CanonicalEventProgram
Auto Trait Implementations§
impl Freeze for CanonicalEventProgram
impl RefUnwindSafe for CanonicalEventProgram
impl Send for CanonicalEventProgram
impl Sync for CanonicalEventProgram
impl Unpin for CanonicalEventProgram
impl UnsafeUnpin for CanonicalEventProgram
impl UnwindSafe for CanonicalEventProgram
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.