Skip to content

Commit d8635b0

Browse files
committed
Creating a way to allow Kandy to create a custom GroupBy class by the GroupByInternal interface
1 parent feb491b commit d8635b0

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
1111
import org.jetbrains.kotlinx.dataframe.annotations.Refine
1212
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
1313
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
14-
import org.jetbrains.kotlinx.dataframe.impl.GroupByImpl
14+
import org.jetbrains.kotlinx.dataframe.impl.GroupByInternal
1515
import org.jetbrains.kotlinx.dataframe.impl.aggregation.PivotImpl
1616
import org.jetbrains.kotlinx.dataframe.impl.api.getPivotColumnPaths
1717
import org.jetbrains.kotlinx.dataframe.impl.api.groupByImpl
@@ -101,7 +101,7 @@ public fun <T, G> GroupBy<T, G>.toDataFrame(groupedColumnName: String? = null):
101101
internal().df.rename(groups).into(groupedColumnName)
102102
}
103103

104-
internal fun <T, G> GroupBy<T, G>.internal(): GroupByImpl<T, G> = this as GroupByImpl<T, G>
104+
internal fun <T, G> GroupBy<T, G>.internal(): GroupByInternal<T, G> = this as GroupByInternal<T, G>
105105

106106
public interface Grouped<out T> : Aggregatable<T>
107107

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/GroupByImpl.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.jetbrains.kotlinx.dataframe.api.getColumnsWithPaths
1616
import org.jetbrains.kotlinx.dataframe.api.isColumnGroup
1717
import org.jetbrains.kotlinx.dataframe.api.minus
1818
import org.jetbrains.kotlinx.dataframe.api.pathOf
19+
import org.jetbrains.kotlinx.dataframe.api.toDataFrame
1920
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
2021
import org.jetbrains.kotlinx.dataframe.impl.aggregation.AggregatableInternal
2122
import org.jetbrains.kotlinx.dataframe.impl.aggregation.GroupByReceiverImpl
@@ -29,14 +30,26 @@ import org.jetbrains.kotlinx.dataframe.ncol
2930
import org.jetbrains.kotlinx.dataframe.nrow
3031
import org.jetbrains.kotlinx.dataframe.values
3132

33+
/**
34+
* Internal implementation interface for [GroupBy].
35+
*
36+
* While [df] should be hidden in the [GroupBy] DSL, it must be accessible when running
37+
* [GroupBy.toDataFrame].
38+
*
39+
* This interface is public to allow Kandy to implement it.
40+
*/
41+
public interface GroupByInternal<T, G> : GroupBy<T, G> {
42+
public val df: DataFrame<T>
43+
}
44+
3245
/**
3346
* @property df DataFrame containing [groups] column and key columns. Represents GroupBy.
3447
*/
3548
internal class GroupByImpl<T, G>(
36-
val df: DataFrame<T>,
49+
override val df: DataFrame<T>,
3750
override val groups: FrameColumn<G>,
3851
internal val keyColumnsInGroups: ColumnsSelector<G, *>,
39-
) : GroupBy<T, G>,
52+
) : GroupByInternal<T, G>,
4053
AggregatableInternal<G> {
4154

4255
override val keys by lazy { df - groups }

0 commit comments

Comments
 (0)