A differentiable function whose output is not guaranteed to be the same
across consecutive invocations.
Calculates both the value and the gradient at a point
calculates the gradient at a point
Lenses provide a way of mapping between two types, which we typically
use to convert something to a DenseVector or other Tensor for optimization purposes.
calculates the value at a point