Skip to content

Commit 4ec5020

Browse files
committed
Add extensions API for DataSchemas
We cannot use gradle plugin to generate them because gradle plugin depends on the 'core', and gradle cannot resolve this dependency to a published versions and instead resolves to a local project, which leads to a cyclic dependency between tasks.
1 parent d2ce34c commit 4ec5020

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.jetbrains.kotlinx.dataframe.api
22

3+
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
34
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
45
import org.jetbrains.kotlinx.dataframe.DataColumn
56
import org.jetbrains.kotlinx.dataframe.DataFrame
7+
import org.jetbrains.kotlinx.dataframe.DataRow
68
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
79
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
810
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
@@ -11,6 +13,7 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
1113
import kotlin.reflect.KProperty
1214
import kotlin.reflect.KType
1315

16+
// region DataSchema
1417
@DataSchema
1518
public interface ColumnDescription {
1619
public val name: String
@@ -28,6 +31,35 @@ public interface ColumnDescription {
2831
public val max: Any
2932
}
3033

34+
public val ColumnsContainer<ColumnDescription>.count: DataColumn<Int> @JvmName("ColumnDescription_count") get() = this["count"] as DataColumn<Int>
35+
public val DataRow<ColumnDescription>.count: Int @JvmName("ColumnDescription_count") get() = this["count"] as Int
36+
public val ColumnsContainer<ColumnDescription>.freq: DataColumn<Int> @JvmName("ColumnDescription_freq") get() = this["freq"] as DataColumn<Int>
37+
public val DataRow<ColumnDescription>.freq: Int @JvmName("ColumnDescription_freq") get() = this["freq"] as Int
38+
public val ColumnsContainer<ColumnDescription>.max: DataColumn<Any> @JvmName("ColumnDescription_max") get() = this["max"] as DataColumn<Any>
39+
public val DataRow<ColumnDescription>.max: Any @JvmName("ColumnDescription_max") get() = this["max"] as Any
40+
public val ColumnsContainer<ColumnDescription>.mean: DataColumn<Double> @JvmName("ColumnDescription_mean") get() = this["mean"] as DataColumn<Double>
41+
public val DataRow<ColumnDescription>.mean: Double @JvmName("ColumnDescription_mean") get() = this["mean"] as Double
42+
public val ColumnsContainer<ColumnDescription>.median: DataColumn<Any> @JvmName("ColumnDescription_median") get() = this["median"] as DataColumn<Any>
43+
public val DataRow<ColumnDescription>.median: Any @JvmName("ColumnDescription_median") get() = this["median"] as Any
44+
public val ColumnsContainer<ColumnDescription>.min: DataColumn<Any> @JvmName("ColumnDescription_min") get() = this["min"] as DataColumn<Any>
45+
public val DataRow<ColumnDescription>.min: Any @JvmName("ColumnDescription_min") get() = this["min"] as Any
46+
public val ColumnsContainer<ColumnDescription>.name: DataColumn<String> @JvmName("ColumnDescription_name") get() = this["name"] as DataColumn<String>
47+
public val DataRow<ColumnDescription>.name: String @JvmName("ColumnDescription_name") get() = this["name"] as String
48+
public val ColumnsContainer<ColumnDescription>.nulls: DataColumn<Int> @JvmName("ColumnDescription_nulls") get() = this["nulls"] as DataColumn<Int>
49+
public val DataRow<ColumnDescription>.nulls: Int @JvmName("ColumnDescription_nulls") get() = this["nulls"] as Int
50+
public val ColumnsContainer<ColumnDescription>.path: DataColumn<ColumnPath> @JvmName("ColumnDescription_path") get() = this["path"] as DataColumn<ColumnPath>
51+
public val DataRow<ColumnDescription>.path: ColumnPath @JvmName("ColumnDescription_path") get() = this["path"] as ColumnPath
52+
public val ColumnsContainer<ColumnDescription>.std: DataColumn<Double> @JvmName("ColumnDescription_std") get() = this["std"] as DataColumn<Double>
53+
public val DataRow<ColumnDescription>.std: Double @JvmName("ColumnDescription_std") get() = this["std"] as Double
54+
public val ColumnsContainer<ColumnDescription>.top: DataColumn<Any> @JvmName("ColumnDescription_top") get() = this["top"] as DataColumn<Any>
55+
public val DataRow<ColumnDescription>.top: Any @JvmName("ColumnDescription_top") get() = this["top"] as Any
56+
public val ColumnsContainer<ColumnDescription>.type: DataColumn<KType> @JvmName("ColumnDescription_type") get() = this["type"] as DataColumn<KType>
57+
public val DataRow<ColumnDescription>.type: KType @JvmName("ColumnDescription_type") get() = this["type"] as KType
58+
public val ColumnsContainer<ColumnDescription>.unique: DataColumn<Int> @JvmName("ColumnDescription_unique") get() = this["unique"] as DataColumn<Int>
59+
public val DataRow<ColumnDescription>.unique: Int @JvmName("ColumnDescription_unique") get() = this["unique"] as Int
60+
61+
// endregion
62+
3163
// region DataColumn
3264

3365
public fun <T> DataColumn<T>.describe(): DataFrame<ColumnDescription> = describeImpl(listOf(this))

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
11
package org.jetbrains.kotlinx.dataframe.api
22

33
import org.jetbrains.kotlinx.dataframe.Column
4+
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
45
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
56
import org.jetbrains.kotlinx.dataframe.DataColumn
67
import org.jetbrains.kotlinx.dataframe.DataFrame
8+
import org.jetbrains.kotlinx.dataframe.DataRow
79
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
810
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
911
import org.jetbrains.kotlinx.dataframe.impl.nameGenerator
1012
import kotlin.reflect.KProperty
1113
import kotlin.reflect.full.withNullability
1214
import kotlin.reflect.typeOf
1315

14-
// region DataColumn
16+
// region DataSchema
1517

1618
@DataSchema
1719
public interface ValueCount {
1820
public val count: Int
1921
}
2022

23+
public val ColumnsContainer<ValueCount>.count: DataColumn<Int> @JvmName("ValueCount_count") get() = this["count"] as DataColumn<Int>
24+
public val DataRow<ValueCount>.count: Int @JvmName("ValueCount_count") get() = this["count"] as Int
25+
26+
// endregion
27+
28+
// region DataColumn
29+
2130
internal val defaultCountColumnName: String = ValueCount::count.name
2231

2332
public fun <T> DataColumn<T>.valueCounts(

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/CodeGenerationTests.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.jetbrains.kotlinx.dataframe.AnyRow
66
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
77
import org.jetbrains.kotlinx.dataframe.DataColumn
88
import org.jetbrains.kotlinx.dataframe.DataRow
9+
import org.jetbrains.kotlinx.dataframe.api.ColumnDescription
10+
import org.jetbrains.kotlinx.dataframe.api.ValueCount
911
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
1012
import org.jetbrains.kotlinx.dataframe.api.dropNulls
1113
import org.jetbrains.kotlinx.dataframe.api.move
@@ -252,6 +254,16 @@ class CodeGenerationTests : BaseTest() {
252254
}
253255
}
254256

257+
@Test
258+
fun generateApi() {
259+
val generator = CodeGenerator.create()
260+
val valueCount = generator.generate<ValueCount>(InterfaceGenerationMode.None, extensionProperties = true)
261+
println(valueCount.declarations)
262+
println()
263+
val describe = generator.generate<ColumnDescription>(InterfaceGenerationMode.None, extensionProperties = true)
264+
println(describe.declarations)
265+
}
266+
255267
@Test
256268
fun patterns() {
257269
"""^[\d]""".toRegex().matches("3fds")

0 commit comments

Comments
 (0)