Skip to content

Commit ff8b452

Browse files
committed
[Compiler plugin] Support "Convert.perRowCol" operation
1 parent c5f8dd0 commit ff8b452

File tree

5 files changed

+30
-0
lines changed

5 files changed

+30
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ public fun <T, C, R> Convert<T, DataRow<C>>.asFrame(
127127
body: ColumnsContainer<T>.(ColumnGroup<C>) -> DataFrame<R>,
128128
): DataFrame<T> = to { body(this, it.asColumnGroup()).asColumnGroup(it.name()) }
129129

130+
@Refine
131+
@Interpretable("PerRowCol")
130132
public inline fun <T, C, reified R> Convert<T, C>.perRowCol(
131133
infer: Infer = Infer.Nulls,
132134
noinline expression: RowColumnExpression<T, C, R>,

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/convert.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,16 @@ class With0 : AbstractSchemaModificationInterpreter() {
6363
}
6464
}
6565

66+
class PerRowCol : AbstractSchemaModificationInterpreter() {
67+
val Arguments.receiver: ConvertApproximation by arg()
68+
val Arguments.infer by ignore()
69+
val Arguments.type: TypeApproximation by type(name("expression"))
70+
71+
override fun Arguments.interpret(): PluginDataFrameSchema {
72+
return convertImpl(receiver.schema, receiver.columns, type)
73+
}
74+
}
75+
6676
internal fun KotlinTypeFacade.convertImpl(
6777
pluginDataFrameSchema: PluginDataFrameSchema,
6878
columns: List<List<String>>,

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.MoveUnder0
105105
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.MoveUnder1
106106
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairConstructor
107107
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairToConstructor
108+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PerRowCol
108109
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ReadExcel
109110
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.StringColumnsConstructor
110111
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrame
@@ -206,6 +207,7 @@ internal inline fun <reified T> String.load(): T {
206207
"Convert6" -> Convert6()
207208
"To0" -> To0()
208209
"With0" -> With0()
210+
"PerRowCol" -> PerRowCol()
209211
"Explode0" -> Explode0()
210212
"Read0" -> Read0()
211213
"Insert0" -> Insert0()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.annotations.*
3+
import org.jetbrains.kotlinx.dataframe.api.*
4+
import org.jetbrains.kotlinx.dataframe.io.*
5+
6+
fun box(): String {
7+
val df = dataFrameOf("a")(123).convert { a }.perRowCol { row, col -> "" }
8+
val value: String = df.a[0]
9+
return "OK"
10+
}

plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,12 @@ public void testParametrizedDataFrame() {
376376
runTest("testData/box/parametrizedDataFrame.kt");
377377
}
378378

379+
@Test
380+
@TestMetadata("perRowCol.kt")
381+
public void testPerRowCol() {
382+
runTest("testData/box/perRowCol.kt");
383+
}
384+
379385
@Test
380386
@TestMetadata("platformType.kt")
381387
public void testPlatformType() {

0 commit comments

Comments
 (0)