From 5492921788b1121166fdc0a3df47093912c7df04 Mon Sep 17 00:00:00 2001 From: Nikita Klimenko Date: Mon, 17 Jun 2024 14:03:11 +0300 Subject: [PATCH 1/5] Add unfold overloads with customization parameters --- .../jetbrains/kotlinx/dataframe/api/unfold.kt | 25 ++++---- .../kotlinx/dataframe/impl/api/unfold.kt | 23 ++++++++ .../kotlinx/dataframe/api/replace.kt | 59 +++++++++++++++++++ 3 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt index e2b3317949..59f52b6525 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt @@ -5,22 +5,21 @@ 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.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) } + +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/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/unfold.kt new file mode 100644 index 0000000000..ea07d66c52 --- /dev/null +++ b/core/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/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt index 5df15bf103..09c038eabc 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt +++ b/core/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) + } } From abe71574dd5f296bfa118f107852291e03be660a Mon Sep 17 00:00:00 2001 From: Nikita Klimenko Date: Mon, 17 Jun 2024 15:32:42 +0300 Subject: [PATCH 2/5] [Compiler plugin] Interpreter catches exception thrown inside to report them as compilation errors. Add special constructor for errors that shouldn't be caught --- .../src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt index 15181f1ace..d852f163cf 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt @@ -89,7 +89,7 @@ fun KotlinTypeFacade.interpret( val actualArgsMap = refinedArguments.associateBy { it.name.identifier }.toSortedMap() val conflictingKeys = additionalArguments.keys intersect actualArgsMap.keys if (conflictingKeys.isNotEmpty()) { - error("Conflicting keys: $conflictingKeys") + interpretationFrameworkError("Conflicting keys: $conflictingKeys") } val expectedArgsMap = processor.expectedArguments .filterNot { it.name.startsWith("typeArg") } @@ -269,6 +269,10 @@ fun KotlinTypeFacade.interpret( } } +fun interpretationFrameworkError(message: String): Nothing = throw InterpretationFrameworkError(message) + +class InterpretationFrameworkError(message: String) : Error(message) + interface InterpretationErrorReporter { val errorReported: Boolean fun reportInterpretationError(call: FirFunctionCall, message: String) From 2cda967db507a37f9835dddf3ae4fb7ad1ca175e Mon Sep 17 00:00:00 2001 From: Nikita Klimenko Date: Mon, 17 Jun 2024 15:43:19 +0300 Subject: [PATCH 3/5] [Compiler plugin] Rework toDataFrame implementation Interpreters need an ability to pass arguments down to DSL, so introduce new "dsl" factory function --- .../plugin/analyzeRefinedCallShape.kt | 52 ++----------------- .../plugin/impl/ExpectedArgumentDelegates.kt | 10 +++- .../kotlinx/dataframe/plugin/impl/api/add.kt | 5 +- .../dataframe/plugin/impl/api/toDataFrame.kt | 47 ++++++++++++++--- .../kotlinx/dataframe/plugin/interpret.kt | 5 +- .../dataframe/plugin/loadInterpreter.kt | 6 +++ 6 files changed, 63 insertions(+), 62 deletions(-) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/analyzeRefinedCallShape.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/analyzeRefinedCallShape.kt index 69043a7fc3..6b720b8ae6 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/analyzeRefinedCallShape.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/analyzeRefinedCallShape.kt @@ -5,25 +5,19 @@ package org.jetbrains.kotlinx.dataframe.plugin -import org.jetbrains.kotlinx.dataframe.plugin.extensions.KotlinTypeFacade -import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter -import org.jetbrains.kotlinx.dataframe.plugin.impl.api.TraverseConfiguration -import org.jetbrains.kotlinx.dataframe.plugin.impl.api.aggregate -import org.jetbrains.kotlinx.dataframe.plugin.impl.api.toDataFrame -import org.jetbrains.kotlinx.dataframe.plugin.utils.Names.DF_CLASS_ID -import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall -import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression -import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeTypeProjection import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.resolvedType import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlinx.dataframe.plugin.impl.api.CreateDataFrameDslImplApproximation +import org.jetbrains.kotlinx.dataframe.plugin.extensions.KotlinTypeFacade +import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.aggregate +import org.jetbrains.kotlinx.dataframe.plugin.utils.Names.DF_CLASS_ID fun KotlinTypeFacade.analyzeRefinedCallShape(call: FirFunctionCall, reporter: InterpretationErrorReporter): CallResult? { val callReturnType = call.resolvedType @@ -38,44 +32,6 @@ fun KotlinTypeFacade.analyzeRefinedCallShape(call: FirFunctionCall, reporter: In val newSchema: PluginDataFrameSchema = call.interpreterName(session)?.let { name -> when (name) { - "toDataFrameDsl" -> { - val list = call.argumentList as FirResolvedArgumentList - val lambda = (list.arguments.singleOrNull() as? FirAnonymousFunctionExpression)?.anonymousFunction - val statements = lambda?.body?.statements - if (statements != null) { - val receiver = CreateDataFrameDslImplApproximation() - statements.filterIsInstance().forEach { - val schemaProcessor = it.loadInterpreter() ?: return@forEach - interpret( - it, - schemaProcessor, - mapOf("dsl" to Interpreter.Success(receiver), "call" to Interpreter.Success(call)), - reporter - ) - } - PluginDataFrameSchema(receiver.columns) - } else { - PluginDataFrameSchema(emptyList()) - } - } - "toDataFrame" -> { - val list = call.argumentList as FirResolvedArgumentList - val argument = list.mapping.entries.firstOrNull { it.value.name == Name.identifier("maxDepth") }?.key - val maxDepth = when (argument) { - null -> 0 - is FirLiteralExpression -> (argument.value as Number).toInt() - else -> null - } - if (maxDepth != null) { - toDataFrame(maxDepth, call, TraverseConfiguration()) - } else { - PluginDataFrameSchema(emptyList()) - } - } - "toDataFrameDefault" -> { - val maxDepth = 0 - toDataFrame(maxDepth, call, TraverseConfiguration()) - } "Aggregate" -> { val groupByCall = call.explicitReceiver as? FirFunctionCall val interpreter = groupByCall?.loadInterpreter(session) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/ExpectedArgumentDelegates.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/ExpectedArgumentDelegates.kt index 4ced6960eb..483f3a4b7f 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/ExpectedArgumentDelegates.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/ExpectedArgumentDelegates.kt @@ -70,5 +70,11 @@ fun AbstractInterpreter.kproperty( internal fun AbstractInterpreter.string( name: ArgumentName? = null -): ExpectedArgumentProvider = arg(name, lens = Interpreter.Value) +): ExpectedArgumentProvider = + arg(name, lens = Interpreter.Value) + +internal fun AbstractInterpreter.dsl( + name: ArgumentName? = null +): ExpectedArgumentProvider<(Any, Map>) -> Unit> = + arg(name, lens = Interpreter.Dsl, defaultValue = Present(value = {_, _ -> })) + diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/add.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/add.kt index ca3637f622..4de0c53aee 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/add.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/add.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleCol import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleDataColumn import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame +import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl import org.jetbrains.kotlinx.dataframe.plugin.impl.string import org.jetbrains.kotlinx.dataframe.plugin.impl.type @@ -48,11 +49,11 @@ class AddDslApproximation(val columns: MutableList) class AddWithDsl : AbstractSchemaModificationInterpreter() { val Arguments.receiver: PluginDataFrameSchema by dataFrame() - val Arguments.body: (Any) -> Unit by arg(lens = Interpreter.Dsl) + val Arguments.body by dsl() override fun Arguments.interpret(): PluginDataFrameSchema { val addDsl = AddDslApproximation(receiver.columns().toMutableList()) - body(addDsl) + body(addDsl, emptyMap()) return PluginDataFrameSchema(addDsl.columns) } } diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt index 85c5001d41..29d76d5337 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt @@ -8,7 +8,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess -import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirGetClassCall import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack @@ -46,6 +46,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlinx.dataframe.plugin.extensions.KotlinTypeFacade import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractInterpreter +import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema @@ -54,26 +55,56 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleCol import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleDataColumn import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleFrameColumn +import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl import org.jetbrains.kotlinx.dataframe.plugin.impl.simpleColumnOf import org.jetbrains.kotlinx.dataframe.plugin.impl.type import java.util.* +class ToDataFrameDsl : AbstractSchemaModificationInterpreter() { + val Arguments.receiver: FirExpression? by arg(lens = Interpreter.Id) + val Arguments.body by dsl() + override fun Arguments.interpret(): PluginDataFrameSchema { + val dsl = CreateDataFrameDslImplApproximation() + body(dsl, mapOf("explicitReceiver" to Interpreter.Success(receiver))) + return PluginDataFrameSchema(dsl.columns) + } +} + +class ToDataFrame : AbstractSchemaModificationInterpreter() { + val Arguments.receiver: FirExpression? by arg(lens = Interpreter.Id) + val Arguments.maxDepth: Number by arg(defaultValue = Present(DEFAULT_MAX_DEPTH)) + + override fun Arguments.interpret(): PluginDataFrameSchema { + return toDataFrame(maxDepth.toInt(), receiver, TraverseConfiguration()) + } +} + +class ToDataFrameDefault : AbstractSchemaModificationInterpreter() { + val Arguments.receiver: FirExpression? by arg(lens = Interpreter.Id) + + override fun Arguments.interpret(): PluginDataFrameSchema { + return toDataFrame(DEFAULT_MAX_DEPTH, receiver, TraverseConfiguration()) + } +} + +private const val DEFAULT_MAX_DEPTH = 0 + class Properties0 : AbstractInterpreter() { val Arguments.dsl: CreateDataFrameDslImplApproximation by arg() - val Arguments.call: FirFunctionCall by arg() + val Arguments.explicitReceiver: FirExpression? by arg() val Arguments.maxDepth: Int by arg() - val Arguments.body: (Any) -> Unit by arg(lens = Interpreter.Dsl, defaultValue = Present(value = {})) + val Arguments.body by dsl() override fun Arguments.interpret() { dsl.configuration.maxDepth = maxDepth - body(dsl.configuration.traverseConfiguration) - val schema = toDataFrame(dsl.configuration.maxDepth, call, dsl.configuration.traverseConfiguration) + body(dsl.configuration.traverseConfiguration, emptyMap()) + val schema = toDataFrame(dsl.configuration.maxDepth, explicitReceiver, dsl.configuration.traverseConfiguration) dsl.columns.addAll(schema.columns()) } } class CreateDataFrameConfiguration { - var maxDepth = 0 + var maxDepth = DEFAULT_MAX_DEPTH var traverseConfiguration: TraverseConfiguration = TraverseConfiguration() } @@ -123,7 +154,7 @@ class Exclude1 : AbstractInterpreter() { @OptIn(SymbolInternals::class) internal fun KotlinTypeFacade.toDataFrame( maxDepth: Int, - call: FirFunctionCall, + explicitReceiver: FirExpression?, traverseConfiguration: TraverseConfiguration ): PluginDataFrameSchema { fun ConeKotlinType.isValueType() = @@ -238,7 +269,7 @@ internal fun KotlinTypeFacade.toDataFrame( } } - val receiver = call.explicitReceiver ?: return PluginDataFrameSchema(emptyList()) + val receiver = explicitReceiver ?: return PluginDataFrameSchema(emptyList()) val arg = receiver.resolvedType.typeArguments.firstOrNull() ?: return PluginDataFrameSchema(emptyList()) return when { arg.isStarProjection -> PluginDataFrameSchema(emptyList()) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt index d852f163cf..f57d9c0563 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt @@ -204,7 +204,8 @@ fun KotlinTypeFacade.interpret( } is Interpreter.Dsl -> { - { receiver: Any -> + { receiver: Any, dslArguments: Map> -> + val map = mapOf("dsl" to Interpreter.Success(receiver)) + dslArguments (it.expression as FirAnonymousFunctionExpression) .anonymousFunction.body!! .statements.filterIsInstance() @@ -213,7 +214,7 @@ fun KotlinTypeFacade.interpret( interpret( call, schemaProcessor, - mapOf("dsl" to Interpreter.Success(receiver)), + map, reporter ) } diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt index 9ab8ed1f1e..0ee30b19ce 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt @@ -67,6 +67,9 @@ import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrame +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDefault +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDsl import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameFrom internal fun FirFunctionCall.loadInterpreter(session: FirSession): Interpreter<*>? { @@ -161,6 +164,9 @@ internal inline fun String.load(): T { "ReadDelimStr" -> ReadDelimStr() "GroupByToDataFrame" -> GroupByToDataFrame() "ToDataFrameFrom0" -> ToDataFrameFrom() + "toDataFrameDsl" -> ToDataFrameDsl() + "toDataFrame" -> ToDataFrame() + "toDataFrameDefault" -> ToDataFrameDefault() else -> error("$this") } as T } From 18beb71a60d95de4e74ee0467003988fcc9fa561 Mon Sep 17 00:00:00 2001 From: Nikita Klimenko Date: Tue, 18 Jun 2024 21:20:56 +0300 Subject: [PATCH 4/5] [Compiler plugin] exception should not be caught to be visible in tests failure messages --- .../src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt index f57d9c0563..46e4954d0a 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt @@ -95,7 +95,8 @@ fun KotlinTypeFacade.interpret( .filterNot { it.name.startsWith("typeArg") } .associateBy { it.name }.toSortedMap().minus(additionalArguments.keys) - if (expectedArgsMap.keys - defaultArguments != actualArgsMap.keys - defaultArguments) { + val unexpectedArguments = expectedArgsMap.keys - defaultArguments != actualArgsMap.keys - defaultArguments + if (unexpectedArguments) { val message = buildString { appendLine("ERROR: Different set of arguments") appendLine("Implementation class: $processor") @@ -105,8 +106,7 @@ fun KotlinTypeFacade.interpret( appendLine("add arguments to an interpeter:") appendLine(diff.map { actualArgsMap[it] }) } - reporter.reportInterpretationError(functionCall, message) - return null + interpretationFrameworkError(message) } val arguments = mutableMapOf>() From 382d140192f00eb9be1115616e1b467335a346db Mon Sep 17 00:00:00 2001 From: Nikita Klimenko Date: Tue, 18 Jun 2024 21:30:29 +0300 Subject: [PATCH 5/5] [Compiler plugin] support "replace unfold with DSL" --- .../kotlinx/dataframe/api/replace.kt | 2 + .../jetbrains/kotlinx/dataframe/api/unfold.kt | 4 + .../dataframe/plugin/impl/api/rename.kt | 4 +- .../dataframe/plugin/impl/api/toDataFrame.kt | 31 +- .../dataframe/plugin/impl/api/unfold.kt | 38 + .../impl/data/ReplaceClauseApproximation.kt | 5 + .../dataframe/plugin/loadInterpreter.kt | 4 + .../box/unfold_replace_dsl.fir.ir.txt | 737 ++++++++++++++++++ .../testData/box/unfold_replace_dsl.fir.txt | 163 ++++ .../testData/box/unfold_replace_dsl.kt | 23 + ...DataFrameBlackBoxCodegenTestGenerated.java | 6 + 11 files changed, 1009 insertions(+), 8 deletions(-) create mode 100644 plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/unfold.kt create mode 100644 plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/data/ReplaceClauseApproximation.kt create mode 100644 plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.ir.txt create mode 100644 plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.txt create mode 100644 plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.kt diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt index 97ff67da68..c874473c09 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt +++ b/core/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/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt index 59f52b6525..00831c7859 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/unfold.kt @@ -5,6 +5,8 @@ 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.annotations.Interpretable +import org.jetbrains.kotlinx.dataframe.annotations.Refine import org.jetbrains.kotlinx.dataframe.columns.toColumnSet import org.jetbrains.kotlinx.dataframe.impl.api.unfoldImpl import kotlin.reflect.KProperty @@ -18,6 +20,8 @@ public inline fun DataColumn.unfold(noinline body: CreateDataFram 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) } diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/rename.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/rename.kt index 4c55f8e3ba..f2dae359d0 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/rename.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/rename.kt @@ -29,11 +29,11 @@ class RenameInto : AbstractSchemaModificationInterpreter() { override fun Arguments.interpret(): PluginDataFrameSchema { require(receiver.columns.size == newNames.size) var i = 0 - return receiver.schema.map(receiver.columns.mapTo(mutableSetOf()) { it.path.path }, nextName = { newNames[i].also { i += 1 } }) + return receiver.schema.rename(receiver.columns.mapTo(mutableSetOf()) { it.path.path }, nextName = { newNames[i].also { i += 1 } }) } } -internal fun PluginDataFrameSchema.map(selected: ColumnsSet, nextName: () -> String): PluginDataFrameSchema { +internal fun PluginDataFrameSchema.rename(selected: ColumnsSet, nextName: () -> String): PluginDataFrameSchema { return PluginDataFrameSchema( f(columns(), nextName, selected, emptyList()) ) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt index 29d76d5337..ed9cde26ee 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/toDataFrame.kt @@ -65,7 +65,15 @@ class ToDataFrameDsl : AbstractSchemaModificationInterpreter() { val Arguments.body by dsl() override fun Arguments.interpret(): PluginDataFrameSchema { val dsl = CreateDataFrameDslImplApproximation() - body(dsl, mapOf("explicitReceiver" to Interpreter.Success(receiver))) + val receiver = receiver ?: return PluginDataFrameSchema(emptyList()) + val arg = receiver.resolvedType.typeArguments.firstOrNull() ?: return PluginDataFrameSchema(emptyList()) + when { + arg.isStarProjection -> PluginDataFrameSchema(emptyList()) + else -> { + val classLike = arg.type as? ConeClassLikeType ?: return PluginDataFrameSchema(emptyList()) + body(dsl, mapOf(Properties0.classExtraArgument to Interpreter.Success(classLike))) + } + } return PluginDataFrameSchema(dsl.columns) } } @@ -90,15 +98,19 @@ class ToDataFrameDefault : AbstractSchemaModificationInterpreter() { private const val DEFAULT_MAX_DEPTH = 0 class Properties0 : AbstractInterpreter() { + companion object { + const val classExtraArgument = "explicitReceiver" + } + val Arguments.dsl: CreateDataFrameDslImplApproximation by arg() - val Arguments.explicitReceiver: FirExpression? by arg() + val Arguments.coneKotlinType: ConeKotlinType by arg(name = name(classExtraArgument)) val Arguments.maxDepth: Int by arg() val Arguments.body by dsl() override fun Arguments.interpret() { dsl.configuration.maxDepth = maxDepth body(dsl.configuration.traverseConfiguration, emptyMap()) - val schema = toDataFrame(dsl.configuration.maxDepth, explicitReceiver, dsl.configuration.traverseConfiguration) + val schema = toDataFrame(dsl.configuration.maxDepth, coneKotlinType, dsl.configuration.traverseConfiguration) dsl.columns.addAll(schema.columns()) } } @@ -154,7 +166,7 @@ class Exclude1 : AbstractInterpreter() { @OptIn(SymbolInternals::class) internal fun KotlinTypeFacade.toDataFrame( maxDepth: Int, - explicitReceiver: FirExpression?, + classLikeType: ConeKotlinType, traverseConfiguration: TraverseConfiguration ): PluginDataFrameSchema { fun ConeKotlinType.isValueType() = @@ -269,14 +281,21 @@ internal fun KotlinTypeFacade.toDataFrame( } } + return PluginDataFrameSchema(convert(classLikeType, 0)) +} + +internal fun KotlinTypeFacade.toDataFrame( + maxDepth: Int, + explicitReceiver: FirExpression?, + traverseConfiguration: TraverseConfiguration +): PluginDataFrameSchema { val receiver = explicitReceiver ?: return PluginDataFrameSchema(emptyList()) val arg = receiver.resolvedType.typeArguments.firstOrNull() ?: return PluginDataFrameSchema(emptyList()) return when { arg.isStarProjection -> PluginDataFrameSchema(emptyList()) else -> { val classLike = arg.type as? ConeClassLikeType ?: return PluginDataFrameSchema(emptyList()) - val columns = convert(classLike, 0) - PluginDataFrameSchema(columns) + return toDataFrame(maxDepth, classLike, traverseConfiguration) } } } diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/unfold.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/unfold.kt new file mode 100644 index 0000000000..997a0511c4 --- /dev/null +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/unfold.kt @@ -0,0 +1,38 @@ +package org.jetbrains.kotlinx.dataframe.plugin.impl.api + +import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractInterpreter +import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter +import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments +import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter +import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema +import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup +import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleFrameColumn +import org.jetbrains.kotlinx.dataframe.plugin.impl.data.ColumnWithPathApproximation +import org.jetbrains.kotlinx.dataframe.plugin.impl.data.ReplaceClauseApproximation +import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame +import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl + +class ReplaceUnfold1 : AbstractSchemaModificationInterpreter() { + val Arguments.receiver: ReplaceClauseApproximation by arg() + val Arguments.body by dsl() + val Arguments.typeArg1: TypeApproximation by arg() + + override fun Arguments.interpret(): PluginDataFrameSchema { + val configuration = CreateDataFrameDslImplApproximation() + body(configuration, mapOf(Properties0.classExtraArgument to Interpreter.Success(typeArg1.type))) + + return receiver.df.map(receiver.columns.map { it.path.path }.toSet()) { a, column -> + if (column is SimpleFrameColumn || column is SimpleColumnGroup) return@map column + SimpleColumnGroup(column.name, configuration.columns) + } + } +} + +class Replace0 : AbstractInterpreter() { + val Arguments.receiver: PluginDataFrameSchema by dataFrame() + val Arguments.columns: List by arg() + + override fun Arguments.interpret(): ReplaceClauseApproximation { + return ReplaceClauseApproximation(receiver, columns) + } +} diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/data/ReplaceClauseApproximation.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/data/ReplaceClauseApproximation.kt new file mode 100644 index 0000000000..1cac3da031 --- /dev/null +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/data/ReplaceClauseApproximation.kt @@ -0,0 +1,5 @@ +package org.jetbrains.kotlinx.dataframe.plugin.impl.data + +import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema + +class ReplaceClauseApproximation(val df: PluginDataFrameSchema, val columns: List) diff --git a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt index 0ee30b19ce..a8b1c9c6bd 100644 --- a/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt +++ b/plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt @@ -67,6 +67,8 @@ import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Replace0 +import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ReplaceUnfold1 import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrame import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDefault import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDsl @@ -167,6 +169,8 @@ internal inline fun String.load(): T { "toDataFrameDsl" -> ToDataFrameDsl() "toDataFrame" -> ToDataFrame() "toDataFrameDefault" -> ToDataFrameDefault() + "Replace0" -> Replace0() + "ReplaceUnfold1" -> ReplaceUnfold1() else -> error("$this") } as T } diff --git a/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.ir.txt b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.ir.txt new file mode 100644 index 0000000000..e01423a957 --- /dev/null +++ b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.ir.txt @@ -0,0 +1,737 @@ +FILE fqName: fileName:/unfold_replace_dsl.kt + CLASS CLASS name:Declaration modality:FINAL visibility:public [data] superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Declaration + PROPERTY name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final] + EXPRESSION_BODY + GET_VAR 'name: kotlin.String declared in .Declaration.' type=kotlin.String origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Declaration) returnType:kotlin.String + correspondingProperty: PROPERTY name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .Declaration' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.' type=.Declaration origin=null + PROPERTY name:functions visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final] + EXPRESSION_BODY + GET_VAR 'functions: .Function declared in .Declaration.' type=.Function origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Declaration) returnType:.Function + correspondingProperty: PROPERTY name:functions visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): .Function declared in .Declaration' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.' type=.Declaration origin=null + CONSTRUCTOR visibility:public <> (name:kotlin.String, functions:.Function) returnType:.Declaration [primary] + VALUE_PARAMETER name:name index:0 type:kotlin.String + VALUE_PARAMETER name:functions index:1 type:.Function + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Declaration modality:FINAL visibility:public [data] superTypes:[kotlin.Any]' + FUN GENERATED_DATA_CLASS_MEMBER name:component1 visibility:public modality:FINAL <> ($this:.Declaration) returnType:kotlin.String [operator] + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.String declared in .Declaration' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.component1' type=.Declaration origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:component2 visibility:public modality:FINAL <> ($this:.Declaration) returnType:.Function [operator] + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun component2 (): .Function declared in .Declaration' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.component2' type=.Declaration origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:copy visibility:public modality:FINAL <> ($this:.Declaration, name:kotlin.String, functions:.Function) returnType:.Declaration + $this: VALUE_PARAMETER name: type:.Declaration + VALUE_PARAMETER name:name index:0 type:kotlin.String + EXPRESSION_BODY + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.copy' type=.Declaration origin=null + VALUE_PARAMETER name:functions index:1 type:.Function + EXPRESSION_BODY + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.copy' type=.Declaration origin=null + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun copy (name: kotlin.String, functions: .Function): .Declaration declared in .Declaration' + CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, functions: .Function) declared in .Declaration' type=.Declaration origin=null + name: GET_VAR 'name: kotlin.String declared in .Declaration.copy' type=kotlin.String origin=null + functions: GET_VAR 'functions: .Function declared in .Declaration.copy' type=.Function origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:.Declaration, other:kotlin.Any?) returnType:kotlin.Boolean [operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Declaration + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + BLOCK_BODY + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ + arg0: GET_VAR ': .Declaration declared in .Declaration.equals' type=.Declaration origin=null + arg1: GET_VAR 'other: kotlin.Any? declared in .Declaration.equals' type=kotlin.Any? origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Declaration' + CONST Boolean type=kotlin.Boolean value=true + WHEN type=kotlin.Unit origin=null + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=.Declaration + GET_VAR 'other: kotlin.Any? declared in .Declaration.equals' type=kotlin.Any? origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Declaration' + CONST Boolean type=kotlin.Boolean value=false + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:.Declaration [val] + TYPE_OP type=.Declaration origin=CAST typeOperand=.Declaration + GET_VAR 'other: kotlin.Any? declared in .Declaration.equals' type=kotlin.Any? origin=null + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.equals' type=.Declaration origin=null + arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR 'val tmp_0: .Declaration declared in .Declaration.equals' type=.Declaration origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Declaration' + CONST Boolean type=kotlin.Boolean value=false + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.equals' type=.Declaration origin=null + arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR 'val tmp_0: .Declaration declared in .Declaration.equals' type=.Declaration origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Declaration' + CONST Boolean type=kotlin.Boolean value=false + RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Declaration' + CONST Boolean type=kotlin.Boolean value=true + FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:.Declaration) returnType:kotlin.Int + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + VAR name:result type:kotlin.Int [var] + CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=null + $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.hashCode' type=.Declaration origin=null + SET_VAR 'var result: kotlin.Int declared in .Declaration.hashCode' type=kotlin.Unit origin=EQ + CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null + $this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null + $this: GET_VAR 'var result: kotlin.Int declared in .Declaration.hashCode' type=kotlin.Int origin=null + other: CONST Int type=kotlin.Int value=31 + other: CALL 'public open fun hashCode (): kotlin.Int declared in .Function' type=kotlin.Int origin=null + $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.hashCode' type=.Declaration origin=null + RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in .Declaration' + GET_VAR 'var result: kotlin.Int declared in .Declaration.hashCode' type=kotlin.Int origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:.Declaration) returnType:kotlin.String + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Declaration + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in .Declaration' + STRING_CONCATENATION type=kotlin.String + CONST String type=kotlin.String value="Declaration(" + CONST String type=kotlin.String value="name=" + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.toString' type=.Declaration origin=null + CONST String type=kotlin.String value=", " + CONST String type=kotlin.String value="functions=" + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final]' type=.Function origin=null + receiver: GET_VAR ': .Declaration declared in .Declaration.toString' type=.Declaration origin=null + CONST String type=kotlin.String value=")" + CLASS CLASS name:Function modality:FINAL visibility:public [data] superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Function + PROPERTY name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final] + EXPRESSION_BODY + GET_VAR 'name: kotlin.String declared in .Function.' type=kotlin.String origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Function) returnType:kotlin.String + correspondingProperty: PROPERTY name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Function + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .Function' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.' type=.Function origin=null + CONSTRUCTOR visibility:public <> (name:kotlin.String) returnType:.Function [primary] + VALUE_PARAMETER name:name index:0 type:kotlin.String + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Function modality:FINAL visibility:public [data] superTypes:[kotlin.Any]' + FUN GENERATED_DATA_CLASS_MEMBER name:component1 visibility:public modality:FINAL <> ($this:.Function) returnType:kotlin.String [operator] + $this: VALUE_PARAMETER name: type:.Function + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.String declared in .Function' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.component1' type=.Function origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:copy visibility:public modality:FINAL <> ($this:.Function, name:kotlin.String) returnType:.Function + $this: VALUE_PARAMETER name: type:.Function + VALUE_PARAMETER name:name index:0 type:kotlin.String + EXPRESSION_BODY + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.copy' type=.Function origin=null + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun copy (name: kotlin.String): .Function declared in .Function' + CONSTRUCTOR_CALL 'public constructor (name: kotlin.String) declared in .Function' type=.Function origin=null + name: GET_VAR 'name: kotlin.String declared in .Function.copy' type=kotlin.String origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:.Function, other:kotlin.Any?) returnType:kotlin.Boolean [operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Function + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + BLOCK_BODY + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ + arg0: GET_VAR ': .Function declared in .Function.equals' type=.Function origin=null + arg1: GET_VAR 'other: kotlin.Any? declared in .Function.equals' type=kotlin.Any? origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Function' + CONST Boolean type=kotlin.Boolean value=true + WHEN type=kotlin.Unit origin=null + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=.Function + GET_VAR 'other: kotlin.Any? declared in .Function.equals' type=kotlin.Any? origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Function' + CONST Boolean type=kotlin.Boolean value=false + VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:.Function [val] + TYPE_OP type=.Function origin=CAST typeOperand=.Function + GET_VAR 'other: kotlin.Any? declared in .Function.equals' type=kotlin.Any? origin=null + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.equals' type=.Function origin=null + arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR 'val tmp_1: .Function declared in .Function.equals' type=.Function origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Function' + CONST Boolean type=kotlin.Boolean value=false + RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .Function' + CONST Boolean type=kotlin.Boolean value=true + FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:.Function) returnType:kotlin.Int + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Function + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in .Function' + CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=null + $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.hashCode' type=.Function origin=null + FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:.Function) returnType:kotlin.String + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.Function + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in .Function' + STRING_CONCATENATION type=kotlin.String + CONST String type=kotlin.String value="Function(" + CONST String type=kotlin.String value="name=" + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Function declared in .Function.toString' type=.Function origin=null + CONST String type=kotlin.String value=")" + FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String + BLOCK_BODY + VAR name:df type:org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> [val] + CALL 'public final fun let (block: kotlin.Function1): R of kotlin.let declared in kotlin' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> origin=null + : kotlin.collections.List<.Declaration> + : org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> + $receiver: CALL 'public final fun listOf (element: T of kotlin.collections.listOf): kotlin.collections.List declared in kotlin.collections' type=kotlin.collections.List<.Declaration> origin=null + : .Declaration + element: CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, functions: .Function) declared in .Declaration' type=.Declaration origin=null + name: CONST String type=kotlin.String value="DataFrameImpl" + functions: CONSTRUCTOR_CALL 'public constructor (name: kotlin.String) declared in .Function' type=.Function origin=null + name: CONST String type=kotlin.String value="rowsCount" + block: FUN_EXPR type=kotlin.Function1.Declaration>, org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48>> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:kotlin.collections.List<.Declaration>) returnType:org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> + VALUE_PARAMETER name:it index:0 type:kotlin.collections.List<.Declaration> + BLOCK_BODY + CLASS CLASS name:Declaration_48I modality:ABSTRACT visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Declaration_48I + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Declaration_48I [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Declaration_48I modality:ABSTRACT visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:functions visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 1) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48I) returnType:.Function + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:functions visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Declaration_48I + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 0) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48I) returnType:kotlin.String + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Declaration_48I + CLASS CLASS name:Scope0 modality:FINAL visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Scope0 + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:functions type:.Function visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I>) returnType:.Function + annotations: + JvmName(name = "Declaration_48I_functions") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> + BLOCK_BODY + RETURN type=.Function from='public final fun (): .Function declared in .box..Scope0' + TYPE_OP type=.Function origin=CAST typeOperand=.Function + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> origin=null + name: CONST String type=kotlin.String value="functions" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:functions type:org.jetbrains.kotlinx.dataframe.DataColumn<.Function> visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I>) returnType:org.jetbrains.kotlinx.dataframe.DataColumn<.Function> + annotations: + JvmName(name = "Declaration_48I_functions") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataColumn<.Function> from='public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn<.Function> declared in .box..Scope0' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataColumn<.Function> origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataColumn<.Function> + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> origin=null + columnName: CONST String type=kotlin.String value="functions" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I>) returnType:kotlin.String + annotations: + JvmName(name = "Declaration_48I_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> + BLOCK_BODY + RETURN type=kotlin.String from='public final fun (): kotlin.String declared in .box..Scope0' + TYPE_OP type=kotlin.String origin=CAST typeOperand=kotlin.String + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Declaration_48I> origin=null + name: CONST String type=kotlin.String value="name" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:org.jetbrains.kotlinx.dataframe.DataColumn visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I>) returnType:org.jetbrains.kotlinx.dataframe.DataColumn + annotations: + JvmName(name = "Declaration_48I_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataColumn from='public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope0' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataColumn origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataColumn + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Declaration_48I> origin=null + columnName: CONST String type=kotlin.String value="name" + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Scope0 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Scope0 modality:FINAL visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:Declaration_48 modality:ABSTRACT visibility:local superTypes:[.box..Declaration_48I] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Declaration_48 + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Declaration_48 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .box..Declaration_48I' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Declaration_48 modality:ABSTRACT visibility:local superTypes:[.box..Declaration_48I]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .box..Declaration_48I + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .box..Declaration_48I + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in .box..Declaration_48I + $this: VALUE_PARAMETER name: type:kotlin.Any + PROPERTY FAKE_OVERRIDE name:functions visibility:public modality:ABSTRACT [fake_override,val] + annotations: + Order(order = 1) + overridden: + public abstract functions: .Function declared in .box..Declaration_48I + FUN FAKE_OVERRIDE name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48I) returnType:.Function [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:functions visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract fun (): .Function declared in .box..Declaration_48I + $this: VALUE_PARAMETER name: type:.box..Declaration_48I + PROPERTY FAKE_OVERRIDE name:name visibility:public modality:ABSTRACT [fake_override,val] + annotations: + Order(order = 0) + overridden: + public abstract name: kotlin.String declared in .box..Declaration_48I + FUN FAKE_OVERRIDE name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48I) returnType:kotlin.String [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract fun (): kotlin.String declared in .box..Declaration_48I + $this: VALUE_PARAMETER name: type:.box..Declaration_48I + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48) returnType:.box..Scope0 + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Declaration_48 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Declaration_48, :.box..Scope0) returnType:kotlin.Unit + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Declaration_48 + VALUE_PARAMETER name: index:0 type:.box..Scope0 + RETURN type=kotlin.Nothing from='local final fun (it: kotlin.collections.List<.Declaration>): org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> declared in .box' + CALL 'public final fun toDataFrame (): org.jetbrains.kotlinx.dataframe.DataFrame declared in org.jetbrains.kotlinx.dataframe.api' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> origin=null + : .Declaration + $receiver: GET_VAR 'it: kotlin.collections.List<.Declaration> declared in .box.' type=kotlin.collections.List<.Declaration> origin=null + VAR name:a type:kotlin.String [val] + CALL 'public abstract fun get (index: kotlin.Int): T of org.jetbrains.kotlinx.dataframe.DataColumn declared in org.jetbrains.kotlinx.dataframe.DataColumn' type=kotlin.String origin=GET_ARRAY_ELEMENT + $this: CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope0' type=org.jetbrains.kotlinx.dataframe.DataColumn origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope0' type=.box..Scope0 origin=null + $receiver: GET_VAR 'val df: org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> declared in .box' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> origin=null + index: CONST Int type=kotlin.Int value=0 + VAR name:b type:.Function [val] + CALL 'public abstract fun get (index: kotlin.Int): T of org.jetbrains.kotlinx.dataframe.DataColumn declared in org.jetbrains.kotlinx.dataframe.DataColumn' type=.Function origin=GET_ARRAY_ELEMENT + $this: CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn<.Function> declared in .box..Scope0' type=org.jetbrains.kotlinx.dataframe.DataColumn<.Function> origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope0' type=.box..Scope0 origin=null + $receiver: GET_VAR 'val df: org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> declared in .box' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> origin=null + index: CONST Int type=kotlin.Int value=0 + VAR name:df1 type:org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> [val] + CALL 'public final fun let (block: kotlin.Function1): R of kotlin.let declared in kotlin' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> origin=null + : org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function> + : org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> + $receiver: CALL 'public final fun replace (columns: @[ExtensionFunctionType] kotlin.Function2, @[ParameterName(name = "it")] org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl, org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver>): org.jetbrains.kotlinx.dataframe.api.ReplaceClause declared in org.jetbrains.kotlinx.dataframe.api' type=org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function> origin=null + : .box..Declaration_48 + : .Function + $receiver: GET_VAR 'val df: org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> declared in .box' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Declaration_48> origin=null + columns: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function2.box..Declaration_48>, @[ParameterName(name = "it")] org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48>, org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver<.Function>> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48>, it:@[ParameterName(name = "it")] org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48>) returnType:org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver<.Function> + $receiver: VALUE_PARAMETER name:$this$replace type:org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48> + VALUE_PARAMETER name:it index:0 type:@[ParameterName(name = "it")] org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48> + BLOCK_BODY + RETURN type=kotlin.Nothing from='local final fun (it: @[ParameterName(name = "it")] org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48>): org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver<.Function> declared in .box' + CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn<.Function> declared in .box..Scope0' type=org.jetbrains.kotlinx.dataframe.DataColumn<.Function> origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope0' type=.box..Scope0 origin=null + $receiver: GET_VAR '$this$replace: org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48> declared in .box.' type=org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl<.box..Declaration_48> origin=null + block: FUN_EXPR type=kotlin.Function1.box..Declaration_48, .Function>, org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91>> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function>) returnType:org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> + VALUE_PARAMETER name:it index:0 type:org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function> + BLOCK_BODY + CLASS CLASS name:Unfold_91I modality:ABSTRACT visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Unfold_91I + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Unfold_91I [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Unfold_91I modality:ABSTRACT visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:functions visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 1) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91I) returnType:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:functions visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Unfold_91I + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 0) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91I) returnType:kotlin.String + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Unfold_91I + CLASS CLASS name:Scope0 modality:FINAL visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Scope0 + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:functions type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I>) returnType:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> + annotations: + JvmName(name = "Unfold_91I_functions") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> from='public final fun (): org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> declared in .box..Scope0' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> origin=null + name: CONST String type=kotlin.String value="functions" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:functions type:org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I>) returnType:org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> + annotations: + JvmName(name = "Unfold_91I_functions") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:functions visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> from='public final fun (): org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> declared in .box..Scope0' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> origin=null + columnName: CONST String type=kotlin.String value="functions" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I>) returnType:kotlin.String + annotations: + JvmName(name = "Unfold_91I_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> + BLOCK_BODY + RETURN type=kotlin.String from='public final fun (): kotlin.String declared in .box..Scope0' + TYPE_OP type=kotlin.String origin=CAST typeOperand=kotlin.String + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Unfold_91I> origin=null + name: CONST String type=kotlin.String value="name" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:org.jetbrains.kotlinx.dataframe.DataColumn visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope0, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I>) returnType:org.jetbrains.kotlinx.dataframe.DataColumn + annotations: + JvmName(name = "Unfold_91I_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope0 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataColumn from='public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope0' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataColumn origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataColumn + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> declared in .box..Scope0.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Unfold_91I> origin=null + columnName: CONST String type=kotlin.String value="name" + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Scope0 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Scope0 modality:FINAL visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:Functions_251 modality:ABSTRACT visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Functions_251 + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Functions_251 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Functions_251 modality:ABSTRACT visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 0) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Functions_251) returnType:kotlin.String + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:name visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Functions_251 + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:nameLength visibility:public modality:ABSTRACT [val] + annotations: + Order(order = 1) + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Functions_251) returnType:kotlin.Int + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:nameLength visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.box..Functions_251 + CLASS CLASS name:Scope1 modality:FINAL visibility:local superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Scope1 + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:nameLength visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:nameLength type:kotlin.Int visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope1, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251>) returnType:kotlin.Int + annotations: + JvmName(name = "Functions_251_nameLength") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:nameLength visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope1 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> + BLOCK_BODY + RETURN type=kotlin.Int from='public final fun (): kotlin.Int declared in .box..Scope1' + TYPE_OP type=kotlin.Int origin=CAST typeOperand=kotlin.Int + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> declared in .box..Scope1.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> origin=null + name: CONST String type=kotlin.String value="nameLength" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:nameLength visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:nameLength type:org.jetbrains.kotlinx.dataframe.DataColumn visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope1, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251>) returnType:org.jetbrains.kotlinx.dataframe.DataColumn + annotations: + JvmName(name = "Functions_251_nameLength") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:nameLength visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope1 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataColumn from='public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope1' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataColumn origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataColumn + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> declared in .box..Scope1.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> origin=null + columnName: CONST String type=kotlin.String value="nameLength" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:kotlin.String visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope1, $receiver:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251>) returnType:kotlin.String + annotations: + JvmName(name = "Functions_251_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope1 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> + BLOCK_BODY + RETURN type=kotlin.String from='public final fun (): kotlin.String declared in .box..Scope1' + TYPE_OP type=kotlin.String origin=CAST typeOperand=kotlin.String + CALL 'public abstract fun get (name: kotlin.String): kotlin.Any? declared in org.jetbrains.kotlinx.dataframe.DataRow' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> declared in .box..Scope1.' type=org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> origin=null + name: CONST String type=kotlin.String value="name" + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:name type:org.jetbrains.kotlinx.dataframe.DataColumn visibility:private [final] + FUN GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name: visibility:public modality:FINAL <> ($this:.box..Scope1, $receiver:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251>) returnType:org.jetbrains.kotlinx.dataframe.DataColumn + annotations: + JvmName(name = "Functions_251_name") + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] name:name visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.box..Scope1 + $receiver: VALUE_PARAMETER name: type:org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> + BLOCK_BODY + RETURN type=org.jetbrains.kotlinx.dataframe.DataColumn from='public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope1' + TYPE_OP type=org.jetbrains.kotlinx.dataframe.DataColumn origin=CAST typeOperand=org.jetbrains.kotlinx.dataframe.DataColumn + CALL 'public open fun get (columnName: kotlin.String): org.jetbrains.kotlinx.dataframe.DataColumn<*> declared in org.jetbrains.kotlinx.dataframe.ColumnsContainer' type=kotlin.Any? origin=null + $this: GET_VAR ': org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> declared in .box..Scope1.' type=org.jetbrains.kotlinx.dataframe.ColumnsContainer<.box..Functions_251> origin=null + columnName: CONST String type=kotlin.String value="name" + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Scope1 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Scope1 modality:FINAL visibility:local superTypes:[kotlin.Any]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:Unfold_91 modality:ABSTRACT visibility:local superTypes:[.box..Unfold_91I] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.box..Unfold_91 + CONSTRUCTOR GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.DataFramePlugin] visibility:public <> () returnType:.box..Unfold_91 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .box..Unfold_91I' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Unfold_91 modality:ABSTRACT visibility:local superTypes:[.box..Unfold_91I]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .box..Unfold_91I + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .box..Unfold_91I + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in .box..Unfold_91I + $this: VALUE_PARAMETER name: type:kotlin.Any + PROPERTY FAKE_OVERRIDE name:functions visibility:public modality:ABSTRACT [fake_override,val] + annotations: + Order(order = 1) + overridden: + public abstract functions: org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> declared in .box..Unfold_91I + FUN FAKE_OVERRIDE name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91I) returnType:org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:functions visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract fun (): org.jetbrains.kotlinx.dataframe.DataRow<.box..Functions_251> declared in .box..Unfold_91I + $this: VALUE_PARAMETER name: type:.box..Unfold_91I + PROPERTY FAKE_OVERRIDE name:name visibility:public modality:ABSTRACT [fake_override,val] + annotations: + Order(order = 0) + overridden: + public abstract name: kotlin.String declared in .box..Unfold_91I + FUN FAKE_OVERRIDE name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91I) returnType:kotlin.String [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract fun (): kotlin.String declared in .box..Unfold_91I + $this: VALUE_PARAMETER name: type:.box..Unfold_91I + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91) returnType:.box..Scope0 + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Unfold_91 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91, :.box..Scope0) returnType:kotlin.Unit + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope0 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Unfold_91 + VALUE_PARAMETER name: index:0 type:.box..Scope0 + PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope1 visibility:public modality:ABSTRACT [var] + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91) returnType:.box..Scope1 + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope1 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Unfold_91 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.box..Unfold_91, :.box..Scope1) returnType:kotlin.Unit + correspondingProperty: PROPERTY GENERATED[org.jetbrains.kotlinx.dataframe.plugin.extensions.TokenGenerator.Key] name:scope1 visibility:public modality:ABSTRACT [var] + $this: VALUE_PARAMETER name: type:.box..Unfold_91 + VALUE_PARAMETER name: index:0 type:.box..Scope1 + RETURN type=kotlin.Nothing from='local final fun (it: org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function>): org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> declared in .box' + CALL 'public final fun unfold (body: @[ExtensionFunctionType] kotlin.Function1, kotlin.Unit>): org.jetbrains.kotlinx.dataframe.DataFrame declared in org.jetbrains.kotlinx.dataframe.api' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> origin=null + : .box..Declaration_48 + : .Function + $receiver: GET_VAR 'it: org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function> declared in .box.' type=org.jetbrains.kotlinx.dataframe.api.ReplaceClause<.box..Declaration_48, .Function> origin=null + body: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1.Function>, kotlin.Unit> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function>) returnType:kotlin.Unit + $receiver: VALUE_PARAMETER name:$this$unfold type:org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function> + BLOCK_BODY + CALL 'public abstract fun properties (vararg roots: kotlin.reflect.KCallable<*>, maxDepth: kotlin.Int, body: @[ExtensionFunctionType] kotlin.Function1?): kotlin.Unit declared in org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl' type=kotlin.Unit origin=null + $this: GET_VAR '$this$unfold: org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function> declared in .box..' type=org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function> origin=null + maxDepth: CONST Int type=kotlin.Int value=0 + CALL 'public final fun from (expression: kotlin.Function1): kotlin.Unit declared in org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl' type=kotlin.Unit origin=null + : kotlin.Int + $this: GET_VAR '$this$unfold: org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function> declared in .box..' type=org.jetbrains.kotlinx.dataframe.api.CreateDataFrameDsl<.Function> origin=null + $receiver: CONST String type=kotlin.String value="nameLength" + expression: FUN_EXPR type=kotlin.Function1<.Function, kotlin.Int> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:.Function) returnType:kotlin.Int + VALUE_PARAMETER name:it index:0 type:.Function + BLOCK_BODY + RETURN type=kotlin.Nothing from='local final fun (it: .Function): kotlin.Int declared in .box..' + CALL 'public open fun (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY + $this: CALL 'public final fun (): kotlin.String declared in .Function' type=kotlin.String origin=GET_PROPERTY + $this: GET_VAR 'it: .Function declared in .box...' type=.Function origin=null + VAR name:c type:org.jetbrains.kotlinx.dataframe.DataColumn [val] + CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope1' type=org.jetbrains.kotlinx.dataframe.DataColumn origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope1' type=.box..Scope1 origin=null + $receiver: CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> declared in .box..Scope0' type=org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope0' type=.box..Scope0 origin=null + $receiver: GET_VAR 'val df1: org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> declared in .box' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> origin=null + VAR name:d type:org.jetbrains.kotlinx.dataframe.DataColumn [val] + CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.DataColumn declared in .box..Scope1' type=org.jetbrains.kotlinx.dataframe.DataColumn origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope1' type=.box..Scope1 origin=null + $receiver: CALL 'public final fun (): org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> declared in .box..Scope0' type=org.jetbrains.kotlinx.dataframe.columns.ColumnGroup<.box..Functions_251> origin=GET_PROPERTY + $this: CONSTRUCTOR_CALL 'public constructor () declared in .box..Scope0' type=.box..Scope0 origin=null + $receiver: GET_VAR 'val df1: org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> declared in .box' type=org.jetbrains.kotlinx.dataframe.DataFrame<.box..Unfold_91> origin=null + RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="OK" diff --git a/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.txt b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.txt new file mode 100644 index 0000000000..61bc4eb1e9 --- /dev/null +++ b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.fir.txt @@ -0,0 +1,163 @@ +FILE: unfold_replace_dsl.kt + public final data class Function : R|kotlin/Any| { + public constructor(name: R|kotlin/String|): R|Function| { + super() + } + + public final val name: R|kotlin/String| = R|/name| + public get(): R|kotlin/String| + + public final operator fun component1(): R|kotlin/String| + + public final fun copy(name: R|kotlin/String| = this@R|/Function|.R|/Function.name|): R|Function| + + } + public final data class Declaration : R|kotlin/Any| { + public constructor(name: R|kotlin/String|, functions: R|Function|): R|Declaration| { + super() + } + + public final val name: R|kotlin/String| = R|/name| + public get(): R|kotlin/String| + + public final val functions: R|Function| = R|/functions| + public get(): R|Function| + + public final operator fun component1(): R|kotlin/String| + + public final operator fun component2(): R|Function| + + public final fun copy(name: R|kotlin/String| = this@R|/Declaration|.R|/Declaration.name|, functions: R|Function| = this@R|/Declaration|.R|/Declaration.functions|): R|Declaration| + + } + public final fun box(): R|kotlin/String| { + lval df: R|org/jetbrains/kotlinx/dataframe/DataFrame</Declaration_48>| = R|kotlin/collections/listOf|(R|/Declaration.Declaration|(String(DataFrameImpl), R|/Function.Function|(String(rowsCount)))).R|kotlin/let||, R|org/jetbrains/kotlinx/dataframe/DataFrame</Declaration_48>|>( = fun (it: R|kotlin/collections/List|): R|org/jetbrains/kotlinx/dataframe/DataFrame</Declaration_48>| { + local abstract class Declaration_48I : R|kotlin/Any| { + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(1)) public abstract val functions: R|Function| + public get(): R|Function| + + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(0)) public abstract val name: R|kotlin/String| + public get(): R|kotlin/String| + + public constructor(): R|/Declaration_48I| + + } + + local final class Scope0 : R|kotlin/Any| { + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Declaration_48I>|.functions: R|Function| + public get(): R|Function| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Declaration_48I>|.functions: R|org/jetbrains/kotlinx/dataframe/DataColumn| + public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn| + + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Declaration_48I>|.name: R|kotlin/String| + public get(): R|kotlin/String| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Declaration_48I>|.name: R|org/jetbrains/kotlinx/dataframe/DataColumn| + public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn| + + public constructor(): R|/Scope0| + + } + + local abstract class Declaration_48 : R|/Declaration_48I| { + public abstract var scope0: R|/Scope0| + public get(): R|/Scope0| + public set(value: R|/Scope0|): R|kotlin/Unit| + + public constructor(): R|/Declaration_48| + + } + + ^ R|/it|.R|org/jetbrains/kotlinx/dataframe/api/toDataFrame|() + } + ) + lval a: R|kotlin/String| = (this@R|/box|, R|/df|).R|/Scope0.name|.R|SubstitutionOverride|(Int(0)) + lval b: R|Function| = (this@R|/box|, R|/df|).R|/Scope0.functions|.R|SubstitutionOverride|(Int(0)) + lval df1: R|org/jetbrains/kotlinx/dataframe/DataFrame</Unfold_91>| = R|/df|.R|org/jetbrains/kotlinx/dataframe/api/replace|/Declaration_48|, R|Function|>( = replace@fun R|org/jetbrains/kotlinx/dataframe/api/ColumnsSelectionDsl</Declaration_48>|.(it: R|@R|kotlin/ParameterName|(name = String(it)) org/jetbrains/kotlinx/dataframe/api/ColumnsSelectionDsl</Declaration_48>|): R|org/jetbrains/kotlinx/dataframe/columns/ColumnsResolver| { + ^ (this@R|/box|, this@R|special/anonymous|).R|/Scope0.functions| + } + ).R|kotlin/let|/Declaration_48, Function>|, R|org/jetbrains/kotlinx/dataframe/DataFrame</Unfold_91>|>( = fun (it: R|org/jetbrains/kotlinx/dataframe/api/ReplaceClause</Declaration_48, Function>|): R|org/jetbrains/kotlinx/dataframe/DataFrame</Unfold_91>| { + local abstract class Unfold_91I : R|kotlin/Any| { + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(1)) public abstract val functions: R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>| + public get(): R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>| + + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(0)) public abstract val name: R|kotlin/String| + public get(): R|kotlin/String| + + public constructor(): R|/Unfold_91I| + + } + + local final class Scope0 : R|kotlin/Any| { + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Unfold_91I>|.functions: R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>| + public get(): R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Unfold_91I>|.functions: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup</Functions_251>| + public get(): R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup</Functions_251>| + + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Unfold_91I>|.name: R|kotlin/String| + public get(): R|kotlin/String| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Unfold_91I>|.name: R|org/jetbrains/kotlinx/dataframe/DataColumn| + public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn| + + public constructor(): R|/Scope0| + + } + + local abstract class Functions_251 : R|kotlin/Any| { + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(1)) public abstract val nameLength: R|kotlin/Int| + public get(): R|kotlin/Int| + + @R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(0)) public abstract val name: R|kotlin/String| + public get(): R|kotlin/String| + + public constructor(): R|/Functions_251| + + } + + local final class Scope1 : R|kotlin/Any| { + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>|.nameLength: R|kotlin/Int| + public get(): R|kotlin/Int| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Functions_251>|.nameLength: R|org/jetbrains/kotlinx/dataframe/DataColumn| + public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn| + + public final val R|org/jetbrains/kotlinx/dataframe/DataRow</Functions_251>|.name: R|kotlin/String| + public get(): R|kotlin/String| + + public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer</Functions_251>|.name: R|org/jetbrains/kotlinx/dataframe/DataColumn| + public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn| + + public constructor(): R|/Scope1| + + } + + local abstract class Unfold_91 : R|/Unfold_91I| { + public abstract var scope0: R|/Scope0| + public get(): R|/Scope0| + public set(value: R|/Scope0|): R|kotlin/Unit| + + public abstract var scope1: R|/Scope1| + public get(): R|/Scope1| + public set(value: R|/Scope1|): R|kotlin/Unit| + + public constructor(): R|/Unfold_91| + + } + + ^ R|/it|.R|org/jetbrains/kotlinx/dataframe/api/unfold|/Declaration_48|, R|Function|>( = unfold@fun R|org/jetbrains/kotlinx/dataframe/api/CreateDataFrameDsl|.(): R|kotlin/Unit| { + this@R|special/anonymous|.R|SubstitutionOverride|(Int(0)) + (this@R|special/anonymous|, String(nameLength)).R|SubstitutionOverride|(from@fun (it: R|Function|): R|kotlin/Int| { + ^ R|/it|.R|/Function.name|.R|kotlin/String.length| + } + ) + } + ) + } + ) + lval c: R|org/jetbrains/kotlinx/dataframe/DataColumn| = (this@R|/box|, (this@R|/box|, R|/df1|).R|/Scope0.functions|).R|/Scope1.name| + lval d: R|org/jetbrains/kotlinx/dataframe/DataColumn| = (this@R|/box|, (this@R|/box|, R|/df1|).R|/Scope0.functions|).R|/Scope1.nameLength| + ^box String(OK) + } diff --git a/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.kt b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.kt new file mode 100644 index 0000000000..d144c01654 --- /dev/null +++ b/plugins/kotlin-dataframe/testData/box/unfold_replace_dsl.kt @@ -0,0 +1,23 @@ +import org.jetbrains.kotlinx.dataframe.* +import org.jetbrains.kotlinx.dataframe.api.* + +data class Function(val name: String) + +data class Declaration(val name: String, val functions: Function) + +fun box(): String { + val df = listOf(Declaration("DataFrameImpl", Function("rowsCount"))) + .toDataFrame() + + val a: String = df.name[0] + val b: Function = df.functions[0] + + val df1 = df.replace { functions }.unfold { + properties(maxDepth = 0) + "nameLength" from { it.name.length } + } + val c: DataColumn = df1.functions.name + val d: DataColumn = df1.functions.nameLength + + return "OK" +} diff --git a/plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java b/plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java index 168f830567..0f090cc8b8 100644 --- a/plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java +++ b/plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java @@ -321,6 +321,12 @@ public void testTransformReplaceFunctionCall() { runTest("testData/box/transformReplaceFunctionCall.kt"); } + @Test + @TestMetadata("unfold_replace_dsl.kt") + public void testUnfold_replace_dsl() { + runTest("testData/box/unfold_replace_dsl.kt"); + } + @Test @TestMetadata("ungroup.kt") public void testUngroup() {