1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use crate::ops::prelude::*; #[derive(Debug, Clone, new)] pub struct Const { value: SharedTensor, } impl Const { pub fn for_tensor(tensor: Tensor) -> Const { Const { value: tensor.into(), } } } impl Op for Const { fn name(&self) -> Cow<str> { "Const".into() } fn const_value(&self) -> Option<SharedTensor> { Some(self.value.clone()) } } impl StatelessOp for Const { fn eval(&self, _inputs: TVec<SharedTensor>) -> TractResult<TVec<SharedTensor>> { Ok(tvec![self.value.clone()]) } } impl InferenceRulesOp for Const { fn rules<'r, 'p: 'r, 's: 'r>( &'s self, s: &mut Solver<'r>, inputs: &'p SharedTensorsProxy, outputs: &'p SharedTensorsProxy, ) -> InferenceResult { s.equals(&inputs.len, 0)?; s.equals(&outputs.len, 1) } }