From 355b9855bccbb28c1040cd5bac5a9674a22c1a16 Mon Sep 17 00:00:00 2001 From: Carlo Maria Proietti Date: Thu, 25 Sep 2025 11:27:20 +0200 Subject: [PATCH 1/5] adding none to data frame --- .../jetbrains/kotlinx/dataframe/api/none.kt | 24 +++++++++++++++++++ .../dataframe/api/UtilFunctionsTest.kt | 6 +++++ 2 files changed, 30 insertions(+) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt index 828e3c7c89..3409e3287d 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt @@ -1,6 +1,8 @@ package org.jetbrains.kotlinx.dataframe.api import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.DataRow +import org.jetbrains.kotlinx.dataframe.RowFilter import org.jetbrains.kotlinx.dataframe.columns.ColumnSet import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate @@ -52,3 +54,25 @@ public interface NoneColumnsSelectionDsl { } // endregion + +// region DataFrame + +/** + * Returns `true` if none of the rows in this [DataFrame] satisfies the given [predicate]. + * + * {@include [org.jetbrains.kotlinx.dataframe.documentation.RowFilterDescription]} + * + * ### Example + * ```kotlin + * // Check if there is not any row where "age" is greater than 18 + * val hasNoAdults = df.none { age > 18 } + * ``` + * + * @param predicate A [RowFilter] lambda that takes a [DataRow] (as both `this` and `it`) + * and returns `true` if none of the rows should be considered a match. + * @return `true` if none of the rows satisfies the [predicate], `false` otherwise. + * @see [DataFrame.any] + */ +public inline fun DataFrame.none(predicate: RowFilter): Boolean = rows().none { predicate(it, it) } + +// endregion diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt index a29c37dffd..16752560c3 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt @@ -24,6 +24,12 @@ class UtilFunctionsTest : TestBase() { df.any { "city"() == "Berlin" } shouldBe false } + @Test + fun `DataFrame none`() { + df.none { "age"() > 40 && "isHappy"() } shouldBe false + df.none { "city"() == "Berlin" } shouldBe true + } + @Test fun `DataColumn between`() { val ages = listOf(15, 45, 20, 40, 30, 20, 30) From cde9eb8812ddfe0954e34c2e1ba8bac3414624fa Mon Sep 17 00:00:00 2001 From: Carlo Maria Proietti Date: Mon, 29 Sep 2025 16:20:03 +0200 Subject: [PATCH 2/5] translating the function --- .../jetbrains/kotlinx/dataframe/api/none.kt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt index 3409e3287d..2e8a810458 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt @@ -8,6 +8,28 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl +// region DataFrame + +/** + * Returns `true` if none of the rows in this [DataFrame] satisfies the given [predicate]. + * + * {@include [org.jetbrains.kotlinx.dataframe.documentation.RowFilterDescription]} + * + * ### Example + * ```kotlin + * // Check if there is not any row where "age" is greater than 18 + * val hasNoAdults = df.none { age > 18 } + * ``` + * + * @param predicate A [RowFilter] lambda that takes a [DataRow] (as both `this` and `it`) + * and returns `true` if none of the rows should be considered a match. + * @return `true` if none of the rows satisfies the [predicate], `false` otherwise. + * @see [DataFrame.any] + */ +public inline fun DataFrame.none(predicate: RowFilter): Boolean = rows().none { predicate(it, it) } + +// endregion + // region ColumnsSelectionDsl /** @@ -54,25 +76,3 @@ public interface NoneColumnsSelectionDsl { } // endregion - -// region DataFrame - -/** - * Returns `true` if none of the rows in this [DataFrame] satisfies the given [predicate]. - * - * {@include [org.jetbrains.kotlinx.dataframe.documentation.RowFilterDescription]} - * - * ### Example - * ```kotlin - * // Check if there is not any row where "age" is greater than 18 - * val hasNoAdults = df.none { age > 18 } - * ``` - * - * @param predicate A [RowFilter] lambda that takes a [DataRow] (as both `this` and `it`) - * and returns `true` if none of the rows should be considered a match. - * @return `true` if none of the rows satisfies the [predicate], `false` otherwise. - * @see [DataFrame.any] - */ -public inline fun DataFrame.none(predicate: RowFilter): Boolean = rows().none { predicate(it, it) } - -// endregion From b3f4e1d1b41ff68b79be15cf9d22eeee23128070 Mon Sep 17 00:00:00 2001 From: Carlo Maria Proietti Date: Mon, 29 Sep 2025 18:02:33 +0200 Subject: [PATCH 3/5] add DataColumn.none --- .../org/jetbrains/kotlinx/dataframe/api/none.kt | 11 +++++++++++ .../kotlinx/dataframe/api/UtilFunctionsTest.kt | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt index 2e8a810458..3e9f53c6c4 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt @@ -1,13 +1,24 @@ package org.jetbrains.kotlinx.dataframe.api +import org.jetbrains.kotlinx.dataframe.DataColumn import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow +import org.jetbrains.kotlinx.dataframe.Predicate import org.jetbrains.kotlinx.dataframe.RowFilter import org.jetbrains.kotlinx.dataframe.columns.ColumnSet import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver +import org.jetbrains.kotlinx.dataframe.columns.size +import org.jetbrains.kotlinx.dataframe.columns.values import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl +// region DataColumn + +/** Returns `true` if none of the [values] match the given [predicate] or [values] is empty. */ +public fun DataColumn.none(predicate: Predicate): Boolean = values.none(predicate) + +// endregion + // region DataFrame /** diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt index 16752560c3..7b8e2ea174 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/UtilFunctionsTest.kt @@ -18,6 +18,13 @@ class UtilFunctionsTest : TestBase() { ageCol.any { it > 90 } shouldBe false } + @Test + fun `DataColumn none`() { + val ageCol = df["age"] as DataColumn + ageCol.none { it > 40 } shouldBe false + ageCol.none { it > 90 } shouldBe true + } + @Test fun `DataFrame any`() { df.any { "age"() > 40 && "isHappy"() } shouldBe true From 29da8c9e9e0da5743090ff34fab4f6ad33e09fb2 Mon Sep 17 00:00:00 2001 From: Carlo Maria Proietti Date: Tue, 30 Sep 2025 07:52:30 +0200 Subject: [PATCH 4/5] fix doc --- .../src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt index 3e9f53c6c4..a1a7f84f9a 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl // region DataColumn -/** Returns `true` if none of the [values] match the given [predicate] or [values] is empty. */ +/** Returns `true` if none of the [values] match the given [predicate] */ public fun DataColumn.none(predicate: Predicate): Boolean = values.none(predicate) // endregion From 6748efdcfb11e5b66ac08d0d3e5a133daaec4fcc Mon Sep 17 00:00:00 2001 From: Jolan Rensen Date: Wed, 1 Oct 2025 11:32:34 +0200 Subject: [PATCH 5/5] ran ktLintFormat and apiDump --- core/api/core.api | 5 +++++ .../main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/api/core.api b/core/api/core.api index 283e186f54..8c2b056804 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -3471,6 +3471,11 @@ public abstract interface class org/jetbrains/kotlinx/dataframe/api/NoneColumnsS public abstract interface class org/jetbrains/kotlinx/dataframe/api/NoneColumnsSelectionDsl$Grammar$PlainDslName { } +public final class org/jetbrains/kotlinx/dataframe/api/NoneKt { + public static final fun none (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lkotlin/jvm/functions/Function1;)Z + public static final fun none (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/jvm/functions/Function2;)Z +} + public final class org/jetbrains/kotlinx/dataframe/api/NullabilityException : java/lang/Exception { public fun ()V } diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt index a1a7f84f9a..29c32bb6ca 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt @@ -7,7 +7,6 @@ import org.jetbrains.kotlinx.dataframe.Predicate import org.jetbrains.kotlinx.dataframe.RowFilter import org.jetbrains.kotlinx.dataframe.columns.ColumnSet import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver -import org.jetbrains.kotlinx.dataframe.columns.size import org.jetbrains.kotlinx.dataframe.columns.values import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl