@@ -13,7 +13,6 @@ import org.jetbrains.kotlinx.dataframe.annotations.Refine
13
13
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
14
14
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
15
15
import org.jetbrains.kotlinx.dataframe.columns.toColumnsSetOf
16
- import org.jetbrains.kotlinx.dataframe.columns.values
17
16
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregator
18
17
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
19
18
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.cast
@@ -26,18 +25,32 @@ import org.jetbrains.kotlinx.dataframe.impl.aggregation.numberColumns
26
25
import org.jetbrains.kotlinx.dataframe.impl.columns.toNumberColumns
27
26
import org.jetbrains.kotlinx.dataframe.impl.primitiveNumberTypes
28
27
import org.jetbrains.kotlinx.dataframe.impl.zero
29
- import org.jetbrains.kotlinx.dataframe.math.sum
30
28
import org.jetbrains.kotlinx.dataframe.math.sumOf
31
29
import kotlin.reflect.KProperty
32
30
import kotlin.reflect.typeOf
33
31
34
32
// region DataColumn
35
33
36
- @JvmName(" sumT " )
37
- public fun < T : Number > DataColumn<T >.sum (): T = values .sum(type())
34
+ @JvmName(" sumInt " )
35
+ public fun DataColumn<Int? >.sum (): Int = Aggregators .sum.aggregate( this ) as Int
38
36
39
- @JvmName(" sumTNullable" )
40
- public fun <T : Number > DataColumn<T?>.sum (): T = values.sum(type())
37
+ @JvmName(" sumShort" )
38
+ public fun DataColumn<Short?>.sum (): Int = Aggregators .sum.aggregate(this ) as Int
39
+
40
+ @JvmName(" sumByte" )
41
+ public fun DataColumn<Byte?>.sum (): Int = Aggregators .sum.aggregate(this ) as Int
42
+
43
+ @JvmName(" sumLong" )
44
+ public fun DataColumn<Long?>.sum (): Long = Aggregators .sum.aggregate(this ) as Long
45
+
46
+ @JvmName(" sumFloat" )
47
+ public fun DataColumn<Float?>.sum (): Float = Aggregators .sum.aggregate(this ) as Float
48
+
49
+ @JvmName(" sumDouble" )
50
+ public fun DataColumn<Double?>.sum (): Double = Aggregators .sum.aggregate(this ) as Double
51
+
52
+ @JvmName(" sumNumber" )
53
+ public fun DataColumn<Number?>.sum (): Number = Aggregators .sum.aggregate(this )
41
54
42
55
public inline fun <T , reified R : Number > DataColumn<T>.sumOf (crossinline expression : (T ) -> R ): R ? =
43
56
(Aggregators .sum as Aggregator <* , * >).cast<R >().of(this , expression)
@@ -49,15 +62,14 @@ public inline fun <T, reified R : Number> DataColumn<T>.sumOf(crossinline expres
49
62
public fun AnyRow.rowSum (): Number =
50
63
Aggregators .sum.aggregateOfRow(this ) {
51
64
colsOf<Number ?> { it.isPrimitiveNumber() }
52
- } ? : 0.0
65
+ }
53
66
54
67
public inline fun <reified T : Number > AnyRow.rowSumOf (): Number /*todo*/ {
55
68
require(typeOf<T >() in primitiveNumberTypes) {
56
69
" Type ${T ::class .simpleName} is not a primitive number type. Mean only supports primitive number types."
57
70
}
58
71
return Aggregators .sum
59
72
.aggregateOfRow(this ) { colsOf<T >() }
60
- ? : 0.0
61
73
}
62
74
// endregion
63
75
0 commit comments