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