@@ -12,11 +12,12 @@ import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
12
12
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
- import org.jetbrains.kotlinx.dataframe.columns.values
16
15
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
17
16
import org.jetbrains.kotlinx.dataframe.impl.aggregation.intraComparableColumns
18
17
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateAll
18
+ import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateByOrNull
19
19
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateFor
20
+ import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateOf
20
21
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateOfDelegated
21
22
import org.jetbrains.kotlinx.dataframe.impl.columns.toComparableColumns
22
23
import org.jetbrains.kotlinx.dataframe.impl.indexOfMin
@@ -27,17 +28,19 @@ import kotlin.reflect.KProperty
27
28
28
29
public fun <T : Comparable <T >> DataColumn<T?>.min (): T = minOrNull().suggestIfNull(" min" )
29
30
30
- public fun <T : Comparable <T >> DataColumn<T?>.minOrNull (): T ? = asSequence().filterNotNull ().minOrNull( )
31
+ public fun <T : Comparable <T >> DataColumn<T?>.minOrNull (): T ? = Aggregators .min< T > ().aggregate( this )
31
32
32
- public fun <T , R : Comparable <R >> DataColumn<T>.minBy (selector : (T ) -> R ): T =
33
+ public inline fun <T , reified R : Comparable <R >> DataColumn<T>.minBy (noinline selector : (T ) -> R ? ): T =
33
34
minByOrNull(selector).suggestIfNull(" minBy" )
34
35
35
- public fun <T , R : Comparable <R >> DataColumn<T>.minByOrNull (selector : (T ) -> R ): T ? = values.minByOrNull(selector)
36
+ public inline fun <T , reified R : Comparable <R >> DataColumn<T>.minByOrNull (noinline selector : (T ) -> R ? ): T ? =
37
+ Aggregators .min<R >().aggregateByOrNull(this , selector)
36
38
37
- public fun <T , R : Comparable <R >> DataColumn<T>.minOf (selector : (T ) -> R ): R =
39
+ public inline fun <T , reified R : Comparable <R >> DataColumn<T>.minOf (crossinline selector : (T ) -> R ? ): R =
38
40
minOfOrNull(selector).suggestIfNull(" minOf" )
39
41
40
- public fun <T , R : Comparable <R >> DataColumn<T>.minOfOrNull (selector : (T ) -> R ): R ? = values.minOfOrNull(selector)
42
+ public inline fun <T , reified R : Comparable <R >> DataColumn<T>.minOfOrNull (crossinline selector : (T ) -> R ? ): R ? =
43
+ Aggregators .min<R >().aggregateOf(this , selector)
41
44
42
45
// endregion
43
46
@@ -47,6 +50,8 @@ public fun AnyRow.rowMinOrNull(): Any? = values().filterIsInstance<Comparable<*>
47
50
48
51
public fun AnyRow.rowMin (): Any = rowMinOrNull().suggestIfNull(" rowMin" )
49
52
53
+ // todo add rowMinBy?
54
+
50
55
public inline fun <reified T : Comparable <T >> AnyRow.rowMinOfOrNull (): T ? = values().filterIsInstance<T >().minOrNull()
51
56
52
57
public inline fun <reified T : Comparable <T >> AnyRow.rowMinOf (): T = rowMinOfOrNull<T >().suggestIfNull(" rowMinOf" )
@@ -58,7 +63,7 @@ public inline fun <reified T : Comparable<T>> AnyRow.rowMinOf(): T = rowMinOfOrN
58
63
public fun <T > DataFrame<T>.min (): DataRow <T > = minFor(intraComparableColumns())
59
64
60
65
public fun <T , C : Comparable <C >> DataFrame<T>.minFor (columns : ColumnsForAggregateSelector <T , C ?>): DataRow <T > =
61
- Aggregators .min.aggregateFor(this , columns)
66
+ Aggregators .min< C >() .aggregateFor(this , columns)
62
67
63
68
public fun <T > DataFrame<T>.minFor (vararg columns : String ): DataRow <T > = minFor { columns.toComparableColumns() }
64
69
@@ -84,7 +89,7 @@ public fun <T, C : Comparable<C>> DataFrame<T>.min(vararg columns: KProperty<C?>
84
89
minOrNull(* columns).suggestIfNull(" min" )
85
90
86
91
public fun <T , C : Comparable <C >> DataFrame<T>.minOrNull (columns : ColumnsSelector <T , C ?>): C ? =
87
- Aggregators .min.aggregateAll(this , columns) as C ?
92
+ Aggregators .min< C >() .aggregateAll(this , columns) as C ?
88
93
89
94
public fun <T > DataFrame<T>.minOrNull (vararg columns : String ): Comparable <Any ?>? =
90
95
minOrNull { columns.toComparableColumns() }
@@ -140,7 +145,7 @@ public fun <T> Grouped<T>.min(): DataFrame<T> = minFor(intraComparableColumns())
140
145
@Refine
141
146
@Interpretable(" GroupByMin0" )
142
147
public fun <T , C : Comparable <C >> Grouped<T>.minFor (columns : ColumnsForAggregateSelector <T , C ?>): DataFrame <T > =
143
- Aggregators .min.aggregateFor(this , columns)
148
+ Aggregators .min< C >() .aggregateFor(this , columns)
144
149
145
150
public fun <T > Grouped<T>.minFor (vararg columns : String ): DataFrame <T > = minFor { columns.toComparableColumns() }
146
151
@@ -155,7 +160,7 @@ public fun <T, C : Comparable<C>> Grouped<T>.minFor(vararg columns: KProperty<C?
155
160
@Refine
156
161
@Interpretable(" GroupByMin0" )
157
162
public fun <T , C : Comparable <C >> Grouped<T>.min (name : String? = null, columns : ColumnsSelector <T , C ?>): DataFrame <T > =
158
- Aggregators .min.aggregateAll(this , name, columns)
163
+ Aggregators .min< C >() .aggregateAll(this , name, columns)
159
164
160
165
public fun <T > Grouped<T>.min (vararg columns : String , name : String? = null): DataFrame <T > =
161
166
min(name) { columns.toComparableColumns() }
@@ -175,7 +180,7 @@ public fun <T, C : Comparable<C>> Grouped<T>.min(vararg columns: KProperty<C?>,
175
180
public fun <T , C : Comparable <C >> Grouped<T>.minOf (
176
181
name : String? = null,
177
182
expression : RowExpression <T , C >,
178
- ): DataFrame <T > = Aggregators .min.aggregateOfDelegated(this , name) { minOfOrNull(expression) }
183
+ ): DataFrame <T > = Aggregators .min< C >() .aggregateOfDelegated(this , name) { minOfOrNull(expression) }
179
184
180
185
@Interpretable(" GroupByReduceExpression" )
181
186
public fun <T , G , R : Comparable <R >> GroupBy <T , G >.minBy (rowExpression : RowExpression <G , R ?>): ReducedGroupBy <T , G > =
@@ -257,7 +262,7 @@ public fun <T> PivotGroupBy<T>.min(separate: Boolean = false): DataFrame<T> = mi
257
262
public fun <T , R : Comparable <R >> PivotGroupBy<T>.minFor (
258
263
separate : Boolean = false,
259
264
columns : ColumnsForAggregateSelector <T , R ?>,
260
- ): DataFrame <T > = Aggregators .min.aggregateFor(this , separate, columns)
265
+ ): DataFrame <T > = Aggregators .min< R >() .aggregateFor(this , separate, columns)
261
266
262
267
public fun <T > PivotGroupBy<T>.minFor (vararg columns : String , separate : Boolean = false): DataFrame <T > =
263
268
minFor(separate) { columns.toComparableColumns() }
@@ -275,7 +280,7 @@ public fun <T, R : Comparable<R>> PivotGroupBy<T>.minFor(
275
280
): DataFrame <T > = minFor(separate) { columns.toColumnSet() }
276
281
277
282
public fun <T , R : Comparable <R >> PivotGroupBy<T>.min (columns : ColumnsSelector <T , R ?>): DataFrame <T > =
278
- Aggregators .min.aggregateAll(this , columns)
283
+ Aggregators .min< R >() .aggregateAll(this , columns)
279
284
280
285
public fun <T > PivotGroupBy<T>.min (vararg columns : String ): DataFrame <T > = min { columns.toComparableColumns() }
281
286
0 commit comments