Skip to content

Commit 3629b35

Browse files
committed
Continuing aggregation refactor
1 parent 158597d commit 3629b35

26 files changed

+362
-171
lines changed

core/api/core.api

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5163,55 +5163,71 @@ public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/Aggregations
51635163
public static synthetic fun yieldOneOrMany$default (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/receivers/AggregateInternalDsl;Lorg/jetbrains/kotlinx/dataframe/columns/ColumnPath;Ljava/util/List;Lkotlin/reflect/KType;Ljava/lang/Object;ILjava/lang/Object;)V
51645164
}
51655165

5166-
public abstract interface class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler, org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler, org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler {
5166+
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler, org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler, org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler {
51675167
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator$Companion;
5168-
public abstract fun getName ()Ljava/lang/String;
5168+
public fun <init> (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;)V
5169+
public fun <init> (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler;Ljava/lang/String;)V
5170+
public fun aggregateMultipleColumns (Lkotlin/sequences/Sequence;)Ljava/lang/Object;
5171+
public fun aggregateSingleColumn (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Ljava/lang/Object;
5172+
public fun aggregateSingleSequence (Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)Ljava/lang/Object;
5173+
public fun calculateReturnTypeMultipleColumnsOrNull (Ljava/util/Set;Z)Lkotlin/reflect/KType;
5174+
public fun calculateReturnTypeOrNull (Lkotlin/reflect/KType;Z)Lkotlin/reflect/KType;
5175+
public fun calculateValueType (Ljava/util/Set;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;
5176+
public fun calculateValueType (Lkotlin/sequences/Sequence;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;
5177+
public final fun getAggregationHandler ()Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler;
5178+
public fun getAggregator ()Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;
5179+
public final fun getInputHandler ()Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler;
5180+
public final fun getMultipleColumnsHandler ()Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler;
5181+
public final fun getName ()Ljava/lang/String;
5182+
public fun indexOfAggregationResultSingleSequence (Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)I
5183+
public fun init (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;)V
5184+
public fun preprocessAggregation (Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)Lkotlin/Pair;
5185+
public fun setAggregator (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;)V
5186+
public fun toString ()Ljava/lang/String;
51695187
}
51705188

51715189
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator$Companion {
5172-
public final fun providerOf (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorProvider;
5173-
public final fun providerOf (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorProvider;
5190+
public final fun invoke (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorInputHandler;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorMultipleColumnsHandler;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorProvider;
51745191
}
51755192

5176-
public abstract interface class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorRefHolder {
5193+
public abstract interface class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorAggregationHandler : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorHandler {
51775194
public abstract fun aggregateSingleColumn (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Ljava/lang/Object;
51785195
public abstract fun aggregateSingleSequence (Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)Ljava/lang/Object;
51795196
public abstract fun calculateReturnTypeOrNull (Lkotlin/reflect/KType;Z)Lkotlin/reflect/KType;
5197+
public abstract fun indexOfAggregationResultSingleSequence (Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)I
51805198
}
51815199

51825200
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorKt {
51835201
public static final fun aggregate (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;Lkotlin/sequences/Sequence;Lkotlin/reflect/KType;)Ljava/lang/Object;
51845202
public static final fun aggregate (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)Ljava/lang/Object;
51855203
public static final fun cast (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;
51865204
public static final fun cast2 (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;
5205+
public static final fun indexOfAggregationResult (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;Lkotlin/sequences/Sequence;Lkotlin/reflect/KType;)I
5206+
public static final fun indexOfAggregationResult (Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;Lkotlin/sequences/Sequence;Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/ValueType;)I
51875207
}
51885208

51895209
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch1 {
5210+
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch1$Companion;
51905211
public fun <init> (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
51915212
public final fun getGetAggregator ()Lkotlin/jvm/functions/Function1;
51925213
public final fun getName ()Ljava/lang/String;
51935214
public final fun invoke (Ljava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;
51945215
}
51955216

5196-
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch1$Factory : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Provider {
5197-
public fun <init> (Lkotlin/jvm/functions/Function1;)V
5198-
public synthetic fun create (Ljava/lang/String;)Ljava/lang/Object;
5199-
public fun create (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch1;
5200-
public final fun getGetAggregator ()Lkotlin/jvm/functions/Function1;
5217+
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch1$Companion {
5218+
public final fun Factory (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Provider;
52015219
}
52025220

52035221
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch2 {
5222+
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch2$Companion;
52045223
public fun <init> (Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
52055224
public final fun getGetAggregator ()Lkotlin/jvm/functions/Function2;
52065225
public final fun getName ()Ljava/lang/String;
52075226
public final fun invoke (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregator;
52085227
}
52095228

5210-
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch2$Factory : org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Provider {
5211-
public fun <init> (Lkotlin/jvm/functions/Function2;)V
5212-
public synthetic fun create (Ljava/lang/String;)Ljava/lang/Object;
5213-
public fun create (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch2;
5214-
public final fun getGetAggregator ()Lkotlin/jvm/functions/Function2;
5229+
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/AggregatorOptionSwitch2$Companion {
5230+
public final fun Factory (Lkotlin/jvm/functions/Function2;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Provider;
52155231
}
52165232

52175233
public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/Aggregators {
@@ -6158,6 +6174,10 @@ public final class org/jetbrains/kotlinx/dataframe/keywords/SoftKeywords$Compani
61586174
public final fun getVALUES ()Ljava/util/List;
61596175
}
61606176

6177+
public final class org/jetbrains/kotlinx/dataframe/math/MaxKt {
6178+
public static final fun maxOrNull (Lkotlin/sequences/Sequence;Lkotlin/reflect/KType;)Ljava/lang/Comparable;
6179+
}
6180+
61616181
public final class org/jetbrains/kotlinx/dataframe/math/MinKt {
61626182
public static final fun minOrNull (Lkotlin/sequences/Sequence;Lkotlin/reflect/KType;)Ljava/lang/Comparable;
61636183
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public fun <T, C : Comparable<C>> DataFrame<T>.max(vararg columns: KProperty<C?>
8484
maxOrNull(*columns).suggestIfNull("max")
8585

8686
public fun <T, C : Comparable<C>> DataFrame<T>.maxOrNull(columns: ColumnsSelector<T, C?>): C? =
87-
Aggregators.max<C>().aggregateAll(this, columns) as C?
87+
Aggregators.max<C>().aggregateAll(this, columns)
8888

8989
public fun <T> DataFrame<T>.maxOrNull(vararg columns: String): Comparable<Any?>? =
9090
maxOrNull { columns.toComparableColumns() }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public fun <T, C : Comparable<C>> DataFrame<T>.min(vararg columns: KProperty<C?>
8989
minOrNull(*columns).suggestIfNull("min")
9090

9191
public fun <T, C : Comparable<C>> DataFrame<T>.minOrNull(columns: ColumnsSelector<T, C?>): C? =
92-
Aggregators.min<C>().aggregateAll(this, columns) as C?
92+
Aggregators.min<C>().aggregateAll(this, columns)
9393

9494
public fun <T> DataFrame<T>.minOrNull(vararg columns: String): Comparable<Any?>? =
9595
minOrNull { columns.toComparableColumns() }

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ import kotlin.reflect.typeOf
2626
// region DataColumn
2727

2828
public fun <T : Number> DataColumn<T?>.std(skipNA: Boolean = skipNA_default, ddof: Int = ddof_default): Double =
29-
Aggregators.std(skipNA, ddof).aggregateSingleColumn(this) ?: .0
29+
Aggregators.std(skipNA, ddof).aggregateSingleColumn(this)
3030

3131
public inline fun <T, reified R : Number> DataColumn<T>.stdOf(
3232
skipNA: Boolean = skipNA_default,
3333
ddof: Int = ddof_default,
3434
noinline expression: (T) -> R?,
35-
): Double = Aggregators.std(skipNA, ddof).cast2<R?, Double>().aggregateOf(this, expression) ?: .0
35+
): Double = Aggregators.std(skipNA, ddof).cast2<R, Double>().aggregateOf(this, expression)
3636

3737
// endregion
3838

@@ -85,7 +85,7 @@ public fun <T> DataFrame<T>.std(
8585
skipNA: Boolean = skipNA_default,
8686
ddof: Int = ddof_default,
8787
columns: ColumnsSelector<T, Number?>,
88-
): Double = Aggregators.std(skipNA, ddof).aggregateAll(this, columns) ?: .0
88+
): Double = Aggregators.std(skipNA, ddof).aggregateAll(this, columns)
8989

9090
public fun <T> DataFrame<T>.std(vararg columns: ColumnReference<Number?>): Double = std { columns.toColumnSet() }
9191

@@ -98,7 +98,7 @@ public inline fun <T, reified R : Number> DataFrame<T>.stdOf(
9898
skipNA: Boolean = skipNA_default,
9999
ddof: Int = ddof_default,
100100
crossinline expression: RowExpression<T, R?>,
101-
): Double = Aggregators.std(skipNA, ddof).aggregateOf(this, expression) ?: .0
101+
): Double = Aggregators.std(skipNA, ddof).aggregateOf(this, expression)
102102

103103
// endregion
104104

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/SequenceBestBy.kt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ package org.jetbrains.kotlinx.dataframe.impl
22

33
internal typealias IsBetterThan<C> = C.(other: C) -> Boolean
44

5-
// TODO
6-
internal inline fun <C : Any> pickingNonNull(crossinline isBetterThan: (IsBetterThan<C>)): IsBetterThan<C?> =
7-
{ other: C? -> this != null && other != null && this.isBetterThan(other) }
8-
95
// region indexOfBestBy
106

117
/**
@@ -15,8 +11,8 @@ internal inline fun <C : Any> pickingNonNull(crossinline isBetterThan: (IsBetter
1511
*
1612
* @param isBetterThan A function defining what it means for a value to be "better" than another.
1713
*/
18-
internal inline fun <C : Any> Sequence<C?>.indexOfBestNotNullBy(crossinline isBetterThan: IsBetterThan<C>): Int {
19-
val bestIndex = indexOfBestBy(pickingNonNull(isBetterThan))
14+
internal inline fun <C> Sequence<C>.indexOfBestNotNullBy(isBetterThan: IsBetterThan<C & Any>): Int {
15+
val bestIndex = indexOfBestBy { other -> this != null && other != null && this.isBetterThan(other) }
2016
// catch case where all values are null
2117
return if (bestIndex == 0 && first() == null) -1 else bestIndex
2218
}
@@ -52,19 +48,19 @@ internal inline fun <C : Any?> Sequence<C>.indexOfBestBy(isBetterThan: IsBetterT
5248

5349
// bestNotNullBy
5450

55-
internal inline fun <C : Any> Sequence<C?>.bestNotNullBy(crossinline isBetterThan: IsBetterThan<C>): C =
51+
internal inline fun <C : Any> Sequence<C?>.bestNotNullBy(isBetterThan: IsBetterThan<C>): C =
5652
bestNotNullByOrElse(isBetterThan) { throw NoSuchElementException("Sequence is empty") }
5753

58-
internal inline fun <C : Any> Sequence<C?>.bestNotNullByOrNull(crossinline isBetterThan: IsBetterThan<C>): C? =
54+
internal inline fun <C : Any> Sequence<C?>.bestNotNullByOrNull(isBetterThan: IsBetterThan<C>): C? =
5955
bestNotNullByOrElse(isBetterThan) { null }
6056

6157
@Suppress("UNCHECKED_CAST")
6258
internal inline fun <C : R, R : Any?> Sequence<C?>.bestNotNullByOrElse(
63-
crossinline isBetterThan: IsBetterThan<C & Any>,
59+
isBetterThan: IsBetterThan<C & Any>,
6460
ifEmptyOrAllNull: () -> R,
6561
): R =
6662
bestByOrElse(
67-
isBetterThan = pickingNonNull(isBetterThan),
63+
isBetterThan = { other -> this != null && other != null && this.isBetterThan(other) },
6864
ifEmpty = ifEmptyOrAllNull,
6965
) ?: ifEmptyOrAllNull()
7066

0 commit comments

Comments
 (0)