Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.jetbrains.kotlinx.dataframe

import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.ColumnSelectionDsl
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
import org.jetbrains.kotlinx.dataframe.api.cast
Expand All @@ -26,8 +27,10 @@ public interface ColumnsContainer<out T> : ColumnsScope<T> {

// region columns

@RequiredByIntellijPlugin
public fun columns(): List<AnyCol>

@RequiredByIntellijPlugin
public fun columnsCount(): Int

public fun containsColumn(name: String): Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
import org.jetbrains.kotlinx.dataframe.annotations.HasSchema
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
import org.jetbrains.kotlinx.dataframe.annotations.Refine
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl
import org.jetbrains.kotlinx.dataframe.api.add
import org.jetbrains.kotlinx.dataframe.api.cast
Expand Down Expand Up @@ -73,6 +74,7 @@ public interface DataFrame<out T> :
*
* @return The number of rows in the [DataFrame].
*/
@RequiredByIntellijPlugin
public fun rowsCount(): Int

public operator fun iterator(): Iterator<DataRow<T>> = rows().iterator()
Expand All @@ -97,6 +99,7 @@ public interface DataFrame<out T> :

// region get rows

@RequiredByIntellijPlugin
public operator fun get(index: Int): DataRow<T>

public operator fun get(indices: Iterable<Int>): DataFrame<T> = getRows(indices)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.jetbrains.kotlinx.dataframe

import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
import org.jetbrains.kotlinx.dataframe.annotations.HasSchema
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.next
import org.jetbrains.kotlinx.dataframe.api.prev
import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
Expand Down Expand Up @@ -53,6 +54,7 @@ public interface DataRow<out T> {

public operator fun get(path: ColumnPath): Any? = owner.get(path)[index]

@RequiredByIntellijPlugin
public operator fun get(name: String): Any?

public fun getColumnGroup(columnName: String): AnyRow {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.jetbrains.kotlinx.dataframe.annotations

/**
* Marks API used by Kotlin DataFrame IntelliJ Plugin.
*
* Such API should remain stable:
* - It should not be moved, renamed, or removed.
* - The number of parameters and their types should not change.
*
* If changes to such API are required, they should first be supported in the Kotlin DataFrame IntelliJ Plugin.
*/
internal annotation class RequiredByIntellijPlugin
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
Expand Down Expand Up @@ -167,6 +168,7 @@ public operator fun ColumnsContainer<*>.contains(column: KProperty<*>): Boolean

// region rows

@RequiredByIntellijPlugin
public fun <T> DataFrame<T>.rows(): Iterable<DataRow<T>> =
object : Iterable<DataRow<T>> {
override fun iterator() =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import org.jetbrains.kotlinx.dataframe.RowExpression
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
import org.jetbrains.kotlinx.dataframe.annotations.CandidateForRemoval
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
import org.jetbrains.kotlinx.dataframe.impl.columnName
import org.jetbrains.kotlinx.dataframe.impl.owner
Expand All @@ -32,6 +33,7 @@ public inline fun <reified R> AnyRow.valuesOf(): List<R> = values().filterIsInst

// region DataSchema
@DataSchema
@RequiredByIntellijPlugin
public data class NameValuePair<V>(val name: String, val value: V)

// Without these overloads row.transpose().name or row.map { name } won't resolve
Expand All @@ -56,6 +58,7 @@ public val DataRow<NameValuePair<*>>.value: Any?
public inline fun <reified R> AnyRow.namedValuesOf(): List<NameValuePair<R>> =
values().zip(columnNames()).filter { it.first is R }.map { NameValuePair(it.second, it.first as R) }

@RequiredByIntellijPlugin
public fun AnyRow.namedValues(): List<NameValuePair<Any?>> =
values().zip(columnNames()) { value, name -> NameValuePair(name, value) }

Expand Down Expand Up @@ -172,6 +175,7 @@ public inline fun <T> DataRow<T>.diffOrNull(expression: RowExpression<T, Long>):
public inline fun <T> DataRow<T>.diffOrNull(expression: RowExpression<T, Float>): Float? =
prev()?.let { p -> expression(this, this) - expression(p, p) }

@RequiredByIntellijPlugin
public fun AnyRow.columnsCount(): Int = df().ncol

public fun AnyRow.columnNames(): List<String> = df().columnNames()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.jetbrains.kotlinx.dataframe.api
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.annotations.ColumnName
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.codeGen.CodeGenerator
import org.jetbrains.kotlinx.dataframe.codeGen.MarkerVisibility
import org.jetbrains.kotlinx.dataframe.codeGen.NameNormalizer
Expand Down Expand Up @@ -268,6 +269,7 @@ public val NameNormalizer.Companion.default: NameNormalizer get() = NameNormaliz
* @see CodeString.print
*/
@JvmInline
@RequiredByIntellijPlugin
public value class CodeString(public val value: String) {
override fun toString(): String = value
}
Expand Down Expand Up @@ -327,6 +329,7 @@ public inline fun <reified T> DataFrame<T>.generateCode(
replaceWith = ReplaceWith(GENERATE_CODE_REPLACE2),
level = DeprecationLevel.WARNING,
)
@RequiredByIntellijPlugin
public fun <T> DataFrame<T>.generateCode(
markerName: String,
fields: Boolean = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,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.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.impl.api.compileTimeSchemaImpl
import org.jetbrains.kotlinx.dataframe.impl.owner
import org.jetbrains.kotlinx.dataframe.impl.schema.extractSchema
Expand All @@ -16,6 +17,7 @@ public fun AnyRow.schema(): DataFrameSchema = owner.schema()

// region DataFrame

@RequiredByIntellijPlugin
public fun AnyFrame.schema(): DataFrameSchema = extractSchema()

// endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,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.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
import org.jetbrains.kotlinx.dataframe.impl.nameGenerator
import org.jetbrains.kotlinx.dataframe.util.DEPRECATED_ACCESS_API
Expand All @@ -28,6 +29,7 @@ public interface ValueCount {

internal val defaultCountColumnName: String = ValueCount::count.name

@RequiredByIntellijPlugin
public fun <T> DataColumn<T>.valueCounts(
sort: Boolean = true,
ascending: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.kotlinx.dataframe.AnyBaseCol
import org.jetbrains.kotlinx.dataframe.AnyCol
import org.jetbrains.kotlinx.dataframe.AnyRow
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.ColumnsSelectionDsl
import org.jetbrains.kotlinx.dataframe.impl.asList
import org.jetbrains.kotlinx.dataframe.impl.columnName
Expand Down Expand Up @@ -82,6 +83,7 @@ public interface BaseColumn<out T> : ColumnReference<T> {

public fun values(): Iterable<T>

@RequiredByIntellijPlugin
public fun toList(): List<T> = values().asList()

public fun toSet(): Set<T>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@ package org.jetbrains.kotlinx.dataframe.impl

import org.jetbrains.kotlinx.dataframe.AnyFrame
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.ValueCount
import org.jetbrains.kotlinx.dataframe.api.count
import org.jetbrains.kotlinx.dataframe.api.map

// Needed to attach an expanded node with lazily evaluated expressions to DataFrame debug view
@Suppress("unused")
@RequiredByIntellijPlugin
internal class Info(val df: AnyFrame)

internal class Counts(val value: Any?, val count: Int) {
override fun toString(): String = "$value -> $count"
}

@RequiredByIntellijPlugin
internal fun DataFrame<ValueCount>.render(): List<Counts> = map { Counts(it[0], it.count) }
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.LocalTime
import org.jetbrains.kotlinx.dataframe.AnyCol
import org.jetbrains.kotlinx.dataframe.AnyFrame
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
import org.jetbrains.kotlinx.dataframe.api.asDataFrame
import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
Expand Down Expand Up @@ -54,6 +55,7 @@ internal fun renderType(column: ColumnSchema) =
else -> throw NotImplementedError()
}

@RequiredByIntellijPlugin
internal fun renderType(type: KType?): String {
return when (type?.classifier) {
null -> "*"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.jetbrains.kotlinx.dataframe.impl.columns

import org.jetbrains.kotlinx.dataframe.BuildConfig
import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
import org.jetbrains.kotlinx.dataframe.impl.isArray
import org.jetbrains.kotlinx.dataframe.impl.isPrimitiveArray
Expand Down Expand Up @@ -50,10 +51,13 @@ internal abstract class DataColumnImpl<T>(

protected val distinct = distinct ?: lazy { values.toSet() }

@RequiredByIntellijPlugin
override fun name() = name

@RequiredByIntellijPlugin
override fun values() = values

@RequiredByIntellijPlugin
override fun type() = type

override fun toSet() = distinct.value
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.jetbrains.kotlinx.dataframe.jupyter

import org.jetbrains.kotlinx.dataframe.AnyFrame
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin

/**
* Allows for disabling the rows limit when generating a DISPLAY output in Jupyter.
*/
@RequiredByIntellijPlugin
public data class DisableRowsLimitWrapper(public val value: AnyFrame)
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.kotlinx.dataframe.AnyCol
import org.jetbrains.kotlinx.dataframe.AnyFrame
import org.jetbrains.kotlinx.dataframe.AnyRow
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin
import org.jetbrains.kotlinx.dataframe.api.Convert
import org.jetbrains.kotlinx.dataframe.api.FormatClause
import org.jetbrains.kotlinx.dataframe.api.FormattedFrame
Expand Down Expand Up @@ -50,6 +51,7 @@ public object KotlinNotebookPluginUtils {
* Returns a subset of rows from the given dataframe for rendering.
* It's used for example for dynamic pagination in Kotlin Notebook Plugin.
*/
@RequiredByIntellijPlugin
public fun getRowsSubsetForRendering(dataFrameLike: Any?, startIdx: Int, endIdx: Int): DisableRowsLimitWrapper =
when (dataFrameLike) {
null -> throw IllegalArgumentException("Dataframe is null")
Expand All @@ -76,6 +78,7 @@ public object KotlinNotebookPluginUtils {
*
* @return The sorted dataframe.
*/
@RequiredByIntellijPlugin
public fun sortByColumns(dataFrameLike: Any?, columnPaths: List<List<String>>, desc: List<Boolean>): AnyFrame =
when (dataFrameLike) {
null -> throw IllegalArgumentException("Dataframe is null")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.jetbrains.kotlinx.dataframe.io;

import org.jetbrains.kotlinx.dataframe.DataFrame;
import org.jetbrains.kotlinx.dataframe.annotations.RequiredByIntellijPlugin;

import java.util.Collections;

class JsonFacadeForDebugger {
Expand All @@ -10,6 +12,7 @@ class JsonFacadeForDebugger {
* DO NOT BREAK ABI OF THIS METHOD!!
* Keep it for backward compatibility, create a new method if signature must change
*/
@RequiredByIntellijPlugin
static String convertToJson(DataFrame<?> df, int rowLimit, Integer nestedRowLimit) {
return JsonKt.toJsonWithMetadata(df, rowLimit, nestedRowLimit, false, Collections.emptyList(), false);
}
Expand Down