diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/DataRowApi.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/DataRowApi.kt index cc2c6dfd57..2ea17dcaa0 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/DataRowApi.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/DataRowApi.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyColumnReference -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -30,13 +29,13 @@ import kotlin.reflect.KProperty import kotlin.reflect.KType @Deprecated(MESSAGE_SHORTCUT, ReplaceWith(IS_EMPTY_REPLACE), DeprecationLevel.WARNING) -public fun AnyRow.isEmpty(): Boolean = owner.columns().all { it[index] == null } +public fun DataRow<*>.isEmpty(): Boolean = owner.columns().all { it[index] == null } @Suppress("DEPRECATION_ERROR") @Deprecated(MESSAGE_SHORTCUT, ReplaceWith(IS_NOT_EMPTY_REPLACE), DeprecationLevel.WARNING) -public fun AnyRow.isNotEmpty(): Boolean = !isEmpty() +public fun DataRow<*>.isNotEmpty(): Boolean = !isEmpty() -public inline fun AnyRow.valuesOf(): List = values().filterIsInstance() +public inline fun DataRow<*>.valuesOf(): List = values().filterIsInstance() // region DataSchema @DataSchema @@ -62,50 +61,50 @@ public val DataRow>.value: Any? // endregion -public inline fun AnyRow.namedValuesOf(): List> = +public inline fun DataRow<*>.namedValuesOf(): List> = values().zip(columnNames()).filter { it.first is R }.map { NameValuePair(it.second, it.first as R) } @RequiredByIntellijPlugin -public fun AnyRow.namedValues(): List> = +public fun DataRow<*>.namedValues(): List> = values().zip(columnNames()) { value, name -> NameValuePair(name, value) } // region getValue -public fun AnyRow.getValue(columnName: String): T = get(columnName) as T +public fun DataRow<*>.getValue(columnName: String): T = get(columnName) as T @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun AnyRow.getValue(column: ColumnReference): T = get(column) +public fun DataRow<*>.getValue(column: ColumnReference): T = get(column) @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun AnyRow.getValue(column: KProperty): T = get(column) +public fun DataRow<*>.getValue(column: KProperty): T = get(column) -public fun AnyRow.getValueOrNull(columnName: String): T? = getOrNull(columnName) as T? +public fun DataRow<*>.getValueOrNull(columnName: String): T? = getOrNull(columnName) as T? @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun AnyRow.getValueOrNull(column: KProperty): T? = getValueOrNull(column.columnName) +public fun DataRow<*>.getValueOrNull(column: KProperty): T? = getValueOrNull(column.columnName) // endregion // region contains -public fun AnyRow.containsKey(columnName: String): Boolean = owner.containsColumn(columnName) +public fun DataRow<*>.containsKey(columnName: String): Boolean = owner.containsColumn(columnName) @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun AnyRow.containsKey(column: AnyColumnReference): Boolean = owner.containsColumn(column) +public fun DataRow<*>.containsKey(column: AnyColumnReference): Boolean = owner.containsColumn(column) @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun AnyRow.containsKey(column: KProperty<*>): Boolean = owner.containsColumn(column) +public fun DataRow<*>.containsKey(column: KProperty<*>): Boolean = owner.containsColumn(column) -public operator fun AnyRow.contains(column: AnyColumnReference): Boolean = containsKey(column) +public operator fun DataRow<*>.contains(column: AnyColumnReference): Boolean = containsKey(column) @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public operator fun AnyRow.contains(column: KProperty<*>): Boolean = containsKey(column) +public operator fun DataRow<*>.contains(column: KProperty<*>): Boolean = containsKey(column) // endregion @@ -183,11 +182,11 @@ public inline fun DataRow.diffOrNull(expression: RowExpression) prev()?.let { p -> expression(this, this) - expression(p, p) } @RequiredByIntellijPlugin -public fun AnyRow.columnsCount(): Int = df().ncol +public fun DataRow<*>.columnsCount(): Int = df().ncol -public fun AnyRow.columnNames(): List = df().columnNames() +public fun DataRow<*>.columnNames(): List = df().columnNames() -public fun AnyRow.columnTypes(): List = df().columnTypes() +public fun DataRow<*>.columnTypes(): List = df().columnTypes() @Suppress("DEPRECATION_ERROR") @Deprecated(MESSAGE_SHORTCUT, ReplaceWith(GET_ROW_REPLACE), DeprecationLevel.WARNING) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt index 8fdd94da4e..6549f06f5c 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt @@ -1,11 +1,8 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyBaseCol import org.jetbrains.kotlinx.dataframe.AnyCol import org.jetbrains.kotlinx.dataframe.AnyColumnGroupAccessor import org.jetbrains.kotlinx.dataframe.AnyColumnReference -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -51,7 +48,7 @@ import kotlin.reflect.KProperty replaceWith = ReplaceWith(ADD_VARARG_COLUMNS_REPLACE), level = DeprecationLevel.WARNING, ) -public fun DataFrame.add(vararg columns: AnyBaseCol): DataFrame = addAll(columns.asIterable()) +public fun DataFrame.add(vararg columns: BaseColumn<*>): DataFrame = addAll(columns.asIterable()) /** * Adds new [columns] to the end of this [DataFrame] (at the top level). @@ -65,7 +62,7 @@ public fun DataFrame.add(vararg columns: AnyBaseCol): DataFrame = addA * @throws [UnequalColumnSizesException] if columns in an expected result have different sizes. * @return new [DataFrame] with added columns. */ -public fun DataFrame.addAll(vararg columns: AnyBaseCol): DataFrame = addAll(columns.asIterable()) +public fun DataFrame.addAll(vararg columns: BaseColumn<*>): DataFrame = addAll(columns.asIterable()) /** * Adds new [columns] to the end of this [DataFrame] (at the top level). @@ -79,7 +76,7 @@ public fun DataFrame.addAll(vararg columns: AnyBaseCol): DataFrame = a * @throws [UnequalColumnSizesException] if columns in an expected result have different sizes. * @return new [DataFrame] with added columns. */ -public fun DataFrame.addAll(columns: Iterable): DataFrame = +public fun DataFrame.addAll(columns: Iterable>): DataFrame = dataFrameOf(columns() + columns).cast() /** @@ -100,7 +97,7 @@ public fun DataFrame.addAll(columns: Iterable): DataFrame replaceWith = ReplaceWith(ADD_VARARG_FRAMES_REPLACE), level = DeprecationLevel.WARNING, ) -public fun DataFrame.add(vararg dataFrames: AnyFrame): DataFrame = addAll(dataFrames.asIterable()) +public fun DataFrame.add(vararg dataFrames: DataFrame<*>): DataFrame = addAll(dataFrames.asIterable()) /** * Adds all columns from the given [dataFrames] to the end of this [DataFrame] (at the top level). @@ -117,7 +114,7 @@ public fun DataFrame.add(vararg dataFrames: AnyFrame): DataFrame = add */ @Refine @Interpretable("DataFrameAddAll") -public fun DataFrame.addAll(vararg dataFrames: AnyFrame): DataFrame = addAll(dataFrames.asIterable()) +public fun DataFrame.addAll(vararg dataFrames: DataFrame<*>): DataFrame = addAll(dataFrames.asIterable()) /** * Adds all columns from the given [dataFrames] to the end of this [DataFrame] (at the top level). @@ -133,7 +130,7 @@ public fun DataFrame.addAll(vararg dataFrames: AnyFrame): DataFrame = * @return new [DataFrame] with added columns. */ @JvmName("addAllFrames") -public fun DataFrame.addAll(dataFrames: Iterable): DataFrame = +public fun DataFrame.addAll(dataFrames: Iterable>): DataFrame = addAll(dataFrames.flatMap { it.columns() }) // endregion @@ -154,7 +151,7 @@ public interface AddDataRow : DataRow { * * @throws IndexOutOfBoundsException when called on a successive row that doesn't have new value yet */ - public fun AnyRow.newValue(): C + public fun DataRow<*>.newValue(): C } /** diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/addId.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/addId.kt index 4a177e8e81..7a79701d97 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/addId.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/addId.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyCol -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload import org.jetbrains.kotlinx.dataframe.annotations.Interpretable @@ -11,7 +10,7 @@ import org.jetbrains.kotlinx.dataframe.util.DEPRECATED_ACCESS_API // region DataColumn -public fun AnyCol.addId(columnName: String = "id"): AnyFrame = toDataFrame().addId(columnName) +public fun AnyCol.addId(columnName: String = "id"): DataFrame<*> = toDataFrame().addId(columnName) // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/all.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/all.kt index 36637b55f5..a0ad715f9e 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/all.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/all.kt @@ -50,7 +50,7 @@ public fun DataColumn.allNulls(): Boolean = // region DataRow -public fun AnyRow.allNA(): Boolean = owner.columns().all { it[index()].isNA } +public fun DataRow<*>.allNA(): Boolean = owner.columns().all { it[index()].isNA } // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/cast.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/cast.kt index 901c2f61df..116271a0f4 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/cast.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/cast.kt @@ -3,8 +3,6 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyCol -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow @@ -23,9 +21,9 @@ import org.jetbrains.kotlinx.dataframe.impl.api.convertToImpl import kotlin.reflect.typeOf @Check -public fun AnyFrame.cast(): DataFrame = this as DataFrame +public fun DataFrame<*>.cast(): DataFrame = this as DataFrame -public inline fun AnyFrame.cast(verify: Boolean = true): DataFrame = +public inline fun DataFrame<*>.cast(verify: Boolean = true): DataFrame = if (verify) { convertToImpl( typeOf(), @@ -36,7 +34,7 @@ public inline fun AnyFrame.cast(verify: Boolean = true): DataFrame AnyFrame.castTo( +public inline fun DataFrame<*>.castTo( @Suppress("UNUSED_PARAMETER") schemaFrom: DataFrame, verify: Boolean = true, ): DataFrame = cast(verify = verify) @@ -66,14 +64,14 @@ public inline fun AnyFrame.castTo( * } * ``` */ -public inline fun AnyFrame.castTo( +public inline fun DataFrame<*>.castTo( @Suppress("UNUSED_PARAMETER") schemaFrom: Function>, verify: Boolean = true, ): DataFrame = cast(verify = verify) -public fun AnyRow.cast(): DataRow = this as DataRow +public fun DataRow<*>.cast(): DataRow = this as DataRow -public inline fun AnyRow.cast(verify: Boolean = true): DataRow = df().cast(verify)[0] +public inline fun DataRow<*>.cast(verify: Boolean = true): DataRow = df().cast(verify)[0] @Interpretable("AnyColCast") public fun AnyCol.cast(): DataColumn = this as DataColumn diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colGroups.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colGroups.kt index a1cbca71de..c8f62e5a8f 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colGroups.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colGroups.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.Predicate @@ -109,7 +108,7 @@ public interface ColGroupsColumnsSelectionDsl { * `df.`[select][DataFrame.select]` { `[colGroups][ColumnsSelectionDsl.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }` */ @Interpretable("ColGroups0") - public fun ColumnSet<*>.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun ColumnSet<*>.colGroups(filter: Predicate> = { true }): ColumnSet> = columnGroupsInternal(filter) /** @@ -121,7 +120,7 @@ public interface ColGroupsColumnsSelectionDsl { * `df.`[select][DataFrame.select]` { `[colGroups][ColumnsSelectionDsl.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }` */ @Interpretable("ColGroups1") - public fun ColumnsSelectionDsl<*>.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun ColumnsSelectionDsl<*>.colGroups(filter: Predicate> = { true }): ColumnSet> = asSingleColumn().columnGroupsInternal(filter) /** @@ -133,7 +132,7 @@ public interface ColGroupsColumnsSelectionDsl { * `df.`[select][DataFrame.select]` { myColGroup.`[colGroups][SingleColumn.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }` */ @Interpretable("ColGroups2") - public fun SingleColumn>.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun SingleColumn>.colGroups(filter: Predicate> = { true }): ColumnSet> = this.ensureIsColumnGroup().columnGroupsInternal(filter) /** @@ -144,7 +143,7 @@ public interface ColGroupsColumnsSelectionDsl { * * `df.`[select][DataFrame.select]` { "myColGroup".`[colGroups][String.colGroups]`() }` */ - public fun String.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun String.colGroups(filter: Predicate> = { true }): ColumnSet> = columnGroup(this).colGroups(filter) /** @@ -155,7 +154,7 @@ public interface ColGroupsColumnsSelectionDsl { * * `df.`[select][DataFrame.select]` { DataSchemaType::myColGroup.`[colGroups][KProperty.colGroups]`() }` */ - public fun KProperty<*>.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun KProperty<*>.colGroups(filter: Predicate> = { true }): ColumnSet> = columnGroup(this).colGroups(filter) /** @@ -164,7 +163,7 @@ public interface ColGroupsColumnsSelectionDsl { * * `df.`[select][DataFrame.select]` { "pathTo"["myGroupCol"].`[colGroups][ColumnPath.colGroups]`() }` */ - public fun ColumnPath.colGroups(filter: Predicate> = { true }): ColumnSet = + public fun ColumnPath.colGroups(filter: Predicate> = { true }): ColumnSet> = columnGroup(this).colGroups(filter) } @@ -177,6 +176,6 @@ public interface ColGroupsColumnsSelectionDsl { @Suppress("UNCHECKED_CAST") internal inline fun ColumnsResolver<*>.columnGroupsInternal( crossinline filter: (ColumnGroup<*>) -> Boolean, -): ColumnSet = colsInternal { it.isColumnGroup() && filter(it) }.cast() +): ColumnSet> = colsInternal { it.isColumnGroup() && filter(it) }.cast() // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colsOf.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colsOf.kt index eec81e6f6b..bac3e17765 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colsOf.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/colsOf.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnPath import org.jetbrains.kotlinx.dataframe.columns.ColumnSet import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver import org.jetbrains.kotlinx.dataframe.columns.SingleColumn -import org.jetbrains.kotlinx.dataframe.columns.size import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate import org.jetbrains.kotlinx.dataframe.documentation.Indent import org.jetbrains.kotlinx.dataframe.documentation.LineBreak diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/constructors.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/constructors.kt index d6162d9f8c..f0aa00995c 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/constructors.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/constructors.kt @@ -1,9 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyBaseCol import org.jetbrains.kotlinx.dataframe.AnyCol -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnGroupReference import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -12,6 +9,7 @@ import org.jetbrains.kotlinx.dataframe.RowExpression import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload import org.jetbrains.kotlinx.dataframe.annotations.Interpretable import org.jetbrains.kotlinx.dataframe.annotations.Refine +import org.jetbrains.kotlinx.dataframe.columns.BaseColumn import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup import org.jetbrains.kotlinx.dataframe.columns.ColumnPath @@ -128,17 +126,17 @@ public fun ColumnGroupReference.valueColumn(property: KProperty): ColumnA // region columnGroup -public fun columnGroup(): ColumnDelegate = column() +public fun columnGroup(): ColumnDelegate> = column() @JvmName("columnGroupTyped") public fun columnGroup(): ColumnDelegate> = column() -public fun columnGroup(name: String): ColumnAccessor = column(name) +public fun columnGroup(name: String): ColumnAccessor> = column(name) @JvmName("columnGroupTyped") public fun columnGroup(name: String): ColumnAccessor> = column(name) -public fun columnGroup(path: ColumnPath): ColumnAccessor = column(path) +public fun columnGroup(path: ColumnPath): ColumnAccessor> = column(path) @JvmName("columnGroupTyped") public fun columnGroup(path: ColumnPath): ColumnAccessor> = column(path) @@ -152,18 +150,19 @@ public fun columnGroup(property: KProperty>): ColumnAccessor columnGroup(property: KProperty): ColumnAccessor> = column(property.name) -public fun ColumnGroupReference.columnGroup(): ColumnDelegate = ColumnDelegate(this) +public fun ColumnGroupReference.columnGroup(): ColumnDelegate> = ColumnDelegate(this) @JvmName("columnGroupTyped") public fun ColumnGroupReference.columnGroup(): ColumnDelegate> = ColumnDelegate(this) -public fun ColumnGroupReference.columnGroup(name: String): ColumnAccessor = ColumnAccessorImpl(path() + name) +public fun ColumnGroupReference.columnGroup(name: String): ColumnAccessor> = + ColumnAccessorImpl(path() + name) @JvmName("columnGroupTyped") public fun ColumnGroupReference.columnGroup(name: String): ColumnAccessor> = ColumnAccessorImpl(path() + name) -public fun ColumnGroupReference.columnGroup(path: ColumnPath): ColumnAccessor = +public fun ColumnGroupReference.columnGroup(path: ColumnPath): ColumnAccessor> = ColumnAccessorImpl(this.path() + path) @JvmName("columnGroupTyped") @@ -185,17 +184,17 @@ public fun ColumnGroupReference.columnGroup(property: KProperty): ColumnA // region frameColumn -public fun frameColumn(): ColumnDelegate = column() +public fun frameColumn(): ColumnDelegate> = column() @JvmName("frameColumnTyped") public fun frameColumn(): ColumnDelegate> = column() -public fun frameColumn(name: String): ColumnAccessor = column(name) +public fun frameColumn(name: String): ColumnAccessor> = column(name) @JvmName("frameColumnTyped") public fun frameColumn(name: String): ColumnAccessor> = column(name) -public fun frameColumn(path: ColumnPath): ColumnAccessor = column(path) +public fun frameColumn(path: ColumnPath): ColumnAccessor> = column(path) @JvmName("frameColumnTyped") public fun frameColumn(path: ColumnPath): ColumnAccessor> = column(path) @@ -209,18 +208,19 @@ public fun frameColumn(property: KProperty>): ColumnAccessor frameColumn(property: KProperty>): ColumnAccessor> = column(property.name) -public fun ColumnGroupReference.frameColumn(): ColumnDelegate = ColumnDelegate(this) +public fun ColumnGroupReference.frameColumn(): ColumnDelegate> = ColumnDelegate(this) @JvmName("frameColumnTyped") public fun ColumnGroupReference.frameColumn(): ColumnDelegate> = ColumnDelegate(this) -public fun ColumnGroupReference.frameColumn(name: String): ColumnAccessor = ColumnAccessorImpl(path() + name) +public fun ColumnGroupReference.frameColumn(name: String): ColumnAccessor> = + ColumnAccessorImpl(path() + name) @JvmName("frameColumnTyped") public fun ColumnGroupReference.frameColumn(name: String): ColumnAccessor> = ColumnAccessorImpl(path() + name) -public fun ColumnGroupReference.frameColumn(path: ColumnPath): ColumnAccessor = +public fun ColumnGroupReference.frameColumn(path: ColumnPath): ColumnAccessor> = ColumnAccessorImpl(this.path() + path) @JvmName("frameColumnTyped") @@ -259,7 +259,7 @@ public inline fun columnOf(vararg values: T): DataColumn = allColsMakesColGroup = true, ).forceResolve() -public fun columnOf(vararg values: AnyBaseCol): DataColumn = columnOf(values.asIterable()).forceResolve() +public fun columnOf(vararg values: BaseColumn<*>): DataColumn> = columnOf(values.asIterable()).forceResolve() /** * Example: @@ -272,7 +272,7 @@ public fun columnOf(vararg values: AnyBaseCol): DataColumn = columnOf(va */ @Refine @Interpretable("ColumnOfPairs") -public fun columnOf(vararg columns: Pair): ColumnGroup<*> = +public fun columnOf(vararg columns: Pair>): ColumnGroup<*> = dataFrameOf( columns.map { (name, col) -> col.rename(name) @@ -281,7 +281,7 @@ public fun columnOf(vararg columns: Pair): ColumnGroup<*> = public fun columnOf(vararg frames: DataFrame): FrameColumn = columnOf(frames.asIterable()).forceResolve() -public fun columnOf(columns: Iterable): DataColumn = +public fun columnOf(columns: Iterable>): DataColumn> = DataColumn.createColumnGroup( name = "", df = dataFrameOf(columns), @@ -317,7 +317,7 @@ public inline fun column(values: Iterable): DataColumn = * @throws [UnequalColumnSizesException] if column size are not equal * @param columns columns for [DataFrame] */ -public fun dataFrameOf(columns: Iterable): DataFrame<*> { +public fun dataFrameOf(columns: Iterable>): DataFrame<*> { val cols = columns.map { it.unbox() } val nrow = if (cols.isEmpty()) 0 else cols[0].size return DataFrameImpl(cols, nrow) @@ -338,12 +338,12 @@ public fun dataFrameOf(columns: Iterable): DataFrame<*> { @Refine @JvmName("dataFrameOfColumns") @Interpretable("DataFrameOfPairs") -public fun dataFrameOf(vararg columns: Pair): DataFrame<*> = +public fun dataFrameOf(vararg columns: Pair>): DataFrame<*> = dataFrameOf(columns.map { (name, col) -> col.rename(name) }) public fun dataFrameOf(vararg header: ColumnReference<*>): DataFrameBuilder = DataFrameBuilder(header.map { it.name() }) -public fun dataFrameOf(vararg columns: AnyBaseCol): DataFrame<*> = dataFrameOf(columns.asIterable()) +public fun dataFrameOf(vararg columns: BaseColumn<*>): DataFrame<*> = dataFrameOf(columns.asIterable()) @Interpretable("DataFrameOf0") public fun dataFrameOf(vararg header: String): DataFrameBuilder = dataFrameOf(header.toList()) @@ -424,7 +424,7 @@ public class DataFrameBuilder(private val header: List) { ) } - public fun fill(nrow: Int, dataFrame: AnyFrame): DataFrame<*> = + public fun fill(nrow: Int, dataFrame: DataFrame<*>): DataFrame<*> = withColumns { name -> DataColumn.createFrameColumn( name = name, diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt index 9ffb19ac5f..aef0b3213a 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt @@ -12,9 +12,7 @@ import kotlinx.datetime.format.FormatStringsInDatetimeFormats import kotlinx.datetime.format.byUnicodePattern import kotlinx.datetime.toLocalDateTime import kotlinx.datetime.toStdlibInstant -import org.jetbrains.kotlinx.dataframe.AnyBaseCol import org.jetbrains.kotlinx.dataframe.AnyCol -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn @@ -480,7 +478,7 @@ public fun Convert.to(type: KType, parserOptions: ParserOptions? = nul asColumn { it.convertToTypeImpl(type, parserOptions) } @Deprecated(CONVERT_TO, ReplaceWith(CONVERT_TO_REPLACE), DeprecationLevel.ERROR) -public fun Convert.to(columnConverter: DataFrame.(DataColumn) -> AnyBaseCol): DataFrame = +public fun Convert.to(columnConverter: DataFrame.(DataColumn) -> BaseColumn<*>): DataFrame = df.replace(columns).with { columnConverter(df, it) } /** [Convert per row col][Convert.perRowCol] to provide a new value for every selected cell giving its column. */ @@ -4238,7 +4236,7 @@ public fun Convert>>.toDataFrames(containsColumns: Boolea * Defaults to `false`. * @return A new [DataColumn] with the values converted to [DataFrame]. */ -public fun DataColumn>>.toDataFrames(containsColumns: Boolean = false): DataColumn = +public fun DataColumn>>.toDataFrames(containsColumns: Boolean = false): DataColumn> = map { it.toDataFrame(containsColumns = containsColumns) } // region deprecated diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convertTo.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convertTo.kt index 08113dc91b..e26b9bf7fa 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convertTo.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convertTo.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -159,7 +158,7 @@ public class ConvertType( * @throws [TypeConversionException] if type converter failed to convert column values. * @return converted [DataFrame]. */ -public inline fun AnyFrame.convertTo( +public inline fun DataFrame<*>.convertTo( excessiveColumnsBehavior: ExcessiveColumns = ExcessiveColumns.Keep, noinline body: ConvertSchemaDsl.() -> Unit = {}, ): DataFrame = convertToImpl(typeOf(), true, excessiveColumnsBehavior, body).cast() @@ -195,7 +194,7 @@ public inline fun AnyFrame.convertTo( * @throws [TypeConversionException] if type converter failed to convert column values. * @return converted [DataFrame]. */ -public inline fun AnyFrame.convertTo( +public inline fun DataFrame<*>.convertTo( @Suppress("UNUSED_PARAMETER") schemaFrom: DataFrame, excessiveColumnsBehavior: ExcessiveColumns = ExcessiveColumns.Keep, noinline body: ConvertSchemaDsl.() -> Unit = {}, @@ -231,10 +230,10 @@ public inline fun AnyFrame.convertTo( * @throws [TypeConversionException] if type converter failed to convert column values. * @return converted [DataFrame]. */ -public fun AnyFrame.convertTo( +public fun DataFrame<*>.convertTo( schemaType: KType, excessiveColumnsBehavior: ExcessiveColumns = ExcessiveColumns.Keep, body: ConvertSchemaDsl.() -> Unit = {}, -): AnyFrame = convertToImpl(schemaType, true, excessiveColumnsBehavior, body) +): DataFrame<*> = convertToImpl(schemaType, true, excessiveColumnsBehavior, body) // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/count.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/count.kt index c8237a374b..0e4d0f19df 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/count.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/count.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow @@ -43,7 +42,7 @@ public fun DataColumn.count(predicate: Predicate? = null): Int = * @return the number of columns in this row. * @see [columnsCount]. */ -public fun AnyRow.count(): Int = columnsCount() +public fun DataRow<*>.count(): Int = columnsCount() /** * Counts the number of elements in the current row that satisfy the given [predicate]. @@ -52,7 +51,7 @@ public fun AnyRow.count(): Int = columnsCount() * The predicate should return `true` for elements to be counted. * @return The number of elements that satisfy the predicate. */ -public inline fun AnyRow.count(predicate: Predicate): Int = values().count(predicate) +public inline fun DataRow<*>.count(predicate: Predicate): Int = values().count(predicate) // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/countDistinct.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/countDistinct.kt index 5b2b949606..f3c407c3ee 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/countDistinct.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/countDistinct.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyColumnReference -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload @@ -29,7 +28,7 @@ import kotlin.reflect.KProperty * * @return The number of distinct rows in this [DataFrame]. */ -public fun AnyFrame.countDistinct(): Int = countDistinct { all() } +public fun DataFrame<*>.countDistinct(): Int = countDistinct { all() } /** * Returns number of distinct combinations of values in selected [columns\] in this [DataFrame]. diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/indices.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/indices.kt index f8ac6c995b..0667eb35f4 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/indices.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/indices.kt @@ -1,13 +1,12 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.RowFilter import org.jetbrains.kotlinx.dataframe.indices // region DataFrame -public fun AnyFrame.indices(): IntRange = 0 until rowsCount() +public fun DataFrame<*>.indices(): IntRange = 0 until rowsCount() public inline fun DataFrame.indices(filter: RowFilter): List = indices().filter { diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/into.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/into.kt index 3586ddc696..702a00ab3b 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/into.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/into.kt @@ -1,8 +1,7 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.RowExpression import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload import org.jetbrains.kotlinx.dataframe.annotations.Interpretable @@ -46,11 +45,11 @@ public fun GroupBy.into(column: String): DataFrame = toDataFrame @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun GroupBy.into(column: ColumnAccessor): DataFrame = toDataFrame(column.name()) +public fun GroupBy.into(column: ColumnAccessor>): DataFrame = toDataFrame(column.name()) @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun GroupBy.into(column: KProperty): DataFrame = toDataFrame(column.columnName) +public fun GroupBy.into(column: KProperty>): DataFrame = toDataFrame(column.columnName) /** * Aggregates this [GroupBy] into a [DataFrame] @@ -154,10 +153,10 @@ public fun ReducedGroupBy.into(columnName: String): DataFrame = @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun ReducedGroupBy.into(column: ColumnAccessor): DataFrame = into(column) { this } +public fun ReducedGroupBy.into(column: ColumnAccessor>): DataFrame = into(column) { this } @Deprecated(DEPRECATED_ACCESS_API) @AccessApiOverload -public fun ReducedGroupBy.into(column: KProperty): DataFrame = into(column) { this } +public fun ReducedGroupBy.into(column: KProperty>): DataFrame = into(column) { this } // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/isEmpty.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/isEmpty.kt index cc38be3bd3..785bd10c6b 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/isEmpty.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/isEmpty.kt @@ -1,13 +1,13 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame +import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.ncol import org.jetbrains.kotlinx.dataframe.nrow // region DataFrame -public fun AnyFrame.isEmpty(): Boolean = ncol == 0 || nrow == 0 +public fun DataFrame<*>.isEmpty(): Boolean = ncol == 0 || nrow == 0 -public fun AnyFrame.isNotEmpty(): Boolean = !isEmpty() +public fun DataFrame<*>.isNotEmpty(): Boolean = !isEmpty() // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/map.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/map.kt index 60cd0eb502..ffad1312c2 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/map.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/map.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -143,7 +142,7 @@ public fun ColumnsContainer.mapToColumn( @Refine @Interpretable("MapToFrame") -public inline fun DataFrame.mapToFrame(body: AddDsl.() -> Unit): AnyFrame { +public inline fun DataFrame.mapToFrame(body: AddDsl.() -> Unit): DataFrame<*> { val dsl = AddDsl(this) body(dsl) return dataFrameOf(dsl.columns) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/max.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/max.kt index d1ff0cd1e2..2c212fbb95 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/max.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/max.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -60,15 +59,15 @@ public inline fun ?> DataColumn.maxOfOrNul // region DataRow @Deprecated(ROW_MAX_OR_NULL, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMaxOrNull(): Nothing? = error(ROW_MAX_OR_NULL) +public fun DataRow<*>.rowMaxOrNull(): Nothing? = error(ROW_MAX_OR_NULL) @Deprecated(ROW_MAX, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMax(): Nothing = error(ROW_MAX) +public fun DataRow<*>.rowMax(): Nothing = error(ROW_MAX) -public inline fun > AnyRow.rowMaxOfOrNull(skipNaN: Boolean = skipNaNDefault): T? = +public inline fun > DataRow<*>.rowMaxOfOrNull(skipNaN: Boolean = skipNaNDefault): T? = Aggregators.max(skipNaN).aggregateOfRow(this) { colsOf() } -public inline fun > AnyRow.rowMaxOf(skipNaN: Boolean = skipNaNDefault): T = +public inline fun > DataRow<*>.rowMaxOf(skipNaN: Boolean = skipNaNDefault): T = rowMaxOfOrNull(skipNaN).suggestIfNull("rowMaxOf") // endregion @@ -489,10 +488,11 @@ public inline fun ?> DataColumn.maxOfOrNul maxOfOrNull(skipNaN = skipNaNDefault, selector = selector) @Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun > AnyRow.rowMaxOfOrNull(): T? = rowMaxOfOrNull(skipNaN = skipNaNDefault) +public inline fun > DataRow<*>.rowMaxOfOrNull(): T? = + rowMaxOfOrNull(skipNaN = skipNaNDefault) @Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun ?> AnyRow.rowMaxOf(): T & Any = rowMaxOf(skipNaN = skipNaNDefault) +public inline fun ?> DataRow<*>.rowMaxOf(): T & Any = rowMaxOf(skipNaN = skipNaNDefault) @Deprecated(MAX_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) public fun DataFrame.max(): DataRow = max(skipNaN = skipNaNDefault) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/mean.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/mean.kt index 892326763d..dcf0c1a918 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/mean.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/mean.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -48,10 +47,10 @@ public inline fun DataColumn.meanOf( // region DataRow -public fun AnyRow.rowMean(skipNaN: Boolean = skipNaNDefault): Double = +public fun DataRow<*>.rowMean(skipNaN: Boolean = skipNaNDefault): Double = Aggregators.mean(skipNaN).aggregateOfRow(this, primitiveOrMixedNumberColumns()) -public inline fun AnyRow.rowMeanOf(skipNaN: Boolean = skipNaNDefault): Double { +public inline fun DataRow<*>.rowMeanOf(skipNaN: Boolean = skipNaNDefault): Double { require(typeOf().isPrimitiveOrMixedNumber()) { "Type ${T::class.simpleName} is not a primitive number type. Mean only supports primitive number types." } @@ -306,10 +305,10 @@ public inline fun DataColumn.meanOf(crossinline expr meanOf(skipNaN = skipNaNDefault, expression = expression) @Deprecated(MEAN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public fun AnyRow.rowMean(): Double = rowMean(skipNaN = skipNaNDefault) +public fun DataRow<*>.rowMean(): Double = rowMean(skipNaN = skipNaNDefault) @Deprecated(MEAN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun AnyRow.rowMeanOf(): Double = rowMeanOf(skipNaN = skipNaNDefault) +public inline fun DataRow<*>.rowMeanOf(): Double = rowMeanOf(skipNaN = skipNaNDefault) @Deprecated(MEAN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) public fun DataFrame.mean(): DataRow = mean(skipNaN = skipNaNDefault) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/median.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/median.kt index 576a17ea18..ac723f4bdf 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/median.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/median.kt @@ -2,7 +2,6 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -108,24 +107,24 @@ public inline fun DataColumn.medianOfOrNull( // region DataRow @Deprecated(ROW_MEDIAN_OR_NULL, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMedianOrNull(): Nothing? = error(ROW_MEDIAN_OR_NULL) +public fun DataRow<*>.rowMedianOrNull(): Nothing? = error(ROW_MEDIAN_OR_NULL) @Deprecated(ROW_MEDIAN, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMedian(): Nothing = error(ROW_MEDIAN) +public fun DataRow<*>.rowMedian(): Nothing = error(ROW_MEDIAN) -public inline fun > AnyRow.rowMedianOfOrNull(): T? = +public inline fun > DataRow<*>.rowMedianOfOrNull(): T? = Aggregators.medianComparables().aggregateOfRow(this) { colsOf() } -public inline fun > AnyRow.rowMedianOf(): T = +public inline fun > DataRow<*>.rowMedianOf(): T = rowMedianOfOrNull().suggestIfNull("rowMedianOf") -public inline fun AnyRow.rowMedianOfOrNull( +public inline fun DataRow<*>.rowMedianOfOrNull( skipNaN: Boolean = skipNaNDefault, ): Double? where T : Comparable, T : Number = Aggregators.medianNumbers(skipNaN).aggregateOfRow(this) { colsOf() } -public inline fun AnyRow.rowMedianOf( +public inline fun DataRow<*>.rowMedianOf( skipNaN: Boolean = skipNaNDefault, ): Double where T : Comparable, T : Number = rowMedianOfOrNull(skipNaN).suggestIfNull("rowMedianOf") diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/min.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/min.kt index 6246e7205c..eed20c37f8 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/min.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/min.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -60,15 +59,15 @@ public inline fun ?> DataColumn.minOfOrNul // region DataRow @Deprecated(ROW_MIN_OR_NULL, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMinOrNull(): Nothing? = error(ROW_MIN_OR_NULL) +public fun DataRow<*>.rowMinOrNull(): Nothing? = error(ROW_MIN_OR_NULL) @Deprecated(ROW_MIN, level = DeprecationLevel.ERROR) -public fun AnyRow.rowMin(): Nothing = error(ROW_MIN) +public fun DataRow<*>.rowMin(): Nothing = error(ROW_MIN) -public inline fun > AnyRow.rowMinOfOrNull(skipNaN: Boolean = skipNaNDefault): T? = +public inline fun > DataRow<*>.rowMinOfOrNull(skipNaN: Boolean = skipNaNDefault): T? = Aggregators.min(skipNaN).aggregateOfRow(this) { colsOf() } -public inline fun > AnyRow.rowMinOf(skipNaN: Boolean = skipNaNDefault): T = +public inline fun > DataRow<*>.rowMinOf(skipNaN: Boolean = skipNaNDefault): T = rowMinOfOrNull(skipNaN).suggestIfNull("rowMinOf") // endregion @@ -489,10 +488,11 @@ public inline fun ?> DataColumn.minOfOrNul minOfOrNull(skipNaN = skipNaNDefault, selector = selector) @Deprecated(MIN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun > AnyRow.rowMinOfOrNull(): T? = rowMinOfOrNull(skipNaN = skipNaNDefault) +public inline fun > DataRow<*>.rowMinOfOrNull(): T? = + rowMinOfOrNull(skipNaN = skipNaNDefault) @Deprecated(MIN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun ?> AnyRow.rowMinOf(): T & Any = rowMinOf(skipNaN = skipNaNDefault) +public inline fun ?> DataRow<*>.rowMinOf(): T & Any = rowMinOf(skipNaN = skipNaNDefault) @Deprecated(MIN_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) public fun DataFrame.min(): DataRow = min(skipNaN = skipNaNDefault) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt index a7b2cf2e88..a44105cd35 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -95,5 +94,5 @@ public fun DataColumn.parse(options: ParserOptions? = null): DataColumn<* .also { if (it.isSubtypeOf() || it.isSubtypeOf()) error("Can't guess column type") } @JvmName("parseAnyFrameNullable") -public fun DataColumn.parse(options: ParserOptions? = null): DataColumn = +public fun DataColumn?>.parse(options: ParserOptions? = null): DataColumn?> = map { it?.parse(options) } diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/percentile.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/percentile.kt index be666a8448..4c88177cf5 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/percentile.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/percentile.kt @@ -2,7 +2,6 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -119,25 +118,25 @@ public inline fun DataColumn.percentileOfOrNull( // region DataRow @Deprecated(ROW_PERCENTILE_OR_NULL, level = DeprecationLevel.ERROR) -public fun AnyRow.rowPercentileOrNull(): Nothing? = error(ROW_PERCENTILE_OR_NULL) +public fun DataRow<*>.rowPercentileOrNull(): Nothing? = error(ROW_PERCENTILE_OR_NULL) @Deprecated(ROW_PERCENTILE, level = DeprecationLevel.ERROR) -public fun AnyRow.rowPercentile(): Nothing = error(ROW_PERCENTILE) +public fun DataRow<*>.rowPercentile(): Nothing = error(ROW_PERCENTILE) -public inline fun > AnyRow.rowPercentileOfOrNull(percentile: Double): T? = +public inline fun > DataRow<*>.rowPercentileOfOrNull(percentile: Double): T? = Aggregators.percentileComparables(percentile).aggregateOfRow(this) { colsOf() } -public inline fun > AnyRow.rowPercentileOf(percentile: Double): T = +public inline fun > DataRow<*>.rowPercentileOf(percentile: Double): T = rowPercentileOfOrNull(percentile).suggestIfNull("rowPercentileOf") -public inline fun AnyRow.rowPercentileOfOrNull( +public inline fun DataRow<*>.rowPercentileOfOrNull( percentile: Double, skipNaN: Boolean = skipNaNDefault, ): Double? where T : Comparable, T : Number = Aggregators.percentileNumbers(percentile, skipNaN).aggregateOfRow(this) { colsOf() } -public inline fun AnyRow.rowPercentileOf( +public inline fun DataRow<*>.rowPercentileOf( percentile: Double, skipNaN: Boolean = skipNaNDefault, ): Double diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt index f55e825481..6faaff4c02 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/replace.kt @@ -1,12 +1,12 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyBaseCol import org.jetbrains.kotlinx.dataframe.AnyCol import org.jetbrains.kotlinx.dataframe.ColumnsContainer import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload +import org.jetbrains.kotlinx.dataframe.columns.BaseColumn import org.jetbrains.kotlinx.dataframe.columns.ColumnReference import org.jetbrains.kotlinx.dataframe.columns.toColumnSet import org.jetbrains.kotlinx.dataframe.get @@ -60,7 +60,9 @@ public fun ReplaceClause.with(newColumns: List): DataFrame< /** * For an alternative supported in the compiler plugin use [Convert.asColumn] */ -public fun ReplaceClause.with(transform: ColumnsContainer.(DataColumn) -> AnyBaseCol): DataFrame { +public fun ReplaceClause.with( + transform: ColumnsContainer.(DataColumn) -> BaseColumn<*>, +): DataFrame { val removeResult = df.removeImpl(columns = columns) val toInsert = removeResult.removedColumns.map { @Suppress("UNCHECKED_CAST") diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/schema.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/schema.kt index 6b058d7446..2b93f98e6b 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/schema.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/schema.kt @@ -1,8 +1,7 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin import org.jetbrains.kotlinx.dataframe.impl.api.compileTimeSchemaImpl import org.jetbrains.kotlinx.dataframe.impl.owner @@ -11,14 +10,14 @@ import org.jetbrains.kotlinx.dataframe.schema.DataFrameSchema // region DataRow -public fun AnyRow.schema(): DataFrameSchema = owner.schema() +public fun DataRow<*>.schema(): DataFrameSchema = owner.schema() // endregion // region DataFrame @RequiredByIntellijPlugin -public fun AnyFrame.schema(): DataFrameSchema = extractSchema() +public fun DataFrame<*>.schema(): DataFrameSchema = extractSchema() // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/split.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/split.kt index 3a253b1060..df5299c8f1 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/split.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/split.kt @@ -337,7 +337,7 @@ public fun Split.inward( @Refine @Interpretable("SplitAnyFrameIntoColumns") -public fun Split.intoColumns(): DataFrame = +public fun > Split.intoColumns(): DataFrame = df.convert(columns).with { when { it == null -> null @@ -360,7 +360,7 @@ public inline fun , reified R> Split.intoRows(dropEmpty @JvmName("intoRowsFrame") @Refine @Interpretable("SplitAnyFrameRows") -public fun Split.intoRows(dropEmpty: Boolean = true): DataFrame = +public fun > Split.intoRows(dropEmpty: Boolean = true): DataFrame = by { it.rows() }.intoRows(dropEmpty) internal inline fun Convert.splitInplace( @@ -393,7 +393,7 @@ public fun SplitWithTransform.inplace(): DataFrame = // region DataColumn -public fun DataColumn>.splitInto(vararg names: String): AnyFrame = +public fun DataColumn>.splitInto(vararg names: String): DataFrame<*> = toDataFrame().split { this@splitInto }.into(*names) // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/std.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/std.kt index 7c0e431ff9..6e916bcb1a 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/std.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/std.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -49,10 +48,10 @@ public inline fun DataColumn.stdOf( // region DataRow -public fun AnyRow.rowStd(skipNaN: Boolean = skipNaNDefault, ddof: Int = ddofDefault): Double = +public fun DataRow<*>.rowStd(skipNaN: Boolean = skipNaNDefault, ddof: Int = ddofDefault): Double = Aggregators.std(skipNaN, ddof).aggregateOfRow(this, primitiveOrMixedNumberColumns()) -public inline fun AnyRow.rowStdOf( +public inline fun DataRow<*>.rowStdOf( skipNaN: Boolean = skipNaNDefault, ddof: Int = ddofDefault, ): Double { diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/sum.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/sum.kt index 93d042e6d9..6166c6b7f5 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/sum.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/sum.kt @@ -3,7 +3,6 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame @@ -77,45 +76,45 @@ public inline fun DataColumn.sumOf( // region DataRow -public fun AnyRow.rowSum(skipNaN: Boolean = skipNaNDefault): Number = +public fun DataRow<*>.rowSum(skipNaN: Boolean = skipNaNDefault): Number = Aggregators.sum(skipNaN).aggregateOfRow(this, primitiveOrMixedNumberColumns()) @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfShort") -public inline fun AnyRow.rowSumOf(_kClass: KClass = Short::class): Int = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Short::class): Int = rowSumOf(typeOf(), false) as Int @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfByte") -public inline fun AnyRow.rowSumOf(_kClass: KClass = Byte::class): Int = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Byte::class): Int = rowSumOf(typeOf(), false) as Int @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfInt") -public inline fun AnyRow.rowSumOf(_kClass: KClass = Int::class): Int = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Int::class): Int = rowSumOf(typeOf(), false) as Int @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfLong") -public inline fun AnyRow.rowSumOf(_kClass: KClass = Long::class): Long = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Long::class): Long = rowSumOf(typeOf(), false) as Long @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfFloat") -public inline fun AnyRow.rowSumOf( +public inline fun DataRow<*>.rowSumOf( skipNaN: Boolean = skipNaNDefault, _kClass: KClass = Float::class, ): Float = rowSumOf(typeOf(), skipNaN) as Float @Suppress("FINAL_UPPER_BOUND") @JvmName("rowSumOfDouble") -public inline fun AnyRow.rowSumOf( +public inline fun DataRow<*>.rowSumOf( skipNaN: Boolean = skipNaNDefault, _kClass: KClass = Double::class, ): Double = rowSumOf(typeOf(), skipNaN) as Double // unfortunately, we cannot make a `reified T : Number?` due to clashes -public fun AnyRow.rowSumOf(type: KType, skipNaN: Boolean = skipNaNDefault): Number { +public fun DataRow<*>.rowSumOf(type: KType, skipNaN: Boolean = skipNaNDefault): Number { require(type.isPrimitiveOrMixedNumber()) { "Type $type is not a primitive number type. Mean only supports primitive number types." } @@ -437,20 +436,20 @@ public inline fun DataColumn.sumOf(crossinline expre sumOf(skipNaN = skipNaNDefault, expression = expression) @Deprecated(SUM_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public fun AnyRow.rowSum(): Number = rowSum(skipNaN = skipNaNDefault) +public fun DataRow<*>.rowSum(): Number = rowSum(skipNaN = skipNaNDefault) @JvmName("rowSumOfFloat") @Deprecated(SUM_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun AnyRow.rowSumOf(_kClass: KClass = Float::class): Float = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Float::class): Float = rowSumOf(typeOf(), skipNaN = skipNaNDefault) as Float @JvmName("rowSumOfDouble") @Deprecated(SUM_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public inline fun AnyRow.rowSumOf(_kClass: KClass = Double::class): Double = +public inline fun DataRow<*>.rowSumOf(_kClass: KClass = Double::class): Double = rowSumOf(typeOf(), skipNaN = skipNaNDefault) as Double @Deprecated(SUM_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) -public fun AnyRow.rowSumOf(type: KType): Number = rowSumOf(type, skipNaN = skipNaNDefault) +public fun DataRow<*>.rowSumOf(type: KType): Number = rowSumOf(type, skipNaN = skipNaNDefault) @Deprecated(SUM_NO_SKIPNAN, level = DeprecationLevel.HIDDEN) public fun DataFrame.sum(): DataRow = sum(skipNaN = skipNaNDefault) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toDataFrame.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toDataFrame.kt index 55cf30f662..f1d35d3b8f 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toDataFrame.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toDataFrame.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyBaseCol -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow @@ -9,6 +8,7 @@ import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload import org.jetbrains.kotlinx.dataframe.annotations.DataSchema import org.jetbrains.kotlinx.dataframe.annotations.Interpretable import org.jetbrains.kotlinx.dataframe.annotations.Refine +import org.jetbrains.kotlinx.dataframe.columns.BaseColumn import org.jetbrains.kotlinx.dataframe.columns.ColumnPath import org.jetbrains.kotlinx.dataframe.impl.ColumnNameGenerator import org.jetbrains.kotlinx.dataframe.impl.api.createDataFrameImpl @@ -65,7 +65,7 @@ public fun Iterable>.toDataFrame(): DataFrame { } @JvmName("toDataFrameMapStringAnyNullable") -public fun Iterable>.toDataFrame(): AnyFrame { +public fun Iterable>.toDataFrame(): DataFrame<*> { val list = asList() if (list.isEmpty()) return DataFrame.empty() @@ -86,10 +86,10 @@ public fun Iterable>.toDataFrame(): AnyFrame { } @JvmName("toDataFrameAnyColumn") -public fun Iterable.toDataFrame(): AnyFrame = dataFrameOf(this) +public fun Iterable>.toDataFrame(): DataFrame<*> = dataFrameOf(this) @JvmName("toDataFramePairColumnPathAnyCol") -public fun Iterable>.toDataFrameFromPairs(): DataFrame { +public fun Iterable>>.toDataFrameFromPairs(): DataFrame { val nameGenerator = ColumnNameGenerator() val columnNames = mutableListOf() val columnGroups = mutableListOf>?>() @@ -143,12 +143,12 @@ public fun Iterable>.toDataFrameFromPairs(): Da } @JvmName("toDataFrameColumnPathAnyNullable") -public fun Iterable>>.toDataFrameFromPairs(): AnyFrame = +public fun Iterable>>.toDataFrameFromPairs(): DataFrame<*> = map { it.first to createColumnGuessingType(it.first.last(), it.second.asList()) }.toDataFrameFromPairs() -public fun Iterable>>.toDataFrameFromPairs(): AnyFrame = +public fun Iterable>>.toDataFrameFromPairs(): DataFrame<*> = map { ColumnPath(it.first) to createColumnGuessingType(it.first, it.second.asList()) }.toDataFrameFromPairs() @@ -192,13 +192,13 @@ public abstract class CreateDataFrameDsl : TraversePropertiesDsl { public abstract val source: Iterable - public abstract fun add(column: AnyBaseCol, path: ColumnPath? = null) + public abstract fun add(column: BaseColumn<*>, path: ColumnPath? = null) @Interpretable("ToDataFrameDslIntoString") - public infix fun AnyBaseCol.into(name: String): Unit = add(this, pathOf(name)) + public infix fun BaseColumn<*>.into(name: String): Unit = add(this, pathOf(name)) @Interpretable("ToDataFrameDslIntoPath") - public infix fun AnyBaseCol.into(path: ColumnPath): Unit = add(this, path) + public infix fun BaseColumn<*>.into(path: ColumnPath): Unit = add(this, path) @Interpretable("Properties0") public abstract fun properties( @@ -259,13 +259,13 @@ public interface ValueProperty { // region Create DataFrame from Map -public fun Map>.toDataFrame(): AnyFrame = +public fun Map>.toDataFrame(): DataFrame<*> = map { DataColumn.createByInference(it.key, it.value.asList()) }.toDataFrame() @JvmName("toDataFrameColumnPathAnyNullable") -public fun Map>.toDataFrame(): AnyFrame = +public fun Map>.toDataFrame(): DataFrame<*> = map { it.key to DataColumn.createByInference( name = it.key.last(), @@ -293,7 +293,7 @@ public fun Map>.toDataFrame(): AnyFrame = */ @Refine @Interpretable("ValuesListsToDataFrame") -public fun List>.toDataFrame(header: List?, containsColumns: Boolean = false): AnyFrame = +public fun List>.toDataFrame(header: List?, containsColumns: Boolean = false): DataFrame<*> = when { containsColumns -> { mapIndexedNotNull { index, list -> diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toList.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toList.kt index 672a87ed5c..76daae1b4e 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toList.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toList.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.impl.api.toSequenceImpl import kotlin.reflect.typeOf @@ -9,6 +8,6 @@ import kotlin.reflect.typeOf public inline fun DataFrame.toList(): List = toSequenceImpl(typeOf()).toList() as List -public inline fun AnyFrame.toListOf(): List = toSequenceImpl(typeOf()).toList() as List +public inline fun DataFrame<*>.toListOf(): List = toSequenceImpl(typeOf()).toList() as List // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toSequence.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toSequence.kt index c1fb266c8a..5f9ef36e9f 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toSequence.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/toSequence.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.impl.api.toSequenceImpl import kotlin.reflect.typeOf @@ -9,6 +8,6 @@ import kotlin.reflect.typeOf public inline fun DataFrame.toSequence(): Sequence = toSequenceImpl(typeOf()) as Sequence -public inline fun AnyFrame.toSequenceOf(): Sequence = toSequenceImpl(typeOf()) as Sequence +public inline fun DataFrame<*>.toSequenceOf(): Sequence = toSequenceImpl(typeOf()) as Sequence // endregion diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/transpose.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/transpose.kt index 1645ad0ae3..272ca1ccd6 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/transpose.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/transpose.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.impl.api.convertTo import org.jetbrains.kotlinx.dataframe.impl.columnName import org.jetbrains.kotlinx.dataframe.impl.owner @@ -12,13 +13,13 @@ import kotlin.reflect.typeOf // region DataRow -public fun AnyRow.transpose(): DataFrame> { +public fun DataRow<*>.transpose(): DataFrame> { val valueColumn = DataColumn.createByInference(NameValuePair<*>::value.columnName, values) val nameColumn = owner.columnNames().toValueColumn(NameValuePair<*>::name.name) return dataFrameOf(nameColumn, valueColumn).cast() } -public inline fun AnyRow.transposeTo(): DataFrame> = transposeTo(typeOf()) +public inline fun DataRow<*>.transposeTo(): DataFrame> = transposeTo(typeOf()) @PublishedApi internal fun AnyRow.transposeTo(type: KType): DataFrame> { diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/typeConversions.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/typeConversions.kt index 33127f62ac..65a7560aef 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/typeConversions.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/typeConversions.kt @@ -1,9 +1,6 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyBaseCol import org.jetbrains.kotlinx.dataframe.AnyCol -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnGroupAccessor import org.jetbrains.kotlinx.dataframe.ColumnSelector import org.jetbrains.kotlinx.dataframe.DataColumn @@ -12,6 +9,7 @@ import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload import org.jetbrains.kotlinx.dataframe.annotations.Interpretable import org.jetbrains.kotlinx.dataframe.annotations.Refine +import org.jetbrains.kotlinx.dataframe.columns.BaseColumn import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup import org.jetbrains.kotlinx.dataframe.columns.ColumnPath @@ -49,9 +47,9 @@ public fun ColumnPath.toColumnOf(): ColumnAccessor = ColumnAccessorImpl(t public fun ColumnPath.toColumnAccessor(): ColumnAccessor = ColumnAccessorImpl(this) -public fun ColumnPath.toColumnGroupAccessor(): ColumnAccessor = ColumnAccessorImpl(this) +public fun ColumnPath.toColumnGroupAccessor(): ColumnAccessor> = ColumnAccessorImpl(this) -public fun ColumnPath.toFrameColumnAccessor(): ColumnAccessor = ColumnAccessorImpl(this) +public fun ColumnPath.toFrameColumnAccessor(): ColumnAccessor> = ColumnAccessorImpl(this) // endregion @@ -73,7 +71,7 @@ public fun KProperty.toColumnAccessor(): ColumnAccessor = ColumnAccess // region DataColumn -public fun AnyBaseCol.toDataFrame(): AnyFrame = dataFrameOf(listOf(this)) +public fun BaseColumn<*>.toDataFrame(): DataFrame<*> = dataFrameOf(listOf(this)) @JvmName("asNumberAnyNullable") public fun DataColumn.asNumbers(): ValueColumn { @@ -345,18 +343,18 @@ public inline fun Iterable.toColumn(property: KProperty): Data public fun Iterable.toPath(): ColumnPath = ColumnPath(asList()) -public fun Iterable.toColumnGroup(name: String): ColumnGroup<*> = dataFrameOf(this).asColumnGroup(name) +public fun Iterable>.toColumnGroup(name: String): ColumnGroup<*> = dataFrameOf(this).asColumnGroup(name) -public fun Iterable.toColumnGroup(column: ColumnGroupAccessor): ColumnGroup = +public fun Iterable>.toColumnGroup(column: ColumnGroupAccessor): ColumnGroup = dataFrameOf(this).cast().asColumnGroup(column) -public fun Iterable.toColumnGroupOf(name: String): ColumnGroup = toColumnGroup(name).cast() +public fun Iterable>.toColumnGroupOf(name: String): ColumnGroup = toColumnGroup(name).cast() // endregion // region DataFrame -public fun AnyFrame.toMap(): Map> = columns().associateBy({ it.name }, { it.toList() }) +public fun DataFrame<*>.toMap(): Map> = columns().associateBy({ it.name }, { it.toList() }) public fun DataFrame.asColumnGroup(name: String = ""): ColumnGroup = when (this) { @@ -402,7 +400,7 @@ public fun DataFrame.asGroupBy(selector: ColumnSelector DataRow.toDataFrame(): DataFrame = owner[index..index] -public fun AnyRow.toMap(): Map = df().columns().associate { it.name() to it[index] } +public fun DataRow<*>.toMap(): Map = df().columns().associate { it.name() to it[index] } public fun Map.toDataRow(): DataRow<*> { val df = mapValues { listOf(it.value) }.toDataFrame() diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/update.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/update.kt index 9211965097..5427e7cd73 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/update.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/update.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlinx.dataframe.api -import org.jetbrains.kotlinx.dataframe.AnyRow import org.jetbrains.kotlinx.dataframe.ColumnExpression import org.jetbrains.kotlinx.dataframe.ColumnsSelector import org.jetbrains.kotlinx.dataframe.DataColumn @@ -381,7 +380,7 @@ public fun Update.perCol(values: Map): DataFrame = */ @Refine @Interpretable("UpdatePerColRow") -public fun Update.perCol(values: AnyRow): DataFrame = perCol(values.toMap() as Map) +public fun Update.perCol(values: DataRow<*>): DataFrame = perCol(values.toMap() as Map) /** * @include [CommonUpdatePerColDoc]