Skip to content

Commit 817d570

Browse files
committed
stuck on issue KT-76683
1 parent 3f43197 commit 817d570

File tree

2 files changed

+28
-28
lines changed
  • core/src
    • main/kotlin/org/jetbrains/kotlinx/dataframe/api
    • test/kotlin/org/jetbrains/kotlinx/dataframe/statistics

2 files changed

+28
-28
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,29 @@ public inline fun <T, reified R : Comparable<R & Any>?> DataColumn<T>.medianByOr
6565
crossinline selector: (T) -> R,
6666
): T? = Aggregators.medianCommon<R>(skipNaN).aggregateByOrNull(this, selector)
6767

68+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
69+
@OverloadResolutionByLambdaReturnType
6870
public inline fun <T, reified R : Comparable<R & Any>?> DataColumn<T>.medianOf(
6971
crossinline expression: (T) -> R,
7072
): R & Any = medianOfOrNull(expression).suggestIfNull("medianOf")
7173

74+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
75+
@OverloadResolutionByLambdaReturnType
7276
public inline fun <T, reified R : Comparable<R & Any>?> DataColumn<T>.medianOfOrNull(
7377
crossinline expression: (T) -> R,
7478
): R? = Aggregators.medianComparables<R>().aggregateOf(this, expression)
7579

80+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
81+
@OverloadResolutionByLambdaReturnType
7682
public inline fun <T, reified R> DataColumn<T>.medianOf(
7783
skipNaN: Boolean = skipNaNDefault,
7884
crossinline expression: (T) -> R,
7985
): Double
8086
where R : Comparable<R & Any>?, R : Number? =
8187
medianOfOrNull(skipNaN, expression).suggestIfNull("medianOf")
8288

89+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
90+
@OverloadResolutionByLambdaReturnType
8391
public inline fun <T, reified R> DataColumn<T>.medianOfOrNull(
8492
skipNaN: Boolean = skipNaNDefault,
8593
crossinline expression: (T) -> R,
@@ -146,6 +154,7 @@ public fun <T, C : Comparable<C & Any>?> DataFrame<T>.medianFor(
146154
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.median(columns: ColumnsSelector<T, C>): C & Any =
147155
medianOrNull(columns).suggestIfNull("median")
148156

157+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
149158
@OverloadResolutionByLambdaReturnType
150159
@Suppress("UNCHECKED_CAST")
151160
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.medianOrNull(columns: ColumnsSelector<T, C>): C? =
@@ -159,6 +168,7 @@ public fun <T, C> DataFrame<T>.median(
159168
): Double
160169
where C : Number?, C : Comparable<C & Any>? = medianOrNull(skipNaN, columns).suggestIfNull("median")
161170

171+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
162172
@OverloadResolutionByLambdaReturnType
163173
@Suppress("UNCHECKED_CAST")
164174
public fun <T, C> DataFrame<T>.medianOrNull(
@@ -220,16 +230,19 @@ public fun <T, C> DataFrame<T>.medianOrNull(
220230
): Double?
221231
where C : Comparable<C & Any>?, C : Number? = medianOrNull(skipNaN) { columns.toColumnSet() }
222232

233+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
223234
@OverloadResolutionByLambdaReturnType
224235
public inline fun <T, reified R : Comparable<R & Any>?> DataFrame<T>.medianOf(
225236
crossinline expression: RowExpression<T, R>,
226237
): R & Any = medianOfOrNull(expression).suggestIfNull("medianOf")
227238

239+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
228240
@OverloadResolutionByLambdaReturnType
229241
public inline fun <T, reified R : Comparable<R & Any>?> DataFrame<T>.medianOfOrNull(
230242
crossinline expression: RowExpression<T, R>,
231243
): R? = Aggregators.medianComparables<R>().aggregateOf(this, expression)
232244

245+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
233246
@OverloadResolutionByLambdaReturnType
234247
public inline fun <T, reified R> DataFrame<T>.medianOf(
235248
skipNaN: Boolean = skipNaNDefault,
@@ -238,6 +251,7 @@ public inline fun <T, reified R> DataFrame<T>.medianOf(
238251
where R : Comparable<R & Any>?, R : Number? =
239252
medianOfOrNull(skipNaN, expression).suggestIfNull("medianOf")
240253

254+
// todo check overload resolution https://youtrack.jetbrains.com/issue/KT-76683
241255
@OverloadResolutionByLambdaReturnType
242256
public inline fun <T, reified R> DataFrame<T>.medianOfOrNull(
243257
skipNaN: Boolean = skipNaNDefault,
Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1+
@file:OptIn(ExperimentalTypeInference::class)
2+
13
package org.jetbrains.kotlinx.dataframe.statistics
24

35
import io.kotest.matchers.shouldBe
46
import org.jetbrains.kotlinx.dataframe.api.Infer
7+
import org.jetbrains.kotlinx.dataframe.api.column
58
import org.jetbrains.kotlinx.dataframe.api.columnOf
69
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
710
import org.jetbrains.kotlinx.dataframe.api.groupBy
811
import org.jetbrains.kotlinx.dataframe.api.mapToColumn
912
import org.jetbrains.kotlinx.dataframe.api.median
1013
import org.jetbrains.kotlinx.dataframe.api.medianOf
14+
import org.jetbrains.kotlinx.dataframe.api.medianOrNull
1115
import org.jetbrains.kotlinx.dataframe.api.rowMedianOf
1216
import org.jetbrains.kotlinx.dataframe.statistics.myFun
1317
import org.junit.Test
@@ -34,6 +38,12 @@ class MedianTests {
3438
fun `medianOf test`() {
3539
val d = personsDf.groupBy("city").medianOf("newAge") { "age"<Int>() * 10 }
3640
d["newAge"].type() shouldBe typeOf<Int>()
41+
42+
val e = personsDf.medianOf("newAge") { "age"<Int>().toString() }
43+
44+
val column = personsDf[column<Int>("age")]
45+
column.medianOf { it }
46+
column.medianOf { it.toString() }
3747
}
3848

3949
@Test
@@ -45,12 +55,16 @@ class MedianTests {
4555
)
4656
df.median("a", "b") shouldBe 5.0
4757
df.median { "a"<Int>() and "b"<Int>() } shouldBe 5.0
58+
df.medianOrNull { "a"<Int>() and "b"<Int>() } shouldBe 5.0
4859
df.median("c") shouldBe "b"
4960

5061
df.median { "c"<String>() } shouldBe "b"
62+
df.medianOrNull { "c"<String>() } shouldBe "b"
5163

5264
df.median({ "c"<String>() }) shouldBe "b"
65+
df.medianOrNull({ "c"<String>() }) shouldBe "b"
5366
df.median<_, String> { "c"<String>() } shouldBe "b"
67+
df.medianOrNull<_, String> { "c"<String>() } shouldBe "b"
5468
}
5569

5670
@Test
@@ -63,31 +77,3 @@ class MedianTests {
6377
df.mapToColumn("", Infer.Type) { it.rowMedianOf<Int>() } shouldBe columnOf(2, 3, 7)
6478
}
6579
}
66-
67-
fun <T> List<T>.myFun(): Int where T : Comparable<T> = TODO()
68-
fun <T> List<T>.myFun(): Double where T : Comparable<T>, T : Number = TODO()
69-
70-
fun <T> myFun(list: List<T>): Int where T : Comparable<T> = TODO()
71-
fun <T> myFun(list: List<T>): Double where T : Comparable<T>, T : Number = TODO()
72-
73-
@OptIn(ExperimentalTypeInference::class)
74-
@OverloadResolutionByLambdaReturnType
75-
//@JvmName("jnkjsdnf")
76-
fun <T> myFun(get : () -> T): Int where T : Comparable<T> = TODO()
77-
78-
@JvmName("jnkjsdnf")
79-
@OptIn(ExperimentalTypeInference::class)
80-
@OverloadResolutionByLambdaReturnType
81-
fun <T> myFun(get : () -> T): Double where T : Comparable<T>, T : Number = TODO()
82-
83-
fun main() {
84-
val res1 = listOf(1, 2, 3).myFun()
85-
val res2 = listOf("a", "b", "c").myFun()
86-
87-
val res3 = myFun(listOf(1, 2, 3))
88-
val res4 = myFun(listOf("a", "b", "c"))
89-
90-
val res5 = myFun { 1 }
91-
val res6 = myFun { "" }
92-
val res7 = myFun<String> { "" }
93-
}

0 commit comments

Comments
 (0)