sig
  type mat = Owl_dense_matrix_d.mat
  type vec = Owl_dense_vector_d.vec
  val diff : (float -> float) -> float -> float
  val diff2 : (float -> float) -> float -> float
  val grad :
    (Owl_algodiff_numerical.vec -> float) ->
    Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.vec
  val jacobian :
    (Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.vec) ->
    Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.mat
  val jacobianT :
    (Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.vec) ->
    Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.mat
  val diff' : (float -> float) -> float -> float * float
  val diff2' : (float -> float) -> float -> float * float
  val grad' :
    (Owl_algodiff_numerical.vec -> float) ->
    Owl_algodiff_numerical.vec ->
    Owl_algodiff_numerical.vec * Owl_algodiff_numerical.vec
  val jacobian' :
    (Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.vec) ->
    Owl_algodiff_numerical.vec ->
    Owl_algodiff_numerical.vec * Owl_algodiff_numerical.mat
  val jacobianT' :
    (Owl_algodiff_numerical.vec -> Owl_algodiff_numerical.vec) ->
    Owl_algodiff_numerical.vec ->
    Owl_algodiff_numerical.vec * Owl_algodiff_numerical.mat
end