Skip to content

Commit c01ff02

Browse files
authored
Merge pull request #937 from Kotlin/statistics-fixes
`describe()` fixes
2 parents 1042dcb + 36fd883 commit c01ff02

File tree

25 files changed

+591
-110
lines changed

25 files changed

+591
-110
lines changed

core/api/core.api

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,7 +2691,7 @@ public abstract interface class org/jetbrains/kotlinx/dataframe/api/ColumnDescri
26912691
public abstract fun getPath ()Lorg/jetbrains/kotlinx/dataframe/columns/ColumnPath;
26922692
public abstract fun getStd ()D
26932693
public abstract fun getTop ()Ljava/lang/Object;
2694-
public abstract fun getType ()Lkotlin/reflect/KType;
2694+
public abstract fun getType ()Ljava/lang/String;
26952695
public abstract fun getUnique ()I
26962696
}
26972697

@@ -2719,7 +2719,7 @@ public final class org/jetbrains/kotlinx/dataframe/api/ColumnDescription_Extensi
27192719
public static final fun ColumnDescription_top (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
27202720
public static final fun ColumnDescription_top (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Ljava/lang/Object;
27212721
public static final fun ColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
2722-
public static final fun ColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Lkotlin/reflect/KType;
2722+
public static final fun ColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Ljava/lang/String;
27232723
public static final fun ColumnDescription_unique (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
27242724
public static final fun ColumnDescription_unique (Lorg/jetbrains/kotlinx/dataframe/DataRow;)I
27252725
public static final fun NullableColumnDescription_count (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
@@ -2745,7 +2745,7 @@ public final class org/jetbrains/kotlinx/dataframe/api/ColumnDescription_Extensi
27452745
public static final fun NullableColumnDescription_top (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
27462746
public static final fun NullableColumnDescription_top (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Ljava/lang/Object;
27472747
public static final fun NullableColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
2748-
public static final fun NullableColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Lkotlin/reflect/KType;
2748+
public static final fun NullableColumnDescription_type (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Ljava/lang/String;
27492749
public static final fun NullableColumnDescription_unique (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
27502750
public static final fun NullableColumnDescription_unique (Lorg/jetbrains/kotlinx/dataframe/DataRow;)Ljava/lang/Integer;
27512751
}
@@ -4146,6 +4146,7 @@ public final class org/jetbrains/kotlinx/dataframe/api/DataColumnArithmeticsKt {
41464146
}
41474147

41484148
public final class org/jetbrains/kotlinx/dataframe/api/DataColumnTypeKt {
4149+
public static final fun isBigNumber (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
41494150
public static final fun isColumnGroup (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
41504151
public static final fun isComparable (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
41514152
public static final fun isFrameColumn (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
@@ -4154,6 +4155,7 @@ public final class org/jetbrains/kotlinx/dataframe/api/DataColumnTypeKt {
41544155
public static final fun isPrimitive (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
41554156
public static final fun isSubtypeOf (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lkotlin/reflect/KType;)Z
41564157
public static final fun isValueColumn (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
4158+
public static final fun valuesAreComparable (Lorg/jetbrains/kotlinx/dataframe/DataColumn;)Z
41574159
}
41584160

41594161
public final class org/jetbrains/kotlinx/dataframe/api/DataFrameBuilder {
@@ -10771,6 +10773,7 @@ public final class org/jetbrains/kotlinx/dataframe/math/BasicStats {
1077110773

1077210774
public final class org/jetbrains/kotlinx/dataframe/math/MeanKt {
1077310775
public static final fun bigDecimalMean (Ljava/lang/Iterable;)D
10776+
public static final fun bigIntegerMean (Ljava/lang/Iterable;)D
1077410777
public static final fun byteMean (Ljava/lang/Iterable;)D
1077510778
public static final fun doubleMean (Ljava/lang/Iterable;Z)D
1077610779
public static synthetic fun doubleMean$default (Ljava/lang/Iterable;ZILjava/lang/Object;)D
@@ -10794,6 +10797,8 @@ public final class org/jetbrains/kotlinx/dataframe/math/MedianKt {
1079410797
public final class org/jetbrains/kotlinx/dataframe/math/StdKt {
1079510798
public static final fun bigDecimalStd (Ljava/lang/Iterable;I)D
1079610799
public static synthetic fun bigDecimalStd$default (Ljava/lang/Iterable;IILjava/lang/Object;)D
10800+
public static final fun bigIntegerStd (Ljava/lang/Iterable;I)D
10801+
public static synthetic fun bigIntegerStd$default (Ljava/lang/Iterable;IILjava/lang/Object;)D
1079710802
public static final fun doubleStd (Ljava/lang/Iterable;ZI)D
1079810803
public static synthetic fun doubleStd$default (Ljava/lang/Iterable;ZIILjava/lang/Object;)D
1079910804
public static final fun floatStd (Ljava/lang/Iterable;ZI)D
@@ -10808,6 +10813,7 @@ public final class org/jetbrains/kotlinx/dataframe/math/StdKt {
1080810813

1080910814
public final class org/jetbrains/kotlinx/dataframe/math/StdMeanKt {
1081010815
public static final fun bigDecimalVarianceAndMean (Ljava/lang/Iterable;)Lorg/jetbrains/kotlinx/dataframe/math/BasicStats;
10816+
public static final fun bigIntegerVarianceAndMean (Ljava/lang/Iterable;)Lorg/jetbrains/kotlinx/dataframe/math/BasicStats;
1081110817
public static final fun doubleVarianceAndMean (Ljava/lang/Iterable;Z)Lorg/jetbrains/kotlinx/dataframe/math/BasicStats;
1081210818
public static synthetic fun doubleVarianceAndMean$default (Ljava/lang/Iterable;ZILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/math/BasicStats;
1081310819
public static final fun floatVarianceAndMean (Ljava/lang/Iterable;Z)Lorg/jetbrains/kotlinx/dataframe/math/BasicStats;
@@ -10818,8 +10824,10 @@ public final class org/jetbrains/kotlinx/dataframe/math/StdMeanKt {
1081810824

1081910825
public final class org/jetbrains/kotlinx/dataframe/math/SumKt {
1082010826
public static final fun sum (Ljava/lang/Iterable;)Ljava/math/BigDecimal;
10827+
public static final fun sum (Ljava/lang/Iterable;)Ljava/math/BigInteger;
1082110828
public static final fun sum (Ljava/lang/Iterable;Lkotlin/reflect/KType;)Ljava/lang/Number;
1082210829
public static final fun sum (Lkotlin/sequences/Sequence;)Ljava/math/BigDecimal;
10830+
public static final fun sum (Lkotlin/sequences/Sequence;)Ljava/math/BigInteger;
1082310831
public static final fun sumNullableT (Ljava/lang/Iterable;Lkotlin/reflect/KType;)Ljava/lang/Number;
1082410832
public static final fun sumOf (Ljava/lang/Iterable;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;)Ljava/lang/Number;
1082510833
}

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import org.jetbrains.kotlinx.dataframe.impl.isNothing
1111
import org.jetbrains.kotlinx.dataframe.impl.projectTo
1212
import org.jetbrains.kotlinx.dataframe.type
1313
import org.jetbrains.kotlinx.dataframe.typeClass
14+
import org.jetbrains.kotlinx.dataframe.util.IS_COMPARABLE
15+
import org.jetbrains.kotlinx.dataframe.util.IS_COMPARABLE_REPLACE
16+
import org.jetbrains.kotlinx.dataframe.util.IS_INTER_COMPARABLE_IMPORT
17+
import java.math.BigDecimal
18+
import java.math.BigInteger
1419
import kotlin.contracts.ExperimentalContracts
1520
import kotlin.contracts.contract
1621
import kotlin.reflect.KClass
@@ -44,13 +49,29 @@ public inline fun <reified T> AnyCol.isType(): Boolean = type() == typeOf<T>()
4449

4550
public fun AnyCol.isNumber(): Boolean = isSubtypeOf<Number?>()
4651

52+
public fun AnyCol.isBigNumber(): Boolean = isSubtypeOf<BigInteger?>() || isSubtypeOf<BigDecimal?>()
53+
4754
public fun AnyCol.isList(): Boolean = typeClass == List::class
4855

56+
/** @include [valuesAreComparable] */
57+
@Deprecated(
58+
message = IS_COMPARABLE,
59+
replaceWith = ReplaceWith(IS_COMPARABLE_REPLACE, IS_INTER_COMPARABLE_IMPORT),
60+
level = DeprecationLevel.WARNING,
61+
)
62+
public fun AnyCol.isComparable(): Boolean = valuesAreComparable()
63+
4964
/**
50-
* Returns `true` if [this] column is comparable, i.e. its type is a subtype of [Comparable] and its
51-
* type argument is not [Nothing].
65+
* Returns `true` if [this] column is inter-comparable, i.e.
66+
* its values can be compared with each other and thus ordered.
67+
*
68+
* If true, operations like [`min()`][AnyCol.min], [`max()`][AnyCol.max], [`median()`][AnyCol.median], etc.
69+
* will work.
70+
*
71+
* Technically, this means the values' common type is a subtype of [Comparable] with
72+
* the type argument not being [Nothing].
5273
*/
53-
public fun AnyCol.isComparable(): Boolean =
74+
public fun AnyCol.valuesAreComparable(): Boolean =
5475
isSubtypeOf<Comparable<*>?>() &&
5576
type().projectTo(Comparable::class).arguments[0].let {
5677
it != KTypeProjection.STAR &&

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

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ import org.jetbrains.kotlinx.dataframe.ColumnsSelector
55
import org.jetbrains.kotlinx.dataframe.DataColumn
66
import org.jetbrains.kotlinx.dataframe.DataFrame
77
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
8+
import org.jetbrains.kotlinx.dataframe.impl.nothingType
9+
import org.jetbrains.kotlinx.dataframe.impl.nullableNothingType
810
import org.jetbrains.kotlinx.dataframe.math.cumSum
911
import org.jetbrains.kotlinx.dataframe.math.defaultCumSumSkipNA
1012
import org.jetbrains.kotlinx.dataframe.typeClass
1113
import java.math.BigDecimal
14+
import java.math.BigInteger
1215
import kotlin.reflect.KProperty
1316
import kotlin.reflect.typeOf
1417

@@ -17,20 +20,59 @@ import kotlin.reflect.typeOf
1720
public fun <T : Number?> DataColumn<T>.cumSum(skipNA: Boolean = defaultCumSumSkipNA): DataColumn<T> =
1821
when (type()) {
1922
typeOf<Double>() -> cast<Double>().cumSum(skipNA).cast()
23+
2024
typeOf<Double?>() -> cast<Double?>().cumSum(skipNA).cast()
25+
2126
typeOf<Float>() -> cast<Float>().cumSum(skipNA).cast()
27+
2228
typeOf<Float?>() -> cast<Float?>().cumSum(skipNA).cast()
29+
2330
typeOf<Int>() -> cast<Int>().cumSum().cast()
31+
32+
// TODO cumSum for Byte returns Int but is converted back to T: Byte, Issue #558
33+
typeOf<Byte>() -> cast<Byte>().cumSum().map { it.toByte() }.cast()
34+
35+
// TODO cumSum for Short returns Int but is converted back to T: Short, Issue #558
36+
typeOf<Short>() -> cast<Short>().cumSum().map { it.toShort() }.cast()
37+
2438
typeOf<Int?>() -> cast<Int?>().cumSum(skipNA).cast()
39+
40+
// TODO cumSum for Byte? returns Int? but is converted back to T: Byte?, Issue #558
41+
typeOf<Byte?>() -> cast<Byte?>().cumSum(skipNA).map { it?.toByte() }.cast()
42+
43+
// TODO cumSum for Short? returns Int? but is converted back to T: Short?, Issue #558
44+
typeOf<Short?>() -> cast<Short?>().cumSum(skipNA).map { it?.toShort() }.cast()
45+
2546
typeOf<Long>() -> cast<Long>().cumSum().cast()
47+
2648
typeOf<Long?>() -> cast<Long?>().cumSum(skipNA).cast()
49+
50+
typeOf<BigInteger>() -> cast<BigInteger>().cumSum().cast()
51+
52+
typeOf<BigInteger?>() -> cast<BigInteger?>().cumSum(skipNA).cast()
53+
2754
typeOf<BigDecimal>() -> cast<BigDecimal>().cumSum().cast()
55+
2856
typeOf<BigDecimal?>() -> cast<BigDecimal?>().cumSum(skipNA).cast()
57+
2958
typeOf<Number?>(), typeOf<Number>() -> convertToDouble().cumSum(skipNA).cast()
59+
60+
// Cumsum for empty column or column with just null is itself
61+
nothingType, nullableNothingType -> this
62+
3063
else -> error("Cumsum for type ${type()} is not supported")
3164
}
3265

33-
private val supportedClasses = setOf(Double::class, Float::class, Int::class, Long::class, BigDecimal::class)
66+
private val supportedClasses = setOf(
67+
Double::class,
68+
Float::class,
69+
Int::class,
70+
Byte::class,
71+
Short::class,
72+
Long::class,
73+
BigInteger::class,
74+
BigDecimal::class,
75+
)
3476

3577
// endregion
3678

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
99
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1010
import org.jetbrains.kotlinx.dataframe.impl.api.describeImpl
1111
import kotlin.reflect.KProperty
12-
import kotlin.reflect.KType
1312

1413
// region DataSchema
1514
@DataSchema
1615
public interface ColumnDescription {
1716
public val name: String
1817
public val path: ColumnPath
19-
public val type: KType
18+
public val type: String
2019
public val count: Int
2120
public val unique: Int
2221
public val nulls: Int

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1111
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1212
import org.jetbrains.kotlinx.dataframe.columns.values
1313
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
14-
import org.jetbrains.kotlinx.dataframe.impl.aggregation.comparableColumns
14+
import org.jetbrains.kotlinx.dataframe.impl.aggregation.interComparableColumns
1515
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateAll
1616
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateFor
1717
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateOfDelegated
@@ -52,7 +52,7 @@ public inline fun <reified T : Comparable<T>> AnyRow.rowMaxOf(): T = rowMaxOfOrN
5252

5353
// region DataFrame
5454

55-
public fun <T> DataFrame<T>.max(): DataRow<T> = maxFor(comparableColumns())
55+
public fun <T> DataFrame<T>.max(): DataRow<T> = maxFor(interComparableColumns())
5656

5757
public fun <T, C : Comparable<C>> DataFrame<T>.maxFor(columns: ColumnsForAggregateSelector<T, C?>): DataRow<T> =
5858
Aggregators.max.aggregateFor(this, columns)
@@ -121,7 +121,7 @@ public fun <T, C : Comparable<C>> DataFrame<T>.maxByOrNull(column: KProperty<C?>
121121

122122
// region GroupBy
123123

124-
public fun <T> Grouped<T>.max(): DataFrame<T> = maxFor(comparableColumns())
124+
public fun <T> Grouped<T>.max(): DataFrame<T> = maxFor(interComparableColumns())
125125

126126
public fun <T, C : Comparable<C>> Grouped<T>.maxFor(columns: ColumnsForAggregateSelector<T, C?>): DataFrame<T> =
127127
Aggregators.max.aggregateFor(this, columns)
@@ -218,7 +218,7 @@ public fun <T, C : Comparable<C>> Pivot<T>.maxBy(column: KProperty<C?>): Reduced
218218

219219
// region PivotGroupBy
220220

221-
public fun <T> PivotGroupBy<T>.max(separate: Boolean = false): DataFrame<T> = maxFor(separate, comparableColumns())
221+
public fun <T> PivotGroupBy<T>.max(separate: Boolean = false): DataFrame<T> = maxFor(separate, interComparableColumns())
222222

223223
public fun <T, R : Comparable<R>> PivotGroupBy<T>.maxFor(
224224
separate: Boolean = false,

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1111
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1212
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
1313
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.cast
14-
import org.jetbrains.kotlinx.dataframe.impl.aggregation.comparableColumns
14+
import org.jetbrains.kotlinx.dataframe.impl.aggregation.interComparableColumns
1515
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateAll
1616
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateFor
1717
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateOf
@@ -53,7 +53,7 @@ public inline fun <reified T : Comparable<T>> AnyRow.rowMedianOf(): T =
5353

5454
// region DataFrame
5555

56-
public fun <T> DataFrame<T>.median(): DataRow<T> = medianFor(comparableColumns())
56+
public fun <T> DataFrame<T>.median(): DataRow<T> = medianFor(interComparableColumns())
5757

5858
public fun <T, C : Comparable<C>> DataFrame<T>.medianFor(columns: ColumnsForAggregateSelector<T, C?>): DataRow<T> =
5959
Aggregators.median.aggregateFor(this, columns)
@@ -96,7 +96,7 @@ public inline fun <T, reified R : Comparable<R>> DataFrame<T>.medianOf(
9696

9797
// region GroupBy
9898

99-
public fun <T> Grouped<T>.median(): DataFrame<T> = medianFor(comparableColumns())
99+
public fun <T> Grouped<T>.median(): DataFrame<T> = medianFor(interComparableColumns())
100100

101101
public fun <T, C : Comparable<C>> Grouped<T>.medianFor(columns: ColumnsForAggregateSelector<T, C?>): DataFrame<T> =
102102
Aggregators.median.aggregateFor(this, columns)
@@ -134,7 +134,7 @@ public inline fun <T, reified R : Comparable<R>> Grouped<T>.medianOf(
134134

135135
// region Pivot
136136

137-
public fun <T> Pivot<T>.median(separate: Boolean = false): DataRow<T> = medianFor(separate, comparableColumns())
137+
public fun <T> Pivot<T>.median(separate: Boolean = false): DataRow<T> = medianFor(separate, interComparableColumns())
138138

139139
public fun <T, C : Comparable<C>> Pivot<T>.medianFor(
140140
separate: Boolean = false,
@@ -174,7 +174,7 @@ public inline fun <T, reified R : Comparable<R>> Pivot<T>.medianOf(
174174
// region PivotGroupBy
175175

176176
public fun <T> PivotGroupBy<T>.median(separate: Boolean = false): DataFrame<T> =
177-
medianFor(separate, comparableColumns())
177+
medianFor(separate, interComparableColumns())
178178

179179
public fun <T, C : Comparable<C>> PivotGroupBy<T>.medianFor(
180180
separate: Boolean = false,

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1111
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1212
import org.jetbrains.kotlinx.dataframe.columns.values
1313
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregators
14-
import org.jetbrains.kotlinx.dataframe.impl.aggregation.comparableColumns
14+
import org.jetbrains.kotlinx.dataframe.impl.aggregation.interComparableColumns
1515
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateAll
1616
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateFor
1717
import org.jetbrains.kotlinx.dataframe.impl.aggregation.modes.aggregateOfDelegated
@@ -52,7 +52,7 @@ public inline fun <reified T : Comparable<T>> AnyRow.rowMinOf(): T = rowMinOfOrN
5252

5353
// region DataFrame
5454

55-
public fun <T> DataFrame<T>.min(): DataRow<T> = minFor(comparableColumns())
55+
public fun <T> DataFrame<T>.min(): DataRow<T> = minFor(interComparableColumns())
5656

5757
public fun <T, C : Comparable<C>> DataFrame<T>.minFor(columns: ColumnsForAggregateSelector<T, C?>): DataRow<T> =
5858
Aggregators.min.aggregateFor(this, columns)
@@ -121,7 +121,7 @@ public fun <T, C : Comparable<C>> DataFrame<T>.minByOrNull(column: KProperty<C?>
121121

122122
// region GroupBy
123123

124-
public fun <T> Grouped<T>.min(): DataFrame<T> = minFor(comparableColumns())
124+
public fun <T> Grouped<T>.min(): DataFrame<T> = minFor(interComparableColumns())
125125

126126
public fun <T, C : Comparable<C>> Grouped<T>.minFor(columns: ColumnsForAggregateSelector<T, C?>): DataFrame<T> =
127127
Aggregators.min.aggregateFor(this, columns)
@@ -219,7 +219,7 @@ public fun <T, C : Comparable<C>> Pivot<T>.minBy(column: KProperty<C?>): Reduced
219219

220220
// region PivotGroupBy
221221

222-
public fun <T> PivotGroupBy<T>.min(separate: Boolean = false): DataFrame<T> = minFor(separate, comparableColumns())
222+
public fun <T> PivotGroupBy<T>.min(separate: Boolean = false): DataFrame<T> = minFor(separate, interComparableColumns())
223223

224224
public fun <T, R : Comparable<R>> PivotGroupBy<T>.minFor(
225225
separate: Boolean = false,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public fun DataColumn<Any>.asNumbers(): ValueColumn<Number> {
8383
}
8484

8585
public fun <T> DataColumn<T>.asComparable(): DataColumn<Comparable<T>> {
86-
require(isComparable())
86+
require(valuesAreComparable())
8787
return this as DataColumn<Comparable<T>>
8888
}
8989

0 commit comments

Comments
 (0)