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

// JP_int
IntegerVector JP_int(IntegerMatrix nn, unsigned int kt);
RcppExport SEXP _dbscan_JP_int(SEXP nnSEXP, SEXP ktSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type nn(nnSEXP);
    Rcpp::traits::input_parameter< unsigned int >::type kt(ktSEXP);
    rcpp_result_gen = Rcpp::wrap(JP_int(nn, kt));
    return rcpp_result_gen;
END_RCPP
}
// SNN_sim_int
IntegerMatrix SNN_sim_int(IntegerMatrix nn, LogicalVector jp);
RcppExport SEXP _dbscan_SNN_sim_int(SEXP nnSEXP, SEXP jpSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type nn(nnSEXP);
    Rcpp::traits::input_parameter< LogicalVector >::type jp(jpSEXP);
    rcpp_result_gen = Rcpp::wrap(SNN_sim_int(nn, jp));
    return rcpp_result_gen;
END_RCPP
}
// ANN_cleanup
void ANN_cleanup();
RcppExport SEXP _dbscan_ANN_cleanup() {
BEGIN_RCPP
    Rcpp::RNGScope rcpp_rngScope_gen;
    ANN_cleanup();
    return R_NilValue;
END_RCPP
}
// comps_kNN
IntegerVector comps_kNN(IntegerMatrix nn, bool mutual);
RcppExport SEXP _dbscan_comps_kNN(SEXP nnSEXP, SEXP mutualSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type nn(nnSEXP);
    Rcpp::traits::input_parameter< bool >::type mutual(mutualSEXP);
    rcpp_result_gen = Rcpp::wrap(comps_kNN(nn, mutual));
    return rcpp_result_gen;
END_RCPP
}
// comps_frNN
IntegerVector comps_frNN(List nn, bool mutual);
RcppExport SEXP _dbscan_comps_frNN(SEXP nnSEXP, SEXP mutualSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type nn(nnSEXP);
    Rcpp::traits::input_parameter< bool >::type mutual(mutualSEXP);
    rcpp_result_gen = Rcpp::wrap(comps_frNN(nn, mutual));
    return rcpp_result_gen;
END_RCPP
}
// intToStr
StringVector intToStr(IntegerVector iv);
RcppExport SEXP _dbscan_intToStr(SEXP ivSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerVector >::type iv(ivSEXP);
    rcpp_result_gen = Rcpp::wrap(intToStr(iv));
    return rcpp_result_gen;
END_RCPP
}
// dist_subset
NumericVector dist_subset(const NumericVector& dist, IntegerVector idx);
RcppExport SEXP _dbscan_dist_subset(SEXP distSEXP, SEXP idxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericVector& >::type dist(distSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type idx(idxSEXP);
    rcpp_result_gen = Rcpp::wrap(dist_subset(dist, idx));
    return rcpp_result_gen;
END_RCPP
}
// XOR
Rcpp::LogicalVector XOR(Rcpp::LogicalVector lhs, Rcpp::LogicalVector rhs);
RcppExport SEXP _dbscan_XOR(SEXP lhsSEXP, SEXP rhsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type lhs(lhsSEXP);
    Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type rhs(rhsSEXP);
    rcpp_result_gen = Rcpp::wrap(XOR(lhs, rhs));
    return rcpp_result_gen;
END_RCPP
}
// dspc
NumericMatrix dspc(const List& cl_idx, const List& internal_nodes, const IntegerVector& all_cl_ids, const NumericVector& mrd_dist);
RcppExport SEXP _dbscan_dspc(SEXP cl_idxSEXP, SEXP internal_nodesSEXP, SEXP all_cl_idsSEXP, SEXP mrd_distSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List& >::type cl_idx(cl_idxSEXP);
    Rcpp::traits::input_parameter< const List& >::type internal_nodes(internal_nodesSEXP);
    Rcpp::traits::input_parameter< const IntegerVector& >::type all_cl_ids(all_cl_idsSEXP);
    Rcpp::traits::input_parameter< const NumericVector& >::type mrd_dist(mrd_distSEXP);
    rcpp_result_gen = Rcpp::wrap(dspc(cl_idx, internal_nodes, all_cl_ids, mrd_dist));
    return rcpp_result_gen;
END_RCPP
}
// dbscan_int
IntegerVector dbscan_int(NumericMatrix data, double eps, int minPts, NumericVector weights, int borderPoints, int type, int bucketSize, int splitRule, double approx, List frNN);
RcppExport SEXP _dbscan_dbscan_int(SEXP dataSEXP, SEXP epsSEXP, SEXP minPtsSEXP, SEXP weightsSEXP, SEXP borderPointsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP, SEXP frNNSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< double >::type eps(epsSEXP);
    Rcpp::traits::input_parameter< int >::type minPts(minPtsSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type weights(weightsSEXP);
    Rcpp::traits::input_parameter< int >::type borderPoints(borderPointsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    Rcpp::traits::input_parameter< List >::type frNN(frNNSEXP);
    rcpp_result_gen = Rcpp::wrap(dbscan_int(data, eps, minPts, weights, borderPoints, type, bucketSize, splitRule, approx, frNN));
    return rcpp_result_gen;
END_RCPP
}
// reach_to_dendrogram
List reach_to_dendrogram(const Rcpp::List reachability, const NumericVector pl_order);
RcppExport SEXP _dbscan_reach_to_dendrogram(SEXP reachabilitySEXP, SEXP pl_orderSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::List >::type reachability(reachabilitySEXP);
    Rcpp::traits::input_parameter< const NumericVector >::type pl_order(pl_orderSEXP);
    rcpp_result_gen = Rcpp::wrap(reach_to_dendrogram(reachability, pl_order));
    return rcpp_result_gen;
END_RCPP
}
// dendrogram_to_reach
List dendrogram_to_reach(const Rcpp::List x);
RcppExport SEXP _dbscan_dendrogram_to_reach(SEXP xSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::List >::type x(xSEXP);
    rcpp_result_gen = Rcpp::wrap(dendrogram_to_reach(x));
    return rcpp_result_gen;
END_RCPP
}
// mst_to_dendrogram
List mst_to_dendrogram(const NumericMatrix mst);
RcppExport SEXP _dbscan_mst_to_dendrogram(SEXP mstSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericMatrix >::type mst(mstSEXP);
    rcpp_result_gen = Rcpp::wrap(mst_to_dendrogram(mst));
    return rcpp_result_gen;
END_RCPP
}
// dbscan_density_int
IntegerVector dbscan_density_int(NumericMatrix data, double eps, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_dbscan_density_int(SEXP dataSEXP, SEXP epsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< double >::type eps(epsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(dbscan_density_int(data, eps, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// frNN_int
List frNN_int(NumericMatrix data, double eps, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_frNN_int(SEXP dataSEXP, SEXP epsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< double >::type eps(epsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(frNN_int(data, eps, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// frNN_query_int
List frNN_query_int(NumericMatrix data, NumericMatrix query, double eps, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_frNN_query_int(SEXP dataSEXP, SEXP querySEXP, SEXP epsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< NumericMatrix >::type query(querySEXP);
    Rcpp::traits::input_parameter< double >::type eps(epsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(frNN_query_int(data, query, eps, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// distToAdjacency
List distToAdjacency(IntegerVector constraints, const int N);
RcppExport SEXP _dbscan_distToAdjacency(SEXP constraintsSEXP, SEXP NSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerVector >::type constraints(constraintsSEXP);
    Rcpp::traits::input_parameter< const int >::type N(NSEXP);
    rcpp_result_gen = Rcpp::wrap(distToAdjacency(constraints, N));
    return rcpp_result_gen;
END_RCPP
}
// buildDendrogram
List buildDendrogram(List hcl);
RcppExport SEXP _dbscan_buildDendrogram(SEXP hclSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type hcl(hclSEXP);
    rcpp_result_gen = Rcpp::wrap(buildDendrogram(hcl));
    return rcpp_result_gen;
END_RCPP
}
// all_children
IntegerVector all_children(List hier, int key, bool leaves_only);
RcppExport SEXP _dbscan_all_children(SEXP hierSEXP, SEXP keySEXP, SEXP leaves_onlySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type hier(hierSEXP);
    Rcpp::traits::input_parameter< int >::type key(keySEXP);
    Rcpp::traits::input_parameter< bool >::type leaves_only(leaves_onlySEXP);
    rcpp_result_gen = Rcpp::wrap(all_children(hier, key, leaves_only));
    return rcpp_result_gen;
END_RCPP
}
// node_xy
NumericMatrix node_xy(List cl_tree, List cl_hierarchy, int cid);
RcppExport SEXP _dbscan_node_xy(SEXP cl_treeSEXP, SEXP cl_hierarchySEXP, SEXP cidSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cl_tree(cl_treeSEXP);
    Rcpp::traits::input_parameter< List >::type cl_hierarchy(cl_hierarchySEXP);
    Rcpp::traits::input_parameter< int >::type cid(cidSEXP);
    rcpp_result_gen = Rcpp::wrap(node_xy(cl_tree, cl_hierarchy, cid));
    return rcpp_result_gen;
END_RCPP
}
// simplifiedTree
List simplifiedTree(List cl_tree);
RcppExport SEXP _dbscan_simplifiedTree(SEXP cl_treeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cl_tree(cl_treeSEXP);
    rcpp_result_gen = Rcpp::wrap(simplifiedTree(cl_tree));
    return rcpp_result_gen;
END_RCPP
}
// computeStability
List computeStability(const List hcl, const int minPts, bool compute_glosh);
RcppExport SEXP _dbscan_computeStability(SEXP hclSEXP, SEXP minPtsSEXP, SEXP compute_gloshSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const List >::type hcl(hclSEXP);
    Rcpp::traits::input_parameter< const int >::type minPts(minPtsSEXP);
    Rcpp::traits::input_parameter< bool >::type compute_glosh(compute_gloshSEXP);
    rcpp_result_gen = Rcpp::wrap(computeStability(hcl, minPts, compute_glosh));
    return rcpp_result_gen;
END_RCPP
}
// validateConstraintList
List validateConstraintList(List& constraints, int n);
RcppExport SEXP _dbscan_validateConstraintList(SEXP constraintsSEXP, SEXP nSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List& >::type constraints(constraintsSEXP);
    Rcpp::traits::input_parameter< int >::type n(nSEXP);
    rcpp_result_gen = Rcpp::wrap(validateConstraintList(constraints, n));
    return rcpp_result_gen;
END_RCPP
}
// computeVirtualNode
double computeVirtualNode(IntegerVector noise, List constraints);
RcppExport SEXP _dbscan_computeVirtualNode(SEXP noiseSEXP, SEXP constraintsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerVector >::type noise(noiseSEXP);
    Rcpp::traits::input_parameter< List >::type constraints(constraintsSEXP);
    rcpp_result_gen = Rcpp::wrap(computeVirtualNode(noise, constraints));
    return rcpp_result_gen;
END_RCPP
}
// fosc
NumericVector fosc(List cl_tree, std::string cid, std::list<int>& sc, List cl_hierarchy, bool prune_unstable_leaves, double cluster_selection_epsilon, const double alpha, bool useVirtual, const int n_constraints, List constraints);
RcppExport SEXP _dbscan_fosc(SEXP cl_treeSEXP, SEXP cidSEXP, SEXP scSEXP, SEXP cl_hierarchySEXP, SEXP prune_unstable_leavesSEXP, SEXP cluster_selection_epsilonSEXP, SEXP alphaSEXP, SEXP useVirtualSEXP, SEXP n_constraintsSEXP, SEXP constraintsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cl_tree(cl_treeSEXP);
    Rcpp::traits::input_parameter< std::string >::type cid(cidSEXP);
    Rcpp::traits::input_parameter< std::list<int>& >::type sc(scSEXP);
    Rcpp::traits::input_parameter< List >::type cl_hierarchy(cl_hierarchySEXP);
    Rcpp::traits::input_parameter< bool >::type prune_unstable_leaves(prune_unstable_leavesSEXP);
    Rcpp::traits::input_parameter< double >::type cluster_selection_epsilon(cluster_selection_epsilonSEXP);
    Rcpp::traits::input_parameter< const double >::type alpha(alphaSEXP);
    Rcpp::traits::input_parameter< bool >::type useVirtual(useVirtualSEXP);
    Rcpp::traits::input_parameter< const int >::type n_constraints(n_constraintsSEXP);
    Rcpp::traits::input_parameter< List >::type constraints(constraintsSEXP);
    rcpp_result_gen = Rcpp::wrap(fosc(cl_tree, cid, sc, cl_hierarchy, prune_unstable_leaves, cluster_selection_epsilon, alpha, useVirtual, n_constraints, constraints));
    return rcpp_result_gen;
END_RCPP
}
// extractUnsupervised
List extractUnsupervised(List cl_tree, bool prune_unstable, double cluster_selection_epsilon);
RcppExport SEXP _dbscan_extractUnsupervised(SEXP cl_treeSEXP, SEXP prune_unstableSEXP, SEXP cluster_selection_epsilonSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cl_tree(cl_treeSEXP);
    Rcpp::traits::input_parameter< bool >::type prune_unstable(prune_unstableSEXP);
    Rcpp::traits::input_parameter< double >::type cluster_selection_epsilon(cluster_selection_epsilonSEXP);
    rcpp_result_gen = Rcpp::wrap(extractUnsupervised(cl_tree, prune_unstable, cluster_selection_epsilon));
    return rcpp_result_gen;
END_RCPP
}
// extractSemiSupervised
List extractSemiSupervised(List cl_tree, List constraints, float alpha, bool prune_unstable_leaves, double cluster_selection_epsilon);
RcppExport SEXP _dbscan_extractSemiSupervised(SEXP cl_treeSEXP, SEXP constraintsSEXP, SEXP alphaSEXP, SEXP prune_unstable_leavesSEXP, SEXP cluster_selection_epsilonSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cl_tree(cl_treeSEXP);
    Rcpp::traits::input_parameter< List >::type constraints(constraintsSEXP);
    Rcpp::traits::input_parameter< float >::type alpha(alphaSEXP);
    Rcpp::traits::input_parameter< bool >::type prune_unstable_leaves(prune_unstable_leavesSEXP);
    Rcpp::traits::input_parameter< double >::type cluster_selection_epsilon(cluster_selection_epsilonSEXP);
    rcpp_result_gen = Rcpp::wrap(extractSemiSupervised(cl_tree, constraints, alpha, prune_unstable_leaves, cluster_selection_epsilon));
    return rcpp_result_gen;
END_RCPP
}
// kNN_query_int
List kNN_query_int(NumericMatrix data, NumericMatrix query, int k, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_kNN_query_int(SEXP dataSEXP, SEXP querySEXP, SEXP kSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< NumericMatrix >::type query(querySEXP);
    Rcpp::traits::input_parameter< int >::type k(kSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(kNN_query_int(data, query, k, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// kNN_int
List kNN_int(NumericMatrix data, int k, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_kNN_int(SEXP dataSEXP, SEXP kSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< int >::type k(kSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(kNN_int(data, k, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// lof_kNN
List lof_kNN(NumericMatrix data, int minPts, int type, int bucketSize, int splitRule, double approx);
RcppExport SEXP _dbscan_lof_kNN(SEXP dataSEXP, SEXP minPtsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< int >::type minPts(minPtsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    rcpp_result_gen = Rcpp::wrap(lof_kNN(data, minPts, type, bucketSize, splitRule, approx));
    return rcpp_result_gen;
END_RCPP
}
// mrd
NumericVector mrd(NumericVector dm, NumericVector cd);
RcppExport SEXP _dbscan_mrd(SEXP dmSEXP, SEXP cdSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type dm(dmSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cd(cdSEXP);
    rcpp_result_gen = Rcpp::wrap(mrd(dm, cd));
    return rcpp_result_gen;
END_RCPP
}
// mst
Rcpp::NumericMatrix mst(const NumericVector x_dist, const R_xlen_t n);
RcppExport SEXP _dbscan_mst(SEXP x_distSEXP, SEXP nSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const NumericVector >::type x_dist(x_distSEXP);
    Rcpp::traits::input_parameter< const R_xlen_t >::type n(nSEXP);
    rcpp_result_gen = Rcpp::wrap(mst(x_dist, n));
    return rcpp_result_gen;
END_RCPP
}
// hclustMergeOrder
List hclustMergeOrder(NumericMatrix mst, IntegerVector o);
RcppExport SEXP _dbscan_hclustMergeOrder(SEXP mstSEXP, SEXP oSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type mst(mstSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type o(oSEXP);
    rcpp_result_gen = Rcpp::wrap(hclustMergeOrder(mst, o));
    return rcpp_result_gen;
END_RCPP
}
// optics_int
List optics_int(NumericMatrix data, double eps, int minPts, int type, int bucketSize, int splitRule, double approx, List frNN);
RcppExport SEXP _dbscan_optics_int(SEXP dataSEXP, SEXP epsSEXP, SEXP minPtsSEXP, SEXP typeSEXP, SEXP bucketSizeSEXP, SEXP splitRuleSEXP, SEXP approxSEXP, SEXP frNNSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP);
    Rcpp::traits::input_parameter< double >::type eps(epsSEXP);
    Rcpp::traits::input_parameter< int >::type minPts(minPtsSEXP);
    Rcpp::traits::input_parameter< int >::type type(typeSEXP);
    Rcpp::traits::input_parameter< int >::type bucketSize(bucketSizeSEXP);
    Rcpp::traits::input_parameter< int >::type splitRule(splitRuleSEXP);
    Rcpp::traits::input_parameter< double >::type approx(approxSEXP);
    Rcpp::traits::input_parameter< List >::type frNN(frNNSEXP);
    rcpp_result_gen = Rcpp::wrap(optics_int(data, eps, minPts, type, bucketSize, splitRule, approx, frNN));
    return rcpp_result_gen;
END_RCPP
}
// lowerTri
IntegerVector lowerTri(IntegerMatrix m);
RcppExport SEXP _dbscan_lowerTri(SEXP mSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< IntegerMatrix >::type m(mSEXP);
    rcpp_result_gen = Rcpp::wrap(lowerTri(m));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_dbscan_JP_int", (DL_FUNC) &_dbscan_JP_int, 2},
    {"_dbscan_SNN_sim_int", (DL_FUNC) &_dbscan_SNN_sim_int, 2},
    {"_dbscan_ANN_cleanup", (DL_FUNC) &_dbscan_ANN_cleanup, 0},
    {"_dbscan_comps_kNN", (DL_FUNC) &_dbscan_comps_kNN, 2},
    {"_dbscan_comps_frNN", (DL_FUNC) &_dbscan_comps_frNN, 2},
    {"_dbscan_intToStr", (DL_FUNC) &_dbscan_intToStr, 1},
    {"_dbscan_dist_subset", (DL_FUNC) &_dbscan_dist_subset, 2},
    {"_dbscan_XOR", (DL_FUNC) &_dbscan_XOR, 2},
    {"_dbscan_dspc", (DL_FUNC) &_dbscan_dspc, 4},
    {"_dbscan_dbscan_int", (DL_FUNC) &_dbscan_dbscan_int, 10},
    {"_dbscan_reach_to_dendrogram", (DL_FUNC) &_dbscan_reach_to_dendrogram, 2},
    {"_dbscan_dendrogram_to_reach", (DL_FUNC) &_dbscan_dendrogram_to_reach, 1},
    {"_dbscan_mst_to_dendrogram", (DL_FUNC) &_dbscan_mst_to_dendrogram, 1},
    {"_dbscan_dbscan_density_int", (DL_FUNC) &_dbscan_dbscan_density_int, 6},
    {"_dbscan_frNN_int", (DL_FUNC) &_dbscan_frNN_int, 6},
    {"_dbscan_frNN_query_int", (DL_FUNC) &_dbscan_frNN_query_int, 7},
    {"_dbscan_distToAdjacency", (DL_FUNC) &_dbscan_distToAdjacency, 2},
    {"_dbscan_buildDendrogram", (DL_FUNC) &_dbscan_buildDendrogram, 1},
    {"_dbscan_all_children", (DL_FUNC) &_dbscan_all_children, 3},
    {"_dbscan_node_xy", (DL_FUNC) &_dbscan_node_xy, 3},
    {"_dbscan_simplifiedTree", (DL_FUNC) &_dbscan_simplifiedTree, 1},
    {"_dbscan_computeStability", (DL_FUNC) &_dbscan_computeStability, 3},
    {"_dbscan_validateConstraintList", (DL_FUNC) &_dbscan_validateConstraintList, 2},
    {"_dbscan_computeVirtualNode", (DL_FUNC) &_dbscan_computeVirtualNode, 2},
    {"_dbscan_fosc", (DL_FUNC) &_dbscan_fosc, 10},
    {"_dbscan_extractUnsupervised", (DL_FUNC) &_dbscan_extractUnsupervised, 3},
    {"_dbscan_extractSemiSupervised", (DL_FUNC) &_dbscan_extractSemiSupervised, 5},
    {"_dbscan_kNN_query_int", (DL_FUNC) &_dbscan_kNN_query_int, 7},
    {"_dbscan_kNN_int", (DL_FUNC) &_dbscan_kNN_int, 6},
    {"_dbscan_lof_kNN", (DL_FUNC) &_dbscan_lof_kNN, 6},
    {"_dbscan_mrd", (DL_FUNC) &_dbscan_mrd, 2},
    {"_dbscan_mst", (DL_FUNC) &_dbscan_mst, 2},
    {"_dbscan_hclustMergeOrder", (DL_FUNC) &_dbscan_hclustMergeOrder, 2},
    {"_dbscan_optics_int", (DL_FUNC) &_dbscan_optics_int, 8},
    {"_dbscan_lowerTri", (DL_FUNC) &_dbscan_lowerTri, 1},
    {NULL, NULL, 0}
};

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