Skip to content

Commit 1f2889a

Browse files
Merge branch 'master' into website_docs_dev
2 parents 88dea91 + 06e0389 commit 1f2889a

File tree

43 files changed

+499
-151
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+499
-151
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ env:
1717
ALGOLIA_INDEX_NAME: prod_DATAFRAME_HELP
1818
ALGOLIA_KEY: ${{ secrets.ALGOLIA_KEY }}
1919
CONFIG_JSON_PRODUCT: Dataframe
20-
CONFIG_JSON_VERSION: '0.15'
20+
CONFIG_JSON_VERSION: '1.0'
2121

2222
jobs:
2323
build-job:

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
[![JetBrains incubator project](https://jb.gg/badges/incubator.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
33
[![Kotlin component alpha stability](https://img.shields.io/badge/project-alpha-kotlin.svg?colorA=555555&colorB=DB3683&label=&logo=kotlin&logoColor=ffffff&logoWidth=10)](https://kotlinlang.org/docs/components-stability.html)
44
[![Kotlin](https://img.shields.io/badge/kotlin-2.0.20-blue.svg?logo=kotlin)](http://kotlinlang.org)
5-
[![Dynamic XML Badge](https://img.shields.io/badge/dynamic/xml?url=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fjetbrains%2Fkotlinx%2Fdataframe%2Fmaven-metadata.xml&query=%2F%2Fversion%5Bnot%28contains%28text%28%29%2C%22dev%22%29%29%5D%5Blast%28%29%5D&label=Release%20version)](https://search.maven.org/artifact/org.jetbrains.kotlinx/dataframe)
5+
[![Dynamic XML Badge](https://img.shields.io/badge/dynamic/xml?url=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fjetbrains%2Fkotlinx%2Fdataframe%2Fmaven-metadata.xml&query=%2F%2Fversion%5Bnot%28contains%28text%28%29%2C%22dev%22%29%29%20and%20not%28text%28%29%3D%221727%22%29%20%5D%5Blast%28%29%5D&label=Release%20version)](https://search.maven.org/artifact/org.jetbrains.kotlinx/dataframe)
66
[![Dynamic XML Badge](https://img.shields.io/badge/dynamic/xml?url=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fjetbrains%2Fkotlinx%2Fdataframe%2Fmaven-metadata.xml&query=%2F%2Fversion%5Bcontains%28text%28%29%2C%22dev%22%29%5D%5Blast%28%29%5D&label=Dev%20version&color=yellow
77
)](https://search.maven.org/artifact/org.jetbrains.kotlinx/dataframe)
88
[![GitHub License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0)
@@ -46,13 +46,13 @@ Here's a [compiler plugin demo project](https://github.com/koperagen/df-plugin-d
4646
## Setup
4747

4848
```kotlin
49-
implementation("org.jetbrains.kotlinx:dataframe:0.15.0")
49+
implementation("org.jetbrains.kotlinx:dataframe:1.0.0-Beta1")
5050
```
5151

5252
Optional Gradle plugin for enhanced type safety and schema generation
5353
https://kotlin.github.io/dataframe/schemasgradle.html
5454
```kotlin
55-
id("org.jetbrains.kotlinx.dataframe") version "0.15.0"
55+
id("org.jetbrains.kotlinx.dataframe") version "1.0.0-Beta1"
5656
```
5757

5858
Check out the [custom setup page](https://kotlin.github.io/dataframe/gettingstartedgradleadvanced.html) if you don't need some of the formats as dependencies,
@@ -77,7 +77,7 @@ df.filter { "stargazers_count"<Int>() > 50 }.print()
7777

7878
Requires Gradle plugin to work
7979
```kotlin
80-
id("org.jetbrains.kotlinx.dataframe") version "0.15.0"
80+
id("org.jetbrains.kotlinx.dataframe") version "1.0.0-Beta1"
8181
```
8282

8383
Plugin generates extension properties API for provided sample of data. Column names and their types become discoverable in completion.
@@ -230,6 +230,7 @@ This table shows the mapping between main library component versions and minimum
230230
| 0.13.1 | 8 | 1.9.22 | 0.12.0-139 | 15.0.0 |
231231
| 0.14.1 | 8 | 2.0.20 | 0.12.0-139 | 17.0.0 |
232232
| 0.15.0 | 8 | 2.0.20 | 0.12.0-139 | 18.1.0 |
233+
| 1.0.0-Beta1 | 8 / 11 | 2.0.20 | 0.12.0-383 | 18.1.0 |
233234

234235
## Code of Conduct
235236

core/api/core.api

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,11 +2359,13 @@ public final class org/jetbrains/kotlinx/dataframe/api/Gather {
23592359
public fun <init> (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)V
23602360
public synthetic fun <init> (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
23612361
public final fun cast ()Lorg/jetbrains/kotlinx/dataframe/api/Gather;
2362-
public final fun copy (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lorg/jetbrains/kotlinx/dataframe/api/Gather;
2363-
public static synthetic fun copy$default (Lorg/jetbrains/kotlinx/dataframe/api/Gather;Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/api/Gather;
2364-
public fun equals (Ljava/lang/Object;)Z
2365-
public fun hashCode ()I
2366-
public fun toString ()Ljava/lang/String;
2362+
public final fun getColumns ()Lkotlin/jvm/functions/Function2;
2363+
public final fun getDf ()Lorg/jetbrains/kotlinx/dataframe/DataFrame;
2364+
public final fun getExplode ()Z
2365+
public final fun getFilter ()Lkotlin/jvm/functions/Function2;
2366+
public final fun getKeyTransform ()Lkotlin/jvm/functions/Function1;
2367+
public final fun getKeyType ()Lkotlin/reflect/KType;
2368+
public final fun getValueTransform ()Lkotlin/jvm/functions/Function1;
23672369
}
23682370

23692371
public final class org/jetbrains/kotlinx/dataframe/api/GatherKt {
@@ -5463,7 +5465,7 @@ public final class org/jetbrains/kotlinx/dataframe/exceptions/CellConversionExce
54635465
public final fun getRow ()Ljava/lang/Integer;
54645466
}
54655467

5466-
public final class org/jetbrains/kotlinx/dataframe/exceptions/ColumnNotFoundException : java/lang/RuntimeException, org/jetbrains/kotlinx/dataframe/exceptions/DataFrameException {
5468+
public final class org/jetbrains/kotlinx/dataframe/exceptions/ColumnNotFoundException : java/lang/RuntimeException, org/jetbrains/kotlinx/dataframe/exceptions/DataFrameError {
54675469
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
54685470
public final fun getColumnName ()Ljava/lang/String;
54695471
public fun getMessage ()Ljava/lang/String;
@@ -5474,11 +5476,11 @@ public final class org/jetbrains/kotlinx/dataframe/exceptions/ColumnTypeMismatch
54745476
public final fun getColumn ()Lorg/jetbrains/kotlinx/dataframe/DataColumn;
54755477
}
54765478

5477-
public abstract interface class org/jetbrains/kotlinx/dataframe/exceptions/DataFrameException {
5479+
public abstract interface class org/jetbrains/kotlinx/dataframe/exceptions/DataFrameError {
54785480
public abstract fun getMessage ()Ljava/lang/String;
54795481
}
54805482

5481-
public final class org/jetbrains/kotlinx/dataframe/exceptions/DuplicateColumnNamesException : java/lang/IllegalArgumentException, org/jetbrains/kotlinx/dataframe/exceptions/DataFrameException {
5483+
public final class org/jetbrains/kotlinx/dataframe/exceptions/DuplicateColumnNamesException : java/lang/IllegalArgumentException, org/jetbrains/kotlinx/dataframe/exceptions/DataFrameError {
54825484
public fun <init> (Ljava/util/List;)V
54835485
public final fun getAllColumnNames ()Ljava/util/List;
54845486
public final fun getDuplicatedNames ()Ljava/util/List;
@@ -5755,6 +5757,10 @@ public final class org/jetbrains/kotlinx/dataframe/impl/aggregation/receivers/Ag
57555757
public static final fun internal (Lorg/jetbrains/kotlinx/dataframe/aggregation/AggregateDsl;)Lorg/jetbrains/kotlinx/dataframe/impl/aggregation/receivers/AggregateInternalDsl;
57565758
}
57575759

5760+
public final class org/jetbrains/kotlinx/dataframe/impl/api/ConstructorsKt {
5761+
public static final fun withValuesImpl (Lkotlin/Pair;)Ljava/util/List;
5762+
}
5763+
57585764
public final class org/jetbrains/kotlinx/dataframe/impl/api/ConvertKt {
57595765
public static final fun convertRowColumnImpl (Lorg/jetbrains/kotlinx/dataframe/api/Convert;Lkotlin/reflect/KType;Lorg/jetbrains/kotlinx/dataframe/api/Infer;Lkotlin/jvm/functions/Function2;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
57605766
public static final fun withRowCellImpl (Lorg/jetbrains/kotlinx/dataframe/api/Convert;Lkotlin/reflect/KType;Lorg/jetbrains/kotlinx/dataframe/api/Infer;Lkotlin/jvm/functions/Function2;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
@@ -5915,7 +5921,7 @@ public final class org/jetbrains/kotlinx/dataframe/impl/io/FastDoubleParser {
59155921

59165922
public final class org/jetbrains/kotlinx/dataframe/impl/schema/DataFrameSchemaImpl : org/jetbrains/kotlinx/dataframe/schema/DataFrameSchema {
59175923
public fun <init> (Ljava/util/Map;)V
5918-
public fun compare (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;)Lorg/jetbrains/kotlinx/dataframe/schema/CompareResult;
5924+
public fun compare (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;Z)Lorg/jetbrains/kotlinx/dataframe/schema/CompareResult;
59195925
public fun equals (Ljava/lang/Object;)Z
59205926
public fun getColumns ()Ljava/util/Map;
59215927
public fun hashCode ()I
@@ -6668,7 +6674,8 @@ public final class org/jetbrains/kotlinx/dataframe/schema/CompareResult$Companio
66686674
}
66696675

66706676
public abstract interface class org/jetbrains/kotlinx/dataframe/schema/DataFrameSchema {
6671-
public abstract fun compare (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;)Lorg/jetbrains/kotlinx/dataframe/schema/CompareResult;
6677+
public abstract fun compare (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;Z)Lorg/jetbrains/kotlinx/dataframe/schema/CompareResult;
6678+
public static synthetic fun compare$default (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;ZILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/schema/CompareResult;
66726679
public abstract fun getColumns ()Ljava/util/Map;
66736680
}
66746681

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/constructors.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ public class DataFrameBuilder(private val header: List<String>) {
393393

394394
@JvmName("invoke1")
395395
internal fun withValues(values: Iterable<Any?>): DataFrame<*> =
396-
withValuesImpl(header, values.asList()).map { (name, values) ->
396+
(header to values.asList()).withValuesImpl().map { (name, values) ->
397397
DataColumn.createByInference(name, values)
398398
}.toDataFrame()
399399

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/gather.kt

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import org.jetbrains.kotlinx.dataframe.ColumnsSelector
44
import org.jetbrains.kotlinx.dataframe.DataFrame
55
import org.jetbrains.kotlinx.dataframe.RowValueFilter
66
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
7+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
8+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
79
import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor
810
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
911
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
@@ -15,6 +17,7 @@ import kotlin.reflect.typeOf
1517

1618
// region gather
1719

20+
@Interpretable("Gather0")
1821
public fun <T, C> DataFrame<T>.gather(selector: ColumnsSelector<T, C>): Gather<T, C, String, C> =
1922
Gather(
2023
df = this,
@@ -44,30 +47,76 @@ public fun <T, C> DataFrame<T>.gather(vararg columns: KProperty<C>): Gather<T, C
4447

4548
// endregion
4649

50+
@Interpretable("GatherWhere")
4751
public fun <T, C, K, R> Gather<T, C, K, R>.where(filter: RowValueFilter<T, C>): Gather<T, C, K, R> =
48-
copy(filter = this.filter and filter)
52+
Gather(
53+
df = df,
54+
columns = columns,
55+
filter = this.filter and filter,
56+
keyType = keyType,
57+
keyTransform = keyTransform,
58+
valueTransform = valueTransform,
59+
explode = explode,
60+
)
4961

62+
@Interpretable("GatherChangeType")
5063
public fun <T, C, K, R> Gather<T, C?, K, R>.notNull(): Gather<T, C, K, R> = where { it != null } as Gather<T, C, K, R>
5164

52-
public fun <T, C, K, R> Gather<T, C, K, R>.explodeLists(): Gather<T, C, K, R> = copy(explode = true)
65+
@Interpretable("GatherExplodeLists")
66+
public fun <T, C, K, R> Gather<T, C, K, R>.explodeLists(): Gather<T, C, K, R> =
67+
Gather(
68+
df = df,
69+
columns = columns,
70+
filter = filter,
71+
keyType = keyType,
72+
keyTransform = keyTransform,
73+
valueTransform = valueTransform,
74+
explode = true,
75+
)
5376

77+
@Interpretable("GatherMap")
5478
public inline fun <T, C, reified K, R> Gather<T, C, *, R>.mapKeys(
5579
noinline transform: (String) -> K,
5680
): Gather<T, C, K, R> =
57-
copy(keyTransform = transform as ((String) -> Nothing), keyType = typeOf<K>()) as Gather<T, C, K, R>
81+
Gather(
82+
df = df,
83+
columns = columns,
84+
filter = filter,
85+
keyType = typeOf<K>(),
86+
keyTransform = transform,
87+
valueTransform = valueTransform,
88+
explode = explode,
89+
)
5890

91+
@Interpretable("GatherMap")
5992
public fun <T, C, K, R> Gather<T, C, K, *>.mapValues(transform: (C) -> R): Gather<T, C, K, R> =
60-
copy(valueTransform = transform as ((C) -> Nothing)) as Gather<T, C, K, R>
93+
Gather(
94+
df = df,
95+
columns = columns,
96+
filter = filter,
97+
keyType = keyType,
98+
keyTransform = keyTransform,
99+
valueTransform = transform,
100+
explode = explode,
101+
)
61102

62-
public data class Gather<T, C, K, R>(
103+
public class Gather<T, C, K, R>(
104+
@PublishedApi
63105
internal val df: DataFrame<T>,
106+
@PublishedApi
64107
internal val columns: ColumnsSelector<T, C>,
108+
@PublishedApi
65109
internal val filter: RowValueFilter<T, C>? = null,
110+
@PublishedApi
66111
internal val keyType: KType? = null,
112+
@PublishedApi
67113
internal val keyTransform: ((String) -> K),
114+
@PublishedApi
68115
internal val valueTransform: ((C) -> R)? = null,
116+
@PublishedApi
69117
internal val explode: Boolean = false,
70118
) {
119+
@Interpretable("GatherChangeType")
71120
public fun <P> cast(): Gather<T, P, K, P> {
72121
// TODO: introduce GatherWithTransform to avoid this error
73122
require(valueTransform == null) { "Cast is not allowed to be called after `mapValues`" }
@@ -77,6 +126,8 @@ public data class Gather<T, C, K, R>(
77126

78127
// region into
79128

129+
@Refine
130+
@Interpretable("GatherInto")
80131
public fun <T, C, K, R> Gather<T, C, K, R>.into(keyColumn: String, valueColumn: String): DataFrame<T> =
81132
gatherImpl(keyColumn, valueColumn)
82133

@@ -100,6 +151,8 @@ public fun <T, C, K, R> Gather<T, C, K, R>.into(keyColumn: KProperty<K>, valueCo
100151

101152
// region keysInto
102153

154+
@Refine
155+
@Interpretable("GatherKeysInto")
103156
public fun <T, C, K, R> Gather<T, C, K, R>.keysInto(keyColumn: String): DataFrame<T> = gatherImpl(keyColumn, null)
104157

105158
@Deprecated(
@@ -120,6 +173,8 @@ public fun <T, C, K, R> Gather<T, C, K, R>.keysInto(keyColumn: KProperty<K>): Da
120173

121174
// region valuesInto
122175

176+
@Refine
177+
@Interpretable("GatherValuesInto")
123178
public fun <T, C, K, R> Gather<T, C, K, R>.valuesInto(valueColumn: String): DataFrame<T> = gatherImpl(null, valueColumn)
124179

125180
@Deprecated(

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/exceptions/ColumnNotFoundException.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package org.jetbrains.kotlinx.dataframe.exceptions
22

33
public class ColumnNotFoundException(public val columnName: String, public override val message: String) :
44
RuntimeException(),
5-
DataFrameException
5+
DataFrameError
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package org.jetbrains.kotlinx.dataframe.exceptions
22

33
/**
4-
* If DataFrame function used by compiler plugin as implementation detail throws this exception, [message] will be reported as warning
4+
* If DataFrame function used by compiler plugin as implementation detail throws exception
5+
* that implements this interface, [message] will be reported as warning
56
*/
6-
public interface DataFrameException {
7+
public interface DataFrameError {
78
public val message: String
89
}

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/exceptions/DuplicateColumnNamesException.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.jetbrains.kotlinx.dataframe.exceptions
22

33
public class DuplicateColumnNamesException(public val allColumnNames: List<String>) :
44
IllegalArgumentException(),
5-
DataFrameException {
5+
DataFrameError {
66

77
public val duplicatedNames: List<String> = allColumnNames
88
.groupBy { it }

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/aggregation/aggregators/inputHandlers/NumberInputHandler.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.inputHandlers
22

3-
import io.github.oshai.kotlinlogging.KotlinLogging
43
import org.jetbrains.kotlinx.dataframe.documentation.UnifyingNumbers
54
import org.jetbrains.kotlinx.dataframe.impl.UnifiedNumberTypeOptions
65
import org.jetbrains.kotlinx.dataframe.impl.aggregation.aggregators.Aggregator
@@ -22,8 +21,6 @@ import kotlin.reflect.full.isSubtypeOf
2221
import kotlin.reflect.full.withNullability
2322
import kotlin.reflect.typeOf
2423

25-
private val logger = KotlinLogging.logger { }
26-
2724
/**
2825
* Input handler for aggregators that can handle any (mixed) primitive [Number] type of input.
2926
*
@@ -107,14 +104,6 @@ internal class NumberInputHandler<out Return : Any?> : AggregatorInputHandler<Nu
107104
override fun calculateValueType(valueTypes: Set<KType>): ValueType {
108105
val unifiedType = valueTypes.unifiedNumberTypeOrNull(UnifiedNumberTypeOptions.PRIMITIVES_ONLY)
109106
?: typeOf<Number>().withNullability(valueTypes.any { it.isMarkedNullable })
110-
111-
if (unifiedType.isSubtypeOf(typeOf<Double?>()) &&
112-
(typeOf<ULong>() in valueTypes || typeOf<Long>() in valueTypes)
113-
) {
114-
logger.warn {
115-
"Number unification of Long -> Double happened during ${aggregator!!.name} aggregation. Loss of precision may have occurred."
116-
}
117-
}
118107
if (!unifiedType.isPrimitiveOrMixedNumber() && !unifiedType.isNothing) {
119108
throw IllegalArgumentException(
120109
"Cannot calculate ${aggregator!!.name} of ${

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/constructors.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package org.jetbrains.kotlinx.dataframe.impl.api
22

3-
internal fun <T> withValuesImpl(header: List<String>, values: List<T>): List<Pair<String, List<T>>> {
3+
import org.jetbrains.kotlinx.dataframe.exceptions.DataFrameError
4+
5+
/**
6+
* Public API to be re-used in compiler plugin implementation
7+
*/
8+
public fun <T> Pair<List<String>, List<T>>.withValuesImpl(): List<Pair<String, List<T>>> {
9+
val (header, values) = this
410
val ncol = header.size
511

6-
require(header.isNotEmpty() && values.size.rem(ncol) == 0) {
7-
"Number of values ${values.size} is not divisible by number of columns $ncol"
12+
if (!(header.isNotEmpty() && values.size.rem(ncol) == 0)) {
13+
throw WrongNumberOfValuesException(values.size, ncol)
814
}
915

1016
val nrow = values.size / ncol
@@ -16,3 +22,9 @@ internal fun <T> withValuesImpl(header: List<String>, values: List<T>): List<Pai
1622
header[col] to colValues
1723
}
1824
}
25+
26+
internal class WrongNumberOfValuesException(size: Int, ncol: Int) :
27+
IllegalArgumentException(),
28+
DataFrameError {
29+
override val message = "Number of values $size is not divisible by number of columns $ncol"
30+
}

0 commit comments

Comments
 (0)