Skip to content

Commit 0a2e917

Browse files
committed
Update generated sources with recent changes
1 parent 87305e9 commit 0a2e917

File tree

4 files changed

+100
-13
lines changed

4 files changed

+100
-13
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.jetbrains.kotlinx.dataframe.ColumnsContainer
66
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
77
import org.jetbrains.kotlinx.dataframe.DataColumn
88
import org.jetbrains.kotlinx.dataframe.DataFrame
9+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
910
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1011
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1112
import org.jetbrains.kotlinx.dataframe.get
@@ -14,6 +15,7 @@ import org.jetbrains.kotlinx.dataframe.impl.api.insertImpl
1415
import org.jetbrains.kotlinx.dataframe.impl.api.removeImpl
1516
import kotlin.reflect.KProperty
1617

18+
@Interpretable("Replace0")
1719
public fun <T, C> DataFrame<T>.replace(columns: ColumnsSelector<T, C>): ReplaceClause<T, C> =
1820
ReplaceClause(this, columns)
1921

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt

+16-13
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,25 @@ import org.jetbrains.kotlinx.dataframe.AnyColumnReference
55
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
66
import org.jetbrains.kotlinx.dataframe.DataColumn
77
import org.jetbrains.kotlinx.dataframe.DataFrame
8-
import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
8+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
9+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
910
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
10-
import org.jetbrains.kotlinx.dataframe.impl.api.createDataFrameImpl
11-
import org.jetbrains.kotlinx.dataframe.typeClass
11+
import org.jetbrains.kotlinx.dataframe.impl.api.unfoldImpl
1212
import kotlin.reflect.KProperty
1313

14-
public inline fun <reified T> DataColumn<T>.unfold(): AnyCol =
15-
when (kind()) {
16-
ColumnKind.Group, ColumnKind.Frame -> this
17-
else -> when {
18-
isPrimitive() -> this
19-
else -> values().createDataFrameImpl(typeClass) {
20-
(this as CreateDataFrameDsl<T>).properties()
21-
}.asColumnGroup(name()).asDataColumn()
22-
}
23-
}
14+
public inline fun <reified T> DataColumn<T>.unfold(vararg props: KProperty<*>, maxDepth: Int = 0): AnyCol =
15+
unfoldImpl(skipPrimitive = true) { properties(roots = props, maxDepth = maxDepth) }
16+
17+
public inline fun <reified T> DataColumn<T>.unfold(noinline body: CreateDataFrameDsl<T>.() -> Unit): AnyCol =
18+
unfoldImpl(skipPrimitive = false, body)
19+
20+
public inline fun <T, reified C> ReplaceClause<T, C>.unfold(vararg props: KProperty<*>, maxDepth: Int = 0): DataFrame<T> =
21+
with { it.unfold(props = props, maxDepth) }
22+
23+
@Refine
24+
@Interpretable("ReplaceUnfold1")
25+
public inline fun <T, reified C> ReplaceClause<T, C>.unfold(noinline body: CreateDataFrameDsl<C>.() -> Unit): DataFrame<T> =
26+
with { it.unfoldImpl(skipPrimitive = false, body) }
2427

2528
public fun <T> DataFrame<T>.unfold(columns: ColumnsSelector<T, *>): DataFrame<T> = replace(columns).with { it.unfold() }
2629

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.jetbrains.kotlinx.dataframe.impl.api
2+
3+
import org.jetbrains.kotlinx.dataframe.AnyCol
4+
import org.jetbrains.kotlinx.dataframe.DataColumn
5+
import org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl
6+
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
7+
import org.jetbrains.kotlinx.dataframe.api.asDataColumn
8+
import org.jetbrains.kotlinx.dataframe.api.isPrimitive
9+
import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
10+
import org.jetbrains.kotlinx.dataframe.typeClass
11+
12+
@PublishedApi
13+
internal fun <T> DataColumn<T>.unfoldImpl(skipPrimitive: Boolean, body: CreateDataFrameDsl<T>.() -> Unit): AnyCol {
14+
return when (kind()) {
15+
ColumnKind.Group, ColumnKind.Frame -> this
16+
else -> when {
17+
skipPrimitive && isPrimitive() -> this
18+
else -> values().createDataFrameImpl(typeClass) {
19+
body((this as CreateDataFrameDsl<T>))
20+
}.asColumnGroup(name()).asDataColumn()
21+
}
22+
}
23+
}

core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt

+59
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.jetbrains.kotlinx.dataframe.api
22

33
import io.kotest.matchers.shouldBe
4+
import org.jetbrains.kotlinx.dataframe.DataRow
5+
import org.jetbrains.kotlinx.dataframe.io.readJsonStr
46
import org.junit.Test
57
import kotlin.reflect.typeOf
68

@@ -13,4 +15,61 @@ class ReplaceTests {
1315
conv.columnNames() shouldBe listOf("b")
1416
conv.columnTypes() shouldBe listOf(typeOf<Double>())
1517
}
18+
19+
@Test
20+
fun `unfold primitive`() {
21+
val a by columnOf("123")
22+
val df = dataFrameOf(a)
23+
24+
val conv = df.replace { a }.unfold {
25+
"b" from { it }
26+
"c" from { DataRow.readJsonStr("""{"prop": 1}""") }
27+
}
28+
29+
val b = conv["a"]["b"]
30+
b.type() shouldBe typeOf<String>()
31+
b.values() shouldBe listOf("123")
32+
33+
val c = conv["a"]["c"]["prop"]
34+
c.type() shouldBe typeOf<Int>()
35+
c.values() shouldBe listOf(1)
36+
}
37+
38+
@Test
39+
fun `unfold properties`() {
40+
val col by columnOf(A("1", 123, B(3.0)))
41+
val df1 = dataFrameOf(col)
42+
val conv = df1.replace { col }.unfold(maxDepth = 2)
43+
44+
val a = conv["col"]["a"]
45+
a.type() shouldBe typeOf<String>()
46+
a.values() shouldBe listOf("1")
47+
48+
val b = conv["col"]["b"]
49+
b.type() shouldBe typeOf<Int>()
50+
b.values() shouldBe listOf(123)
51+
52+
val d = conv["col"]["bb"]["d"]
53+
d.type() shouldBe typeOf<Double>()
54+
d.values() shouldBe listOf(3.0)
55+
}
56+
57+
class B(val d: Double)
58+
class A(val a: String, val b: Int, val bb: B)
59+
60+
@Test
61+
fun `skip primitive`() {
62+
val col1 by columnOf("1", "2")
63+
val col2 by columnOf(B(1.0), B(2.0))
64+
val df1 = dataFrameOf(col1, col2)
65+
val conv = df1.replace { nameStartsWith("col") }.unfold()
66+
67+
val a = conv["col1"]
68+
a.type() shouldBe typeOf<String>()
69+
a.values() shouldBe listOf("1", "2")
70+
71+
val b = conv["col2"]["d"]
72+
b.type() shouldBe typeOf<Double>()
73+
b.values() shouldBe listOf(1.0, 2.0)
74+
}
1675
}

0 commit comments

Comments
 (0)