Skip to content

Commit 29975f5

Browse files
committed
updating after first round of reviews
1 parent 79e7652 commit 29975f5

File tree

18 files changed

+389
-120
lines changed

18 files changed

+389
-120
lines changed

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

Lines changed: 104 additions & 51 deletions
Large diffs are not rendered by default.

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

Lines changed: 116 additions & 31 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public fun <T> DataColumn<T>.describe(): DataFrame<ColumnDescription> = describe
4040
// region DataFrame
4141

4242
public fun <T> DataFrame<T>.describe(): DataFrame<ColumnDescription> = describe { all().recursively(includeGroups = false) }
43+
4344
public fun <T> DataFrame<T>.describe(columns: ColumnsSelector<T, *>): DataFrame<ColumnDescription> =
4445
describeImpl(getColumnsWithPaths(columns))
4546

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@ import kotlin.reflect.KProperty
1212

1313
public fun AnyCol.inferType(): DataColumn<*> = guessColumnType(name, toList(), type, true)
1414

15+
// region DataFrame
16+
1517
public fun <T> DataFrame<T>.inferType(): DataFrame<T> = inferType { all().recursively(includeGroups = false) }
18+
1619
public fun <T> DataFrame<T>.inferType(columns: ColumnsSelector<T, *>): DataFrame<T> =
1720
replace(columns).with { it.inferType() }
1821

1922
public fun <T> DataFrame<T>.inferType(vararg columns: String): DataFrame<T> = inferType { columns.toColumnSet() }
23+
2024
public fun <T> DataFrame<T>.inferType(vararg columns: ColumnReference<*>): DataFrame<T> =
2125
inferType { columns.toColumnSet() }
2226

2327
public fun <T> DataFrame<T>.inferType(vararg columns: KProperty<*>): DataFrame<T> = inferType { columns.toColumnSet() }
28+
29+
// endregion

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public inline fun <T, reified R : Comparable<R>> DataColumn<T>.medianOf(noinline
3838
// region DataRow
3939

4040
public fun AnyRow.rowMedianOrNull(): Any? = Aggregators.median.aggregateMixed(
41-
values().filterIsInstance<Comparable<Any?>>().asIterable()
42-
)
41+
values().filterIsInstance<Comparable<Any?>>().asIterable()
42+
)
4343

4444
public fun AnyRow.rowMedian(): Any = rowMedianOrNull().suggestIfNull("rowMedian")
4545

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ public data class Reorder<T, C>(
2121
}
2222

2323
public fun <T, C> DataFrame<T>.reorder(selector: ColumnsSelector<T, C>): Reorder<T, C> = Reorder(this, selector, false)
24+
2425
public fun <T, C> DataFrame<T>.reorder(vararg columns: ColumnReference<C>): Reorder<T, C> =
2526
reorder { columns.toColumnSet() }
2627

2728
public fun <T, C> DataFrame<T>.reorder(vararg columns: KProperty<C>): Reorder<T, C> = reorder { columns.toColumnSet() }
29+
2830
public fun <T> DataFrame<T>.reorder(vararg columns: String): Reorder<T, *> = reorder { columns.toColumnSet() }
2931

3032
public fun <T, C, V : Comparable<V>> Reorder<T, C>.by(expression: ColumnExpression<C, V>): DataFrame<T> =

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public fun <T, C> DataFrame<T>.replace(columns: Iterable<ColumnReference<C>>): R
3838

3939
public fun <T> DataFrame<T>.replaceAll(
4040
vararg valuePairs: Pair<Any?, Any?>,
41-
columns: ColumnsSelector<T, *> = { all().recursively(includeGroups = false) },
41+
columns: ColumnsSelector<T, *> = { allRecursively(includeGroups = false) },
4242
): DataFrame<T> {
4343
val map = valuePairs.toMap()
4444
return update(columns).with { map[it] ?: it }

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnWithPath.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.depth
99
import kotlin.reflect.KProperty
1010

1111
public interface ColumnWithPath<out T> : DataColumn<T> {
12-
1312
public val data: DataColumn<T>
13+
1414
public val path: ColumnPath
15+
1516
public val name: String get() = name()
17+
1618
public val parentName: String? get() = path.parentName
19+
1720
public fun depth(): Int = path.depth()
21+
1822
public fun <C> getChild(accessor: ColumnReference<C>): ColumnWithPath<C>? =
1923
asColumnGroup().getColumnOrNull(accessor)?.addPath(path + accessor.path())
2024

@@ -23,6 +27,7 @@ public interface ColumnWithPath<out T> : DataColumn<T> {
2327

2428
public fun getChild(index: Int): ColumnWithPath<Any?>? =
2529
asColumnGroup().getColumnOrNull(index)?.addParentPath(path)
30+
2631
public fun <C> getChild(accessor: KProperty<C>): ColumnWithPath<C>? =
2732
asColumnGroup().getColumnOrNull(accessor)?.addParentPath(path)
2833

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import org.jetbrains.kotlinx.dataframe.api.isColumnGroup
55
import org.jetbrains.kotlinx.dataframe.columns.*
66
import org.jetbrains.kotlinx.dataframe.impl.columns.tree.flattenRecursively
77

8+
/**
9+
* Recursively implementation for [TransformableColumnSet].
10+
* This converts a [TransformableColumnSet] into a [ColumnSet] by redirecting [ColumnSet.resolve]
11+
* to [TransformableColumnSet.transformResolve] with a correctly configured [RecursivelyTransformer].
12+
*/
813
internal fun <C> TransformableColumnSet<C>.recursivelyImpl(
914
includeGroups: Boolean = true,
1015
includeTopLevel: Boolean = true,
@@ -20,6 +25,11 @@ internal fun <C> TransformableColumnSet<C>.recursivelyImpl(
2025
)
2126
}
2227

28+
/**
29+
* Recursively implementation for [TransformableSingleColumn].
30+
* This converts a [TransformableSingleColumn] into a [SingleColumn] by redirecting [SingleColumn.resolveSingle]
31+
* to [TransformableSingleColumn.transformResolveSingle] with a correctly configured [RecursivelyTransformer].
32+
*/
2333
internal fun <C> TransformableSingleColumn<C>.recursivelyImpl(
2434
includeGroups: Boolean = true,
2535
includeTopLevel: Boolean = true,
@@ -35,6 +45,11 @@ internal fun <C> TransformableSingleColumn<C>.recursivelyImpl(
3545
)
3646
}
3747

48+
/**
49+
* ## Recursively transformer.
50+
* A [ColumnSetTransformer] implementation around the [ColumnSet.flattenRecursively] function.
51+
* Created only using [recursivelyImpl].
52+
*/
3853
private class RecursivelyTransformer(
3954
val includeGroups: Boolean = true,
4055
val includeTopLevel: Boolean = true,
@@ -53,6 +68,16 @@ private class RecursivelyTransformer(
5368
)
5469
}
5570

71+
/**
72+
* Flattens a [ColumnSet]/[SingleColumn] recursively.
73+
*
74+
* If [this] is a [SingleColumn] containing a single [ColumnGroup], the "top-level" is
75+
* considered to be the [ColumnGroup]'s children, otherwise, if this is a [ColumnSet],
76+
* the "top-level" is considered to be the columns in the [ColumnSet].
77+
*
78+
* @param includeGroups Whether to include [ColumnGroup]s in the result.
79+
* @param includeTopLevel Whether to include the "top-level" columns in the result.
80+
*/
5681
internal fun ColumnSet<*>.flattenRecursively(
5782
includeGroups: Boolean = true,
5883
includeTopLevel: Boolean = true,
@@ -65,11 +90,3 @@ internal fun ColumnSet<*>.flattenRecursively(
6590
.flatMap { it.children().flattenRecursively() }
6691
}.filter { includeGroups || !it.isColumnGroup() }
6792
}
68-
69-
internal fun SingleColumn<*>.flattenRecursively(
70-
includeGroups: Boolean = true,
71-
includeTopLevel: Boolean = true,
72-
): ColumnSet<*> = (this as ColumnSet<*>).flattenRecursively(
73-
includeGroups = includeGroups,
74-
includeTopLevel = includeTopLevel,
75-
)

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
2020
* @see [SingleColumn]
2121
*/
2222
public interface TransformableColumnSet<out C> : ColumnSet<C> {
23-
2423
public fun transformResolve(
2524
context: ColumnResolutionContext,
2625
transformer: ColumnSetTransformer,
@@ -41,15 +40,18 @@ public interface TransformableColumnSet<out C> : ColumnSet<C> {
4140
* @see [ColumnSet]
4241
*/
4342
public interface TransformableSingleColumn<out C> : SingleColumn<C> {
44-
4543
public fun transformResolveSingle(
4644
context: ColumnResolutionContext,
4745
transformer: ColumnSetTransformer,
4846
): ColumnWithPath<C>?
4947
}
5048

49+
/**
50+
* ## Column set transformer.
51+
* This contains implementations for both [transform][ColumnSet.transform] and
52+
* [transformSingle][SingleColumn.transformSingle] and can be passed around.
53+
*/
5154
public interface ColumnSetTransformer {
52-
5355
public fun transform(columnSet: ColumnSet<*>): ColumnSet<*>
5456

5557
public fun transformSingle(singleColumn: SingleColumn<*>): ColumnSet<*>

0 commit comments

Comments
 (0)