Skip to content

Commit 13150c4

Browse files
committed
adding overloads for DataColumn.sum
1 parent d41aa53 commit 13150c4

File tree

2 files changed

+22
-8
lines changed
  • core/src/main/kotlin/org/jetbrains/kotlinx/dataframe

2 files changed

+22
-8
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/sum.kt

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.jetbrains.kotlinx.dataframe.annotations.Refine
1313
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1414
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1515
import org.jetbrains.kotlinx.dataframe.columns.toColumnsSetOf
16-
import org.jetbrains.kotlinx.dataframe.columns.values
1716
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregator
1817
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
1918
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.cast
@@ -26,18 +25,32 @@ import org.jetbrains.kotlinx.dataframe.impl.aggregation.numberColumns
2625
import org.jetbrains.kotlinx.dataframe.impl.columns.toNumberColumns
2726
import org.jetbrains.kotlinx.dataframe.impl.primitiveNumberTypes
2827
import org.jetbrains.kotlinx.dataframe.impl.zero
29-
import org.jetbrains.kotlinx.dataframe.math.sum
3028
import org.jetbrains.kotlinx.dataframe.math.sumOf
3129
import kotlin.reflect.KProperty
3230
import kotlin.reflect.typeOf
3331

3432
// region DataColumn
3533

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
3836

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)
4154

4255
public inline fun <T, reified R : Number> DataColumn<T>.sumOf(crossinline expression: (T) -> R): R? =
4356
(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
4962
public fun AnyRow.rowSum(): Number =
5063
Aggregators.sum.aggregateOfRow(this) {
5164
colsOf<Number?> { it.isPrimitiveNumber() }
52-
} ?: 0.0
65+
}
5366

5467
public inline fun <reified T : Number> AnyRow.rowSumOf(): Number /*todo*/ {
5568
require(typeOf<T>() in primitiveNumberTypes) {
5669
"Type ${T::class.simpleName} is not a primitive number type. Mean only supports primitive number types."
5770
}
5871
return Aggregators.sum
5972
.aggregateOfRow(this) { colsOf<T>() }
60-
?: 0.0
6173
}
6274
// endregion
6375

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/math/sum.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ internal val sumTypeConversion: CalculateReturnTypeOrNull = { type, _ ->
8585
typeOf<Byte>(),
8686
-> typeOf<Int>()
8787

88+
typeOf<Long>() -> typeOf<Long>()
89+
8890
typeOf<Double>() -> typeOf<Double>()
8991

9092
typeOf<Float>() -> typeOf<Float>()

0 commit comments

Comments
 (0)