pub fn eval<F, O>(
    session_state: &mut SessionState,
    state: Option<&mut (dyn OpState + 'static)>,
    node: &Node<F, O>,
    input: SmallVec<[Arc<Tensor>; 4]>
) -> Result<SmallVec<[Arc<Tensor>; 4]>, Error> where
    F: 'static + Fact + Hash + Clone,
    O: 'static + Debug + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash