From 0a2e917d8d3a71e4be9d936182c01c9e40c722c2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 18 Jun 2024 18:43:29 +0000 Subject: [PATCH] Update generated sources with recent changes --- .../kotlinx/dataframe/api/replace.kt | 2 + .../jetbrains/kotlinx/dataframe/api/unfold.kt | 29 +++++---- .../kotlinx/dataframe/impl/api/unfold.kt | 23 ++++++++ .../kotlinx/dataframe/api/replace.kt | 59 +++++++++++++++++++ 4 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt diff --git a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt index 97ff67da68..c874473c09 100644 --- a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt +++ b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.annotations.Interpretable import org.jetbrains.kotlinx.dataframe.columns.ColumnReference import org.jetbrains.kotlinx.dataframe.columns.toColumnSet import org.jetbrains.kotlinx.dataframe.get @@ -14,6 +15,7 @@ import org.jetbrains.kotlinx.dataframe.impl.api.insertImpl import org.jetbrains.kotlinx.dataframe.impl.api.removeImpl import kotlin.reflect.KProperty +@Interpretable("Replace0") public fun DataFrame.replace(columns: ColumnsSelector): ReplaceClause = ReplaceClause(this, columns) diff --git a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt index e2b3317949..00831c7859 100644 --- a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt +++ b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt @@ -5,22 +5,25 @@ import org.jetbrains.kotlinx.dataframe.AnyColumnReference import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.columns.ColumnKind +import org.jetbrains.kotlinx.dataframe.annotations.Interpretable +import org.jetbrains.kotlinx.dataframe.annotations.Refine import org.jetbrains.kotlinx.dataframe.columns.toColumnSet -import org.jetbrains.kotlinx.dataframe.impl.api.createDataFrameImpl -import org.jetbrains.kotlinx.dataframe.typeClass +import org.jetbrains.kotlinx.dataframe.impl.api.unfoldImpl import kotlin.reflect.KProperty -public inline fun DataColumn.unfold(): AnyCol = - when (kind()) { - ColumnKind.Group, ColumnKind.Frame -> this - else -> when { - isPrimitive() -> this - else -> values().createDataFrameImpl(typeClass) { - (this as CreateDataFrameDsl).properties() - }.asColumnGroup(name()).asDataColumn() - } - } +public inline fun DataColumn.unfold(vararg props: KProperty<*>, maxDepth: Int = 0): AnyCol = + unfoldImpl(skipPrimitive = true) { properties(roots = props, maxDepth = maxDepth) } + +public inline fun DataColumn.unfold(noinline body: CreateDataFrameDsl.() -> Unit): AnyCol = + unfoldImpl(skipPrimitive = false, body) + +public inline fun ReplaceClause.unfold(vararg props: KProperty<*>, maxDepth: Int = 0): DataFrame = + with { it.unfold(props = props, maxDepth) } + +@Refine +@Interpretable("ReplaceUnfold1") +public inline fun ReplaceClause.unfold(noinline body: CreateDataFrameDsl.() -> Unit): DataFrame = + with { it.unfoldImpl(skipPrimitive = false, body) } public fun DataFrame.unfold(columns: ColumnsSelector): DataFrame = replace(columns).with { it.unfold() } diff --git a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt new file mode 100644 index 0000000000..ea07d66c52 --- /dev/null +++ b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt @@ -0,0 +1,23 @@ +package org.jetbrains.kotlinx.dataframe.impl.api + +import org.jetbrains.kotlinx.dataframe.AnyCol +import org.jetbrains.kotlinx.dataframe.DataColumn +import org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl +import org.jetbrains.kotlinx.dataframe.api.asColumnGroup +import org.jetbrains.kotlinx.dataframe.api.asDataColumn +import org.jetbrains.kotlinx.dataframe.api.isPrimitive +import org.jetbrains.kotlinx.dataframe.columns.ColumnKind +import org.jetbrains.kotlinx.dataframe.typeClass + +@PublishedApi +internal fun DataColumn.unfoldImpl(skipPrimitive: Boolean, body: CreateDataFrameDsl.() -> Unit): AnyCol { + return when (kind()) { + ColumnKind.Group, ColumnKind.Frame -> this + else -> when { + skipPrimitive && isPrimitive() -> this + else -> values().createDataFrameImpl(typeClass) { + body((this as CreateDataFrameDsl)) + }.asColumnGroup(name()).asDataColumn() + } + } +} diff --git a/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt b/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt index 5df15bf103..09c038eabc 100644 --- a/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt +++ b/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt @@ -1,6 +1,8 @@ package org.jetbrains.kotlinx.dataframe.api import io.kotest.matchers.shouldBe +import org.jetbrains.kotlinx.dataframe.DataRow +import org.jetbrains.kotlinx.dataframe.io.readJsonStr import org.junit.Test import kotlin.reflect.typeOf @@ -13,4 +15,61 @@ class ReplaceTests { conv.columnNames() shouldBe listOf("b") conv.columnTypes() shouldBe listOf(typeOf()) } + + @Test + fun `unfold primitive`() { + val a by columnOf("123") + val df = dataFrameOf(a) + + val conv = df.replace { a }.unfold { + "b" from { it } + "c" from { DataRow.readJsonStr("""{"prop": 1}""") } + } + + val b = conv["a"]["b"] + b.type() shouldBe typeOf() + b.values() shouldBe listOf("123") + + val c = conv["a"]["c"]["prop"] + c.type() shouldBe typeOf() + c.values() shouldBe listOf(1) + } + + @Test + fun `unfold properties`() { + val col by columnOf(A("1", 123, B(3.0))) + val df1 = dataFrameOf(col) + val conv = df1.replace { col }.unfold(maxDepth = 2) + + val a = conv["col"]["a"] + a.type() shouldBe typeOf() + a.values() shouldBe listOf("1") + + val b = conv["col"]["b"] + b.type() shouldBe typeOf() + b.values() shouldBe listOf(123) + + val d = conv["col"]["bb"]["d"] + d.type() shouldBe typeOf() + d.values() shouldBe listOf(3.0) + } + + class B(val d: Double) + class A(val a: String, val b: Int, val bb: B) + + @Test + fun `skip primitive`() { + val col1 by columnOf("1", "2") + val col2 by columnOf(B(1.0), B(2.0)) + val df1 = dataFrameOf(col1, col2) + val conv = df1.replace { nameStartsWith("col") }.unfold() + + val a = conv["col1"] + a.type() shouldBe typeOf() + a.values() shouldBe listOf("1", "2") + + val b = conv["col2"]["d"] + b.type() shouldBe typeOf() + b.values() shouldBe listOf(1.0, 2.0) + } }