sig
  module Eval : Eval
  module Hyper :
    sig
      type t
      val get_all :
        Eval.Kernel.t ->
        Interfaces.Specs.Eval.Inducing.t ->
        Interfaces.Specs.Eval.Inputs.t ->
        Interfaces.Specs.Deriv.Hyper.t array
      val get_value :
        Eval.Kernel.t ->
        Interfaces.Specs.Eval.Inducing.t ->
        Interfaces.Specs.Eval.Inputs.t ->
        Interfaces.Specs.Deriv.Hyper.t -> float
      val set_values :
        Eval.Kernel.t ->
        Interfaces.Specs.Eval.Inducing.t ->
        Interfaces.Specs.Eval.Inputs.t ->
        Interfaces.Specs.Deriv.Hyper.t array ->
        Lacaml.D.vec ->
        Eval.Kernel.t * Interfaces.Specs.Eval.Inducing.t *
        Interfaces.Specs.Eval.Inputs.t
    end
  module Inducing :
    sig
      type upper
      val calc_shared_upper :
        Eval.Kernel.t ->
        Interfaces.Specs.Eval.Inducing.t ->
        Lacaml.D.mat * Interfaces.Specs.Deriv.Inducing.upper
      val calc_deriv_upper :
        Interfaces.Specs.Deriv.Inducing.upper ->
        Interfaces.Specs.Deriv.Hyper.t -> Interfaces.symm_mat_deriv
    end
  module Inputs :
    sig
      type diag
      type cross
      val calc_shared_diag :
        Eval.Kernel.t ->
        Interfaces.Specs.Eval.Inputs.t ->
        Lacaml.D.vec * Interfaces.Specs.Deriv.Inputs.diag
      val calc_shared_cross :
        Eval.Kernel.t ->
        inputs:Interfaces.Specs.Eval.Inputs.t ->
        inducing:Interfaces.Specs.Eval.Inducing.t ->
        Lacaml.D.mat * Interfaces.Specs.Deriv.Inputs.cross
      val calc_deriv_diag :
        Interfaces.Specs.Deriv.Inputs.diag ->
        Interfaces.Specs.Deriv.Hyper.t -> Interfaces.diag_deriv
      val calc_deriv_cross :
        Interfaces.Specs.Deriv.Inputs.cross ->
        Interfaces.Specs.Deriv.Hyper.t -> Interfaces.mat_deriv
    end
end