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

// lap_prepare_cost_matrix
Rcpp::List lap_prepare_cost_matrix(NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_prepare_cost_matrix(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_prepare_cost_matrix(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_bruteforce
Rcpp::List lap_solve_bruteforce(NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_bruteforce(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_bruteforce(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_jv
Rcpp::List lap_solve_jv(NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_jv(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_jv(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// cpp_lap_solve_jv_lazy
Rcpp::List cpp_lap_solve_jv_lazy(Rcpp::NumericMatrix left_mat, Rcpp::NumericMatrix right_mat, std::string metric, Rcpp::Nullable<Rcpp::NumericMatrix> inv_cov, double max_distance, Rcpp::List calipers, Rcpp::CharacterVector var_names, bool maximize);
RcppExport SEXP _couplr_cpp_lap_solve_jv_lazy(SEXP left_matSEXP, SEXP right_matSEXP, SEXP metricSEXP, SEXP inv_covSEXP, SEXP max_distanceSEXP, SEXP calipersSEXP, SEXP var_namesSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type left_mat(left_matSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type right_mat(right_matSEXP);
    Rcpp::traits::input_parameter< std::string >::type metric(metricSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericMatrix> >::type inv_cov(inv_covSEXP);
    Rcpp::traits::input_parameter< double >::type max_distance(max_distanceSEXP);
    Rcpp::traits::input_parameter< Rcpp::List >::type calipers(calipersSEXP);
    Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type var_names(var_namesSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_lap_solve_jv_lazy(left_mat, right_mat, metric, inv_cov, max_distance, calipers, var_names, maximize));
    return rcpp_result_gen;
END_RCPP
}
// cpp_lap_solve_auction_lazy
Rcpp::List cpp_lap_solve_auction_lazy(Rcpp::NumericMatrix left_mat, Rcpp::NumericMatrix right_mat, std::string metric, Rcpp::Nullable<Rcpp::NumericMatrix> inv_cov, double max_distance, Rcpp::List calipers, Rcpp::CharacterVector var_names, bool maximize, Rcpp::Nullable<double> eps);
RcppExport SEXP _couplr_cpp_lap_solve_auction_lazy(SEXP left_matSEXP, SEXP right_matSEXP, SEXP metricSEXP, SEXP inv_covSEXP, SEXP max_distanceSEXP, SEXP calipersSEXP, SEXP var_namesSEXP, SEXP maximizeSEXP, SEXP epsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type left_mat(left_matSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type right_mat(right_matSEXP);
    Rcpp::traits::input_parameter< std::string >::type metric(metricSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericMatrix> >::type inv_cov(inv_covSEXP);
    Rcpp::traits::input_parameter< double >::type max_distance(max_distanceSEXP);
    Rcpp::traits::input_parameter< Rcpp::List >::type calipers(calipersSEXP);
    Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type var_names(var_namesSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<double> >::type eps(epsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_lap_solve_auction_lazy(left_mat, right_mat, metric, inv_cov, max_distance, calipers, var_names, maximize, eps));
    return rcpp_result_gen;
END_RCPP
}
// lap_kbest_murty
Rcpp::List lap_kbest_murty(Rcpp::NumericMatrix cost, int k, bool maximize, std::string single_method);
RcppExport SEXP _couplr_lap_kbest_murty(SEXP costSEXP, SEXP kSEXP, SEXP maximizeSEXP, SEXP single_methodSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< int >::type k(kSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< std::string >::type single_method(single_methodSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_kbest_murty(cost, k, maximize, single_method));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_auction
Rcpp::List lap_solve_auction(Rcpp::NumericMatrix cost, bool maximize, Rcpp::Nullable<double> eps);
RcppExport SEXP _couplr_lap_solve_auction(SEXP costSEXP, SEXP maximizeSEXP, SEXP epsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<double> >::type eps(epsSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_auction(cost, maximize, eps));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_auction_scaled
Rcpp::List lap_solve_auction_scaled(Rcpp::NumericMatrix cost, bool maximize, std::string schedule);
RcppExport SEXP _couplr_lap_solve_auction_scaled(SEXP costSEXP, SEXP maximizeSEXP, SEXP scheduleSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< std::string >::type schedule(scheduleSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_auction_scaled(cost, maximize, schedule));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_auction_scaled_params
Rcpp::List lap_solve_auction_scaled_params(Rcpp::NumericMatrix cost, bool maximize, double initial_epsilon_factor, double alpha, Rcpp::Nullable<double> final_epsilon);
RcppExport SEXP _couplr_lap_solve_auction_scaled_params(SEXP costSEXP, SEXP maximizeSEXP, SEXP initial_epsilon_factorSEXP, SEXP alphaSEXP, SEXP final_epsilonSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< double >::type initial_epsilon_factor(initial_epsilon_factorSEXP);
    Rcpp::traits::input_parameter< double >::type alpha(alphaSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<double> >::type final_epsilon(final_epsilonSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_auction_scaled_params(cost, maximize, initial_epsilon_factor, alpha, final_epsilon));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_auction_gs
Rcpp::List lap_solve_auction_gs(Rcpp::NumericMatrix cost, bool maximize, Rcpp::Nullable<double> eps);
RcppExport SEXP _couplr_lap_solve_auction_gs(SEXP costSEXP, SEXP maximizeSEXP, SEXP epsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<double> >::type eps(epsSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_auction_gs(cost, maximize, eps));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_ssp
Rcpp::List lap_solve_ssp(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_ssp(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_ssp(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_hungarian
Rcpp::List lap_solve_hungarian(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_hungarian(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_hungarian(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_munkres
Rcpp::List lap_solve_munkres(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_munkres(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_munkres(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_csflow
Rcpp::List lap_solve_csflow(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_csflow(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_csflow(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_kbest_lawler
Rcpp::List lap_kbest_lawler(Rcpp::NumericMatrix cost, int k, std::string method_base, bool maximize);
RcppExport SEXP _couplr_lap_kbest_lawler(SEXP costSEXP, SEXP kSEXP, SEXP method_baseSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< int >::type k(kSEXP);
    Rcpp::traits::input_parameter< std::string >::type method_base(method_baseSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_kbest_lawler(cost, k, method_base, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_hk01
Rcpp::List lap_solve_hk01(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_hk01(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_hk01(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_line_metric_cpp
Rcpp::List lap_solve_line_metric_cpp(Rcpp::NumericVector x, Rcpp::NumericVector y, std::string cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_line_metric_cpp(SEXP xSEXP, SEXP ySEXP, SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type x(xSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y(ySEXP);
    Rcpp::traits::input_parameter< std::string >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_line_metric_cpp(x, y, cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_ssap_bucket
Rcpp::List lap_solve_ssap_bucket(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_ssap_bucket(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_ssap_bucket(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_gabow_tarjan
Rcpp::List lap_solve_gabow_tarjan(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_gabow_tarjan(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_gabow_tarjan(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_lapmod
Rcpp::List lap_solve_lapmod(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_lapmod(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_lapmod(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_bottleneck
Rcpp::List lap_solve_bottleneck(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_bottleneck(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_bottleneck(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_csa
Rcpp::List lap_solve_csa(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_csa(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_csa(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_sinkhorn
Rcpp::List lap_solve_sinkhorn(Rcpp::NumericMatrix cost, double lambda, double tol, int max_iter, Rcpp::Nullable<Rcpp::NumericVector> r_weights, Rcpp::Nullable<Rcpp::NumericVector> c_weights);
RcppExport SEXP _couplr_lap_solve_sinkhorn(SEXP costSEXP, SEXP lambdaSEXP, SEXP tolSEXP, SEXP max_iterSEXP, SEXP r_weightsSEXP, SEXP c_weightsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< double >::type lambda(lambdaSEXP);
    Rcpp::traits::input_parameter< double >::type tol(tolSEXP);
    Rcpp::traits::input_parameter< int >::type max_iter(max_iterSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type r_weights(r_weightsSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type c_weights(c_weightsSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_sinkhorn(cost, lambda, tol, max_iter, r_weights, c_weights));
    return rcpp_result_gen;
END_RCPP
}
// sinkhorn_round
Rcpp::IntegerVector sinkhorn_round(Rcpp::NumericMatrix P);
RcppExport SEXP _couplr_sinkhorn_round(SEXP PSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type P(PSEXP);
    rcpp_result_gen = Rcpp::wrap(sinkhorn_round(P));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_ramshaw_tarjan
Rcpp::List lap_solve_ramshaw_tarjan(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_ramshaw_tarjan(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_ramshaw_tarjan(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_push_relabel
Rcpp::List lap_solve_push_relabel(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_push_relabel(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_push_relabel(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_jv_duals
Rcpp::List lap_solve_jv_duals(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_jv_duals(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_jv_duals(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_network_simplex
Rcpp::List lap_solve_network_simplex(Rcpp::NumericMatrix cost);
RcppExport SEXP _couplr_lap_solve_network_simplex(SEXP costSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_network_simplex(cost));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_full_matching
Rcpp::List lap_solve_full_matching(Rcpp::NumericMatrix cost, int min_controls, int max_controls_val);
RcppExport SEXP _couplr_lap_solve_full_matching(SEXP costSEXP, SEXP min_controlsSEXP, SEXP max_controls_valSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< int >::type min_controls(min_controlsSEXP);
    Rcpp::traits::input_parameter< int >::type max_controls_val(max_controls_valSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_full_matching(cost, min_controls, max_controls_val));
    return rcpp_result_gen;
END_RCPP
}
// greedy_matching
Rcpp::List greedy_matching(Rcpp::NumericMatrix cost_matrix, bool maximize, std::string strategy);
RcppExport SEXP _couplr_greedy_matching(SEXP cost_matrixSEXP, SEXP maximizeSEXP, SEXP strategySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost_matrix(cost_matrixSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    Rcpp::traits::input_parameter< std::string >::type strategy(strategySEXP);
    rcpp_result_gen = Rcpp::wrap(greedy_matching(cost_matrix, maximize, strategy));
    return rcpp_result_gen;
END_RCPP
}
// analyze_color_overlap_cpp
Rcpp::List analyze_color_overlap_cpp(Rcpp::NumericVector pixelsA, Rcpp::NumericVector pixelsB, int H, int W, int quantize_bits);
RcppExport SEXP _couplr_analyze_color_overlap_cpp(SEXP pixelsASEXP, SEXP pixelsBSEXP, SEXP HSEXP, SEXP WSEXP, SEXP quantize_bitsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsA(pixelsASEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsB(pixelsBSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    Rcpp::traits::input_parameter< int >::type quantize_bits(quantize_bitsSEXP);
    rcpp_result_gen = Rcpp::wrap(analyze_color_overlap_cpp(pixelsA, pixelsB, H, W, quantize_bits));
    return rcpp_result_gen;
END_RCPP
}
// compute_pixel_cost_cpp
Rcpp::NumericMatrix compute_pixel_cost_cpp(const Rcpp::NumericVector& pixelsA, const Rcpp::NumericVector& pixelsB, int H, int W, double alpha, double beta);
RcppExport SEXP _couplr_compute_pixel_cost_cpp(SEXP pixelsASEXP, SEXP pixelsBSEXP, SEXP HSEXP, SEXP WSEXP, SEXP alphaSEXP, SEXP betaSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const Rcpp::NumericVector& >::type pixelsA(pixelsASEXP);
    Rcpp::traits::input_parameter< const Rcpp::NumericVector& >::type pixelsB(pixelsBSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    Rcpp::traits::input_parameter< double >::type alpha(alphaSEXP);
    Rcpp::traits::input_parameter< double >::type beta(betaSEXP);
    rcpp_result_gen = Rcpp::wrap(compute_pixel_cost_cpp(pixelsA, pixelsB, H, W, alpha, beta));
    return rcpp_result_gen;
END_RCPP
}
// downscale_image_cpp
Rcpp::NumericVector downscale_image_cpp(Rcpp::NumericVector pixels, int H, int W, int H_new, int W_new);
RcppExport SEXP _couplr_downscale_image_cpp(SEXP pixelsSEXP, SEXP HSEXP, SEXP WSEXP, SEXP H_newSEXP, SEXP W_newSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixels(pixelsSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    Rcpp::traits::input_parameter< int >::type H_new(H_newSEXP);
    Rcpp::traits::input_parameter< int >::type W_new(W_newSEXP);
    rcpp_result_gen = Rcpp::wrap(downscale_image_cpp(pixels, H, W, H_new, W_new));
    return rcpp_result_gen;
END_RCPP
}
// upscale_assignment_cpp
Rcpp::IntegerVector upscale_assignment_cpp(Rcpp::IntegerVector assignment, int H_orig, int W_orig, int H_scaled, int W_scaled);
RcppExport SEXP _couplr_upscale_assignment_cpp(SEXP assignmentSEXP, SEXP H_origSEXP, SEXP W_origSEXP, SEXP H_scaledSEXP, SEXP W_scaledSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type assignment(assignmentSEXP);
    Rcpp::traits::input_parameter< int >::type H_orig(H_origSEXP);
    Rcpp::traits::input_parameter< int >::type W_orig(W_origSEXP);
    Rcpp::traits::input_parameter< int >::type H_scaled(H_scaledSEXP);
    Rcpp::traits::input_parameter< int >::type W_scaled(W_scaledSEXP);
    rcpp_result_gen = Rcpp::wrap(upscale_assignment_cpp(assignment, H_orig, W_orig, H_scaled, W_scaled));
    return rcpp_result_gen;
END_RCPP
}
// morph_pixel_level_cpp
Rcpp::List morph_pixel_level_cpp(Rcpp::NumericVector pixelsA, Rcpp::NumericVector pixelsB, Rcpp::IntegerVector assignment, int H, int W, int n_frames);
RcppExport SEXP _couplr_morph_pixel_level_cpp(SEXP pixelsASEXP, SEXP pixelsBSEXP, SEXP assignmentSEXP, SEXP HSEXP, SEXP WSEXP, SEXP n_framesSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsA(pixelsASEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsB(pixelsBSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type assignment(assignmentSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    Rcpp::traits::input_parameter< int >::type n_frames(n_framesSEXP);
    rcpp_result_gen = Rcpp::wrap(morph_pixel_level_cpp(pixelsA, pixelsB, assignment, H, W, n_frames));
    return rcpp_result_gen;
END_RCPP
}
// color_palette_info_cpp
Rcpp::List color_palette_info_cpp(Rcpp::NumericVector pixelsA, Rcpp::NumericVector pixelsB, int H, int W, int quantize_bits);
RcppExport SEXP _couplr_color_palette_info_cpp(SEXP pixelsASEXP, SEXP pixelsBSEXP, SEXP HSEXP, SEXP WSEXP, SEXP quantize_bitsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsA(pixelsASEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type pixelsB(pixelsBSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    Rcpp::traits::input_parameter< int >::type quantize_bits(quantize_bitsSEXP);
    rcpp_result_gen = Rcpp::wrap(color_palette_info_cpp(pixelsA, pixelsB, H, W, quantize_bits));
    return rcpp_result_gen;
END_RCPP
}
// spatial_cost_matrix_cpp
Rcpp::NumericMatrix spatial_cost_matrix_cpp(Rcpp::IntegerVector idxA, Rcpp::IntegerVector idxB, int H, int W);
RcppExport SEXP _couplr_spatial_cost_matrix_cpp(SEXP idxASEXP, SEXP idxBSEXP, SEXP HSEXP, SEXP WSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type idxA(idxASEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type idxB(idxBSEXP);
    Rcpp::traits::input_parameter< int >::type H(HSEXP);
    Rcpp::traits::input_parameter< int >::type W(WSEXP);
    rcpp_result_gen = Rcpp::wrap(spatial_cost_matrix_cpp(idxA, idxB, H, W));
    return rcpp_result_gen;
END_RCPP
}
// lap_solve_cycle_cancel
Rcpp::List lap_solve_cycle_cancel(Rcpp::NumericMatrix cost, bool maximize);
RcppExport SEXP _couplr_lap_solve_cycle_cancel(SEXP costSEXP, SEXP maximizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< bool >::type maximize(maximizeSEXP);
    rcpp_result_gen = Rcpp::wrap(lap_solve_cycle_cancel(cost, maximize));
    return rcpp_result_gen;
END_RCPP
}
// oa_solve
Rcpp::List oa_solve(Rcpp::NumericMatrix cost_r, double alpha, int auction_rounds);
RcppExport SEXP _couplr_oa_solve(SEXP cost_rSEXP, SEXP alphaSEXP, SEXP auction_roundsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost_r(cost_rSEXP);
    Rcpp::traits::input_parameter< double >::type alpha(alphaSEXP);
    Rcpp::traits::input_parameter< int >::type auction_rounds(auction_roundsSEXP);
    rcpp_result_gen = Rcpp::wrap(oa_solve(cost_r, alpha, auction_rounds));
    return rcpp_result_gen;
END_RCPP
}
// gt_cost_length
long long gt_cost_length(long long c_ij, bool in_matching);
RcppExport SEXP _couplr_gt_cost_length(SEXP c_ijSEXP, SEXP in_matchingSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< long long >::type c_ij(c_ijSEXP);
    Rcpp::traits::input_parameter< bool >::type in_matching(in_matchingSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_cost_length(c_ij, in_matching));
    return rcpp_result_gen;
END_RCPP
}
// gt_is_eligible
bool gt_is_eligible(long long c_ij, bool in_matching, long long y_u, long long y_v);
RcppExport SEXP _couplr_gt_is_eligible(SEXP c_ijSEXP, SEXP in_matchingSEXP, SEXP y_uSEXP, SEXP y_vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< long long >::type c_ij(c_ijSEXP);
    Rcpp::traits::input_parameter< bool >::type in_matching(in_matchingSEXP);
    Rcpp::traits::input_parameter< long long >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< long long >::type y_v(y_vSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_is_eligible(c_ij, in_matching, y_u, y_v));
    return rcpp_result_gen;
END_RCPP
}
// gt_check_one_feasible
bool gt_check_one_feasible(Rcpp::NumericMatrix cost, Rcpp::IntegerVector row_match, Rcpp::IntegerVector col_match, Rcpp::NumericVector y_u, Rcpp::NumericVector y_v);
RcppExport SEXP _couplr_gt_check_one_feasible(SEXP costSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP, SEXP y_uSEXP, SEXP y_vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type col_match(col_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_v(y_vSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_check_one_feasible(cost, row_match, col_match, y_u, y_v));
    return rcpp_result_gen;
END_RCPP
}
// gt_build_equality_graph
Rcpp::List gt_build_equality_graph(Rcpp::NumericMatrix cost, Rcpp::IntegerVector row_match, Rcpp::NumericVector y_u, Rcpp::NumericVector y_v);
RcppExport SEXP _couplr_gt_build_equality_graph(SEXP costSEXP, SEXP row_matchSEXP, SEXP y_uSEXP, SEXP y_vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_v(y_vSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_build_equality_graph(cost, row_match, y_u, y_v));
    return rcpp_result_gen;
END_RCPP
}
// gt_augment_along_path
Rcpp::List gt_augment_along_path(Rcpp::IntegerMatrix edges, Rcpp::IntegerVector row_match, Rcpp::IntegerVector col_match);
RcppExport SEXP _couplr_gt_augment_along_path(SEXP edgesSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::IntegerMatrix >::type edges(edgesSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type col_match(col_matchSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_augment_along_path(edges, row_match, col_match));
    return rcpp_result_gen;
END_RCPP
}
// gt_find_maximal_augmenting_paths
Rcpp::List gt_find_maximal_augmenting_paths(Rcpp::List eq_graph, Rcpp::IntegerVector row_match, Rcpp::IntegerVector col_match);
RcppExport SEXP _couplr_gt_find_maximal_augmenting_paths(SEXP eq_graphSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type eq_graph(eq_graphSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type col_match(col_matchSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_find_maximal_augmenting_paths(eq_graph, row_match, col_match));
    return rcpp_result_gen;
END_RCPP
}
// gt_hungarian_step_one_feasible
Rcpp::List gt_hungarian_step_one_feasible(Rcpp::NumericMatrix cost, Rcpp::IntegerVector row_match, Rcpp::IntegerVector col_match, Rcpp::NumericVector y_u, Rcpp::NumericVector y_v);
RcppExport SEXP _couplr_gt_hungarian_step_one_feasible(SEXP costSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP, SEXP y_uSEXP, SEXP y_vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type col_match(col_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type y_v(y_vSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_hungarian_step_one_feasible(cost, row_match, col_match, y_u, y_v));
    return rcpp_result_gen;
END_RCPP
}
// gt_match_gt
Rcpp::List gt_match_gt(Rcpp::NumericMatrix cost, Rcpp::Nullable<Rcpp::IntegerVector> row_match, Rcpp::Nullable<Rcpp::IntegerVector> col_match, Rcpp::Nullable<Rcpp::NumericVector> y_u, Rcpp::Nullable<Rcpp::NumericVector> y_v, int max_iters, bool check_feasible);
RcppExport SEXP _couplr_gt_match_gt(SEXP costSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP, SEXP y_uSEXP, SEXP y_vSEXP, SEXP max_itersSEXP, SEXP check_feasibleSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::IntegerVector> >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::IntegerVector> >::type col_match(col_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type y_v(y_vSEXP);
    Rcpp::traits::input_parameter< int >::type max_iters(max_itersSEXP);
    Rcpp::traits::input_parameter< bool >::type check_feasible(check_feasibleSEXP);
    rcpp_result_gen = Rcpp::wrap(gt_match_gt(cost, row_match, col_match, y_u, y_v, max_iters, check_feasible));
    return rcpp_result_gen;
END_RCPP
}
// scale_match_cpp
Rcpp::List scale_match_cpp(Rcpp::NumericMatrix cost, Rcpp::Nullable<Rcpp::IntegerVector> row_match, Rcpp::Nullable<Rcpp::IntegerVector> col_match, Rcpp::Nullable<Rcpp::NumericVector> y_u, Rcpp::Nullable<Rcpp::NumericVector> y_v);
RcppExport SEXP _couplr_scale_match_cpp(SEXP costSEXP, SEXP row_matchSEXP, SEXP col_matchSEXP, SEXP y_uSEXP, SEXP y_vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::NumericMatrix >::type cost(costSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::IntegerVector> >::type row_match(row_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::IntegerVector> >::type col_match(col_matchSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type y_u(y_uSEXP);
    Rcpp::traits::input_parameter< Rcpp::Nullable<Rcpp::NumericVector> >::type y_v(y_vSEXP);
    rcpp_result_gen = Rcpp::wrap(scale_match_cpp(cost, row_match, col_match, y_u, y_v));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_couplr_lap_prepare_cost_matrix", (DL_FUNC) &_couplr_lap_prepare_cost_matrix, 2},
    {"_couplr_lap_solve_bruteforce", (DL_FUNC) &_couplr_lap_solve_bruteforce, 2},
    {"_couplr_lap_solve_jv", (DL_FUNC) &_couplr_lap_solve_jv, 2},
    {"_couplr_cpp_lap_solve_jv_lazy", (DL_FUNC) &_couplr_cpp_lap_solve_jv_lazy, 8},
    {"_couplr_cpp_lap_solve_auction_lazy", (DL_FUNC) &_couplr_cpp_lap_solve_auction_lazy, 9},
    {"_couplr_lap_kbest_murty", (DL_FUNC) &_couplr_lap_kbest_murty, 4},
    {"_couplr_lap_solve_auction", (DL_FUNC) &_couplr_lap_solve_auction, 3},
    {"_couplr_lap_solve_auction_scaled", (DL_FUNC) &_couplr_lap_solve_auction_scaled, 3},
    {"_couplr_lap_solve_auction_scaled_params", (DL_FUNC) &_couplr_lap_solve_auction_scaled_params, 5},
    {"_couplr_lap_solve_auction_gs", (DL_FUNC) &_couplr_lap_solve_auction_gs, 3},
    {"_couplr_lap_solve_ssp", (DL_FUNC) &_couplr_lap_solve_ssp, 2},
    {"_couplr_lap_solve_hungarian", (DL_FUNC) &_couplr_lap_solve_hungarian, 2},
    {"_couplr_lap_solve_munkres", (DL_FUNC) &_couplr_lap_solve_munkres, 2},
    {"_couplr_lap_solve_csflow", (DL_FUNC) &_couplr_lap_solve_csflow, 2},
    {"_couplr_lap_kbest_lawler", (DL_FUNC) &_couplr_lap_kbest_lawler, 4},
    {"_couplr_lap_solve_hk01", (DL_FUNC) &_couplr_lap_solve_hk01, 2},
    {"_couplr_lap_solve_line_metric_cpp", (DL_FUNC) &_couplr_lap_solve_line_metric_cpp, 4},
    {"_couplr_lap_solve_ssap_bucket", (DL_FUNC) &_couplr_lap_solve_ssap_bucket, 2},
    {"_couplr_lap_solve_gabow_tarjan", (DL_FUNC) &_couplr_lap_solve_gabow_tarjan, 2},
    {"_couplr_lap_solve_lapmod", (DL_FUNC) &_couplr_lap_solve_lapmod, 2},
    {"_couplr_lap_solve_bottleneck", (DL_FUNC) &_couplr_lap_solve_bottleneck, 2},
    {"_couplr_lap_solve_csa", (DL_FUNC) &_couplr_lap_solve_csa, 2},
    {"_couplr_lap_solve_sinkhorn", (DL_FUNC) &_couplr_lap_solve_sinkhorn, 6},
    {"_couplr_sinkhorn_round", (DL_FUNC) &_couplr_sinkhorn_round, 1},
    {"_couplr_lap_solve_ramshaw_tarjan", (DL_FUNC) &_couplr_lap_solve_ramshaw_tarjan, 2},
    {"_couplr_lap_solve_push_relabel", (DL_FUNC) &_couplr_lap_solve_push_relabel, 2},
    {"_couplr_lap_solve_jv_duals", (DL_FUNC) &_couplr_lap_solve_jv_duals, 2},
    {"_couplr_lap_solve_network_simplex", (DL_FUNC) &_couplr_lap_solve_network_simplex, 1},
    {"_couplr_lap_solve_full_matching", (DL_FUNC) &_couplr_lap_solve_full_matching, 3},
    {"_couplr_greedy_matching", (DL_FUNC) &_couplr_greedy_matching, 3},
    {"_couplr_analyze_color_overlap_cpp", (DL_FUNC) &_couplr_analyze_color_overlap_cpp, 5},
    {"_couplr_compute_pixel_cost_cpp", (DL_FUNC) &_couplr_compute_pixel_cost_cpp, 6},
    {"_couplr_downscale_image_cpp", (DL_FUNC) &_couplr_downscale_image_cpp, 5},
    {"_couplr_upscale_assignment_cpp", (DL_FUNC) &_couplr_upscale_assignment_cpp, 5},
    {"_couplr_morph_pixel_level_cpp", (DL_FUNC) &_couplr_morph_pixel_level_cpp, 6},
    {"_couplr_color_palette_info_cpp", (DL_FUNC) &_couplr_color_palette_info_cpp, 5},
    {"_couplr_spatial_cost_matrix_cpp", (DL_FUNC) &_couplr_spatial_cost_matrix_cpp, 4},
    {"_couplr_lap_solve_cycle_cancel", (DL_FUNC) &_couplr_lap_solve_cycle_cancel, 2},
    {"_couplr_oa_solve", (DL_FUNC) &_couplr_oa_solve, 3},
    {"_couplr_gt_cost_length", (DL_FUNC) &_couplr_gt_cost_length, 2},
    {"_couplr_gt_is_eligible", (DL_FUNC) &_couplr_gt_is_eligible, 4},
    {"_couplr_gt_check_one_feasible", (DL_FUNC) &_couplr_gt_check_one_feasible, 5},
    {"_couplr_gt_build_equality_graph", (DL_FUNC) &_couplr_gt_build_equality_graph, 4},
    {"_couplr_gt_augment_along_path", (DL_FUNC) &_couplr_gt_augment_along_path, 3},
    {"_couplr_gt_find_maximal_augmenting_paths", (DL_FUNC) &_couplr_gt_find_maximal_augmenting_paths, 3},
    {"_couplr_gt_hungarian_step_one_feasible", (DL_FUNC) &_couplr_gt_hungarian_step_one_feasible, 5},
    {"_couplr_gt_match_gt", (DL_FUNC) &_couplr_gt_match_gt, 7},
    {"_couplr_scale_match_cpp", (DL_FUNC) &_couplr_scale_match_cpp, 5},
    {NULL, NULL, 0}
};

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