@@ -5,7 +5,10 @@ import org.jetbrains.kotlinx.dataframe.ColumnsSelector
5
5
import org.jetbrains.kotlinx.dataframe.DataColumn
6
6
import org.jetbrains.kotlinx.dataframe.DataFrame
7
7
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
8
+ import org.jetbrains.kotlinx.dataframe.api.Select.SelectSelectingOptions
8
9
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
10
+ import org.jetbrains.kotlinx.dataframe.documentation.DocumentationUrls
11
+ import org.jetbrains.kotlinx.dataframe.documentation.ExcludeFromSources
9
12
import org.jetbrains.kotlinx.dataframe.impl.nothingType
10
13
import org.jetbrains.kotlinx.dataframe.impl.nullableNothingType
11
14
import org.jetbrains.kotlinx.dataframe.math.cumSum
@@ -18,6 +21,36 @@ import kotlin.reflect.typeOf
18
21
19
22
// region DataColumn
20
23
24
+ /* *
25
+ * ## The CumSum Operation
26
+ *
27
+ * Computes the cumulative sum of the values in the {@get DATA_TYPE}.
28
+ *
29
+ * __NOTE:__ If the column contains nullable values and `skipNA` is set to `true`,
30
+ * skips null values when computing the cumulative sum.
31
+ * Otherwise, any null value encountered will propagate null values in the output from that point onward.
32
+ *
33
+ * {@get [CUMSUM_PARAM] @param [columns]
34
+ * The names of the columns to apply cumSum operation.}
35
+ *
36
+ * @param [skipNA] Whether to skip null values (default: `true`).
37
+ *
38
+ * @return A new {@get DATA_TYPE} of the same type with the cumulative sum of the values.
39
+ *
40
+ * {@get [CUMSUM_PARAM] @see [Selecting Columns][SelectSelectingOptions].}
41
+ * @see {@include [DocumentationUrls.CumSum]}
42
+ */
43
+ @ExcludeFromSources
44
+ @Suppress(" ClassName" )
45
+ private interface CumSumDocs {
46
+ interface CUMSUM_PARAM
47
+ }
48
+
49
+ /* *
50
+ * {@include [CumSumDocs]}
51
+ * {@set DATA_TYPE [DataColumn]}.
52
+ * {@set [CumSumDocs.CUMSUM_PARAM]}
53
+ */
21
54
public fun <T : Number ?> DataColumn<T>.cumSum (skipNA : Boolean = defaultCumSumSkipNA): DataColumn <T > =
22
55
when (type()) {
23
56
typeOf<Double >() -> cast<Double >().cumSum(skipNA).cast()
@@ -79,25 +112,46 @@ private val supportedClasses = setOf(
79
112
80
113
// region DataFrame
81
114
115
+ /* *
116
+ * {@include [CumSumDocs]}
117
+ * {@set DATA_TYPE [DataFrame]}.
118
+ */
82
119
public fun <T , C > DataFrame<T>.cumSum (
83
120
skipNA : Boolean = defaultCumSumSkipNA,
84
121
columns : ColumnsSelector <T , C >,
85
122
): DataFrame <T > =
86
123
convert(columns).to { if (it.typeClass in supportedClasses) it.cast<Number ?>().cumSum(skipNA) else it }
87
124
125
+ /* *
126
+ * {@include [CumSumDocs]}
127
+ * {@set DATA_TYPE [DataFrame]}.
128
+ */
88
129
public fun <T > DataFrame<T>.cumSum (vararg columns : String , skipNA : Boolean = defaultCumSumSkipNA): DataFrame <T > =
89
130
cumSum(skipNA) { columns.toColumnSet() }
90
131
132
+ /* *
133
+ * {@include [CumSumDocs]}
134
+ * {@set DATA_TYPE [DataFrame]}.
135
+ */
91
136
@AccessApiOverload
92
137
public fun <T > DataFrame<T>.cumSum (
93
138
vararg columns : AnyColumnReference ,
94
139
skipNA : Boolean = defaultCumSumSkipNA,
95
140
): DataFrame <T > = cumSum(skipNA) { columns.toColumnSet() }
96
141
142
+ /* *
143
+ * {@include [CumSumDocs]}
144
+ * {@set DATA_TYPE [DataFrame]}.
145
+ */
97
146
@AccessApiOverload
98
147
public fun <T > DataFrame<T>.cumSum (vararg columns : KProperty <* >, skipNA : Boolean = defaultCumSumSkipNA): DataFrame <T > =
99
148
cumSum(skipNA) { columns.toColumnSet() }
100
149
150
+ /* *
151
+ * {@include [CumSumDocs]}
152
+ * {@set DATA_TYPE [DataFrame]}.
153
+ * {@set [CumSumDocs.CUMSUM_PARAM]}
154
+ */
101
155
public fun <T > DataFrame<T>.cumSum (skipNA : Boolean = defaultCumSumSkipNA): DataFrame <T > =
102
156
cumSum(skipNA) {
103
157
colsAtAnyDepth { ! it.isColumnGroup() }
@@ -107,26 +161,47 @@ public fun <T> DataFrame<T>.cumSum(skipNA: Boolean = defaultCumSumSkipNA): DataF
107
161
108
162
// region GroupBy
109
163
164
+ /* *
165
+ * {@include [CumSumDocs]}
166
+ * {@set DATA_TYPE [GroupBy]}.
167
+ */
110
168
public fun <T , G , C > GroupBy <T , G >.cumSum (
111
169
skipNA : Boolean = defaultCumSumSkipNA,
112
170
columns : ColumnsSelector <G , C >,
113
171
): GroupBy <T , G > = updateGroups { cumSum(skipNA, columns) }
114
172
173
+ /* *
174
+ * {@include [CumSumDocs]}
175
+ * {@set DATA_TYPE [GroupBy]}.
176
+ */
115
177
public fun <T , G > GroupBy <T , G >.cumSum (vararg columns : String , skipNA : Boolean = defaultCumSumSkipNA): GroupBy <T , G > =
116
178
cumSum(skipNA) { columns.toColumnSet() }
117
179
180
+ /* *
181
+ * {@include [CumSumDocs]}
182
+ * {@set DATA_TYPE [GroupBy]}.
183
+ */
118
184
@AccessApiOverload
119
185
public fun <T , G > GroupBy <T , G >.cumSum (
120
186
vararg columns : AnyColumnReference ,
121
187
skipNA : Boolean = defaultCumSumSkipNA,
122
188
): GroupBy <T , G > = cumSum(skipNA) { columns.toColumnSet() }
123
189
190
+ /* *
191
+ * {@include [CumSumDocs]}
192
+ * {@set DATA_TYPE [GroupBy]}.
193
+ */
124
194
@AccessApiOverload
125
195
public fun <T , G > GroupBy <T , G >.cumSum (
126
196
vararg columns : KProperty <* >,
127
197
skipNA : Boolean = defaultCumSumSkipNA,
128
198
): GroupBy <T , G > = cumSum(skipNA) { columns.toColumnSet() }
129
199
200
+ /* *
201
+ * {@include [CumSumDocs]}
202
+ * {@set DATA_TYPE [GroupBy]}.
203
+ * {@set [CumSumDocs.CUMSUM_PARAM]}
204
+ */
130
205
public fun <T , G > GroupBy <T , G >.cumSum (skipNA : Boolean = defaultCumSumSkipNA): GroupBy <T , G > =
131
206
cumSum(skipNA) {
132
207
colsAtAnyDepth { ! it.isColumnGroup() }
0 commit comments