pub trait ModuleFields<M: TensorCollection<E, D>, E: Dtype, D: Device<E>> {
    type Options<E2: Dtype, D2: Device<E2>>;
    type Output<E2: Dtype, D2: Device<E2>>;

    // Required methods
    fn visit_fields<V: ModuleVisitor<M, E, D>>(
        self,
        module: &mut V
    ) -> Result<Self::Options<V::E2, V::D2>, V::Err>;
    fn handle_options<E2: Dtype, D2: Device<E2>>(
        options: Self::Options<E2, D2>
    ) -> Option<Self::Output<E2, D2>>;
}
Expand description

A list of a Module’s fields. Used in ModuleVisitor::visit_fields.

Required Associated Types§

source

type Options<E2: Dtype, D2: Device<E2>>

A list of optional instances of each field,

source

type Output<E2: Dtype, D2: Device<E2>>

A list of instances of each field,

Required Methods§

source

fn visit_fields<V: ModuleVisitor<M, E, D>>( self, module: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

Calls ModuleVisitor::visit_module or ModuleVisitor::visit_tensor for each field, and returns optionally constructed fields

source

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

If any optional fields are None, returns None. Otherwise returns instances of all fields.

Implementations on Foreign Types§

source§

impl<T: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for Vec<T>

§

type Options<E2: Dtype, D2: Device<E2>> = Vec<<T as ModuleFields<Mod, E, D>>::Options<E2, D2>, Global>

§

type Output<E2: Dtype, D2: Device<E2>> = Vec<<T as ModuleFields<Mod, E, D>>::Output<E2, D2>, Global>

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, module: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<M1: ModuleFields<Mod, E, D>, M2: ModuleFields<Mod, E, D>, M3: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1, M2, M3)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Options<E2, D2>)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Output<E2, D2>)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<M1: ModuleFields<Mod, E, D>, M2: ModuleFields<Mod, E, D>, M3: ModuleFields<Mod, E, D>, M4: ModuleFields<Mod, E, D>, M5: ModuleFields<Mod, E, D>, M6: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1, M2, M3, M4, M5, M6)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M5 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M6 as ModuleFields<Mod, E, D>>::Options<E2, D2>)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M5 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M6 as ModuleFields<Mod, E, D>>::Output<E2, D2>)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<M1: ModuleFields<Mod, E, D>, M2: ModuleFields<Mod, E, D>, M3: ModuleFields<Mod, E, D>, M4: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1, M2, M3, M4)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Options<E2, D2>)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Output<E2, D2>)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<M1: ModuleFields<Mod, E, D>, M2: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1, M2)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Options<E2, D2>)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Output<E2, D2>)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for ()

§

type Options<E2: Dtype, D2: Device<E2>> = ()

§

type Output<E2: Dtype, D2: Device<E2>> = ()

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, _module: &mut V ) -> Result<(), V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>(_options: ()) -> Option<()>

source§

impl<M1: ModuleFields<Mod, E, D>, M2: ModuleFields<Mod, E, D>, M3: ModuleFields<Mod, E, D>, M4: ModuleFields<Mod, E, D>, M5: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1, M2, M3, M4, M5)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Options<E2, D2>, <M5 as ModuleFields<Mod, E, D>>::Options<E2, D2>)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M2 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M3 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M4 as ModuleFields<Mod, E, D>>::Output<E2, D2>, <M5 as ModuleFields<Mod, E, D>>::Output<E2, D2>)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

source§

impl<M1: ModuleFields<Mod, E, D>, Mod: TensorCollection<E, D>, E: Dtype, D: Device<E>> ModuleFields<Mod, E, D> for (M1,)

§

type Options<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Options<E2, D2>,)

§

type Output<E2: Dtype, D2: Device<E2>> = (<M1 as ModuleFields<Mod, E, D>>::Output<E2, D2>,)

source§

fn visit_fields<V: ModuleVisitor<Mod, E, D>>( self, visitor: &mut V ) -> Result<Self::Options<V::E2, V::D2>, V::Err>

source§

fn handle_options<E2: Dtype, D2: Device<E2>>( options: Self::Options<E2, D2> ) -> Option<Self::Output<E2, D2>>

Implementors§

source§

impl<'a, F1, F2, E: Dtype, D: Device<E>, Mod: TensorCollection<E, D>, Field> ModuleFields<Mod, E, D> for ModuleField<'a, F1, F2, Mod, Field>where F1: FnMut(&Mod) -> &Field, F2: FnMut(&mut Mod) -> &mut Field, Field: TensorCollection<E, D>,

§

type Options<E2: Dtype, D2: Device<E2>> = Option<<Field as TensorCollection<E, D>>::To<E2, D2>>

§

type Output<E2: Dtype, D2: Device<E2>> = <Field as TensorCollection<E, D>>::To<E2, D2>

source§

impl<'a, F1, F2, S: Shape, E: Dtype, D: Device<E>, Mod: TensorCollection<E, D>> ModuleFields<Mod, E, D> for TensorField<'a, F1, F2, Mod, S, E, D>where F1: FnMut(&Mod) -> &Tensor<S, E, D>, F2: FnMut(&mut Mod) -> &mut Tensor<S, E, D>,

§

type Options<E2: Dtype, D2: Device<E2>> = Option<Tensor<S, E2, D2, NoneTape>>

§

type Output<E2: Dtype, D2: Device<E2>> = Tensor<S, E2, D2, NoneTape>