Skip to content

Commit a4cd55b

Browse files
Merge remote-tracking branch 'origin/util_functions_docs' into util_functions_docs
2 parents 508e0c5 + 6a16777 commit a4cd55b

File tree

22 files changed

+206
-181
lines changed

22 files changed

+206
-181
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,10 @@ public class AddDsl<T>(
320320
add(dsl.columns.toColumnGroup(name))
321321
}
322322

323+
@Interpretable("AddDslAddGroup")
323324
public fun group(body: AddDsl<T>.() -> Unit): AddGroup<T> = AddGroup(body)
324325

326+
@Interpretable("AddDslAddGroupInto")
325327
public infix fun AddGroup<T>.into(groupName: String): Unit = group(groupName, body)
326328

327329
@Deprecated(DEPRECATED_ACCESS_API)

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,9 @@ public fun GroupBy<*, *>.schema(): DataFrameSchema = toDataFrame().schema()
2626

2727
// endregion
2828

29-
public inline fun <reified T> DataFrame<T>.compileTimeSchema(): DataFrameSchema =
30-
compileTimeSchemaImpl(schema(), T::class)
29+
/**
30+
* [ordered] - if true, columns are ordered the same as in runtime schema for easier diff between the two.
31+
* if false, columns are ordered as they are represented in the compiler plugin
32+
*/
33+
public inline fun <reified T> DataFrame<T>.compileTimeSchema(ordered: Boolean = true): DataFrameSchema =
34+
compileTimeSchemaImpl(if (ordered) schema() else null, T::class)

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ public interface TraversePropertiesDsl {
169169
public fun preserve(vararg properties: KCallable<*>)
170170
}
171171

172+
/**
173+
* Store values of given type [T] in ValueColumns without transformation into ColumnGroups or FrameColumns.
174+
*/
175+
@Interpretable("PreserveT")
172176
public inline fun <reified T> TraversePropertiesDsl.preserve(): Unit = preserve(T::class)
173177

174178
public abstract class CreateDataFrameDsl<T> : TraversePropertiesDsl {
@@ -177,8 +181,10 @@ public abstract class CreateDataFrameDsl<T> : TraversePropertiesDsl {
177181

178182
public abstract fun add(column: AnyBaseCol, path: ColumnPath? = null)
179183

184+
@Interpretable("ToDataFrameDslIntoString")
180185
public infix fun AnyBaseCol.into(name: String): Unit = add(this, pathOf(name))
181186

187+
@Interpretable("ToDataFrameDslIntoPath")
182188
public infix fun AnyBaseCol.into(path: ColumnPath): Unit = add(this, path)
183189

184190
@Interpretable("Properties0")
@@ -191,6 +197,7 @@ public abstract class CreateDataFrameDsl<T> : TraversePropertiesDsl {
191197
public inline fun <reified R> expr(infer: Infer = Infer.Nulls, noinline expression: (T) -> R): DataColumn<R> =
192198
source.map { expression(it) }.toColumn(infer = infer)
193199

200+
@Interpretable("ToDataFrameDslAdd")
194201
public inline fun <reified R> add(name: String, noinline expression: (T) -> R): Unit =
195202
add(source.map { expression(it) }.toColumn(name, Infer.Nulls))
196203

@@ -202,6 +209,7 @@ public abstract class CreateDataFrameDsl<T> : TraversePropertiesDsl {
202209
public inline infix fun <reified R> KProperty<R>.from(noinline expression: (T) -> R): Unit =
203210
add(columnName, expression)
204211

212+
@Interpretable("ToDataFrameDslFromInferType")
205213
public inline infix fun <reified R> String.from(inferType: InferType<T, R>): Unit =
206214
add(DataColumn.createByInference(this, source.map { inferType.expression(it) }))
207215

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import org.jetbrains.kotlinx.dataframe.schema.DataFrameSchema
88
import kotlin.reflect.KClass
99

1010
@PublishedApi
11-
internal fun compileTimeSchemaImpl(runtimeSchema: DataFrameSchema, klass: KClass<*>): DataFrameSchema {
11+
internal fun compileTimeSchemaImpl(runtimeSchema: DataFrameSchema?, klass: KClass<*>): DataFrameSchema {
1212
val compileSchema = getSchema(klass)
13+
if (runtimeSchema == null) return compileSchema
1314
val root = ColumnPath(emptyList())
1415
val order = buildMap {
1516
putColumnsOrder(runtimeSchema, path = root)
@@ -41,8 +42,6 @@ internal fun DataFrameSchema.sortedBy(order: Map<ColumnPath, Int>, path: ColumnP
4142
is ColumnSchema.Group -> ColumnSchema.Group(column.schema.sortedBy(order, path + name), column.contentType)
4243

4344
is ColumnSchema.Value -> column
44-
45-
else -> TODO("unexpected ColumnSchema class ${column::class}")
4645
}
4746
}.sortedBy { (name, _) ->
4847
order[path + name]

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,25 @@ class CreateDataFrameTests {
167167
df2.a.kind() shouldBe ColumnKind.Group
168168
}
169169

170+
class ExcludeTestData(val s: String, val data: NestedData)
171+
172+
class NestedData(val i: Int, val nestedStr: String)
173+
174+
@Test
175+
fun `preserve T test`() {
176+
val data = listOf(
177+
ExcludeTestData("test", NestedData(42, "nested")),
178+
ExcludeTestData("test2", NestedData(43, "nested2")),
179+
)
180+
181+
val res = data.toDataFrame {
182+
preserve<NestedData>()
183+
properties(maxDepth = 2)
184+
}
185+
186+
res.schema() shouldBe data.toDataFrame(maxDepth = 0).schema()
187+
}
188+
170189
enum class DummyEnum { A }
171190

172191
@Test

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,10 @@ public class AddDsl<T>(
322322
add(dsl.columns.toColumnGroup(name))
323323
}
324324

325+
@Interpretable("AddDslAddGroup")
325326
public fun group(body: AddDsl<T>.() -> Unit): AddGroup<T> = AddGroup(body)
326327

328+
@Interpretable("AddDslAddGroupInto")
327329
public infix fun AddGroup<T>.into(groupName: String): Unit = group(groupName, body)
328330

329331
@Deprecated(DEPRECATED_ACCESS_API)

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

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,24 @@ public fun <T> DataFrame<T>.max(skipNaN: Boolean = skipNaNDefault): DataRow<T> =
8181

8282
@Refine
8383
@Interpretable("Max1")
84-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(
84+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(
8585
skipNaN: Boolean = skipNaNDefault,
8686
columns: ColumnsForAggregateSelector<T, C>,
87-
): DataRow<T> = Aggregators.max<C>(skipNaN).aggregateFor(this, columns)
87+
): DataRow<T> = Aggregators.max.invoke(skipNaN).aggregateFor(this, columns)
8888

8989
public fun <T> DataFrame<T>.maxFor(vararg columns: String, skipNaN: Boolean = skipNaNDefault): DataRow<T> =
9090
maxFor(skipNaN) { columns.toComparableColumns() }
9191

9292
@Deprecated(DEPRECATED_ACCESS_API)
9393
@AccessApiOverload
94-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(
94+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(
9595
vararg columns: ColumnReference<C>,
9696
skipNaN: Boolean = skipNaNDefault,
9797
): DataRow<T> = maxFor(skipNaN) { columns.toColumnSet() }
9898

9999
@Deprecated(DEPRECATED_ACCESS_API)
100100
@AccessApiOverload
101-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(
101+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(
102102
vararg columns: KProperty<C>,
103103
skipNaN: Boolean = skipNaNDefault,
104104
): DataRow<T> = maxFor(skipNaN) { columns.toColumnSet() }
@@ -212,24 +212,24 @@ public fun <T> Grouped<T>.max(skipNaN: Boolean = skipNaNDefault): DataFrame<T> =
212212

213213
@Refine
214214
@Interpretable("GroupByMax0")
215-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(
215+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(
216216
skipNaN: Boolean = skipNaNDefault,
217217
columns: ColumnsForAggregateSelector<T, C>,
218-
): DataFrame<T> = Aggregators.max<C>(skipNaN).aggregateFor(this, columns)
218+
): DataFrame<T> = Aggregators.max.invoke(skipNaN).aggregateFor(this, columns)
219219

220220
public fun <T> Grouped<T>.maxFor(vararg columns: String, skipNaN: Boolean = skipNaNDefault): DataFrame<T> =
221221
maxFor(skipNaN) { columns.toComparableColumns() }
222222

223223
@Deprecated(DEPRECATED_ACCESS_API)
224224
@AccessApiOverload
225-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(
225+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(
226226
vararg columns: ColumnReference<C>,
227227
skipNaN: Boolean = skipNaNDefault,
228228
): DataFrame<T> = maxFor(skipNaN) { columns.toColumnSet() }
229229

230230
@Deprecated(DEPRECATED_ACCESS_API)
231231
@AccessApiOverload
232-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(
232+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(
233233
vararg columns: KProperty<C>,
234234
skipNaN: Boolean = skipNaNDefault,
235235
): DataFrame<T> = maxFor(skipNaN) { columns.toColumnSet() }
@@ -302,7 +302,7 @@ public inline fun <T, G, reified C : Comparable<C & Any>?> GroupBy<T, G>.maxBy(
302302
public fun <T> Pivot<T>.max(separate: Boolean = false, skipNaN: Boolean = skipNaNDefault): DataRow<T> =
303303
delegate { max(separate, skipNaN) }
304304

305-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
305+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
306306
separate: Boolean = false,
307307
skipNaN: Boolean = skipNaNDefault,
308308
columns: ColumnsForAggregateSelector<T, R>,
@@ -316,15 +316,15 @@ public fun <T> Pivot<T>.maxFor(
316316

317317
@Deprecated(DEPRECATED_ACCESS_API)
318318
@AccessApiOverload
319-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
319+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
320320
vararg columns: ColumnReference<R>,
321321
separate: Boolean = false,
322322
skipNaN: Boolean = skipNaNDefault,
323323
): DataRow<T> = maxFor(separate, skipNaN) { columns.toColumnSet() }
324324

325325
@Deprecated(DEPRECATED_ACCESS_API)
326326
@AccessApiOverload
327-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
327+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
328328
vararg columns: KProperty<R>,
329329
separate: Boolean = false,
330330
skipNaN: Boolean = skipNaNDefault,
@@ -388,11 +388,11 @@ public inline fun <T, reified C : Comparable<C & Any>?> Pivot<T>.maxBy(
388388
public fun <T> PivotGroupBy<T>.max(separate: Boolean = false, skipNaN: Boolean = skipNaNDefault): DataFrame<T> =
389389
maxFor(separate, skipNaN, intraComparableColumns())
390390

391-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
391+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
392392
separate: Boolean = false,
393393
skipNaN: Boolean = skipNaNDefault,
394394
columns: ColumnsForAggregateSelector<T, R>,
395-
): DataFrame<T> = Aggregators.max<R>(skipNaN).aggregateFor(this, separate, columns)
395+
): DataFrame<T> = Aggregators.max.invoke(skipNaN).aggregateFor(this, separate, columns)
396396

397397
public fun <T> PivotGroupBy<T>.maxFor(
398398
vararg columns: String,
@@ -402,15 +402,15 @@ public fun <T> PivotGroupBy<T>.maxFor(
402402

403403
@Deprecated(DEPRECATED_ACCESS_API)
404404
@AccessApiOverload
405-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
405+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
406406
vararg columns: ColumnReference<R>,
407407
separate: Boolean = false,
408408
skipNaN: Boolean = skipNaNDefault,
409409
): DataFrame<T> = maxFor(separate, skipNaN) { columns.toColumnSet() }
410410

411411
@Deprecated(DEPRECATED_ACCESS_API)
412412
@AccessApiOverload
413-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
413+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
414414
vararg columns: KProperty<R>,
415415
separate: Boolean = false,
416416
skipNaN: Boolean = skipNaNDefault,
@@ -500,7 +500,7 @@ public inline fun <reified T : Comparable<T & Any>?> AnyRow.rowMaxOf(): T & Any
500500
public fun <T> DataFrame<T>.max(): DataRow<T> = max(skipNaN = skipNaNDefault)
501501

502502
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
503-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(columns: ColumnsForAggregateSelector<T, C>): DataRow<T> =
503+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(columns: ColumnsForAggregateSelector<T, C>): DataRow<T> =
504504
maxFor(skipNaN = skipNaNDefault, columns = columns)
505505

506506
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
@@ -509,12 +509,12 @@ public fun <T> DataFrame<T>.maxFor(vararg columns: String): DataRow<T> =
509509

510510
@AccessApiOverload
511511
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
512-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(vararg columns: ColumnReference<C>): DataRow<T> =
512+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(vararg columns: ColumnReference<C>): DataRow<T> =
513513
maxFor(columns = columns, skipNaN = skipNaNDefault)
514514

515515
@AccessApiOverload
516516
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
517-
public fun <T, C : Comparable<C & Any>?> DataFrame<T>.maxFor(vararg columns: KProperty<C>): DataRow<T> =
517+
public fun <T, C : Comparable<*>?> DataFrame<T>.maxFor(vararg columns: KProperty<C>): DataRow<T> =
518518
maxFor(columns = columns, skipNaN = skipNaNDefault)
519519

520520
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
@@ -608,7 +608,7 @@ public fun <T> Grouped<T>.max(): DataFrame<T> = max(skipNaN = skipNaNDefault)
608608
@Refine
609609
@Interpretable("GroupByMax0")
610610
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
611-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(columns: ColumnsForAggregateSelector<T, C>): DataFrame<T> =
611+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(columns: ColumnsForAggregateSelector<T, C>): DataFrame<T> =
612612
maxFor(skipNaN = skipNaNDefault, columns = columns)
613613

614614
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
@@ -617,12 +617,12 @@ public fun <T> Grouped<T>.maxFor(vararg columns: String): DataFrame<T> =
617617

618618
@AccessApiOverload
619619
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
620-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(vararg columns: ColumnReference<C>): DataFrame<T> =
620+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(vararg columns: ColumnReference<C>): DataFrame<T> =
621621
maxFor(columns = columns, skipNaN = skipNaNDefault)
622622

623623
@AccessApiOverload
624624
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
625-
public fun <T, C : Comparable<C & Any>?> Grouped<T>.maxFor(vararg columns: KProperty<C>): DataFrame<T> =
625+
public fun <T, C : Comparable<*>?> Grouped<T>.maxFor(vararg columns: KProperty<C>): DataFrame<T> =
626626
maxFor(columns = columns, skipNaN = skipNaNDefault)
627627

628628
@Refine
@@ -684,7 +684,7 @@ public inline fun <T, G, reified C : Comparable<C & Any>?> GroupBy<T, G>.maxBy(
684684
public fun <T> Pivot<T>.max(separate: Boolean = false): DataRow<T> = max(separate, skipNaN = skipNaNDefault)
685685

686686
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
687-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
687+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
688688
separate: Boolean = false,
689689
columns: ColumnsForAggregateSelector<T, R>,
690690
): DataRow<T> = maxFor(separate, skipNaN = skipNaNDefault, columns = columns)
@@ -695,14 +695,14 @@ public fun <T> Pivot<T>.maxFor(vararg columns: String, separate: Boolean = false
695695

696696
@AccessApiOverload
697697
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
698-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
698+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
699699
vararg columns: ColumnReference<R>,
700700
separate: Boolean = false,
701701
): DataRow<T> = maxFor(columns = columns, separate = separate, skipNaN = skipNaNDefault)
702702

703703
@AccessApiOverload
704704
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
705-
public fun <T, R : Comparable<R & Any>?> Pivot<T>.maxFor(
705+
public fun <T, R : Comparable<*>?> Pivot<T>.maxFor(
706706
vararg columns: KProperty<R>,
707707
separate: Boolean = false,
708708
): DataRow<T> = maxFor(columns = columns, separate = separate, skipNaN = skipNaNDefault)
@@ -748,7 +748,7 @@ public inline fun <T, reified C : Comparable<C & Any>?> Pivot<T>.maxBy(column: K
748748
public fun <T> PivotGroupBy<T>.max(separate: Boolean = false): DataFrame<T> = max(separate, skipNaN = skipNaNDefault)
749749

750750
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
751-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
751+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
752752
separate: Boolean = false,
753753
columns: ColumnsForAggregateSelector<T, R>,
754754
): DataFrame<T> = maxFor(separate, skipNaN = skipNaNDefault, columns = columns)
@@ -759,14 +759,14 @@ public fun <T> PivotGroupBy<T>.maxFor(vararg columns: String, separate: Boolean
759759

760760
@AccessApiOverload
761761
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
762-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
762+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
763763
vararg columns: ColumnReference<R>,
764764
separate: Boolean = false,
765765
): DataFrame<T> = maxFor(columns = columns, separate = separate, skipNaN = skipNaNDefault)
766766

767767
@AccessApiOverload
768768
@Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN)
769-
public fun <T, R : Comparable<R & Any>?> PivotGroupBy<T>.maxFor(
769+
public fun <T, R : Comparable<*>?> PivotGroupBy<T>.maxFor(
770770
vararg columns: KProperty<R>,
771771
separate: Boolean = false,
772772
): DataFrame<T> = maxFor(columns = columns, separate = separate, skipNaN = skipNaNDefault)

0 commit comments

Comments
 (0)