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

// cpp_s2_is_collection
LogicalVector cpp_s2_is_collection(List geog);
RcppExport SEXP _s2_cpp_s2_is_collection(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_is_collection(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_is_valid
LogicalVector cpp_s2_is_valid(List geog);
RcppExport SEXP _s2_cpp_s2_is_valid(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_is_valid(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_is_valid_reason
CharacterVector cpp_s2_is_valid_reason(List geog);
RcppExport SEXP _s2_cpp_s2_is_valid_reason(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_is_valid_reason(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_dimension
IntegerVector cpp_s2_dimension(List geog);
RcppExport SEXP _s2_cpp_s2_dimension(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_dimension(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_num_points
IntegerVector cpp_s2_num_points(List geog);
RcppExport SEXP _s2_cpp_s2_num_points(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_num_points(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_is_empty
LogicalVector cpp_s2_is_empty(List geog);
RcppExport SEXP _s2_cpp_s2_is_empty(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_is_empty(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_area
NumericVector cpp_s2_area(List geog);
RcppExport SEXP _s2_cpp_s2_area(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_area(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_length
NumericVector cpp_s2_length(List geog);
RcppExport SEXP _s2_cpp_s2_length(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_length(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_perimeter
NumericVector cpp_s2_perimeter(List geog);
RcppExport SEXP _s2_cpp_s2_perimeter(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_perimeter(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_x
NumericVector cpp_s2_x(List geog);
RcppExport SEXP _s2_cpp_s2_x(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_x(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_y
NumericVector cpp_s2_y(List geog);
RcppExport SEXP _s2_cpp_s2_y(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_y(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_project_normalized
NumericVector cpp_s2_project_normalized(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_project_normalized(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_project_normalized(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_distance
NumericVector cpp_s2_distance(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_distance(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_distance(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_max_distance
NumericVector cpp_s2_max_distance(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_max_distance(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_max_distance(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// make_s2_geography_altrep
SEXP make_s2_geography_altrep(SEXP list);
RcppExport SEXP _s2_make_s2_geography_altrep(SEXP listSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< SEXP >::type list(listSEXP);
    rcpp_result_gen = Rcpp::wrap(make_s2_geography_altrep(list));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_bounds_cap
DataFrame cpp_s2_bounds_cap(List geog);
RcppExport SEXP _s2_cpp_s2_bounds_cap(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_bounds_cap(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_bounds_rect
DataFrame cpp_s2_bounds_rect(List geog);
RcppExport SEXP _s2_cpp_s2_bounds_rect(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_bounds_rect(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_normalize
List cpp_s2_cell_union_normalize(List cellUnionVector);
RcppExport SEXP _s2_cpp_s2_cell_union_normalize(SEXP cellUnionVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector(cellUnionVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_normalize(cellUnionVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_is_na
LogicalVector cpp_s2_cell_union_is_na(List cellUnionVector);
RcppExport SEXP _s2_cpp_s2_cell_union_is_na(SEXP cellUnionVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector(cellUnionVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_is_na(cellUnionVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_contains
LogicalVector cpp_s2_cell_union_contains(List cellUnionVector1, List cellUnionVector2);
RcppExport SEXP _s2_cpp_s2_cell_union_contains(SEXP cellUnionVector1SEXP, SEXP cellUnionVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector1(cellUnionVector1SEXP);
    Rcpp::traits::input_parameter< List >::type cellUnionVector2(cellUnionVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_contains(cellUnionVector1, cellUnionVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_contains_cell
LogicalVector cpp_s2_cell_union_contains_cell(List cellUnionVector, NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_union_contains_cell(SEXP cellUnionVectorSEXP, SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector(cellUnionVectorSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_contains_cell(cellUnionVector, cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_intersects
LogicalVector cpp_s2_cell_union_intersects(List cellUnionVector1, List cellUnionVector2);
RcppExport SEXP _s2_cpp_s2_cell_union_intersects(SEXP cellUnionVector1SEXP, SEXP cellUnionVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector1(cellUnionVector1SEXP);
    Rcpp::traits::input_parameter< List >::type cellUnionVector2(cellUnionVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_intersects(cellUnionVector1, cellUnionVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_intersection
List cpp_s2_cell_union_intersection(List cellUnionVector1, List cellUnionVector2);
RcppExport SEXP _s2_cpp_s2_cell_union_intersection(SEXP cellUnionVector1SEXP, SEXP cellUnionVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector1(cellUnionVector1SEXP);
    Rcpp::traits::input_parameter< List >::type cellUnionVector2(cellUnionVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_intersection(cellUnionVector1, cellUnionVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_union
List cpp_s2_cell_union_union(List cellUnionVector1, List cellUnionVector2);
RcppExport SEXP _s2_cpp_s2_cell_union_union(SEXP cellUnionVector1SEXP, SEXP cellUnionVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector1(cellUnionVector1SEXP);
    Rcpp::traits::input_parameter< List >::type cellUnionVector2(cellUnionVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_union(cellUnionVector1, cellUnionVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_union_difference
List cpp_s2_cell_union_difference(List cellUnionVector1, List cellUnionVector2);
RcppExport SEXP _s2_cpp_s2_cell_union_difference(SEXP cellUnionVector1SEXP, SEXP cellUnionVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector1(cellUnionVector1SEXP);
    Rcpp::traits::input_parameter< List >::type cellUnionVector2(cellUnionVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_union_difference(cellUnionVector1, cellUnionVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_geography_from_cell_union
List cpp_s2_geography_from_cell_union(List cellUnionVector);
RcppExport SEXP _s2_cpp_s2_geography_from_cell_union(SEXP cellUnionVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type cellUnionVector(cellUnionVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_geography_from_cell_union(cellUnionVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_covering_cell_ids
List cpp_s2_covering_cell_ids(List geog, int min_level, int max_level, int max_cells, NumericVector buffer, bool interior);
RcppExport SEXP _s2_cpp_s2_covering_cell_ids(SEXP geogSEXP, SEXP min_levelSEXP, SEXP max_levelSEXP, SEXP max_cellsSEXP, SEXP bufferSEXP, SEXP interiorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< int >::type min_level(min_levelSEXP);
    Rcpp::traits::input_parameter< int >::type max_level(max_levelSEXP);
    Rcpp::traits::input_parameter< int >::type max_cells(max_cellsSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type buffer(bufferSEXP);
    Rcpp::traits::input_parameter< bool >::type interior(interiorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_covering_cell_ids(geog, min_level, max_level, max_cells, buffer, interior));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_covering_cell_ids_agg
List cpp_s2_covering_cell_ids_agg(List geog, int min_level, int max_level, int max_cells, double buffer, bool interior, bool naRm);
RcppExport SEXP _s2_cpp_s2_covering_cell_ids_agg(SEXP geogSEXP, SEXP min_levelSEXP, SEXP max_levelSEXP, SEXP max_cellsSEXP, SEXP bufferSEXP, SEXP interiorSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< int >::type min_level(min_levelSEXP);
    Rcpp::traits::input_parameter< int >::type max_level(max_levelSEXP);
    Rcpp::traits::input_parameter< int >::type max_cells(max_cellsSEXP);
    Rcpp::traits::input_parameter< double >::type buffer(bufferSEXP);
    Rcpp::traits::input_parameter< bool >::type interior(interiorSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_covering_cell_ids_agg(geog, min_level, max_level, max_cells, buffer, interior, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_sentinel
NumericVector cpp_s2_cell_sentinel();
RcppExport SEXP _s2_cpp_s2_cell_sentinel() {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_sentinel());
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_from_string
NumericVector cpp_s2_cell_from_string(CharacterVector cellString);
RcppExport SEXP _s2_cpp_s2_cell_from_string(SEXP cellStringSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< CharacterVector >::type cellString(cellStringSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_from_string(cellString));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_from_lnglat
NumericVector cpp_s2_cell_from_lnglat(List lnglat);
RcppExport SEXP _s2_cpp_s2_cell_from_lnglat(SEXP lnglatSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type lnglat(lnglatSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_from_lnglat(lnglat));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_to_lnglat
List cpp_s2_cell_to_lnglat(NumericVector cellId);
RcppExport SEXP _s2_cpp_s2_cell_to_lnglat(SEXP cellIdSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellId(cellIdSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_to_lnglat(cellId));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_to_cell_union
List cpp_s2_cell_to_cell_union(NumericVector cellId);
RcppExport SEXP _s2_cpp_s2_cell_to_cell_union(SEXP cellIdSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellId(cellIdSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_to_cell_union(cellId));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_is_na
LogicalVector cpp_s2_cell_is_na(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_is_na(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_is_na(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_sort
NumericVector cpp_s2_cell_sort(NumericVector cellIdVector, bool decreasing);
RcppExport SEXP _s2_cpp_s2_cell_sort(SEXP cellIdVectorSEXP, SEXP decreasingSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< bool >::type decreasing(decreasingSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_sort(cellIdVector, decreasing));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_range
NumericVector cpp_s2_cell_range(NumericVector cellIdVector, bool naRm);
RcppExport SEXP _s2_cpp_s2_cell_range(SEXP cellIdVectorSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_range(cellIdVector, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_unique
NumericVector cpp_s2_cell_unique(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_unique(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_unique(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_to_string
CharacterVector cpp_s2_cell_to_string(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_to_string(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_to_string(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_debug_string
CharacterVector cpp_s2_cell_debug_string(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_debug_string(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_debug_string(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_is_valid
LogicalVector cpp_s2_cell_is_valid(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_is_valid(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_is_valid(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_center
List cpp_s2_cell_center(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_center(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_center(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_polygon
List cpp_s2_cell_polygon(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_polygon(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_polygon(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_vertex
List cpp_s2_cell_vertex(NumericVector cellIdVector, IntegerVector k);
RcppExport SEXP _s2_cpp_s2_cell_vertex(SEXP cellIdVectorSEXP, SEXP kSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type k(kSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_vertex(cellIdVector, k));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_level
IntegerVector cpp_s2_cell_level(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_level(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_level(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_area
NumericVector cpp_s2_cell_area(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_area(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_area(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_area_approx
NumericVector cpp_s2_cell_area_approx(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_area_approx(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_area_approx(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_parent
NumericVector cpp_s2_cell_parent(NumericVector cellIdVector, IntegerVector level);
RcppExport SEXP _s2_cpp_s2_cell_parent(SEXP cellIdVectorSEXP, SEXP levelSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type level(levelSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_parent(cellIdVector, level));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_child
NumericVector cpp_s2_cell_child(NumericVector cellIdVector, IntegerVector k);
RcppExport SEXP _s2_cpp_s2_cell_child(SEXP cellIdVectorSEXP, SEXP kSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type k(kSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_child(cellIdVector, k));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_edge_neighbour
NumericVector cpp_s2_cell_edge_neighbour(NumericVector cellIdVector, IntegerVector k);
RcppExport SEXP _s2_cpp_s2_cell_edge_neighbour(SEXP cellIdVectorSEXP, SEXP kSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type k(kSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_edge_neighbour(cellIdVector, k));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_cummax
NumericVector cpp_s2_cell_cummax(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_cummax(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_cummax(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_cummin
NumericVector cpp_s2_cell_cummin(NumericVector cellIdVector);
RcppExport SEXP _s2_cpp_s2_cell_cummin(SEXP cellIdVectorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector(cellIdVectorSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_cummin(cellIdVector));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_eq
LogicalVector cpp_s2_cell_eq(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_eq(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_eq(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_neq
LogicalVector cpp_s2_cell_neq(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_neq(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_neq(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_lt
LogicalVector cpp_s2_cell_lt(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_lt(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_lt(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_lte
LogicalVector cpp_s2_cell_lte(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_lte(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_lte(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_gte
LogicalVector cpp_s2_cell_gte(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_gte(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_gte(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_gt
LogicalVector cpp_s2_cell_gt(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_gt(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_gt(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_contains
LogicalVector cpp_s2_cell_contains(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_contains(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_contains(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_may_intersect
LogicalVector cpp_s2_cell_may_intersect(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_may_intersect(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_may_intersect(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_distance
NumericVector cpp_s2_cell_distance(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_distance(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_distance(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_max_distance
NumericVector cpp_s2_cell_max_distance(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_max_distance(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_max_distance(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_common_ancestor_level
IntegerVector cpp_s2_cell_common_ancestor_level(NumericVector cellIdVector1, NumericVector cellIdVector2);
RcppExport SEXP _s2_cpp_s2_cell_common_ancestor_level(SEXP cellIdVector1SEXP, SEXP cellIdVector2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector1(cellIdVector1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type cellIdVector2(cellIdVector2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_common_ancestor_level(cellIdVector1, cellIdVector2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_cell_common_ancestor_level_agg
int cpp_s2_cell_common_ancestor_level_agg(NumericVector cellId);
RcppExport SEXP _s2_cpp_s2_cell_common_ancestor_level_agg(SEXP cellIdSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< NumericVector >::type cellId(cellIdSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_cell_common_ancestor_level_agg(cellId));
    return rcpp_result_gen;
END_RCPP
}
// s2_geography_full
List s2_geography_full(LogicalVector x);
RcppExport SEXP _s2_s2_geography_full(SEXP xSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< LogicalVector >::type x(xSEXP);
    rcpp_result_gen = Rcpp::wrap(s2_geography_full(x));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_geography_is_na
LogicalVector cpp_s2_geography_is_na(List geog);
RcppExport SEXP _s2_cpp_s2_geography_is_na(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_geography_is_na(geog));
    return rcpp_result_gen;
END_RCPP
}
// s2_lnglat_from_s2_point
List s2_lnglat_from_s2_point(List s2_point);
RcppExport SEXP _s2_s2_lnglat_from_s2_point(SEXP s2_pointSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type s2_point(s2_pointSEXP);
    rcpp_result_gen = Rcpp::wrap(s2_lnglat_from_s2_point(s2_point));
    return rcpp_result_gen;
END_RCPP
}
// s2_point_from_s2_lnglat
List s2_point_from_s2_lnglat(List s2_lnglat);
RcppExport SEXP _s2_s2_point_from_s2_lnglat(SEXP s2_lnglatSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type s2_lnglat(s2_lnglatSEXP);
    rcpp_result_gen = Rcpp::wrap(s2_point_from_s2_lnglat(s2_lnglat));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_closest_feature
IntegerVector cpp_s2_closest_feature(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_closest_feature(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_closest_feature(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_farthest_feature
IntegerVector cpp_s2_farthest_feature(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_farthest_feature(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_farthest_feature(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_closest_edges
List cpp_s2_closest_edges(List geog1, List geog2, int n, double min_distance, double max_distance);
RcppExport SEXP _s2_cpp_s2_closest_edges(SEXP geog1SEXP, SEXP geog2SEXP, SEXP nSEXP, SEXP min_distanceSEXP, SEXP max_distanceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< int >::type n(nSEXP);
    Rcpp::traits::input_parameter< double >::type min_distance(min_distanceSEXP);
    Rcpp::traits::input_parameter< double >::type max_distance(max_distanceSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_closest_edges(geog1, geog2, n, min_distance, max_distance));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_may_intersect_matrix
List cpp_s2_may_intersect_matrix(List geog1, List geog2, int maxEdgesPerCell, int maxFeatureCells, List s2options);
RcppExport SEXP _s2_cpp_s2_may_intersect_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP maxEdgesPerCellSEXP, SEXP maxFeatureCellsSEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< int >::type maxEdgesPerCell(maxEdgesPerCellSEXP);
    Rcpp::traits::input_parameter< int >::type maxFeatureCells(maxFeatureCellsSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_may_intersect_matrix(geog1, geog2, maxEdgesPerCell, maxFeatureCells, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_contains_matrix
List cpp_s2_contains_matrix(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_contains_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_contains_matrix(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_within_matrix
List cpp_s2_within_matrix(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_within_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_within_matrix(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_intersects_matrix
List cpp_s2_intersects_matrix(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_intersects_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_intersects_matrix(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_equals_matrix
List cpp_s2_equals_matrix(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_equals_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_equals_matrix(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_touches_matrix
List cpp_s2_touches_matrix(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_touches_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_touches_matrix(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_dwithin_matrix
List cpp_s2_dwithin_matrix(List geog1, List geog2, double distance);
RcppExport SEXP _s2_cpp_s2_dwithin_matrix(SEXP geog1SEXP, SEXP geog2SEXP, SEXP distanceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< double >::type distance(distanceSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_dwithin_matrix(geog1, geog2, distance));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_distance_matrix
NumericMatrix cpp_s2_distance_matrix(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_distance_matrix(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_distance_matrix(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_max_distance_matrix
NumericMatrix cpp_s2_max_distance_matrix(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_max_distance_matrix(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_max_distance_matrix(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_contains_matrix_brute_force
List cpp_s2_contains_matrix_brute_force(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_contains_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_contains_matrix_brute_force(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_within_matrix_brute_force
List cpp_s2_within_matrix_brute_force(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_within_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_within_matrix_brute_force(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_intersects_matrix_brute_force
List cpp_s2_intersects_matrix_brute_force(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_intersects_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_intersects_matrix_brute_force(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_disjoint_matrix_brute_force
List cpp_s2_disjoint_matrix_brute_force(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_disjoint_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_disjoint_matrix_brute_force(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_equals_matrix_brute_force
List cpp_s2_equals_matrix_brute_force(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_equals_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_equals_matrix_brute_force(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_dwithin_matrix_brute_force
List cpp_s2_dwithin_matrix_brute_force(List geog1, List geog2, double distance);
RcppExport SEXP _s2_cpp_s2_dwithin_matrix_brute_force(SEXP geog1SEXP, SEXP geog2SEXP, SEXP distanceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< double >::type distance(distanceSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_dwithin_matrix_brute_force(geog1, geog2, distance));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_intersects
LogicalVector cpp_s2_intersects(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_intersects(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_intersects(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_equals
LogicalVector cpp_s2_equals(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_equals(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_equals(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_contains
LogicalVector cpp_s2_contains(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_contains(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_contains(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_touches
LogicalVector cpp_s2_touches(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_touches(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_touches(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_dwithin
LogicalVector cpp_s2_dwithin(List geog1, List geog2, NumericVector distance);
RcppExport SEXP _s2_cpp_s2_dwithin(SEXP geog1SEXP, SEXP geog2SEXP, SEXP distanceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type distance(distanceSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_dwithin(geog1, geog2, distance));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_prepared_dwithin
LogicalVector cpp_s2_prepared_dwithin(List geog1, List geog2, NumericVector distance);
RcppExport SEXP _s2_cpp_s2_prepared_dwithin(SEXP geog1SEXP, SEXP geog2SEXP, SEXP distanceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type distance(distanceSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_prepared_dwithin(geog1, geog2, distance));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_intersects_box
LogicalVector cpp_s2_intersects_box(List geog, NumericVector lng1, NumericVector lat1, NumericVector lng2, NumericVector lat2, IntegerVector detail, List s2options);
RcppExport SEXP _s2_cpp_s2_intersects_box(SEXP geogSEXP, SEXP lng1SEXP, SEXP lat1SEXP, SEXP lng2SEXP, SEXP lat2SEXP, SEXP detailSEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type lng1(lng1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type lat1(lat1SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type lng2(lng2SEXP);
    Rcpp::traits::input_parameter< NumericVector >::type lat2(lat2SEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type detail(detailSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_intersects_box(geog, lng1, lat1, lng2, lat2, detail, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_intersection
List cpp_s2_intersection(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_intersection(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_intersection(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_union
List cpp_s2_union(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_union(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_union(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_difference
List cpp_s2_difference(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_difference(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_difference(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_sym_difference
List cpp_s2_sym_difference(List geog1, List geog2, List s2options);
RcppExport SEXP _s2_cpp_s2_sym_difference(SEXP geog1SEXP, SEXP geog2SEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_sym_difference(geog1, geog2, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_coverage_union_agg
List cpp_s2_coverage_union_agg(List geog, List s2options, bool naRm);
RcppExport SEXP _s2_cpp_s2_coverage_union_agg(SEXP geogSEXP, SEXP s2optionsSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_coverage_union_agg(geog, s2options, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_union_agg
List cpp_s2_union_agg(List geog, List s2options, bool naRm);
RcppExport SEXP _s2_cpp_s2_union_agg(SEXP geogSEXP, SEXP s2optionsSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_union_agg(geog, s2options, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_centroid_agg
List cpp_s2_centroid_agg(List geog, bool naRm);
RcppExport SEXP _s2_cpp_s2_centroid_agg(SEXP geogSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_centroid_agg(geog, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_rebuild_agg
List cpp_s2_rebuild_agg(List geog, List s2options, bool naRm);
RcppExport SEXP _s2_cpp_s2_rebuild_agg(SEXP geogSEXP, SEXP s2optionsSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_rebuild_agg(geog, s2options, naRm));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_closest_point
List cpp_s2_closest_point(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_closest_point(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_closest_point(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_minimum_clearance_line_between
List cpp_s2_minimum_clearance_line_between(List geog1, List geog2);
RcppExport SEXP _s2_cpp_s2_minimum_clearance_line_between(SEXP geog1SEXP, SEXP geog2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog1(geog1SEXP);
    Rcpp::traits::input_parameter< List >::type geog2(geog2SEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_minimum_clearance_line_between(geog1, geog2));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_centroid
List cpp_s2_centroid(List geog);
RcppExport SEXP _s2_cpp_s2_centroid(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_centroid(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_point_on_surface
List cpp_s2_point_on_surface(List geog);
RcppExport SEXP _s2_cpp_s2_point_on_surface(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_point_on_surface(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_boundary
List cpp_s2_boundary(List geog);
RcppExport SEXP _s2_cpp_s2_boundary(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_boundary(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_rebuild
List cpp_s2_rebuild(List geog, List s2options);
RcppExport SEXP _s2_cpp_s2_rebuild(SEXP geogSEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_rebuild(geog, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_unary_union
List cpp_s2_unary_union(List geog, List s2options);
RcppExport SEXP _s2_cpp_s2_unary_union(SEXP geogSEXP, SEXP s2optionsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< List >::type s2options(s2optionsSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_unary_union(geog, s2options));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_interpolate_normalized
List cpp_s2_interpolate_normalized(List geog, NumericVector distanceNormalized);
RcppExport SEXP _s2_cpp_s2_interpolate_normalized(SEXP geogSEXP, SEXP distanceNormalizedSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type distanceNormalized(distanceNormalizedSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_interpolate_normalized(geog, distanceNormalized));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_buffer_cells
List cpp_s2_buffer_cells(List geog, NumericVector distance, IntegerVector maxCells, IntegerVector minLevel);
RcppExport SEXP _s2_cpp_s2_buffer_cells(SEXP geogSEXP, SEXP distanceSEXP, SEXP maxCellsSEXP, SEXP minLevelSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< NumericVector >::type distance(distanceSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type maxCells(maxCellsSEXP);
    Rcpp::traits::input_parameter< IntegerVector >::type minLevel(minLevelSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_buffer_cells(geog, distance, maxCells, minLevel));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_convex_hull
List cpp_s2_convex_hull(List geog);
RcppExport SEXP _s2_cpp_s2_convex_hull(SEXP geogSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_convex_hull(geog));
    return rcpp_result_gen;
END_RCPP
}
// cpp_s2_convex_hull_agg
List cpp_s2_convex_hull_agg(List geog, bool naRm);
RcppExport SEXP _s2_cpp_s2_convex_hull_agg(SEXP geogSEXP, SEXP naRmSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< List >::type geog(geogSEXP);
    Rcpp::traits::input_parameter< bool >::type naRm(naRmSEXP);
    rcpp_result_gen = Rcpp::wrap(cpp_s2_convex_hull_agg(geog, naRm));
    return rcpp_result_gen;
END_RCPP
}

RcppExport SEXP c_s2_geography_writer_new(SEXP, SEXP, SEXP, SEXP, SEXP);
RcppExport SEXP c_s2_handle_geography(SEXP, SEXP);
RcppExport SEXP c_s2_handle_geography_tessellated(SEXP, SEXP);
RcppExport SEXP c_s2_projection_mercator(SEXP);
RcppExport SEXP c_s2_projection_orthographic(SEXP);
RcppExport SEXP c_s2_projection_plate_carree(SEXP);
RcppExport SEXP c_s2_trans_s2_lnglat_new(void);
RcppExport SEXP c_s2_trans_s2_point_new(void);

static const R_CallMethodDef CallEntries[] = {
    {"_s2_cpp_s2_is_collection", (DL_FUNC) &_s2_cpp_s2_is_collection, 1},
    {"_s2_cpp_s2_is_valid", (DL_FUNC) &_s2_cpp_s2_is_valid, 1},
    {"_s2_cpp_s2_is_valid_reason", (DL_FUNC) &_s2_cpp_s2_is_valid_reason, 1},
    {"_s2_cpp_s2_dimension", (DL_FUNC) &_s2_cpp_s2_dimension, 1},
    {"_s2_cpp_s2_num_points", (DL_FUNC) &_s2_cpp_s2_num_points, 1},
    {"_s2_cpp_s2_is_empty", (DL_FUNC) &_s2_cpp_s2_is_empty, 1},
    {"_s2_cpp_s2_area", (DL_FUNC) &_s2_cpp_s2_area, 1},
    {"_s2_cpp_s2_length", (DL_FUNC) &_s2_cpp_s2_length, 1},
    {"_s2_cpp_s2_perimeter", (DL_FUNC) &_s2_cpp_s2_perimeter, 1},
    {"_s2_cpp_s2_x", (DL_FUNC) &_s2_cpp_s2_x, 1},
    {"_s2_cpp_s2_y", (DL_FUNC) &_s2_cpp_s2_y, 1},
    {"_s2_cpp_s2_project_normalized", (DL_FUNC) &_s2_cpp_s2_project_normalized, 2},
    {"_s2_cpp_s2_distance", (DL_FUNC) &_s2_cpp_s2_distance, 2},
    {"_s2_cpp_s2_max_distance", (DL_FUNC) &_s2_cpp_s2_max_distance, 2},
    {"_s2_make_s2_geography_altrep", (DL_FUNC) &_s2_make_s2_geography_altrep, 1},
    {"_s2_cpp_s2_bounds_cap", (DL_FUNC) &_s2_cpp_s2_bounds_cap, 1},
    {"_s2_cpp_s2_bounds_rect", (DL_FUNC) &_s2_cpp_s2_bounds_rect, 1},
    {"_s2_cpp_s2_cell_union_normalize", (DL_FUNC) &_s2_cpp_s2_cell_union_normalize, 1},
    {"_s2_cpp_s2_cell_union_is_na", (DL_FUNC) &_s2_cpp_s2_cell_union_is_na, 1},
    {"_s2_cpp_s2_cell_union_contains", (DL_FUNC) &_s2_cpp_s2_cell_union_contains, 2},
    {"_s2_cpp_s2_cell_union_contains_cell", (DL_FUNC) &_s2_cpp_s2_cell_union_contains_cell, 2},
    {"_s2_cpp_s2_cell_union_intersects", (DL_FUNC) &_s2_cpp_s2_cell_union_intersects, 2},
    {"_s2_cpp_s2_cell_union_intersection", (DL_FUNC) &_s2_cpp_s2_cell_union_intersection, 2},
    {"_s2_cpp_s2_cell_union_union", (DL_FUNC) &_s2_cpp_s2_cell_union_union, 2},
    {"_s2_cpp_s2_cell_union_difference", (DL_FUNC) &_s2_cpp_s2_cell_union_difference, 2},
    {"_s2_cpp_s2_geography_from_cell_union", (DL_FUNC) &_s2_cpp_s2_geography_from_cell_union, 1},
    {"_s2_cpp_s2_covering_cell_ids", (DL_FUNC) &_s2_cpp_s2_covering_cell_ids, 6},
    {"_s2_cpp_s2_covering_cell_ids_agg", (DL_FUNC) &_s2_cpp_s2_covering_cell_ids_agg, 7},
    {"_s2_cpp_s2_cell_sentinel", (DL_FUNC) &_s2_cpp_s2_cell_sentinel, 0},
    {"_s2_cpp_s2_cell_from_string", (DL_FUNC) &_s2_cpp_s2_cell_from_string, 1},
    {"_s2_cpp_s2_cell_from_lnglat", (DL_FUNC) &_s2_cpp_s2_cell_from_lnglat, 1},
    {"_s2_cpp_s2_cell_to_lnglat", (DL_FUNC) &_s2_cpp_s2_cell_to_lnglat, 1},
    {"_s2_cpp_s2_cell_to_cell_union", (DL_FUNC) &_s2_cpp_s2_cell_to_cell_union, 1},
    {"_s2_cpp_s2_cell_is_na", (DL_FUNC) &_s2_cpp_s2_cell_is_na, 1},
    {"_s2_cpp_s2_cell_sort", (DL_FUNC) &_s2_cpp_s2_cell_sort, 2},
    {"_s2_cpp_s2_cell_range", (DL_FUNC) &_s2_cpp_s2_cell_range, 2},
    {"_s2_cpp_s2_cell_unique", (DL_FUNC) &_s2_cpp_s2_cell_unique, 1},
    {"_s2_cpp_s2_cell_to_string", (DL_FUNC) &_s2_cpp_s2_cell_to_string, 1},
    {"_s2_cpp_s2_cell_debug_string", (DL_FUNC) &_s2_cpp_s2_cell_debug_string, 1},
    {"_s2_cpp_s2_cell_is_valid", (DL_FUNC) &_s2_cpp_s2_cell_is_valid, 1},
    {"_s2_cpp_s2_cell_center", (DL_FUNC) &_s2_cpp_s2_cell_center, 1},
    {"_s2_cpp_s2_cell_polygon", (DL_FUNC) &_s2_cpp_s2_cell_polygon, 1},
    {"_s2_cpp_s2_cell_vertex", (DL_FUNC) &_s2_cpp_s2_cell_vertex, 2},
    {"_s2_cpp_s2_cell_level", (DL_FUNC) &_s2_cpp_s2_cell_level, 1},
    {"_s2_cpp_s2_cell_area", (DL_FUNC) &_s2_cpp_s2_cell_area, 1},
    {"_s2_cpp_s2_cell_area_approx", (DL_FUNC) &_s2_cpp_s2_cell_area_approx, 1},
    {"_s2_cpp_s2_cell_parent", (DL_FUNC) &_s2_cpp_s2_cell_parent, 2},
    {"_s2_cpp_s2_cell_child", (DL_FUNC) &_s2_cpp_s2_cell_child, 2},
    {"_s2_cpp_s2_cell_edge_neighbour", (DL_FUNC) &_s2_cpp_s2_cell_edge_neighbour, 2},
    {"_s2_cpp_s2_cell_cummax", (DL_FUNC) &_s2_cpp_s2_cell_cummax, 1},
    {"_s2_cpp_s2_cell_cummin", (DL_FUNC) &_s2_cpp_s2_cell_cummin, 1},
    {"_s2_cpp_s2_cell_eq", (DL_FUNC) &_s2_cpp_s2_cell_eq, 2},
    {"_s2_cpp_s2_cell_neq", (DL_FUNC) &_s2_cpp_s2_cell_neq, 2},
    {"_s2_cpp_s2_cell_lt", (DL_FUNC) &_s2_cpp_s2_cell_lt, 2},
    {"_s2_cpp_s2_cell_lte", (DL_FUNC) &_s2_cpp_s2_cell_lte, 2},
    {"_s2_cpp_s2_cell_gte", (DL_FUNC) &_s2_cpp_s2_cell_gte, 2},
    {"_s2_cpp_s2_cell_gt", (DL_FUNC) &_s2_cpp_s2_cell_gt, 2},
    {"_s2_cpp_s2_cell_contains", (DL_FUNC) &_s2_cpp_s2_cell_contains, 2},
    {"_s2_cpp_s2_cell_may_intersect", (DL_FUNC) &_s2_cpp_s2_cell_may_intersect, 2},
    {"_s2_cpp_s2_cell_distance", (DL_FUNC) &_s2_cpp_s2_cell_distance, 2},
    {"_s2_cpp_s2_cell_max_distance", (DL_FUNC) &_s2_cpp_s2_cell_max_distance, 2},
    {"_s2_cpp_s2_cell_common_ancestor_level", (DL_FUNC) &_s2_cpp_s2_cell_common_ancestor_level, 2},
    {"_s2_cpp_s2_cell_common_ancestor_level_agg", (DL_FUNC) &_s2_cpp_s2_cell_common_ancestor_level_agg, 1},
    {"_s2_s2_geography_full", (DL_FUNC) &_s2_s2_geography_full, 1},
    {"_s2_cpp_s2_geography_is_na", (DL_FUNC) &_s2_cpp_s2_geography_is_na, 1},
    {"_s2_s2_lnglat_from_s2_point", (DL_FUNC) &_s2_s2_lnglat_from_s2_point, 1},
    {"_s2_s2_point_from_s2_lnglat", (DL_FUNC) &_s2_s2_point_from_s2_lnglat, 1},
    {"_s2_cpp_s2_closest_feature", (DL_FUNC) &_s2_cpp_s2_closest_feature, 2},
    {"_s2_cpp_s2_farthest_feature", (DL_FUNC) &_s2_cpp_s2_farthest_feature, 2},
    {"_s2_cpp_s2_closest_edges", (DL_FUNC) &_s2_cpp_s2_closest_edges, 5},
    {"_s2_cpp_s2_may_intersect_matrix", (DL_FUNC) &_s2_cpp_s2_may_intersect_matrix, 5},
    {"_s2_cpp_s2_contains_matrix", (DL_FUNC) &_s2_cpp_s2_contains_matrix, 3},
    {"_s2_cpp_s2_within_matrix", (DL_FUNC) &_s2_cpp_s2_within_matrix, 3},
    {"_s2_cpp_s2_intersects_matrix", (DL_FUNC) &_s2_cpp_s2_intersects_matrix, 3},
    {"_s2_cpp_s2_equals_matrix", (DL_FUNC) &_s2_cpp_s2_equals_matrix, 3},
    {"_s2_cpp_s2_touches_matrix", (DL_FUNC) &_s2_cpp_s2_touches_matrix, 3},
    {"_s2_cpp_s2_dwithin_matrix", (DL_FUNC) &_s2_cpp_s2_dwithin_matrix, 3},
    {"_s2_cpp_s2_distance_matrix", (DL_FUNC) &_s2_cpp_s2_distance_matrix, 2},
    {"_s2_cpp_s2_max_distance_matrix", (DL_FUNC) &_s2_cpp_s2_max_distance_matrix, 2},
    {"_s2_cpp_s2_contains_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_contains_matrix_brute_force, 3},
    {"_s2_cpp_s2_within_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_within_matrix_brute_force, 3},
    {"_s2_cpp_s2_intersects_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_intersects_matrix_brute_force, 3},
    {"_s2_cpp_s2_disjoint_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_disjoint_matrix_brute_force, 3},
    {"_s2_cpp_s2_equals_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_equals_matrix_brute_force, 3},
    {"_s2_cpp_s2_dwithin_matrix_brute_force", (DL_FUNC) &_s2_cpp_s2_dwithin_matrix_brute_force, 3},
    {"_s2_cpp_s2_intersects", (DL_FUNC) &_s2_cpp_s2_intersects, 3},
    {"_s2_cpp_s2_equals", (DL_FUNC) &_s2_cpp_s2_equals, 3},
    {"_s2_cpp_s2_contains", (DL_FUNC) &_s2_cpp_s2_contains, 3},
    {"_s2_cpp_s2_touches", (DL_FUNC) &_s2_cpp_s2_touches, 3},
    {"_s2_cpp_s2_dwithin", (DL_FUNC) &_s2_cpp_s2_dwithin, 3},
    {"_s2_cpp_s2_prepared_dwithin", (DL_FUNC) &_s2_cpp_s2_prepared_dwithin, 3},
    {"_s2_cpp_s2_intersects_box", (DL_FUNC) &_s2_cpp_s2_intersects_box, 7},
    {"_s2_cpp_s2_intersection", (DL_FUNC) &_s2_cpp_s2_intersection, 3},
    {"_s2_cpp_s2_union", (DL_FUNC) &_s2_cpp_s2_union, 3},
    {"_s2_cpp_s2_difference", (DL_FUNC) &_s2_cpp_s2_difference, 3},
    {"_s2_cpp_s2_sym_difference", (DL_FUNC) &_s2_cpp_s2_sym_difference, 3},
    {"_s2_cpp_s2_coverage_union_agg", (DL_FUNC) &_s2_cpp_s2_coverage_union_agg, 3},
    {"_s2_cpp_s2_union_agg", (DL_FUNC) &_s2_cpp_s2_union_agg, 3},
    {"_s2_cpp_s2_centroid_agg", (DL_FUNC) &_s2_cpp_s2_centroid_agg, 2},
    {"_s2_cpp_s2_rebuild_agg", (DL_FUNC) &_s2_cpp_s2_rebuild_agg, 3},
    {"_s2_cpp_s2_closest_point", (DL_FUNC) &_s2_cpp_s2_closest_point, 2},
    {"_s2_cpp_s2_minimum_clearance_line_between", (DL_FUNC) &_s2_cpp_s2_minimum_clearance_line_between, 2},
    {"_s2_cpp_s2_centroid", (DL_FUNC) &_s2_cpp_s2_centroid, 1},
    {"_s2_cpp_s2_point_on_surface", (DL_FUNC) &_s2_cpp_s2_point_on_surface, 1},
    {"_s2_cpp_s2_boundary", (DL_FUNC) &_s2_cpp_s2_boundary, 1},
    {"_s2_cpp_s2_rebuild", (DL_FUNC) &_s2_cpp_s2_rebuild, 2},
    {"_s2_cpp_s2_unary_union", (DL_FUNC) &_s2_cpp_s2_unary_union, 2},
    {"_s2_cpp_s2_interpolate_normalized", (DL_FUNC) &_s2_cpp_s2_interpolate_normalized, 2},
    {"_s2_cpp_s2_buffer_cells", (DL_FUNC) &_s2_cpp_s2_buffer_cells, 4},
    {"_s2_cpp_s2_convex_hull", (DL_FUNC) &_s2_cpp_s2_convex_hull, 1},
    {"_s2_cpp_s2_convex_hull_agg", (DL_FUNC) &_s2_cpp_s2_convex_hull_agg, 2},
    {"c_s2_geography_writer_new",         (DL_FUNC) &c_s2_geography_writer_new,         5},
    {"c_s2_handle_geography",             (DL_FUNC) &c_s2_handle_geography,             2},
    {"c_s2_handle_geography_tessellated", (DL_FUNC) &c_s2_handle_geography_tessellated, 2},
    {"c_s2_projection_mercator",          (DL_FUNC) &c_s2_projection_mercator,          1},
    {"c_s2_projection_orthographic",      (DL_FUNC) &c_s2_projection_orthographic,      1},
    {"c_s2_projection_plate_carree",      (DL_FUNC) &c_s2_projection_plate_carree,      1},
    {"c_s2_trans_s2_lnglat_new",          (DL_FUNC) &c_s2_trans_s2_lnglat_new,          0},
    {"c_s2_trans_s2_point_new",           (DL_FUNC) &c_s2_trans_s2_point_new,           0},
    {NULL, NULL, 0}
};

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