sig
  module Spec : Specs.Eval
  module Inducing :
    sig
      type t
      val choose_n_first_inputs :
        Spec.Kernel.t -> Spec.Inputs.t -> n_inducing:int -> Spec.Inducing.t
      val choose_n_random_inputs :
        ?rnd_state:Core.Std.Random.State.t ->
        Spec.Kernel.t -> Spec.Inputs.t -> n_inducing:int -> Spec.Inducing.t
      val calc :
        Spec.Kernel.t ->
        Spec.Inducing.t -> Gpr_interfaces.Sigs.Eval.Inducing.t
      val get_points : Gpr_interfaces.Sigs.Eval.Inducing.t -> Spec.Inducing.t
    end
  module Input :
    sig
      type t
      val calc :
        Gpr_interfaces.Sigs.Eval.Inducing.t ->
        Spec.Input.t -> Gpr_interfaces.Sigs.Eval.Input.t
    end
  module Inputs :
    sig
      type t
      val create_default_kernel :
        Spec.Inputs.t -> n_inducing:int -> Spec.Kernel.t
      val calc :
        Spec.Inputs.t ->
        Gpr_interfaces.Sigs.Eval.Inducing.t ->
        Gpr_interfaces.Sigs.Eval.Inputs.t
      val get_points : Gpr_interfaces.Sigs.Eval.Inputs.t -> Spec.Inputs.t
    end
  module Model :
    sig
      type t
      type co_variance_coeffs
      val calc :
        Gpr_interfaces.Sigs.Eval.Inputs.t ->
        sigma2:float -> Gpr_interfaces.Sigs.Eval.Model.t
      val update_sigma2 :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        float -> Gpr_interfaces.Sigs.Eval.Model.t
      val calc_log_evidence : Gpr_interfaces.Sigs.Eval.Model.t -> float
      val calc_co_variance_coeffs :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        Gpr_interfaces.Sigs.Eval.Model.co_variance_coeffs
      val get_kernel : Gpr_interfaces.Sigs.Eval.Model.t -> Spec.Kernel.t
      val get_sigma2 : Gpr_interfaces.Sigs.Eval.Model.t -> float
      val get_inputs :
        Gpr_interfaces.Sigs.Eval.Model.t -> Gpr_interfaces.Sigs.Eval.Inputs.t
      val get_inducing :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        Gpr_interfaces.Sigs.Eval.Inducing.t
    end
  module Trained :
    sig
      type t
      val calc :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        targets:Lacaml.D.vec -> Gpr_interfaces.Sigs.Eval.Trained.t
      val calc_mean_coeffs :
        Gpr_interfaces.Sigs.Eval.Trained.t -> Lacaml.D.vec
      val calc_log_evidence : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val get_model :
        Gpr_interfaces.Sigs.Eval.Trained.t ->
        Gpr_interfaces.Sigs.Eval.Model.t
      val get_targets : Gpr_interfaces.Sigs.Eval.Trained.t -> Lacaml.D.vec
    end
  module Stats :
    sig
      type t = {
        n_samples : int;
        target_variance : float;
        sse : float;
        mse : float;
        rmse : float;
        smse : float;
        msll : float;
        mad : float;
        maxad : float;
      }
      val calc_n_samples : Gpr_interfaces.Sigs.Eval.Trained.t -> int
      val calc_target_variance : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_sse : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_mse : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_rmse : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_smse : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_msll : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_mad : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc_maxad : Gpr_interfaces.Sigs.Eval.Trained.t -> float
      val calc :
        Gpr_interfaces.Sigs.Eval.Trained.t ->
        Gpr_interfaces.Sigs.Eval.Stats.t
    end
  module Mean_predictor :
    sig
      type t
      val calc :
        Spec.Inducing.t ->
        coeffs:Lacaml.D.vec -> Gpr_interfaces.Sigs.Eval.Mean_predictor.t
      val calc_trained :
        Gpr_interfaces.Sigs.Eval.Trained.t ->
        Gpr_interfaces.Sigs.Eval.Mean_predictor.t
      val get_inducing :
        Gpr_interfaces.Sigs.Eval.Mean_predictor.t -> Spec.Inducing.t
      val get_coeffs :
        Gpr_interfaces.Sigs.Eval.Mean_predictor.t -> Lacaml.D.vec
    end
  module Mean :
    sig
      type t
      val calc :
        Gpr_interfaces.Sigs.Eval.Mean_predictor.t ->
        Gpr_interfaces.Sigs.Eval.Input.t -> Gpr_interfaces.Sigs.Eval.Mean.t
      val get : Gpr_interfaces.Sigs.Eval.Mean.t -> float
    end
  module Means :
    sig
      type t
      val calc :
        Gpr_interfaces.Sigs.Eval.Mean_predictor.t ->
        Gpr_interfaces.Sigs.Eval.Inputs.t -> Gpr_interfaces.Sigs.Eval.Means.t
      val get : Gpr_interfaces.Sigs.Eval.Means.t -> Lacaml.D.vec
    end
  module Co_variance_predictor :
    sig
      type t
      val calc :
        Spec.Kernel.t ->
        Spec.Inducing.t ->
        Gpr_interfaces.Sigs.Eval.Model.co_variance_coeffs ->
        Gpr_interfaces.Sigs.Eval.Co_variance_predictor.t
      val calc_model :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        Gpr_interfaces.Sigs.Eval.Co_variance_predictor.t
    end
  module Variance :
    sig
      type t
      val calc :
        Gpr_interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Gpr_interfaces.Sigs.Eval.Input.t ->
        Gpr_interfaces.Sigs.Eval.Variance.t
      val get :
        ?predictive:bool -> Gpr_interfaces.Sigs.Eval.Variance.t -> float
    end
  module Variances :
    sig
      type t
      val calc_model_inputs :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        Gpr_interfaces.Sigs.Eval.Variances.t
      val calc :
        Gpr_interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Gpr_interfaces.Sigs.Eval.Inputs.t ->
        Gpr_interfaces.Sigs.Eval.Variances.t
      val get :
        ?predictive:bool ->
        Gpr_interfaces.Sigs.Eval.Variances.t -> Lacaml.D.vec
    end
  module Covariances :
    sig
      type t
      val calc_model_inputs :
        Gpr_interfaces.Sigs.Eval.Model.t ->
        Gpr_interfaces.Sigs.Eval.Covariances.t
      val calc :
        Gpr_interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Gpr_interfaces.Sigs.Eval.Inputs.t ->
        Gpr_interfaces.Sigs.Eval.Covariances.t
      val get :
        ?predictive:bool ->
        Gpr_interfaces.Sigs.Eval.Covariances.t -> Lacaml.D.mat
      val get_variances :
        Gpr_interfaces.Sigs.Eval.Covariances.t ->
        Gpr_interfaces.Sigs.Eval.Variances.t
    end
  module Sampler :
    sig
      type t
      val calc :
        ?predictive:bool ->
        Gpr_interfaces.Sigs.Eval.Mean.t ->
        Gpr_interfaces.Sigs.Eval.Variance.t ->
        Gpr_interfaces.Sigs.Eval.Sampler.t
      val sample :
        ?rng:Gsl.Rng.t -> Gpr_interfaces.Sigs.Eval.Sampler.t -> float
      val samples :
        ?rng:Gsl.Rng.t ->
        Gpr_interfaces.Sigs.Eval.Sampler.t -> n:int -> Lacaml.D.vec
    end
  module Cov_sampler :
    sig
      type t
      val calc :
        ?predictive:bool ->
        Gpr_interfaces.Sigs.Eval.Means.t ->
        Gpr_interfaces.Sigs.Eval.Covariances.t ->
        Gpr_interfaces.Sigs.Eval.Cov_sampler.t
      val sample :
        ?rng:Gsl.Rng.t ->
        Gpr_interfaces.Sigs.Eval.Cov_sampler.t -> Lacaml.D.vec
      val samples :
        ?rng:Gsl.Rng.t ->
        Gpr_interfaces.Sigs.Eval.Cov_sampler.t -> n:int -> Lacaml.D.mat
    end
end