pub fn value_and_grad<IN, OUT, F>(func: F) -> ValueAndGradFunc<IN, OUT, F>where F: Func<IN, OUT> + Clone, IN: Value, OUT: Value,