pub fn vjp<K, IN, OUT, F>( func: F, input: IN ) -> (OUT, Box<dyn Fn(OUT::Gradient) -> IN::Gradient>)where F: Func<K, IN, OUT>, IN: Value, OUT: Value,