#pragma once
#include <cudf/groupby.hpp>
#include <cudf/table/table.hpp>
#include <cudf/types.hpp>
#include <memory>
#include <vector>
#include "rust/cxx.h"
#include "table_shim.h"
#include "column_shim.h"
#include "aggregation_shim.h"
namespace cudf_shims {
struct GroupByBuilder {
cudf::table_view keys_view;
std::vector<std::pair<cudf::size_type, std::unique_ptr<cudf::groupby_aggregation>>> requests;
explicit GroupByBuilder(cudf::table_view keys)
: keys_view(keys) {}
};
std::unique_ptr<GroupByBuilder> groupby_new(const OwnedTable& keys);
void groupby_add_request(
GroupByBuilder& builder,
int32_t col_idx,
std::unique_ptr<OwnedAggregation> agg);
std::unique_ptr<OwnedTable> groupby_execute(
GroupByBuilder& builder,
const OwnedTable& values);
std::unique_ptr<OwnedTable> groupby_execute_keys(
GroupByBuilder& builder,
const OwnedTable& values);
std::unique_ptr<OwnedTable> groupby_execute_values(
GroupByBuilder& builder,
const OwnedTable& values);
struct GroupByScanBuilder {
cudf::table_view keys_view;
std::vector<std::pair<cudf::size_type, std::unique_ptr<cudf::groupby_scan_aggregation>>> requests;
explicit GroupByScanBuilder(cudf::table_view keys)
: keys_view(keys) {}
};
std::unique_ptr<GroupByScanBuilder> groupby_scan_new(const OwnedTable& keys);
void groupby_scan_add_request(
GroupByScanBuilder& builder,
int32_t col_idx,
int32_t agg_kind);
std::unique_ptr<OwnedTable> groupby_scan_execute(
GroupByScanBuilder& builder,
const OwnedTable& values);
struct GroupByGroupsResult {
std::unique_ptr<OwnedTable> keys;
std::unique_ptr<OwnedColumn> offsets;
std::unique_ptr<OwnedTable> values; };
std::unique_ptr<GroupByGroupsResult> groupby_get_groups(
const OwnedTable& keys);
std::unique_ptr<GroupByGroupsResult> groupby_get_groups_with_values(
const OwnedTable& keys,
const OwnedTable& values);
std::unique_ptr<OwnedTable> groupby_groups_take_keys(GroupByGroupsResult& result);
std::unique_ptr<OwnedColumn> groupby_groups_take_offsets(GroupByGroupsResult& result);
std::unique_ptr<OwnedTable> groupby_groups_take_values(GroupByGroupsResult& result);
std::unique_ptr<OwnedTable> groupby_replace_nulls(
const OwnedTable& keys,
const OwnedTable& values,
rust::Slice<const int32_t> policies);
}