@@ -14,6 +14,7 @@ import org.jetbrains.kotlinx.dataframe.Predicate
1414import org.jetbrains.kotlinx.dataframe.columns.*
1515import org.jetbrains.kotlinx.dataframe.documentation.AccessApi
1616import org.jetbrains.kotlinx.dataframe.hasNulls
17+ import org.jetbrains.kotlinx.dataframe.impl.aggregation.toColumns
1718import org.jetbrains.kotlinx.dataframe.impl.columnName
1819import org.jetbrains.kotlinx.dataframe.impl.columns.*
1920import org.jetbrains.kotlinx.dataframe.impl.columns.tree.dfs
@@ -42,18 +43,6 @@ public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
4243
4344 public operator fun <C > ColumnPath.invoke (): DataColumn <C > = getColumn(this ).cast()
4445
45- public operator fun <T > KProperty<T>.invoke (): DataColumn <T > = this @ColumnSelectionDsl[this ]
46-
47- public operator fun <T > KProperty<DataRow<T>>.invoke (): ColumnGroup <T > = this @ColumnSelectionDsl[this ]
48-
49- public operator fun <T > KProperty<DataFrame<T>>.invoke (): FrameColumn <T > = this @ColumnSelectionDsl[this ]
50-
51- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <R >): DataColumn <R > = invoke()[column]
52-
53- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <DataRow <R >>): ColumnGroup <R > = invoke()[column]
54-
55- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <DataFrame <R >>): FrameColumn <R > = invoke()[column]
56-
5746 public operator fun <C > String.invoke (): DataColumn <C > = getColumn(this ).cast()
5847
5948 public operator fun String.get (column : String ): ColumnPath = pathOf(this , column)
@@ -80,8 +69,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
8069 public operator fun String.rangeTo (endInclusive : String ): ColumnSet <* > =
8170 toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
8271
83- public operator fun KProperty <* >.rangeTo (endInclusive : KProperty <* >): ColumnSet <* > = toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
84-
8572 public operator fun AnyColumnReference.rangeTo (endInclusive : AnyColumnReference ): ColumnSet <* > =
8673 object : ColumnSet <Any ?> {
8774 override fun resolve (context : ColumnResolutionContext ): List <ColumnWithPath <Any ?>> {
@@ -116,19 +103,19 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
116103 transform { it.flatMap { col -> names.mapNotNull { col.getChild(it) } } }
117104 }
118105
119- public fun <C > ColumnSet <* >.cols (firstCol : KProperty <C >, vararg otherCols : KProperty <C >): ColumnSet <C > =
120- (listOf (firstCol) + otherCols).let { names ->
121- transform { it.flatMap { col -> names.mapNotNull { col.getChild(it) } } }
122- }
123-
124106 public fun ColumnSet <* >.cols (vararg indices : Int ): ColumnSet <Any ?> =
125107 transform { it.flatMap { it.children().let { children -> indices.map { children[it] } } } }
126108
127109 public fun ColumnSet <* >.cols (range : IntRange ): ColumnSet <Any ?> =
128- transform { it.flatMap { it.children().subList(range.first , range.last + 1 ) } }
110+ transform { it.flatMap { it.children().subList(range.start , range.endInclusive + 1 ) } }
129111
130112 // region select
131113
114+ public fun <C > ColumnSet<DataRow<C>>.select (vararg columns : String ): ColumnSet <* > = select { columns.toColumnSet() }
115+
116+ public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : KProperty <R >): ColumnSet <R > =
117+ select { columns.toColumnSet() }
118+
132119 public fun <C , R > ColumnSet<DataRow<C>>.select (selector : ColumnsSelector <C , R >): ColumnSet <R > = createColumnSet {
133120 this @select.resolve(it).flatMap { group ->
134121 group.asColumnGroup().getColumnsWithPaths(selector).map {
@@ -137,12 +124,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
137124 }
138125 }
139126
140- public fun <C > ColumnSet<DataRow<C>>.select (vararg columns : String ): ColumnSet <* > = select { columns.toColumns() }
141-
142- public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : ColumnReference <R >): ColumnSet <R > = select { columns.toColumns() }
143-
144- public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : KProperty <R >): ColumnSet <R > = select { columns.toColumns() }
145-
146127 // endregion
147128
148129 // endregion
@@ -153,8 +134,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
153134
154135 public fun String.dfs (predicate : (ColumnWithPath <* >) -> Boolean ): ColumnSet <* > = toColumnAccessor().dfs(predicate)
155136
156- public fun <C > KProperty<C>.dfs (predicate : (ColumnWithPath <* >) -> Boolean ): ColumnSet <* > = toColumnAccessor().dfs(predicate)
157-
158137 // endregion
159138
160139 // region all
@@ -163,17 +142,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
163142
164143 public fun String.all (): ColumnSet <* > = toColumnAccessor().transformSingle { it.children() }
165144
166- public fun KProperty <* >.all (): ColumnSet <* > = toColumnAccessor().transformSingle { it.children() }
167-
168145 // region allDfs
169146
170147 public fun ColumnSet <* >.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> =
171148 if (includeGroups) dfs { true } else dfs { ! it.isColumnGroup() }
172149
173150 public fun String.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> = toColumnAccessor().allDfs(includeGroups)
174151
175- public fun KProperty <* >.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> = toColumnAccessor().allDfs(includeGroups)
176-
177152 // endregion
178153
179154 // region allAfter
@@ -192,24 +167,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
192167
193168 public fun SingleColumn <* >.allAfter (colName : String ): ColumnSet <Any ?> = allAfter(pathOf(colName))
194169 public fun SingleColumn <* >.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = allAfter(column.path())
195- public fun SingleColumn <* >.allAfter (column : KProperty <* >): ColumnSet <Any ?> = allAfter(column.toColumnAccessor().path())
196-
197- public fun String.allAfter (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colPath)
198- public fun String.allAfter (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colName)
199- public fun String.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
200- public fun String.allAfter (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
201-
202- public fun KProperty <* >.allAfter (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colPath)
203- public fun KProperty <* >.allAfter (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colName)
204- public fun KProperty <* >.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
205- public fun KProperty <* >.allAfter (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
206170
207171 // endregion
208172
209- // region allFrom
173+ // region allSince
210174
211175 // including current
212- public fun SingleColumn <* >.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> {
176+ public fun SingleColumn <* >.allSince (colPath : ColumnPath ): ColumnSet <Any ?> {
213177 var take = false
214178 return children {
215179 if (take) true
@@ -220,19 +184,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
220184 }
221185 }
222186
223- public fun SingleColumn <* >.allFrom (colName : String ): ColumnSet <Any ?> = allFrom(pathOf(colName))
224- public fun SingleColumn <* >.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = allFrom(column.path())
225- public fun SingleColumn <* >.allFrom (column : KProperty <* >): ColumnSet <Any ?> = allFrom(column.toColumnAccessor().path())
226-
227- public fun String.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colPath)
228- public fun String.allFrom (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colName)
229- public fun String.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
230- public fun String.allFrom (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
231-
232- public fun KProperty <* >.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colPath)
233- public fun KProperty <* >.allFrom (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colName)
234- public fun KProperty <* >.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
235- public fun KProperty <* >.allFrom (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
187+ public fun SingleColumn <* >.allSince (colName : String ): ColumnSet <Any ?> = allSince(pathOf(colName))
188+ public fun SingleColumn <* >.allSince (column : AnyColumnReference ): ColumnSet <Any ?> = allSince(column.path())
236189
237190 // endregion
238191
@@ -252,24 +205,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
252205
253206 public fun SingleColumn <* >.allBefore (colName : String ): ColumnSet <Any ?> = allBefore(pathOf(colName))
254207 public fun SingleColumn <* >.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = allBefore(column.path())
255- public fun SingleColumn <* >.allBefore (column : KProperty <* >): ColumnSet <Any ?> = allBefore(column.toColumnAccessor().path())
256-
257- public fun String.allBefore (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colPath)
258- public fun String.allBefore (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colName)
259- public fun String.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
260- public fun String.allBefore (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
261-
262- public fun KProperty <* >.allBefore (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colPath)
263- public fun KProperty <* >.allBefore (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colName)
264- public fun KProperty <* >.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
265- public fun KProperty <* >.allBefore (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
266208
267209 // endregion
268210
269- // region allUpTo
211+ // region allUntil
270212
271213 // including current
272- public fun SingleColumn <* >.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> {
214+ public fun SingleColumn <* >.allUntil (colPath : ColumnPath ): ColumnSet <Any ?> {
273215 var take = true
274216 return children {
275217 if (! take) false
@@ -280,46 +222,21 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
280222 }
281223 }
282224
283- public fun SingleColumn <* >.allUpTo (colName : String ): ColumnSet <Any ?> = allUpTo(pathOf(colName))
284- public fun SingleColumn <* >.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = allUpTo(column.path())
285- public fun SingleColumn <* >.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = allUpTo(column.toColumnAccessor().path())
286-
287- public fun String.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colPath)
288- public fun String.allUpTo (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colName)
289- public fun String.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
290- public fun String.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
291-
292- public fun KProperty <* >.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colPath)
293- public fun KProperty <* >.allUpTo (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colName)
294- public fun KProperty <* >.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
295- public fun KProperty <* >.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
225+ public fun SingleColumn <* >.allUntil (colName : String ): ColumnSet <Any ?> = allUntil(pathOf(colName))
226+ public fun SingleColumn <* >.allUntil (column : AnyColumnReference ): ColumnSet <Any ?> = allUntil(column.path())
296227
297228 // endregion
298229
299230 // endregion
300231
301- // region groups
302-
303232 public fun SingleColumn <* >.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
304233 children { it.isColumnGroup() && filter(it.asColumnGroup()) } as ColumnSet <AnyRow >
305234
306- public fun String.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
307- toColumnAccessor().groups(filter)
308-
309- public fun KProperty <* >.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
310- toColumnAccessor().groups(filter)
311-
312- // endregion
313-
314- // region children
315-
316- public fun ColumnSet <* >.children (predicate : (ColumnWithPath <Any ?>) -> Boolean = { true }): ColumnSet <Any ?> =
235+ public fun <C > ColumnSet<C>.children (predicate : (ColumnWithPath <Any ?>) -> Boolean = { true }): ColumnSet <Any ?> =
317236 transform { it.flatMap { it.children().filter { predicate(it) } } }
318237
319238 public fun ColumnGroupReference.children (): ColumnSet <Any ?> = transformSingle { it.children() }
320239
321- // endregion
322-
323240 public operator fun <C > List<DataColumn<C>>.get (range : IntRange ): ColumnSet <C > =
324241 ColumnsList (subList(range.first, range.last + 1 ))
325242
@@ -329,7 +246,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
329246 transform { it.mapNotNull { it.getChild(colName) } }
330247
331248 public operator fun <C > ColumnSet <* >.get (column : ColumnReference <C >): ColumnSet <C > = cols(column)
332- public operator fun <C > ColumnSet <* >.get (column : KProperty <C >): ColumnSet <C > = cols(column)
333249
334250 public fun SingleColumn<AnyRow>.take (n : Int ): ColumnSet <* > = transformSingle { it.children().take(n) }
335251 public fun SingleColumn<AnyRow>.takeLast (n : Int ): ColumnSet <* > = transformSingle { it.children().takeLast(n) }
@@ -355,8 +271,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
355271 public fun ColumnSet <* >.startsWith (prefix : CharSequence ): ColumnSet <Any ?> = cols { it.name.startsWith(prefix) }
356272 public fun ColumnSet <* >.endsWith (suffix : CharSequence ): ColumnSet <Any ?> = cols { it.name.endsWith(suffix) }
357273
358- public fun <C > ColumnSet<C>.except (vararg other : ColumnSet <* >): ColumnSet <* > = except(other.toColumns ())
359- public fun <C > ColumnSet<C>.except (vararg other : String ): ColumnSet <* > = except(other.toColumns ())
274+ public fun <C > ColumnSet<C>.except (vararg other : ColumnSet <* >): ColumnSet <* > = except(other.toColumnSet ())
275+ public fun <C > ColumnSet<C>.except (vararg other : String ): ColumnSet <* > = except(other.toColumnSet ())
360276
361277 public fun <C > ColumnSet<C?>.withoutNulls (): ColumnSet <C > = transform { it.filter { ! it.hasNulls } } as ColumnSet <C >
362278
@@ -381,18 +297,9 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
381297 toColumnAccessor().into(column.columnName)
382298
383299 public infix fun <C > ColumnReference<C>.named (newName : String ): ColumnReference <C > = renamedReference(newName)
384- public infix fun <C > ColumnReference<C>.named (nameFrom : ColumnReference <* >): ColumnReference <C > = named(nameFrom.name)
385- public infix fun <C > ColumnReference<C>.named (nameFrom : KProperty <* >): ColumnReference <C > = named(nameFrom.columnName)
300+ public infix fun <C > ColumnReference<C>.named (name : KProperty <* >): ColumnReference <C > = named(name.columnName)
386301
387302 public infix fun String.named (newName : String ): ColumnReference <Any ?> = toColumnAccessor().named(newName)
388- public infix fun String.named (nameFrom : ColumnReference <* >): ColumnReference <Any ?> = toColumnAccessor().named(nameFrom.name)
389- public infix fun String.named (nameFrom : KProperty <* >): ColumnReference <Any ?> = toColumnAccessor().named(nameFrom.columnName)
390-
391- public infix fun <C > KProperty<C>.named (newName : String ): ColumnReference <C > = toColumnAccessor().named(newName)
392-
393- public infix fun <C > KProperty<C>.named (nameFrom : ColumnReference <* >): ColumnReference <C > = toColumnAccessor().named(nameFrom.name)
394-
395- public infix fun <C > KProperty<C>.named (nameFrom : KProperty <* >): ColumnReference <C > = toColumnAccessor().named(nameFrom.columnName)
396303
397304 // region and
398305
@@ -433,21 +340,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
433340 // endregion
434341
435342 public fun <C > ColumnSet<C>.distinct (): ColumnSet <C > = DistinctColumnSet (this )
436-
437- public fun <C > String.dfsOf (type : KType , predicate : (ColumnWithPath <C >) -> Boolean = { true }): ColumnSet <* > =
438- toColumnAccessor().dfsOf(type, predicate)
439-
440- public fun <C > KProperty <* >.dfsOf (type : KType , predicate : (ColumnWithPath <C >) -> Boolean = { true }): ColumnSet <* > =
441- toColumnAccessor().dfsOf(type, predicate)
442-
443- public fun String.colsOf (type : KType ): ColumnSet <Any ?> = toColumnAccessor().colsOf(type)
444- public fun KProperty <* >.colsOf (type : KType ): ColumnSet <Any ?> = toColumnAccessor().colsOf(type)
445-
446- public fun <C > String.colsOf (type : KType , filter : (DataColumn <C >) -> Boolean ): ColumnSet <Any ?> =
447- toColumnAccessor().colsOf(type, filter)
448-
449- public fun <C > KProperty <* >.colsOf (type : KType , filter : (DataColumn <C >) -> Boolean ): ColumnSet <Any ?> =
450- toColumnAccessor().colsOf(type, filter)
451343}
452344
453345public inline fun <T , reified R > ColumnsSelectionDsl<T>.expr (
@@ -458,6 +350,7 @@ public inline fun <T, reified R> ColumnsSelectionDsl<T>.expr(
458350
459351internal fun <T , C > ColumnsSelector <T , C >.filter (predicate : (ColumnWithPath <C >) -> Boolean ): ColumnsSelector <T , C > =
460352 { this @filter(it, it).filter(predicate) }
353+ // internal fun Columns<*>.filter(predicate: (AnyCol) -> Boolean) = transform { it.filter { predicate(it.data) } }
461354
462355internal fun ColumnSet <* >.colsInternal (predicate : (AnyCol ) -> Boolean ) =
463356 transform { it.flatMap { it.children().filter { predicate(it.data) } } }
0 commit comments