Skip to content

Commit b20f64a

Browse files
committed
changes RowExpression to AddExpression in AddDsl to allow prev()?.newValue() to be called. #614
1 parent eac6a31 commit b20f64a

File tree

2 files changed

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

2 files changed

+32
-8
lines changed

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.jetbrains.kotlinx.dataframe.ColumnsContainer
1010
import org.jetbrains.kotlinx.dataframe.DataColumn
1111
import org.jetbrains.kotlinx.dataframe.DataFrame
1212
import org.jetbrains.kotlinx.dataframe.DataRow
13-
import org.jetbrains.kotlinx.dataframe.RowExpression
1413
import org.jetbrains.kotlinx.dataframe.Selector
1514
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
1615
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
@@ -259,27 +258,27 @@ public class AddDsl<T>(
259258
internal inline fun <reified R> add(
260259
name: String,
261260
infer: Infer = Infer.Nulls,
262-
noinline expression: RowExpression<T, R>,
261+
noinline expression: AddExpression<T, R>,
263262
): Boolean = add(df.mapToColumn(name, infer, expression))
264263

265264
public inline fun <reified R> expr(
266265
infer: Infer = Infer.Nulls,
267-
noinline expression: RowExpression<T, R>,
266+
noinline expression: AddExpression<T, R>,
268267
): DataColumn<R> = df.mapToColumn("", infer, expression)
269268

270269
@Interpretable("From")
271-
public inline infix fun <reified R> String.from(noinline expression: RowExpression<T, R>): Boolean =
270+
public inline infix fun <reified R> String.from(noinline expression: AddExpression<T, R>): Boolean =
272271
add(this, Infer.Nulls, expression)
273272

274273
// TODO: use path instead of name
275274
@Deprecated(DEPRECATED_ACCESS_API)
276275
@AccessApiOverload
277-
public inline infix fun <reified R> ColumnAccessor<R>.from(noinline expression: RowExpression<T, R>): Boolean =
276+
public inline infix fun <reified R> ColumnAccessor<R>.from(noinline expression: AddExpression<T, R>): Boolean =
278277
name().from(expression)
279278

280279
@Deprecated(DEPRECATED_ACCESS_API)
281280
@AccessApiOverload
282-
public inline infix fun <reified R> KProperty<R>.from(noinline expression: RowExpression<T, R>): Boolean =
281+
public inline infix fun <reified R> KProperty<R>.from(noinline expression: AddExpression<T, R>): Boolean =
283282
add(name, Infer.Nulls, expression)
284283

285284
public infix fun String.from(column: AnyColumnReference): Boolean = add(column.rename(this))
@@ -417,15 +416,15 @@ public fun <T> DataFrame<T>.add(body: AddDsl<T>.() -> Unit): DataFrame<T> {
417416
public inline fun <reified R, T, G> GroupBy<T, G>.add(
418417
name: String,
419418
infer: Infer = Infer.Nulls,
420-
noinline expression: RowExpression<G, R>,
419+
noinline expression: AddExpression<G, R>,
421420
): GroupBy<T, G> = updateGroups { add(name, infer, expression) }
422421

423422
@Deprecated(DEPRECATED_ACCESS_API)
424423
@AccessApiOverload
425424
public inline fun <reified R, T, G> GroupBy<T, G>.add(
426425
column: ColumnAccessor<G>,
427426
infer: Infer = Infer.Nulls,
428-
noinline expression: RowExpression<G, R>,
427+
noinline expression: AddExpression<G, R>,
429428
): GroupBy<T, G> = add(column.name(), infer, expression)
430429

431430
public class AddGroup<T>(internal val body: AddDsl<T>.() -> Unit)

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.jetbrains.kotlinx.dataframe.api
33
import io.kotest.assertions.throwables.shouldThrow
44
import io.kotest.matchers.shouldBe
55
import org.jetbrains.kotlinx.dataframe.AnyFrame
6+
import org.jetbrains.kotlinx.dataframe.DataFrame
67
import org.junit.Test
78
import kotlin.reflect.typeOf
89

@@ -33,4 +34,28 @@ class AddTests {
3334
val df = dataFrameOf("a")(1).addValue(2)
3435
df["value"].type() shouldBe typeOf<List<Any?>>()
3536
}
37+
38+
@Test
39+
fun `fibonacci simple add`() {
40+
val df = DataFrame.empty(10).add("fibonacci") {
41+
if (index() < 2) 1 else prev()!!.newValue<Int>() + prev()!!.prev()!!.newValue<Int>()
42+
}
43+
44+
df["fibonacci"].toList() shouldBe listOf(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
45+
}
46+
47+
@Test
48+
fun `fibonacci add dsl`() {
49+
val df = DataFrame.empty(10).add {
50+
"fibonacci1" from {
51+
if (index() < 2) 1 else prev()!!.newValue<Int>() + prev()!!.prev()!!.newValue<Int>()
52+
}
53+
expr {
54+
if (index() < 2) 1 else prev()!!.newValue<Int>() + prev()!!.prev()!!.newValue<Int>()
55+
} into "fibonacci2"
56+
}
57+
58+
df["fibonacci1"].toList() shouldBe listOf(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
59+
df["fibonacci2"].toList() shouldBe listOf(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
60+
}
3661
}

0 commit comments

Comments
 (0)