1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//! Bridge definitions for libcudf replace operations.
//!
//! Provides GPU-accelerated null/NaN replacement and value clamping.
#[cxx::bridge(namespace = "cudf_shims")]
pub mod ffi {
unsafe extern "C++" {
include!("replace_shim.h");
include!("column_shim.h");
include!("scalar_shim.h");
type OwnedColumn = crate::column::ffi::OwnedColumn;
type OwnedScalar = crate::scalar::ffi::OwnedScalar;
// ── Replace nulls ─────────────────────────────────────────
/// Replace null values in `col` with corresponding values from `replacement`.
fn replace_nulls_column(
col: &OwnedColumn,
replacement: &OwnedColumn,
) -> Result<UniquePtr<OwnedColumn>>;
/// Replace null values in `col` with a scalar.
fn replace_nulls_scalar(
col: &OwnedColumn,
replacement: &OwnedScalar,
) -> Result<UniquePtr<OwnedColumn>>;
// ── Replace NaNs ──────────────────────────────────────────
/// Replace NaN values in `col` with a scalar.
fn replace_nans_scalar(
col: &OwnedColumn,
replacement: &OwnedScalar,
) -> Result<UniquePtr<OwnedColumn>>;
/// Replace NaN values in `col` with corresponding values from `replacement`.
fn replace_nans_column(
col: &OwnedColumn,
replacement: &OwnedColumn,
) -> Result<UniquePtr<OwnedColumn>>;
// ── Clamp ─────────────────────────────────────────────────
/// Clamp values in `col` to the range [lo, hi].
/// Values below `lo` become `lo`, values above `hi` become `hi`.
fn clamp(
col: &OwnedColumn,
lo: &OwnedScalar,
hi: &OwnedScalar,
) -> Result<UniquePtr<OwnedColumn>>;
// ── Normalize ─────────────────────────────────────────────
/// Normalize -NaN to +NaN and -0.0 to +0.0.
fn normalize_nans_and_zeros(col: &OwnedColumn) -> Result<UniquePtr<OwnedColumn>>;
/// Replace nulls using a policy (PRECEDING=0, FOLLOWING=1).
fn replace_nulls_policy(col: &OwnedColumn, policy: i32) -> Result<UniquePtr<OwnedColumn>>;
/// Find and replace all occurrences of old_values with new_values.
fn find_and_replace_all(
col: &OwnedColumn,
old_values: &OwnedColumn,
new_values: &OwnedColumn,
) -> Result<UniquePtr<OwnedColumn>>;
/// Normalize NaN and zeros in-place.
fn normalize_nans_and_zeros_inplace(col: Pin<&mut OwnedColumn>) -> Result<()>;
/// Clamp with replacement values.
fn clamp_with_replace(
col: &OwnedColumn,
lo: &OwnedScalar,
lo_replace: &OwnedScalar,
hi: &OwnedScalar,
hi_replace: &OwnedScalar,
) -> Result<UniquePtr<OwnedColumn>>;
}
}