Skip to content

Commit 5d79b45

Browse files
committed
post master merge, small update and rendering docs
1 parent 70d167d commit 5d79b45

File tree

18 files changed

+1972
-243
lines changed

18 files changed

+1972
-243
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ public typealias RowValueExpression<T, C, R> = DataRow<T>.(it: C) -> R
7474
*/
7575
public typealias RowColumnExpression<T, C, R> = (row: DataRow<T>, col: DataColumn<C>) -> R
7676

77+
/**
78+
* [ColumnExpression] is used to express or select any instance of `R` using the given instance of [DataColumn]`<C>` as
79+
* `this` and `it`.
80+
*
81+
* Shorthand for:
82+
* ```kotlin
83+
* DataColumn<C>.(it: DataColumn<C>) -> R
84+
* ```
85+
*/
86+
public typealias ColumnExpression<C, R> = Selector<DataColumn<C>, R>
87+
7788
/**
7889
* [ColumnSelector] is used to express or select a single column, represented by [SingleColumn]`<C>`, using the
7990
* context of [ColumnsSelectionDsl]`<T>` as `this` and `it`.

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

Lines changed: 50 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,28 @@ import org.jetbrains.kotlinx.dataframe.DataColumn
1111
import org.jetbrains.kotlinx.dataframe.DataFrame
1212
import org.jetbrains.kotlinx.dataframe.DataRow
1313
import org.jetbrains.kotlinx.dataframe.Predicate
14-
import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor
15-
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
16-
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
17-
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
18-
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
19-
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
20-
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
21-
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
22-
import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
23-
import org.jetbrains.kotlinx.dataframe.columns.renamedReference
14+
import org.jetbrains.kotlinx.dataframe.columns.*
15+
import org.jetbrains.kotlinx.dataframe.documentation.AccessApi
2416
import org.jetbrains.kotlinx.dataframe.hasNulls
2517
import org.jetbrains.kotlinx.dataframe.impl.columnName
26-
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
27-
import org.jetbrains.kotlinx.dataframe.impl.columns.DistinctColumnSet
28-
import org.jetbrains.kotlinx.dataframe.impl.columns.addPath
29-
import org.jetbrains.kotlinx.dataframe.impl.columns.allColumnsExcept
30-
import org.jetbrains.kotlinx.dataframe.impl.columns.changePath
31-
import org.jetbrains.kotlinx.dataframe.impl.columns.createColumnSet
32-
import org.jetbrains.kotlinx.dataframe.impl.columns.getAt
33-
import org.jetbrains.kotlinx.dataframe.impl.columns.getChildrenAt
34-
import org.jetbrains.kotlinx.dataframe.impl.columns.single
35-
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
36-
import org.jetbrains.kotlinx.dataframe.impl.columns.top
37-
import org.jetbrains.kotlinx.dataframe.impl.columns.transform
38-
import org.jetbrains.kotlinx.dataframe.impl.columns.transformSingle
18+
import org.jetbrains.kotlinx.dataframe.impl.columns.*
3919
import org.jetbrains.kotlinx.dataframe.impl.columns.tree.dfs
4020
import kotlin.reflect.KProperty
4121
import kotlin.reflect.KType
4222
import kotlin.reflect.typeOf
4323

24+
/**
25+
* Referring to a column in the selection DSL can be done in several ways corresponding to all
26+
* [Access APIs][AccessApi]:
27+
* TODO
28+
*/
29+
private interface CommonColumnSelectionExamples
30+
31+
32+
/** [Column Selection DSL][ColumnSelectionDsl] */
33+
internal interface ColumnSelectionDslLink
34+
35+
/** TODO: Put examples and explanations here */
4436
public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
4537

4638
public operator fun <C> ColumnReference<C>.invoke(): DataColumn<C> = get(this)
@@ -56,6 +48,10 @@ public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
5648
public operator fun String.get(column: String): ColumnPath = pathOf(this, column)
5749
}
5850

51+
/** [Columns Selection DSL][ColumnsSelectionDsl] */
52+
internal interface ColumnsSelectionDslLink
53+
54+
/** TODO: Put examples and explanations here */
5955
public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColumn<DataRow<T>> {
6056

6157
public fun <C> ColumnSet<C>.first(condition: ColumnFilter<C>): SingleColumn<C> =
@@ -70,24 +66,26 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
7066

7167
public fun ColumnsContainer<*>.group(name: String): ColumnGroupReference = name.toColumnOf()
7268

73-
public operator fun String.rangeTo(endInclusive: String): ColumnSet<*> = toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
74-
75-
public operator fun AnyColumnReference.rangeTo(endInclusive: AnyColumnReference): ColumnSet<*> = object : ColumnSet<Any?> {
76-
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<Any?>> {
77-
val startPath = this@rangeTo.resolveSingle(context)!!.path
78-
val endPath = endInclusive.resolveSingle(context)!!.path
79-
val parentPath = startPath.parent()!!
80-
require(parentPath == endPath.parent()) { "Start and end columns have different parent column paths" }
81-
val parentCol = context.df.getColumnGroup(parentPath)
82-
val startIndex = parentCol.getColumnIndex(startPath.name)
83-
val endIndex = parentCol.getColumnIndex(endPath.name)
84-
return (startIndex..endIndex).map {
85-
parentCol.getColumn(it).let {
86-
it.addPath(parentPath + it.name)
69+
public operator fun String.rangeTo(endInclusive: String): ColumnSet<*> =
70+
toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
71+
72+
public operator fun AnyColumnReference.rangeTo(endInclusive: AnyColumnReference): ColumnSet<*> =
73+
object : ColumnSet<Any?> {
74+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<Any?>> {
75+
val startPath = this@rangeTo.resolveSingle(context)!!.path
76+
val endPath = endInclusive.resolveSingle(context)!!.path
77+
val parentPath = startPath.parent()!!
78+
require(parentPath == endPath.parent()) { "Start and end columns have different parent column paths" }
79+
val parentCol = context.df.getColumnGroup(parentPath)
80+
val startIndex = parentCol.getColumnIndex(startPath.name)
81+
val endIndex = parentCol.getColumnIndex(endPath.name)
82+
return (startIndex..endIndex).map {
83+
parentCol.getColumn(it).let {
84+
it.addPath(parentPath + it.name)
85+
}
8786
}
8887
}
8988
}
90-
}
9189

9290
public fun none(): ColumnSet<*> = ColumnsList<Any?>(emptyList())
9391

@@ -115,7 +113,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
115113

116114
public fun <C> ColumnSet<DataRow<C>>.select(vararg columns: String): ColumnSet<*> = select { columns.toColumns() }
117115

118-
public fun <C, R> ColumnSet<DataRow<C>>.select(vararg columns: KProperty<R>): ColumnSet<R> = select { columns.toColumns() }
116+
public fun <C, R> ColumnSet<DataRow<C>>.select(vararg columns: KProperty<R>): ColumnSet<R> =
117+
select { columns.toColumns() }
119118

120119
public fun <C, R> ColumnSet<DataRow<C>>.select(selector: ColumnsSelector<C, R>): ColumnSet<R> = createColumnSet {
121120
this@select.resolve(it).flatMap { group ->
@@ -145,7 +144,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
145144

146145
// region allDfs
147146

148-
public fun ColumnSet<*>.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> = if (includeGroups) dfs { true } else dfs { !it.isColumnGroup() }
147+
public fun ColumnSet<*>.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> =
148+
if (includeGroups) dfs { true } else dfs { !it.isColumnGroup() }
149149

150150
public fun String.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> = toColumnAccessor().allDfs(includeGroups)
151151

@@ -242,7 +242,9 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
242242

243243
public fun <C> col(property: KProperty<C>): ColumnAccessor<C> = property.toColumnAccessor()
244244

245-
public operator fun ColumnSet<*>.get(colName: String): ColumnSet<Any?> = transform { it.mapNotNull { it.getChild(colName) } }
245+
public operator fun ColumnSet<*>.get(colName: String): ColumnSet<Any?> =
246+
transform { it.mapNotNull { it.getChild(colName) } }
247+
246248
public operator fun <C> ColumnSet<*>.get(column: ColumnReference<C>): ColumnSet<C> = cols(column)
247249

248250
public fun SingleColumn<AnyRow>.take(n: Int): ColumnSet<*> = transformSingle { it.children().take(n) }
@@ -288,8 +290,11 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
288290
public infix fun <C> ColumnReference<C>.into(column: KProperty<*>): ColumnReference<C> = named(column.columnName)
289291

290292
public infix fun String.into(newName: String): ColumnReference<Any?> = toColumnAccessor().into(newName)
291-
public infix fun String.into(column: ColumnAccessor<*>): ColumnReference<Any?> = toColumnAccessor().into(column.name())
292-
public infix fun String.into(column: KProperty<*>): ColumnReference<Any?> = toColumnAccessor().into(column.columnName)
293+
public infix fun String.into(column: ColumnAccessor<*>): ColumnReference<Any?> =
294+
toColumnAccessor().into(column.name())
295+
296+
public infix fun String.into(column: KProperty<*>): ColumnReference<Any?> =
297+
toColumnAccessor().into(column.columnName)
293298

294299
public infix fun <C> ColumnReference<C>.named(newName: String): ColumnReference<C> = renamedReference(newName)
295300
public infix fun <C> ColumnReference<C>.named(name: KProperty<*>): ColumnReference<C> = named(name.columnName)
@@ -311,6 +316,7 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
311316
public infix fun <C> KProperty<C>.and(other: String): ColumnSet<Any?> = toColumnAccessor() and other
312317
public infix fun <C> KProperty<C>.and(other: KProperty<C>): ColumnSet<C> =
313318
toColumnAccessor() and other.toColumnAccessor()
319+
314320
public infix fun <C> KProperty<C>.and(other: ColumnsSelector<T, C>): ColumnSet<C> = toColumnAccessor() and other()
315321

316322
// endregion
@@ -339,7 +345,7 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
339345
public inline fun <T, reified R> ColumnsSelectionDsl<T>.expr(
340346
name: String = "",
341347
infer: Infer = Infer.Nulls,
342-
noinline expression: AddExpression<T, R>
348+
noinline expression: AddExpression<T, R>,
343349
): DataColumn<R> = mapToColumn(name, infer, expression)
344350

345351
internal fun <T, C> ColumnsSelector<T, C>.filter(predicate: (ColumnWithPath<C>) -> Boolean): ColumnsSelector<T, C> =

0 commit comments

Comments
 (0)