pub struct PhasesResidual {
pub(super) points: Vec<[f64; 3]>,
pub(super) vectors: Vec<[Complex; 3]>,
}Expand description
What phases saves for its pullback: the points and the wavevectors, without the
phases of every point and mode.
Fields§
§points: Vec<[f64; 3]>§vectors: Vec<[Complex; 3]>Implementations§
Source§impl PhasesResidual
impl PhasesResidual
Sourcepub fn validate_tangents(
&self,
points: &[[f64; 3]],
vectors: &[[Complex; 3]],
) -> Result<()>
pub fn validate_tangents( &self, points: &[[f64; 3]], vectors: &[[Complex; 3]], ) -> Result<()>
Validate point and wavevector tangents for the recorded operation.
Sourcepub fn pushforward(
&self,
points: &[[f64; 3]],
vectors: &[[Complex; 3]],
) -> Result<DMatrix<Complex>>
pub fn pushforward( &self, points: &[[f64; 3]], vectors: &[[Complex; 3]], ) -> Result<DMatrix<Complex>>
Differentiate each phase in one input direction without constructing a Jacobian.
Sourcepub fn pullback<S: Storage<Complex, Dyn, Dyn> + Sync>(
&self,
cotangent: &Matrix<Complex, Dyn, Dyn, S>,
) -> Result<PhasesGradient>
pub fn pullback<S: Storage<Complex, Dyn, Dyn> + Sync>( &self, cotangent: &Matrix<Complex, Dyn, Dyn, S>, ) -> Result<PhasesGradient>
Recompute each phase once and add its terms to the point and wavevector gradients.
The longer axis is split into at most 32 blocks, fixed by the shape, that run in parallel; each block sums its own rows (or columns) in index order and a partial gradient of the shorter axis, and the partials are added in block order. The result is deterministic and the scratch is at most 32 gradients of the shorter axis.
Trait Implementations§
Source§impl Debug for PhasesResidual
impl Debug for PhasesResidual
Source§impl SavedState for PhasesResidual
impl SavedState for PhasesResidual
Auto Trait Implementations§
impl Freeze for PhasesResidual
impl RefUnwindSafe for PhasesResidual
impl Send for PhasesResidual
impl Sync for PhasesResidual
impl Unpin for PhasesResidual
impl UnwindSafe for PhasesResidual
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
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>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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
impl<T> Pointable 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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.