sig
  type t
  val create :
    ?tau:float ->
    ?eta0:float ->
    ?step:int ->
    ?kernel:Eval.Spec.Kernel.t ->
    ?sigma2:float ->
    ?inducing:Eval.Spec.Inducing.t ->
    ?n_rand_inducing:int ->
    ?learn_sigma2:bool ->
    ?hypers:Interfaces.Sigs.Deriv.Deriv.Spec.Hyper.t array ->
    inputs:Eval.Spec.Inputs.t ->
    targets:Lacaml.D.vec -> unit -> Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
  val step :
    Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t ->
    Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
  val gradient_norm : Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> float
  val get_trained :
    Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> Interfaces.Sigs.Eval.Trained.t
  val get_eta : Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> float
  val get_step : Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> int
  val test :
    ?epsabs:float ->
    ?max_iter:int ->
    ?report:(Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> unit) ->
    Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t ->
    Interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
end