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 -> Interfaces.Sigs.Eval.Inducing.t
      val get_points : Interfaces.Sigs.Eval.Inducing.t -> Spec.Inducing.t
    end
  module Input :
    sig
      type t
      val calc :
        Interfaces.Sigs.Eval.Inducing.t ->
        Spec.Input.t -> 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 ->
        Interfaces.Sigs.Eval.Inducing.t -> Interfaces.Sigs.Eval.Inputs.t
      val get_points : Interfaces.Sigs.Eval.Inputs.t -> Spec.Inputs.t
    end
  module Model :
    sig
      type t
      type co_variance_coeffs
      val calc :
        Interfaces.Sigs.Eval.Inputs.t ->
        sigma2:float -> Interfaces.Sigs.Eval.Model.t
      val update_sigma2 :
        Interfaces.Sigs.Eval.Model.t -> float -> Interfaces.Sigs.Eval.Model.t
      val calc_log_evidence : Interfaces.Sigs.Eval.Model.t -> float
      val calc_co_variance_coeffs :
        Interfaces.Sigs.Eval.Model.t ->
        Interfaces.Sigs.Eval.Model.co_variance_coeffs
      val get_kernel : Interfaces.Sigs.Eval.Model.t -> Spec.Kernel.t
      val get_sigma2 : Interfaces.Sigs.Eval.Model.t -> float
      val get_inputs :
        Interfaces.Sigs.Eval.Model.t -> Interfaces.Sigs.Eval.Inputs.t
      val get_inducing :
        Interfaces.Sigs.Eval.Model.t -> Interfaces.Sigs.Eval.Inducing.t
    end
  module Trained :
    sig
      type t
      val calc :
        Interfaces.Sigs.Eval.Model.t ->
        targets:Lacaml.D.vec -> Interfaces.Sigs.Eval.Trained.t
      val calc_mean_coeffs : Interfaces.Sigs.Eval.Trained.t -> Lacaml.D.vec
      val calc_log_evidence : Interfaces.Sigs.Eval.Trained.t -> float
      val get_model :
        Interfaces.Sigs.Eval.Trained.t -> Interfaces.Sigs.Eval.Model.t
      val get_targets : 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 : Interfaces.Sigs.Eval.Trained.t -> int
      val calc_target_variance : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_sse : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_mse : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_rmse : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_smse : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_msll : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_mad : Interfaces.Sigs.Eval.Trained.t -> float
      val calc_maxad : Interfaces.Sigs.Eval.Trained.t -> float
      val calc :
        Interfaces.Sigs.Eval.Trained.t -> Interfaces.Sigs.Eval.Stats.t
    end
  module Mean_predictor :
    sig
      type t
      val calc :
        Spec.Inducing.t ->
        coeffs:Lacaml.D.vec -> Interfaces.Sigs.Eval.Mean_predictor.t
      val calc_trained :
        Interfaces.Sigs.Eval.Trained.t ->
        Interfaces.Sigs.Eval.Mean_predictor.t
      val get_inducing :
        Interfaces.Sigs.Eval.Mean_predictor.t -> Spec.Inducing.t
      val get_coeffs : Interfaces.Sigs.Eval.Mean_predictor.t -> Lacaml.D.vec
    end
  module Mean :
    sig
      type t
      val calc :
        Interfaces.Sigs.Eval.Mean_predictor.t ->
        Interfaces.Sigs.Eval.Input.t -> Interfaces.Sigs.Eval.Mean.t
      val get : Interfaces.Sigs.Eval.Mean.t -> float
    end
  module Means :
    sig
      type t
      val calc :
        Interfaces.Sigs.Eval.Mean_predictor.t ->
        Interfaces.Sigs.Eval.Inputs.t -> Interfaces.Sigs.Eval.Means.t
      val get : Interfaces.Sigs.Eval.Means.t -> Lacaml.D.vec
    end
  module Co_variance_predictor :
    sig
      type t
      val calc :
        Spec.Kernel.t ->
        Spec.Inducing.t ->
        Interfaces.Sigs.Eval.Model.co_variance_coeffs ->
        Interfaces.Sigs.Eval.Co_variance_predictor.t
      val calc_model :
        Interfaces.Sigs.Eval.Model.t ->
        Interfaces.Sigs.Eval.Co_variance_predictor.t
    end
  module Variance :
    sig
      type t
      val calc :
        Interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Interfaces.Sigs.Eval.Input.t -> Interfaces.Sigs.Eval.Variance.t
      val get : ?predictive:bool -> Interfaces.Sigs.Eval.Variance.t -> float
    end
  module Variances :
    sig
      type t
      val calc_model_inputs :
        Interfaces.Sigs.Eval.Model.t -> Interfaces.Sigs.Eval.Variances.t
      val calc :
        Interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Interfaces.Sigs.Eval.Inputs.t -> Interfaces.Sigs.Eval.Variances.t
      val get :
        ?predictive:bool -> Interfaces.Sigs.Eval.Variances.t -> Lacaml.D.vec
    end
  module Covariances :
    sig
      type t
      val calc_model_inputs :
        Interfaces.Sigs.Eval.Model.t -> Interfaces.Sigs.Eval.Covariances.t
      val calc :
        Interfaces.Sigs.Eval.Co_variance_predictor.t ->
        sigma2:float ->
        Interfaces.Sigs.Eval.Inputs.t -> Interfaces.Sigs.Eval.Covariances.t
      val get :
        ?predictive:bool ->
        Interfaces.Sigs.Eval.Covariances.t -> Lacaml.D.mat
      val get_variances :
        Interfaces.Sigs.Eval.Covariances.t ->
        Interfaces.Sigs.Eval.Variances.t
    end
  module Sampler :
    sig
      type t
      val calc :
        ?predictive:bool ->
        Interfaces.Sigs.Eval.Mean.t ->
        Interfaces.Sigs.Eval.Variance.t -> Interfaces.Sigs.Eval.Sampler.t
      val sample : ?rng:Gsl.Rng.t -> Interfaces.Sigs.Eval.Sampler.t -> float
      val samples :
        ?rng:Gsl.Rng.t ->
        Interfaces.Sigs.Eval.Sampler.t -> n:int -> Lacaml.D.vec
    end
  module Cov_sampler :
    sig
      type t
      val calc :
        ?predictive:bool ->
        Interfaces.Sigs.Eval.Means.t ->
        Interfaces.Sigs.Eval.Covariances.t ->
        Interfaces.Sigs.Eval.Cov_sampler.t
      val sample :
        ?rng:Gsl.Rng.t -> Interfaces.Sigs.Eval.Cov_sampler.t -> Lacaml.D.vec
      val samples :
        ?rng:Gsl.Rng.t ->
        Interfaces.Sigs.Eval.Cov_sampler.t -> n:int -> Lacaml.D.mat
    end
end