// Generated by using Rcpp::compileAttributes() -> do not edit by hand
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

#include <RcppArmadillo.h>
#include <Rcpp.h>

using namespace Rcpp;

// estimateBandwidth
double estimateBandwidth(const arma::mat& X, arma::uword k, double nObs);
RcppExport SEXP _CVE_estimateBandwidth(SEXP XSEXP, SEXP kSEXP, SEXP nObsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
    Rcpp::traits::input_parameter< arma::uword >::type k(kSEXP);
    Rcpp::traits::input_parameter< double >::type nObs(nObsSEXP);
    rcpp_result_gen = Rcpp::wrap(estimateBandwidth(X, k, nObs));
    return rcpp_result_gen;
END_RCPP
}
// rStiefel
arma::mat rStiefel(arma::uword p, arma::uword q);
RcppExport SEXP _CVE_rStiefel(SEXP pSEXP, SEXP qSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< arma::uword >::type p(pSEXP);
    Rcpp::traits::input_parameter< arma::uword >::type q(qSEXP);
    rcpp_result_gen = Rcpp::wrap(rStiefel(p, q));
    return rcpp_result_gen;
END_RCPP
}
// cve_cpp
Rcpp::List cve_cpp(const arma::mat& X, const arma::vec& Y, const int k, const double nObs, const double tauInitial, const double tol, const double slack, const int maxIter, const int attempts);
RcppExport SEXP _CVE_cve_cpp(SEXP XSEXP, SEXP YSEXP, SEXP kSEXP, SEXP nObsSEXP, SEXP tauInitialSEXP, SEXP tolSEXP, SEXP slackSEXP, SEXP maxIterSEXP, SEXP attemptsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
    Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
    Rcpp::traits::input_parameter< const int >::type k(kSEXP);
    Rcpp::traits::input_parameter< const double >::type nObs(nObsSEXP);
    Rcpp::traits::input_parameter< const double >::type tauInitial(tauInitialSEXP);
    Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
    Rcpp::traits::input_parameter< const double >::type slack(slackSEXP);
    Rcpp::traits::input_parameter< const int >::type maxIter(maxIterSEXP);
    Rcpp::traits::input_parameter< const int >::type attempts(attemptsSEXP);
    rcpp_result_gen = Rcpp::wrap(cve_cpp(X, Y, k, nObs, tauInitial, tol, slack, maxIter, attempts));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_CVE_estimateBandwidth", (DL_FUNC) &_CVE_estimateBandwidth, 3},
    {"_CVE_rStiefel", (DL_FUNC) &_CVE_rStiefel, 2},
    {"_CVE_cve_cpp", (DL_FUNC) &_CVE_cve_cpp, 9},
    {NULL, NULL, 0}
};

RcppExport void R_init_CVE(DllInfo *dll) {
    R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
    R_useDynamicSymbols(dll, FALSE);
}
