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

#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

// binary_entropy_counts
NumericVector binary_entropy_counts(IntegerVector inSplit, int nLeaves);
RcppExport SEXP _TreeDist_binary_entropy_counts(SEXP inSplitSEXP, SEXP nLeavesSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerVector >::type inSplit(inSplitSEXP);
    Rcpp::traits::input_parameter< int >::type nLeaves(nLeavesSEXP);
    rcpp_result_gen = Rcpp::wrap(binary_entropy_counts(inSplit, nLeaves));
    return rcpp_result_gen;
END_RCPP
}
// COMCLUST
int COMCLUST(const List& trees);
RcppExport SEXP _TreeDist_COMCLUST(SEXP treesSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type trees(treesSEXP);
    rcpp_result_gen = Rcpp::wrap(COMCLUST(trees));
    return rcpp_result_gen;
END_RCPP
}
// robinson_foulds_all_pairs
IntegerVector robinson_foulds_all_pairs(const List& tables);
RcppExport SEXP _TreeDist_robinson_foulds_all_pairs(SEXP tablesSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type tables(tablesSEXP);
    rcpp_result_gen = Rcpp::wrap(robinson_foulds_all_pairs(tables));
    return rcpp_result_gen;
END_RCPP
}
// robinson_foulds_cross_pairs
IntegerMatrix robinson_foulds_cross_pairs(const List& tables_a, const List& tables_b);
RcppExport SEXP _TreeDist_robinson_foulds_cross_pairs(SEXP tables_aSEXP, SEXP tables_bSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type tables_a(tables_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type tables_b(tables_bSEXP);
    rcpp_result_gen = Rcpp::wrap(robinson_foulds_cross_pairs(tables_a, tables_b));
    return rcpp_result_gen;
END_RCPP
}
// consensus_info
double consensus_info(const List trees, const LogicalVector phylo, const NumericVector p);
RcppExport SEXP _TreeDist_consensus_info(SEXP treesSEXP, SEXP phyloSEXP, SEXP pSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List >::type trees(treesSEXP);
    Rcpp::traits::input_parameter< const LogicalVector >::type phylo(phyloSEXP);
    Rcpp::traits::input_parameter< const NumericVector >::type p(pSEXP);
    rcpp_result_gen = Rcpp::wrap(consensus_info(trees, phylo, p));
    return rcpp_result_gen;
END_RCPP
}
// HMI_xptr
double HMI_xptr(SEXP ptr1, SEXP ptr2);
RcppExport SEXP _TreeDist_HMI_xptr(SEXP ptr1SEXP, SEXP ptr2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type ptr1(ptr1SEXP);
    Rcpp::traits::input_parameter< SEXP >::type ptr2(ptr2SEXP);
    rcpp_result_gen = Rcpp::wrap(HMI_xptr(ptr1, ptr2));
    return rcpp_result_gen;
END_RCPP
}
// HH_xptr
double HH_xptr(SEXP ptr);
RcppExport SEXP _TreeDist_HH_xptr(SEXP ptrSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type ptr(ptrSEXP);
    rcpp_result_gen = Rcpp::wrap(HH_xptr(ptr));
    return rcpp_result_gen;
END_RCPP
}
// EHMI_xptr
Rcpp::NumericVector EHMI_xptr(SEXP hp1_ptr, SEXP hp2_ptr, double tolerance, int minResample);
RcppExport SEXP _TreeDist_EHMI_xptr(SEXP hp1_ptrSEXP, SEXP hp2_ptrSEXP, SEXP toleranceSEXP, SEXP minResampleSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type hp1_ptr(hp1_ptrSEXP);
    Rcpp::traits::input_parameter< SEXP >::type hp2_ptr(hp2_ptrSEXP);
    Rcpp::traits::input_parameter< double >::type tolerance(toleranceSEXP);
    Rcpp::traits::input_parameter< int >::type minResample(minResampleSEXP);
    rcpp_result_gen = Rcpp::wrap(EHMI_xptr(hp1_ptr, hp2_ptr, tolerance, minResample));
    return rcpp_result_gen;
END_RCPP
}
// build_hpart_from_phylo
SEXP build_hpart_from_phylo(List phy);
RcppExport SEXP _TreeDist_build_hpart_from_phylo(SEXP phySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type phy(phySEXP);
    rcpp_result_gen = Rcpp::wrap(build_hpart_from_phylo(phy));
    return rcpp_result_gen;
END_RCPP
}
// build_hpart_from_list
SEXP build_hpart_from_list(RObject tree, const int n_tip);
RcppExport SEXP _TreeDist_build_hpart_from_list(SEXP treeSEXP, SEXP n_tipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< RObject >::type tree(treeSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    rcpp_result_gen = Rcpp::wrap(build_hpart_from_list(tree, n_tip));
    return rcpp_result_gen;
END_RCPP
}
// hpart_to_edge
Rcpp::IntegerMatrix hpart_to_edge(SEXP hpart_xptr);
RcppExport SEXP _TreeDist_hpart_to_edge(SEXP hpart_xptrSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type hpart_xptr(hpart_xptrSEXP);
    rcpp_result_gen = Rcpp::wrap(hpart_to_edge(hpart_xptr));
    return rcpp_result_gen;
END_RCPP
}
// clone_hpart
SEXP clone_hpart(SEXP hpart_ptr);
RcppExport SEXP _TreeDist_clone_hpart(SEXP hpart_ptrSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type hpart_ptr(hpart_ptrSEXP);
    rcpp_result_gen = Rcpp::wrap(clone_hpart(hpart_ptr));
    return rcpp_result_gen;
END_RCPP
}
// relabel_hpart
void relabel_hpart(SEXP hpart_ptr, const std::vector<int>& map);
RcppExport SEXP _TreeDist_relabel_hpart(SEXP hpart_ptrSEXP, SEXP mapSEXP) {
BEGIN_RCPP
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type hpart_ptr(hpart_ptrSEXP);
    Rcpp::traits::input_parameter< const std::vector<int>& >::type map(mapSEXP);
    relabel_hpart(hpart_ptr, map);
    return R_NilValue;
END_RCPP
}
// entropy_int
double entropy_int(const Rcpp::IntegerVector& n);
RcppExport SEXP _TreeDist_entropy_int(SEXP nSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::IntegerVector& >::type n(nSEXP);
    rcpp_result_gen = Rcpp::wrap(entropy_int(n));
    return rcpp_result_gen;
END_RCPP
}
// expected_mi
double expected_mi(const IntegerVector& ni, const IntegerVector& nj);
RcppExport SEXP _TreeDist_expected_mi(SEXP niSEXP, SEXP njSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const IntegerVector& >::type ni(niSEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nj(njSEXP);
    rcpp_result_gen = Rcpp::wrap(expected_mi(ni, nj));
    return rcpp_result_gen;
END_RCPP
}
// cpp_kc_vector
IntegerVector cpp_kc_vector(IntegerMatrix edge, IntegerVector tip_order);
RcppExport SEXP _TreeDist_cpp_kc_vector(SEXP edgeSEXP, SEXP tip_orderSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type edge(edgeSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type tip_order(tip_orderSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_kc_vector(edge, tip_order));
    return rcpp_result_gen;
END_RCPP
}
// vec_diff_euclidean
NumericMatrix vec_diff_euclidean(const IntegerMatrix vec1, const IntegerMatrix vec2);
RcppExport SEXP _TreeDist_vec_diff_euclidean(SEXP vec1SEXP, SEXP vec2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const IntegerMatrix >::type vec1(vec1SEXP);
    Rcpp::traits::input_parameter< const IntegerMatrix >::type vec2(vec2SEXP);
    rcpp_result_gen = Rcpp::wrap(vec_diff_euclidean(vec1, vec2));
    return rcpp_result_gen;
END_RCPP
}
// pair_diff_euclidean
NumericVector pair_diff_euclidean(const IntegerMatrix vecs);
RcppExport SEXP _TreeDist_pair_diff_euclidean(SEXP vecsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const IntegerMatrix >::type vecs(vecsSEXP);
    rcpp_result_gen = Rcpp::wrap(pair_diff_euclidean(vecs));
    return rcpp_result_gen;
END_RCPP
}
// lapjv
Rcpp::List lapjv(Rcpp::NumericMatrix& x, Rcpp::NumericVector& maxX);
RcppExport SEXP _TreeDist_lapjv(SEXP xSEXP, SEXP maxXSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector& >::type maxX(maxXSEXP);
    rcpp_result_gen = Rcpp::wrap(lapjv(x, maxX));
    return rcpp_result_gen;
END_RCPP
}
// cpp_mast
int cpp_mast(IntegerMatrix edge1, IntegerMatrix edge2, IntegerVector nTip);
RcppExport SEXP _TreeDist_cpp_mast(SEXP edge1SEXP, SEXP edge2SEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type edge1(edge1SEXP);
    Rcpp::traits::input_parameter< IntegerMatrix >::type edge2(edge2SEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_mast(edge1, edge2, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_nni_distance
IntegerVector cpp_nni_distance(const IntegerMatrix& edge1, const IntegerMatrix& edge2, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_nni_distance(SEXP edge1SEXP, SEXP edge2SEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const IntegerMatrix& >::type edge1(edge1SEXP);
    Rcpp::traits::input_parameter< const IntegerMatrix& >::type edge2(edge2SEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_nni_distance(edge1, edge2, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_mutual_clustering_all_pairs
NumericVector cpp_mutual_clustering_all_pairs(const List& splits_list, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_mutual_clustering_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_mutual_clustering_all_pairs(splits_list, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_rf_info_all_pairs
NumericVector cpp_rf_info_all_pairs(const List& splits_list, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_rf_info_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_rf_info_all_pairs(splits_list, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_msd_all_pairs
NumericVector cpp_msd_all_pairs(const List& splits_list, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_msd_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_msd_all_pairs(splits_list, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_msi_all_pairs
NumericVector cpp_msi_all_pairs(const List& splits_list, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_msi_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_msi_all_pairs(splits_list, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_shared_phylo_all_pairs
NumericVector cpp_shared_phylo_all_pairs(const List& splits_list, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_shared_phylo_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_shared_phylo_all_pairs(splits_list, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_jaccard_all_pairs
NumericVector cpp_jaccard_all_pairs(const List& splits_list, const int n_tip, const double k, const bool allow_conflict, const int n_threads);
RcppExport SEXP _TreeDist_cpp_jaccard_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP kSEXP, SEXP allow_conflictSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const double >::type k(kSEXP);
    Rcpp::traits::input_parameter< const bool >::type allow_conflict(allow_conflictSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_jaccard_all_pairs(splits_list, n_tip, k, allow_conflict, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_mutual_clustering_cross_pairs
NumericMatrix cpp_mutual_clustering_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_mutual_clustering_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_mutual_clustering_cross_pairs(splits_a, splits_b, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_rf_info_cross_pairs
NumericMatrix cpp_rf_info_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_rf_info_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_rf_info_cross_pairs(splits_a, splits_b, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_msd_cross_pairs
NumericMatrix cpp_msd_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_msd_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_msd_cross_pairs(splits_a, splits_b, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_msi_cross_pairs
NumericMatrix cpp_msi_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_msi_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_msi_cross_pairs(splits_a, splits_b, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_shared_phylo_cross_pairs
NumericMatrix cpp_shared_phylo_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const int n_threads);
RcppExport SEXP _TreeDist_cpp_shared_phylo_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_shared_phylo_cross_pairs(splits_a, splits_b, n_tip, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_jaccard_cross_pairs
NumericMatrix cpp_jaccard_cross_pairs(const List& splits_a, const List& splits_b, const int n_tip, const double k, const bool allow_conflict, const int n_threads);
RcppExport SEXP _TreeDist_cpp_jaccard_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP kSEXP, SEXP allow_conflictSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const double >::type k(kSEXP);
    Rcpp::traits::input_parameter< const bool >::type allow_conflict(allow_conflictSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_jaccard_cross_pairs(splits_a, splits_b, n_tip, k, allow_conflict, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_clustering_entropy_batch
NumericVector cpp_clustering_entropy_batch(const List& splits_list, const int n_tip);
RcppExport SEXP _TreeDist_cpp_clustering_entropy_batch(SEXP splits_listSEXP, SEXP n_tipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_clustering_entropy_batch(splits_list, n_tip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_splitwise_info_batch
NumericVector cpp_splitwise_info_batch(const List& splits_list, const int n_tip);
RcppExport SEXP _TreeDist_cpp_splitwise_info_batch(SEXP splits_listSEXP, SEXP n_tipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_splitwise_info_batch(splits_list, n_tip));
    return rcpp_result_gen;
END_RCPP
}
// path_vector
IntegerVector path_vector(IntegerMatrix edge);
RcppExport SEXP _TreeDist_path_vector(SEXP edgeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type edge(edgeSEXP);
    rcpp_result_gen = Rcpp::wrap(path_vector(edge));
    return rcpp_result_gen;
END_RCPP
}
// reduce_trees
Rcpp::List reduce_trees(const IntegerMatrix x, const IntegerMatrix y, const CharacterVector original_label);
RcppExport SEXP _TreeDist_reduce_trees(SEXP xSEXP, SEXP ySEXP, SEXP original_labelSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const IntegerMatrix >::type x(xSEXP);
    Rcpp::traits::input_parameter< const IntegerMatrix >::type y(ySEXP);
    Rcpp::traits::input_parameter< const CharacterVector >::type original_label(original_labelSEXP);
    rcpp_result_gen = Rcpp::wrap(reduce_trees(x, y, original_label));
    return rcpp_result_gen;
END_RCPP
}
// mismatch_size
IntegerVector mismatch_size(const RawMatrix& x, const RawMatrix& y);
RcppExport SEXP _TreeDist_mismatch_size(SEXP xSEXP, SEXP ySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    rcpp_result_gen = Rcpp::wrap(mismatch_size(x, y));
    return rcpp_result_gen;
END_RCPP
}
// confusion
IntegerVector confusion(const RawMatrix& x, const RawMatrix& y);
RcppExport SEXP _TreeDist_confusion(SEXP xSEXP, SEXP ySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    rcpp_result_gen = Rcpp::wrap(confusion(x, y));
    return rcpp_result_gen;
END_RCPP
}
// keep_and_reroot
List keep_and_reroot(const List& tree1, const List& tree2, const LogicalVector& keep);
RcppExport SEXP _TreeDist_keep_and_reroot(SEXP tree1SEXP, SEXP tree2SEXP, SEXP keepSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type tree1(tree1SEXP);
    Rcpp::traits::input_parameter< const List& >::type tree2(tree2SEXP);
    Rcpp::traits::input_parameter< const LogicalVector& >::type keep(keepSEXP);
    rcpp_result_gen = Rcpp::wrap(keep_and_reroot(tree1, tree2, keep));
    return rcpp_result_gen;
END_RCPP
}
// keep_and_reduce
List keep_and_reduce(const List& tree1, const List& tree2, const LogicalVector& keep);
RcppExport SEXP _TreeDist_keep_and_reduce(SEXP tree1SEXP, SEXP tree2SEXP, SEXP keepSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type tree1(tree1SEXP);
    Rcpp::traits::input_parameter< const List& >::type tree2(tree2SEXP);
    Rcpp::traits::input_parameter< const LogicalVector& >::type keep(keepSEXP);
    rcpp_result_gen = Rcpp::wrap(keep_and_reduce(tree1, tree2, keep));
    return rcpp_result_gen;
END_RCPP
}
// spr_table_7
int spr_table_7(const Rcpp::RawVector& sp1, const Rcpp::RawVector& sp2);
RcppExport SEXP _TreeDist_spr_table_7(SEXP sp1SEXP, SEXP sp2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::RawVector& >::type sp1(sp1SEXP);
    Rcpp::traits::input_parameter< const Rcpp::RawVector& >::type sp2(sp2SEXP);
    rcpp_result_gen = Rcpp::wrap(spr_table_7(sp1, sp2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_transfer_consensus
List cpp_transfer_consensus(const List& splits_list, const int n_tip, const bool scale, const bool greedy_best_flag, const bool init_majority, const int n_threads);
RcppExport SEXP _TreeDist_cpp_transfer_consensus(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP scaleSEXP, SEXP greedy_best_flagSEXP, SEXP init_majoritySEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const bool >::type scale(scaleSEXP);
    Rcpp::traits::input_parameter< const bool >::type greedy_best_flag(greedy_best_flagSEXP);
    Rcpp::traits::input_parameter< const bool >::type init_majority(init_majoritySEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_transfer_consensus(splits_list, n_tip, scale, greedy_best_flag, init_majority, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_tc_profile
Rcpp::NumericVector cpp_tc_profile(const List& splits_list, const int n_tip, const bool scale, const bool greedy_best_flag, const bool init_majority, const int n_iter, const int n_threads);
RcppExport SEXP _TreeDist_cpp_tc_profile(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP scaleSEXP, SEXP greedy_best_flagSEXP, SEXP init_majoritySEXP, SEXP n_iterSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< const int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< const bool >::type scale(scaleSEXP);
    Rcpp::traits::input_parameter< const bool >::type greedy_best_flag(greedy_best_flagSEXP);
    Rcpp::traits::input_parameter< const bool >::type init_majority(init_majoritySEXP);
    Rcpp::traits::input_parameter< const int >::type n_iter(n_iterSEXP);
    Rcpp::traits::input_parameter< const int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_tc_profile(splits_list, n_tip, scale, greedy_best_flag, init_majority, n_iter, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_transfer_dist
List cpp_transfer_dist(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_transfer_dist(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_transfer_dist(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_transfer_dist_scored
List cpp_transfer_dist_scored(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip, bool scale);
RcppExport SEXP _TreeDist_cpp_transfer_dist_scored(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP, SEXP scaleSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    Rcpp::traits::input_parameter< bool >::type scale(scaleSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_transfer_dist_scored(x, y, nTip, scale));
    return rcpp_result_gen;
END_RCPP
}
// cpp_transfer_dist_all_pairs
NumericVector cpp_transfer_dist_all_pairs(const List& splits_list, int n_tip, bool scale, int n_threads);
RcppExport SEXP _TreeDist_cpp_transfer_dist_all_pairs(SEXP splits_listSEXP, SEXP n_tipSEXP, SEXP scaleSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_list(splits_listSEXP);
    Rcpp::traits::input_parameter< int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< bool >::type scale(scaleSEXP);
    Rcpp::traits::input_parameter< int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_transfer_dist_all_pairs(splits_list, n_tip, scale, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_transfer_dist_cross_pairs
NumericMatrix cpp_transfer_dist_cross_pairs(const List& splits_a, const List& splits_b, int n_tip, bool scale, int n_threads);
RcppExport SEXP _TreeDist_cpp_transfer_dist_cross_pairs(SEXP splits_aSEXP, SEXP splits_bSEXP, SEXP n_tipSEXP, SEXP scaleSEXP, SEXP n_threadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type splits_a(splits_aSEXP);
    Rcpp::traits::input_parameter< const List& >::type splits_b(splits_bSEXP);
    Rcpp::traits::input_parameter< int >::type n_tip(n_tipSEXP);
    Rcpp::traits::input_parameter< bool >::type scale(scaleSEXP);
    Rcpp::traits::input_parameter< int >::type n_threads(n_threadsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_transfer_dist_cross_pairs(splits_a, splits_b, n_tip, scale, n_threads));
    return rcpp_result_gen;
END_RCPP
}
// cpp_mci_impl_score
double cpp_mci_impl_score(const Rcpp::RawMatrix& x, const Rcpp::RawMatrix& y, int n_tips);
RcppExport SEXP _TreeDist_cpp_mci_impl_score(SEXP xSEXP, SEXP ySEXP, SEXP n_tipsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const Rcpp::RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< int >::type n_tips(n_tipsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_mci_impl_score(x, y, n_tips));
    return rcpp_result_gen;
END_RCPP
}
// cpp_sl_max_tips
int cpp_sl_max_tips();
RcppExport SEXP _TreeDist_cpp_sl_max_tips() {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    rcpp_result_gen = Rcpp::wrap(cpp_sl_max_tips());
    return rcpp_result_gen;
END_RCPP
}
// cpp_robinson_foulds_distance
List cpp_robinson_foulds_distance(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_robinson_foulds_distance(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_robinson_foulds_distance(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_robinson_foulds_info
List cpp_robinson_foulds_info(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_robinson_foulds_info(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_robinson_foulds_info(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_matching_split_distance
List cpp_matching_split_distance(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_matching_split_distance(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_matching_split_distance(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_jaccard_similarity
List cpp_jaccard_similarity(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip, const NumericVector& k, const LogicalVector& allowConflict);
RcppExport SEXP _TreeDist_cpp_jaccard_similarity(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP, SEXP kSEXP, SEXP allowConflictSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    Rcpp::traits::input_parameter< const NumericVector& >::type k(kSEXP);
    Rcpp::traits::input_parameter< const LogicalVector& >::type allowConflict(allowConflictSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_jaccard_similarity(x, y, nTip, k, allowConflict));
    return rcpp_result_gen;
END_RCPP
}
// cpp_msi_distance
List cpp_msi_distance(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_msi_distance(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_msi_distance(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_mutual_clustering
List cpp_mutual_clustering(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip);
RcppExport SEXP _TreeDist_cpp_mutual_clustering(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_mutual_clustering(x, y, nTip));
    return rcpp_result_gen;
END_RCPP
}
// cpp_shared_phylo
List cpp_shared_phylo(const RawMatrix& x, const RawMatrix& y, const IntegerVector& nTip, const bool force_slow);
RcppExport SEXP _TreeDist_cpp_shared_phylo(SEXP xSEXP, SEXP ySEXP, SEXP nTipSEXP, SEXP force_slowSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const RawMatrix& >::type x(xSEXP);
    Rcpp::traits::input_parameter< const RawMatrix& >::type y(ySEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type nTip(nTipSEXP);
    Rcpp::traits::input_parameter< const bool >::type force_slow(force_slowSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_shared_phylo(x, y, nTip, force_slow));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_TreeDist_binary_entropy_counts", (DL_FUNC) &_TreeDist_binary_entropy_counts, 2},
    {"_TreeDist_COMCLUST", (DL_FUNC) &_TreeDist_COMCLUST, 1},
    {"_TreeDist_robinson_foulds_all_pairs", (DL_FUNC) &_TreeDist_robinson_foulds_all_pairs, 1},
    {"_TreeDist_robinson_foulds_cross_pairs", (DL_FUNC) &_TreeDist_robinson_foulds_cross_pairs, 2},
    {"_TreeDist_consensus_info", (DL_FUNC) &_TreeDist_consensus_info, 3},
    {"_TreeDist_HMI_xptr", (DL_FUNC) &_TreeDist_HMI_xptr, 2},
    {"_TreeDist_HH_xptr", (DL_FUNC) &_TreeDist_HH_xptr, 1},
    {"_TreeDist_EHMI_xptr", (DL_FUNC) &_TreeDist_EHMI_xptr, 4},
    {"_TreeDist_build_hpart_from_phylo", (DL_FUNC) &_TreeDist_build_hpart_from_phylo, 1},
    {"_TreeDist_build_hpart_from_list", (DL_FUNC) &_TreeDist_build_hpart_from_list, 2},
    {"_TreeDist_hpart_to_edge", (DL_FUNC) &_TreeDist_hpart_to_edge, 1},
    {"_TreeDist_clone_hpart", (DL_FUNC) &_TreeDist_clone_hpart, 1},
    {"_TreeDist_relabel_hpart", (DL_FUNC) &_TreeDist_relabel_hpart, 2},
    {"_TreeDist_entropy_int", (DL_FUNC) &_TreeDist_entropy_int, 1},
    {"_TreeDist_expected_mi", (DL_FUNC) &_TreeDist_expected_mi, 2},
    {"_TreeDist_cpp_kc_vector", (DL_FUNC) &_TreeDist_cpp_kc_vector, 2},
    {"_TreeDist_vec_diff_euclidean", (DL_FUNC) &_TreeDist_vec_diff_euclidean, 2},
    {"_TreeDist_pair_diff_euclidean", (DL_FUNC) &_TreeDist_pair_diff_euclidean, 1},
    {"_TreeDist_lapjv", (DL_FUNC) &_TreeDist_lapjv, 2},
    {"_TreeDist_cpp_mast", (DL_FUNC) &_TreeDist_cpp_mast, 3},
    {"_TreeDist_cpp_nni_distance", (DL_FUNC) &_TreeDist_cpp_nni_distance, 3},
    {"_TreeDist_cpp_mutual_clustering_all_pairs", (DL_FUNC) &_TreeDist_cpp_mutual_clustering_all_pairs, 3},
    {"_TreeDist_cpp_rf_info_all_pairs", (DL_FUNC) &_TreeDist_cpp_rf_info_all_pairs, 3},
    {"_TreeDist_cpp_msd_all_pairs", (DL_FUNC) &_TreeDist_cpp_msd_all_pairs, 3},
    {"_TreeDist_cpp_msi_all_pairs", (DL_FUNC) &_TreeDist_cpp_msi_all_pairs, 3},
    {"_TreeDist_cpp_shared_phylo_all_pairs", (DL_FUNC) &_TreeDist_cpp_shared_phylo_all_pairs, 3},
    {"_TreeDist_cpp_jaccard_all_pairs", (DL_FUNC) &_TreeDist_cpp_jaccard_all_pairs, 5},
    {"_TreeDist_cpp_mutual_clustering_cross_pairs", (DL_FUNC) &_TreeDist_cpp_mutual_clustering_cross_pairs, 4},
    {"_TreeDist_cpp_rf_info_cross_pairs", (DL_FUNC) &_TreeDist_cpp_rf_info_cross_pairs, 4},
    {"_TreeDist_cpp_msd_cross_pairs", (DL_FUNC) &_TreeDist_cpp_msd_cross_pairs, 4},
    {"_TreeDist_cpp_msi_cross_pairs", (DL_FUNC) &_TreeDist_cpp_msi_cross_pairs, 4},
    {"_TreeDist_cpp_shared_phylo_cross_pairs", (DL_FUNC) &_TreeDist_cpp_shared_phylo_cross_pairs, 4},
    {"_TreeDist_cpp_jaccard_cross_pairs", (DL_FUNC) &_TreeDist_cpp_jaccard_cross_pairs, 6},
    {"_TreeDist_cpp_clustering_entropy_batch", (DL_FUNC) &_TreeDist_cpp_clustering_entropy_batch, 2},
    {"_TreeDist_cpp_splitwise_info_batch", (DL_FUNC) &_TreeDist_cpp_splitwise_info_batch, 2},
    {"_TreeDist_path_vector", (DL_FUNC) &_TreeDist_path_vector, 1},
    {"_TreeDist_reduce_trees", (DL_FUNC) &_TreeDist_reduce_trees, 3},
    {"_TreeDist_mismatch_size", (DL_FUNC) &_TreeDist_mismatch_size, 2},
    {"_TreeDist_confusion", (DL_FUNC) &_TreeDist_confusion, 2},
    {"_TreeDist_keep_and_reroot", (DL_FUNC) &_TreeDist_keep_and_reroot, 3},
    {"_TreeDist_keep_and_reduce", (DL_FUNC) &_TreeDist_keep_and_reduce, 3},
    {"_TreeDist_spr_table_7", (DL_FUNC) &_TreeDist_spr_table_7, 2},
    {"_TreeDist_cpp_transfer_consensus", (DL_FUNC) &_TreeDist_cpp_transfer_consensus, 6},
    {"_TreeDist_cpp_tc_profile", (DL_FUNC) &_TreeDist_cpp_tc_profile, 7},
    {"_TreeDist_cpp_transfer_dist", (DL_FUNC) &_TreeDist_cpp_transfer_dist, 3},
    {"_TreeDist_cpp_transfer_dist_scored", (DL_FUNC) &_TreeDist_cpp_transfer_dist_scored, 4},
    {"_TreeDist_cpp_transfer_dist_all_pairs", (DL_FUNC) &_TreeDist_cpp_transfer_dist_all_pairs, 4},
    {"_TreeDist_cpp_transfer_dist_cross_pairs", (DL_FUNC) &_TreeDist_cpp_transfer_dist_cross_pairs, 5},
    {"_TreeDist_cpp_mci_impl_score", (DL_FUNC) &_TreeDist_cpp_mci_impl_score, 3},
    {"_TreeDist_cpp_sl_max_tips", (DL_FUNC) &_TreeDist_cpp_sl_max_tips, 0},
    {"_TreeDist_cpp_robinson_foulds_distance", (DL_FUNC) &_TreeDist_cpp_robinson_foulds_distance, 3},
    {"_TreeDist_cpp_robinson_foulds_info", (DL_FUNC) &_TreeDist_cpp_robinson_foulds_info, 3},
    {"_TreeDist_cpp_matching_split_distance", (DL_FUNC) &_TreeDist_cpp_matching_split_distance, 3},
    {"_TreeDist_cpp_jaccard_similarity", (DL_FUNC) &_TreeDist_cpp_jaccard_similarity, 5},
    {"_TreeDist_cpp_msi_distance", (DL_FUNC) &_TreeDist_cpp_msi_distance, 3},
    {"_TreeDist_cpp_mutual_clustering", (DL_FUNC) &_TreeDist_cpp_mutual_clustering, 3},
    {"_TreeDist_cpp_shared_phylo", (DL_FUNC) &_TreeDist_cpp_shared_phylo, 4},
    {NULL, NULL, 0}
};

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