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:Gpr_interfaces.Sigs.Deriv.Deriv.Spec.Hyper.t array ->
    inputs:Eval.Spec.Inputs.t ->
    targets:Lacaml.D.vec ->
    unit -> Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
  val step :
    Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t ->
    Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
  val gradient_norm : Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> float
  val get_trained :
    Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t ->
    Gpr_interfaces.Sigs.Eval.Trained.t
  val get_eta : Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> float
  val get_step : Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> int
  val test :
    ?epsabs:float ->
    ?max_iter:int ->
    ?report:(Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t -> unit) ->
    Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t ->
    Gpr_interfaces.Sigs.Deriv.Deriv.Optim.SGD.t
end