// 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;

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

// bray
arma::mat bray(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_bray(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(bray(mat));
    return rcpp_result_gen;
END_RCPP
}
// euclidean
arma::mat euclidean(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_euclidean(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(euclidean(mat));
    return rcpp_result_gen;
END_RCPP
}
// cosine
arma::mat cosine(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_cosine(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(cosine(mat));
    return rcpp_result_gen;
END_RCPP
}
// jaccard
arma::mat jaccard(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_jaccard(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(jaccard(mat));
    return rcpp_result_gen;
END_RCPP
}
// manhattan
arma::mat manhattan(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_manhattan(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(manhattan(mat));
    return rcpp_result_gen;
END_RCPP
}
// canberra
arma::mat canberra(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_canberra(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(canberra(mat));
    return rcpp_result_gen;
END_RCPP
}
// jsd
arma::mat jsd(const arma::sp_mat& mat);
RcppExport SEXP _OmicFlow_jsd(SEXP matSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    rcpp_result_gen = Rcpp::wrap(jsd(mat));
    return rcpp_result_gen;
END_RCPP
}
// unifrac
arma::mat unifrac(const arma::sp_mat& mat, const arma::umat& edge, const arma::vec& edge_lengths, bool weighted, bool normalized);
RcppExport SEXP _OmicFlow_unifrac(SEXP matSEXP, SEXP edgeSEXP, SEXP edge_lengthsSEXP, SEXP weightedSEXP, SEXP normalizedSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const arma::sp_mat& >::type mat(matSEXP);
    Rcpp::traits::input_parameter< const arma::umat& >::type edge(edgeSEXP);
    Rcpp::traits::input_parameter< const arma::vec& >::type edge_lengths(edge_lengthsSEXP);
    Rcpp::traits::input_parameter< bool >::type weighted(weightedSEXP);
    Rcpp::traits::input_parameter< bool >::type normalized(normalizedSEXP);
    rcpp_result_gen = Rcpp::wrap(unifrac(mat, edge, edge_lengths, weighted, normalized));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_OmicFlow_bray", (DL_FUNC) &_OmicFlow_bray, 1},
    {"_OmicFlow_euclidean", (DL_FUNC) &_OmicFlow_euclidean, 1},
    {"_OmicFlow_cosine", (DL_FUNC) &_OmicFlow_cosine, 1},
    {"_OmicFlow_jaccard", (DL_FUNC) &_OmicFlow_jaccard, 1},
    {"_OmicFlow_manhattan", (DL_FUNC) &_OmicFlow_manhattan, 1},
    {"_OmicFlow_canberra", (DL_FUNC) &_OmicFlow_canberra, 1},
    {"_OmicFlow_jsd", (DL_FUNC) &_OmicFlow_jsd, 1},
    {"_OmicFlow_unifrac", (DL_FUNC) &_OmicFlow_unifrac, 5},
    {NULL, NULL, 0}
};

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