pub fn vjp<'a, K, IN, OUT, F>( func: F, input: IN ) -> (OUT, impl Fn(OUT::Gradient) -> IN::Gradient + Clone + 'a)where F: Func<K, IN, OUT> + Clone + 'a, IN: Value, OUT: Value,