[][src]Trait tract_core::ops::TypedOp

pub trait TypedOp: Op + Debug + DynClone + Send + Sync + 'static + Downcast + StatefullOp {
    fn as_op(&self) -> &dyn Op;
fn as_op_mut(&mut self) -> &mut dyn Op;
fn output_facts(
        &self,
        inputs: &[&TypedFact]
    ) -> TractResult<TVec<TypedFact>>; fn invariants(
        &self,
        model: &TypedModel,
        node: &TypedNode
    ) -> TractResult<Invariants> { ... }
fn fuse(
        &self,
        _model: &TypedModel,
        _node: &TypedNode
    ) -> TractResult<Option<TypedModelPatch>> { ... }
fn declutter(
        &self,
        model: &TypedModel,
        node: &TypedNode
    ) -> TractResult<Option<TypedModelPatch>> { ... }
fn cost(&self, _inputs: &[&TypedFact]) -> TractResult<TVec<(Cost, TDim)>> { ... }
fn suggested_axis_changes(&self) -> TractResult<TVec<(InOut, AxisOp)>> { ... }
fn change_axes(
        &self,
        model: &TypedModel,
        node: &TypedNode,
        io: InOut,
        change: &AxisOp
    ) -> TractResult<Option<AxisChangeConsequence>> { ... }
fn slice_output(
        &self,
        model: &TypedModel,
        node: &TypedNode,
        patch: &mut TypedModelPatch,
        output_slot: usize,
        axis: usize,
        start: usize,
        end: usize
    ) -> TractResult<Option<OutletId>> { ... }
fn quantize(
        &self,
        model: &TypedModel,
        node: &TypedNode,
        dt: DatumType,
        scale: f32,
        zero_point: i32
    ) -> TractResult<Option<Box<dyn TypedOp>>> { ... }
fn pulsify(
        &self,
        _source: &NormalizedModel,
        node: &NormalizedNode,
        _target: &mut PulsedModel,
        _mapping: &HashMap<OutletId, OutletId>,
        _pulse: usize
    ) -> TractResult<TVec<OutletId>> { ... }
fn codegen(
        &self,
        _model: &TypedModel,
        _node: &TypedNode
    ) -> TractResult<Option<TypedModelPatch>> { ... }
fn nested_model_multipliers(
        &self,
        inputs: &[&TypedFact]
    ) -> Vec<(Cow<str>, f32)> { ... } }

Required methods

fn as_op(&self) -> &dyn Op

Reinterpret the TypedOp as an Op.

fn as_op_mut(&mut self) -> &mut dyn Op

Reinterpret the TypedOp as an Op, mutably.

fn output_facts(&self, inputs: &[&TypedFact]) -> TractResult<TVec<TypedFact>>

Deduce output facts from input facts.

Loading content...

Provided methods

fn invariants(
    &self,
    model: &TypedModel,
    node: &TypedNode
) -> TractResult<Invariants>

fn fuse(
    &self,
    _model: &TypedModel,
    _node: &TypedNode
) -> TractResult<Option<TypedModelPatch>>

Fuse op after codegen to deal with local optimisations.

fn declutter(
    &self,
    model: &TypedModel,
    node: &TypedNode
) -> TractResult<Option<TypedModelPatch>>

Declutter the op to the tract_core operator set as much as possible.

fn cost(&self, _inputs: &[&TypedFact]) -> TractResult<TVec<(Cost, TDim)>>

Computes a cost hint of the operation.

Each pair is a type of operation and a number per call on eval.

fn suggested_axis_changes(&self) -> TractResult<TVec<(InOut, AxisOp)>>

fn change_axes(
    &self,
    model: &TypedModel,
    node: &TypedNode,
    io: InOut,
    change: &AxisOp
) -> TractResult<Option<AxisChangeConsequence>>

fn slice_output(
    &self,
    model: &TypedModel,
    node: &TypedNode,
    patch: &mut TypedModelPatch,
    output_slot: usize,
    axis: usize,
    start: usize,
    end: usize
) -> TractResult<Option<OutletId>>

fn quantize(
    &self,
    model: &TypedModel,
    node: &TypedNode,
    dt: DatumType,
    scale: f32,
    zero_point: i32
) -> TractResult<Option<Box<dyn TypedOp>>>

Transforms the op in an equivalent one, operating on dt (i8 or u8).

Returns None if the op can not be translated.

fn pulsify(
    &self,
    _source: &NormalizedModel,
    node: &NormalizedNode,
    _target: &mut PulsedModel,
    _mapping: &HashMap<OutletId, OutletId>,
    _pulse: usize
) -> TractResult<TVec<OutletId>>

Translate an op in a normalized network (no constants) to a pulsing form, if possible.

fn codegen(
    &self,
    _model: &TypedModel,
    _node: &TypedNode
) -> TractResult<Option<TypedModelPatch>>

Translate the op into the most efficient form possible for execution.

This transformation is supposed to be final, no more pass are expected to be run on the codegen networks.

fn nested_model_multipliers(
    &self,
    inputs: &[&TypedFact]
) -> Vec<(Cow<str>, f32)>

Nested model multipliers, with label (for profiling).

Loading content...

Trait Implementations

impl AsMut<dyn Op + 'static> for dyn TypedOp[src]

impl AsRef<dyn Op + 'static> for dyn TypedOp[src]

Implementors

impl TypedOp for AxisOp[src]

impl TypedOp for FiniteReshape[src]

impl TypedOp for Flatten[src]

impl TypedOp for Gather[src]

impl TypedOp for MultiBroadcastTo[src]

impl TypedOp for Pad[src]

impl TypedOp for Shape[src]

impl TypedOp for Size[src]

impl TypedOp for Tile[src]

impl TypedOp for TypedConcat[src]

impl TypedOp for TypedReshape[src]

impl TypedOp for MergeOp[src]

impl TypedOp for MergeOpUnicast[src]

impl TypedOp for TypedBinOp[src]

impl TypedOp for UnaryOp[src]

impl TypedOp for AvgPool[src]

impl TypedOp for ConvUnary[src]

impl TypedOp for MaxPool[src]

impl TypedOp for Downsample[src]

impl TypedOp for Dummy[src]

impl TypedOp for ElementWiseOp[src]

impl TypedOp for Identity[src]

impl TypedOp for Const[src]

impl TypedOp for Iff[src]

impl TypedOp for MatMul[src]

impl TypedOp for MatMulUnary[src]

impl TypedOp for ArgMaxMin[src]

impl TypedOp for GlobalAvgPool[src]

impl TypedOp for GlobalLpPool[src]

impl TypedOp for GlobalMaxPool[src]

impl TypedOp for Reduce[src]

impl TypedOp for DequantizeLinearF32[src]

impl TypedOp for TypedScan[src]

impl TypedOp for TypedSource[src]

impl TypedOp for Delay[src]

impl<D: DimLike + ToDim> TypedOp for Slice<D>[src]

impl<T> TypedOp for MatMatMulPackB<T> where
    T: Copy + Datum + Zero
[src]

impl<T: Copy + Datum + Zero> TypedOp for Im2Col<T>[src]

Loading content...