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

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

using namespace Rcpp;

#ifdef RCPP_USE_GLOBAL_ROSTREAM
Rcpp::Rostream<true>&  Rcpp::Rcout = Rcpp::Rcpp_cout_get();
Rcpp::Rostream<false>& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
#endif

// cpp_TAI
Eigen::VectorXd cpp_TAI(const Eigen::MatrixXd& ExpressionMatrix, const Eigen::VectorXd& Phylostratum);
RcppExport SEXP _myTAI_cpp_TAI(SEXP ExpressionMatrixSEXP, SEXP PhylostratumSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Eigen::MatrixXd& >::type ExpressionMatrix(ExpressionMatrixSEXP);
    Rcpp::traits::input_parameter< const Eigen::VectorXd& >::type Phylostratum(PhylostratumSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_TAI(ExpressionMatrix, Phylostratum));
    return rcpp_result_gen;
END_RCPP
}
// cpp_bootMatrix
Eigen::MatrixXd cpp_bootMatrix(const Eigen::MatrixXd& ExpressionMatrix, const Eigen::VectorXd& AgeVector, const int& permutations);
RcppExport SEXP _myTAI_cpp_bootMatrix(SEXP ExpressionMatrixSEXP, SEXP AgeVectorSEXP, SEXP permutationsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Eigen::MatrixXd& >::type ExpressionMatrix(ExpressionMatrixSEXP);
    Rcpp::traits::input_parameter< const Eigen::VectorXd& >::type AgeVector(AgeVectorSEXP);
    Rcpp::traits::input_parameter< const int& >::type permutations(permutationsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_bootMatrix(ExpressionMatrix, AgeVector, permutations));
    return rcpp_result_gen;
END_RCPP
}
// cpp_pMatrix
Eigen::MatrixXd cpp_pMatrix(const Eigen::MatrixXd& ExpressionSet, const Eigen::VectorXd& AgeVector);
RcppExport SEXP _myTAI_cpp_pMatrix(SEXP ExpressionSetSEXP, SEXP AgeVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Eigen::MatrixXd& >::type ExpressionSet(ExpressionSetSEXP);
    Rcpp::traits::input_parameter< const Eigen::VectorXd& >::type AgeVector(AgeVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_pMatrix(ExpressionSet, AgeVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_std_error
double cpp_std_error(const NumericVector& x);
RcppExport SEXP _myTAI_cpp_std_error(SEXP xSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericVector& >::type x(xSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_std_error(x));
    return rcpp_result_gen;
END_RCPP
}
// cpp_geom_mean
double cpp_geom_mean(const NumericVector& x);
RcppExport SEXP _myTAI_cpp_geom_mean(SEXP xSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericVector& >::type x(xSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_geom_mean(x));
    return rcpp_result_gen;
END_RCPP
}
// cpp_harmonic_mean
double cpp_harmonic_mean(const NumericVector& x);
RcppExport SEXP _myTAI_cpp_harmonic_mean(SEXP xSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericVector& >::type x(xSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_harmonic_mean(x));
    return rcpp_result_gen;
END_RCPP
}
// cpp_omitMatrix
Eigen::MatrixXd cpp_omitMatrix(const Eigen::MatrixXd& ExpressionSet, const Eigen::VectorXd& AgeVector);
RcppExport SEXP _myTAI_cpp_omitMatrix(SEXP ExpressionSetSEXP, SEXP AgeVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Eigen::MatrixXd& >::type ExpressionSet(ExpressionSetSEXP);
    Rcpp::traits::input_parameter< const Eigen::VectorXd& >::type AgeVector(AgeVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_omitMatrix(ExpressionSet, AgeVector));
    return rcpp_result_gen;
END_RCPP
}
// rcpp_tei_parallel
Rcpp::List rcpp_tei_parallel(const arma::sp_mat& expression, Rcpp::NumericVector ps, int ncores);
RcppExport SEXP _myTAI_rcpp_tei_parallel(SEXP expressionSEXP, SEXP psSEXP, SEXP ncoresSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type expression(expressionSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type ps(psSEXP);
    Rcpp::traits::input_parameter< int >::type ncores(ncoresSEXP);
    rcpp_result_gen = Rcpp::wrap(rcpp_tei_parallel(expression, ps, ncores));
    return rcpp_result_gen;
END_RCPP
}
// rcpp_boottei_parallel
Rcpp::NumericMatrix rcpp_boottei_parallel(const arma::sp_mat& expression, Rcpp::NumericVector ps, const int& permutations, int ncores);
RcppExport SEXP _myTAI_rcpp_boottei_parallel(SEXP expressionSEXP, SEXP psSEXP, SEXP permutationsSEXP, SEXP ncoresSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type expression(expressionSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type ps(psSEXP);
    Rcpp::traits::input_parameter< const int& >::type permutations(permutationsSEXP);
    Rcpp::traits::input_parameter< int >::type ncores(ncoresSEXP);
    rcpp_result_gen = Rcpp::wrap(rcpp_boottei_parallel(expression, ps, permutations, ncores));
    return rcpp_result_gen;
END_RCPP
}
// rcpp_pMatrix_parallel
Rcpp::NumericMatrix rcpp_pMatrix_parallel(const arma::sp_mat& expression, Rcpp::NumericVector ps, int ncores);
RcppExport SEXP _myTAI_rcpp_pMatrix_parallel(SEXP expressionSEXP, SEXP psSEXP, SEXP ncoresSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type expression(expressionSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type ps(psSEXP);
    Rcpp::traits::input_parameter< int >::type ncores(ncoresSEXP);
    rcpp_result_gen = Rcpp::wrap(rcpp_pMatrix_parallel(expression, ps, ncores));
    return rcpp_result_gen;
END_RCPP
}
// rcpp_pStrata_parallel
Rcpp::NumericMatrix rcpp_pStrata_parallel(const arma::sp_mat& expression, Rcpp::NumericVector ps, Rcpp::NumericVector psgroup, int ncores);
RcppExport SEXP _myTAI_rcpp_pStrata_parallel(SEXP expressionSEXP, SEXP psSEXP, SEXP psgroupSEXP, SEXP ncoresSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type expression(expressionSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type ps(psSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type psgroup(psgroupSEXP);
    Rcpp::traits::input_parameter< int >::type ncores(ncoresSEXP);
    rcpp_result_gen = Rcpp::wrap(rcpp_pStrata_parallel(expression, ps, psgroup, ncores));
    return rcpp_result_gen;
END_RCPP
}
