Skip to content

Commit 52bb360

Browse files
Automated commit of generated code
1 parent a268c40 commit 52bb360

File tree

12 files changed

+78
-20
lines changed

12 files changed

+78
-20
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/annotations/Plugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ public annotation class HasSchema(val schemaArg: Int)
88
* Needed because some function calls only serve as a part of overall compile time DataSchema evaluation
99
* There's no need to update return type of such calls
1010
*/
11-
internal annotation class Interpretable(val interpreter: String)
11+
public annotation class Interpretable(val interpreter: String)
1212

1313
/**
1414
* Compiler plugin will replace return type of calls to the annotated function
1515
*/
16-
internal annotation class Refine
16+
public annotation class Refine
1717

1818
internal annotation class OptInRefine
1919

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ private interface SetFillNullsOperationArg
200200
*
201201
* @param [columns] The [Columns Selector][org.jetbrains.kotlinx.dataframe.ColumnsSelector] used to select the columns of this [DataFrame][org.jetbrains.kotlinx.dataframe.DataFrame] to update.
202202
*/
203+
@Interpretable("FillNulls0")
203204
public fun <T, C> DataFrame<T>.fillNulls(columns: ColumnsSelector<T, C?>): Update<T, C?> =
204205
update(columns).where { it == null }
205206

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

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import org.jetbrains.kotlinx.dataframe.DataColumn
99
import org.jetbrains.kotlinx.dataframe.DataFrame
1010
import org.jetbrains.kotlinx.dataframe.DataRow
1111
import org.jetbrains.kotlinx.dataframe.RowExpression
12+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
13+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
1214
import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor
1315
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
1416
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
@@ -18,6 +20,7 @@ import org.jetbrains.kotlinx.dataframe.exceptions.UnequalColumnSizesException
1820
import org.jetbrains.kotlinx.dataframe.impl.ColumnNameGenerator
1921
import org.jetbrains.kotlinx.dataframe.impl.DataFrameImpl
2022
import org.jetbrains.kotlinx.dataframe.impl.UNNAMED_COLUMN_PREFIX
23+
import org.jetbrains.kotlinx.dataframe.impl.api.withValuesImpl
2124
import org.jetbrains.kotlinx.dataframe.impl.asList
2225
import org.jetbrains.kotlinx.dataframe.impl.columnName
2326
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnAccessorImpl
@@ -268,6 +271,7 @@ public fun dataFrameOf(vararg header: ColumnReference<*>): DataFrameBuilder = Da
268271

269272
public fun dataFrameOf(vararg columns: AnyBaseCol): AnyFrame = dataFrameOf(columns.asIterable())
270273

274+
@Interpretable("DataFrameOf0")
271275
public fun dataFrameOf(vararg header: String): DataFrameBuilder = dataFrameOf(header.toList())
272276

273277
public inline fun <reified C> dataFrameOf(vararg header: String, fill: (String) -> Iterable<C>): AnyFrame =
@@ -302,27 +306,15 @@ public class DataFrameBuilder(private val header: List<String>) {
302306
}.toDataFrame()
303307
}
304308

309+
@Refine
310+
@Interpretable("DataFrameBuilderInvoke0")
305311
public operator fun invoke(vararg values: Any?): AnyFrame = withValues(values.asIterable())
306312

307313
@JvmName("invoke1")
308-
internal fun withValues(values: Iterable<Any?>): AnyFrame {
309-
val list = values.asList()
310-
311-
val ncol = header.size
312-
313-
require(header.isNotEmpty() && list.size.rem(ncol) == 0) {
314-
"Number of values ${list.size} is not divisible by number of columns $ncol"
315-
}
316-
317-
val nrow = list.size / ncol
318-
319-
return (0 until ncol).map { col ->
320-
val colValues = (0 until nrow).map { row ->
321-
list[row * ncol + col]
322-
}
323-
DataColumn.createWithTypeInference(header[col], colValues)
314+
internal fun withValues(values: Iterable<Any?>): AnyFrame =
315+
withValuesImpl(header, values.asList()).map { (name, values) ->
316+
DataColumn.createWithTypeInference(name, values)
324317
}.toDataFrame()
325-
}
326318

327319
public operator fun invoke(args: Sequence<Any?>): AnyFrame = invoke(*args.toList().toTypedArray())
328320

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public inline fun <T, C, reified R> Convert<T, C?>.notNull(
9494
public class Convert<T, out C>(internal val df: DataFrame<T>, internal val columns: ColumnsSelector<T, C>) {
9595
public fun <R> cast(): Convert<T, R> = Convert(df, columns as ColumnsSelector<T, R>)
9696

97+
@Refine
9798
@Interpretable("To0")
9899
public inline fun <reified D> to(): DataFrame<T> = to(typeOf<D>())
99100

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@ package org.jetbrains.kotlinx.dataframe.api
22

33
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
44
import org.jetbrains.kotlinx.dataframe.DataFrame
5+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
6+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
57
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
68
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
79
import org.jetbrains.kotlinx.dataframe.impl.api.flattenImpl
810
import kotlin.reflect.KProperty
911

1012
// region DataFrame
1113

14+
@Refine
15+
@Interpretable("FlattenDefault")
1216
public fun <T> DataFrame<T>.flatten(keepParentNameForColumns: Boolean = false, separator: String = "."): DataFrame<T> =
1317
flatten(keepParentNameForColumns, separator) { all() }
1418

19+
@Refine
20+
@Interpretable("Flatten0")
1521
public fun <T, C> DataFrame<T>.flatten(
1622
keepParentNameForColumns: Boolean = false,
1723
separator: String = ".",

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,13 @@ public abstract class CreateDataFrameDsl<T> : TraversePropertiesDsl {
202202
public abstract operator fun String.invoke(builder: CreateDataFrameDsl<T>.() -> Unit)
203203
}
204204

205+
@Refine
206+
@Interpretable("ToDataFrameColumn")
207+
public inline fun <reified T> Iterable<T>.toDataFrame(columnName: String): DataFrame<*> =
208+
toDataFrame {
209+
columnName from { it }
210+
}
211+
205212
// endregion
206213

207214
// region toDataFrame overloads for built-in types
@@ -304,6 +311,8 @@ public interface ValueProperty<T> {
304311
public val value: T
305312
}
306313

314+
// endregion
315+
307316
// region Create DataFrame from Map
308317

309318
public fun Map<String, Iterable<Any?>>.toDataFrame(): AnyFrame =

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import org.jetbrains.kotlinx.dataframe.DataFrameExpression
88
import org.jetbrains.kotlinx.dataframe.DataRow
99
import org.jetbrains.kotlinx.dataframe.RowColumnExpression
1010
import org.jetbrains.kotlinx.dataframe.RowValueFilter
11+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
12+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
1113
import org.jetbrains.kotlinx.dataframe.api.Update.Grammar
1214
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
1315
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
@@ -458,7 +460,9 @@ public typealias UpdateExpression<T, C, R> = AddDataRow<T>.(C) -> R
458460
* - [Update per row col][org.jetbrains.kotlinx.dataframe.api.Update.perRowCol] to provide a new value for every selected cell giving its row and column.
459461
* @param [expression] The [Row Value Expression][org.jetbrains.kotlinx.dataframe.documentation.ExpressionsGivenRow.RowValueExpression.WithExample] to update the rows with.
460462
*/
461-
public fun <T, C> Update<T, C>.with(expression: UpdateExpression<T, C, C?>): DataFrame<T> =
463+
@Refine
464+
@Interpretable("UpdateWith0")
465+
public fun <T, C, R : C?> Update<T, C>.with(expression: UpdateExpression<T, C, R>): DataFrame<T> =
462466
updateImpl { row, _, value ->
463467
expression(row, value)
464468
}

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/TypeUtils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,8 @@ internal fun guessValueType(values: Sequence<Any?>, upperBound: KType? = null, l
436436
collectionClasses.add(it.javaClass.kotlin)
437437
}
438438

439+
is Function<*> -> classes.add(Function::class)
440+
439441
else -> classes.add(it.javaClass.kotlin)
440442
}
441443
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.jetbrains.kotlinx.dataframe.impl.api
2+
3+
internal fun <T> withValuesImpl(header: List<String>, values: List<T>): List<Pair<String, List<T>>> {
4+
val ncol = header.size
5+
6+
require(header.isNotEmpty() && values.size.rem(ncol) == 0) {
7+
"Number of values ${values.size} is not divisible by number of columns $ncol"
8+
}
9+
10+
val nrow = values.size / ncol
11+
12+
return (0 until ncol).map { col ->
13+
val colValues = (0 until nrow).map { row ->
14+
values[row * ncol + col]
15+
}
16+
header[col] to colValues
17+
}
18+
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.jetbrains.kotlinx.dataframe.kind
1111
import org.jetbrains.kotlinx.dataframe.type
1212
import org.junit.Ignore
1313
import org.junit.Test
14+
import java.io.File
1415
import kotlin.reflect.KProperty
1516
import kotlin.reflect.typeOf
1617

@@ -452,4 +453,11 @@ class CreateDataFrameTests {
452453
df.participants[0].city
453454
}
454455
}
456+
457+
@Test
458+
fun toDataFrameColumn() {
459+
val files = listOf(File("data.csv"))
460+
val df = files.toDataFrame(columnName = "files")
461+
df["files"][0] shouldBe File("data.csv")
462+
}
455463
}

0 commit comments

Comments
 (0)