pub enum DiffMode {
Error,
Source,
Forward,
Reverse,
}Expand description
Forward and Reverse Mode are well known names for automatic differentiation implementations. Enzyme does support both, but with different semantics, see DiffActivity. The First variants are a hack to support higher order derivatives. We need to compute first order derivatives before we compute second order derivatives, otherwise we would differentiate our placeholder functions. The proper solution is to recognize and resolve this DAG of autodiff invocations, as it’s already done in the C++ and Julia frontend of Enzyme.
Documentation for using reverse and forward mode is available online.
Variants§
Error
No autodiff is applied (used during error handling).
Source
The primal function which we will differentiate.
Forward
The target function, to be created using forward mode AD.
Reverse
The target function, to be created using reverse mode AD.
Implementations§
Trait Implementations§
Source§impl<__D: SpanDecoder> Decodable<__D> for DiffMode
impl<__D: SpanDecoder> Decodable<__D> for DiffMode
Source§impl<__E: SpanEncoder> Encodable<__E> for DiffMode
impl<__E: SpanEncoder> Encodable<__E> for DiffMode
Source§impl<__CTX> HashStable<__CTX> for DiffModewhere
__CTX: HashStableContext,
impl<__CTX> HashStable<__CTX> for DiffModewhere
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl Copy for DiffMode
impl Eq for DiffMode
impl StructuralPartialEq for DiffMode
Auto Trait Implementations§
impl DynSend for DiffMode
impl DynSync for DiffMode
impl Freeze for DiffMode
impl RefUnwindSafe for DiffMode
impl Send for DiffMode
impl Sync for DiffMode
impl Unpin for DiffMode
impl UnwindSafe for DiffMode
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
Error: 0 bytesSource: 0 bytesForward: 0 bytesReverse: 0 bytes