Skip to content

Commit 530bc81

Browse files
committed
Update generated sources with recent changes
1 parent fc52b8a commit 530bc81

15 files changed

+1948
-171
lines changed
Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,89 @@
1+
@file:OptIn(ExperimentalUnsignedTypes::class)
2+
13
package org.jetbrains.kotlinx.dataframe
24

5+
import org.jetbrains.kotlinx.dataframe.impl.columns.BOOLEAN
6+
import org.jetbrains.kotlinx.dataframe.impl.columns.BYTE
7+
import org.jetbrains.kotlinx.dataframe.impl.columns.CHAR
38
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnDataHolderImpl
9+
import org.jetbrains.kotlinx.dataframe.impl.columns.DOUBLE
10+
import org.jetbrains.kotlinx.dataframe.impl.columns.FLOAT
11+
import org.jetbrains.kotlinx.dataframe.impl.columns.INT
12+
import org.jetbrains.kotlinx.dataframe.impl.columns.LONG
13+
import org.jetbrains.kotlinx.dataframe.impl.columns.SHORT
14+
import org.jetbrains.kotlinx.dataframe.impl.columns.UBYTE
15+
import org.jetbrains.kotlinx.dataframe.impl.columns.UINT
16+
import org.jetbrains.kotlinx.dataframe.impl.columns.ULONG
17+
import org.jetbrains.kotlinx.dataframe.impl.columns.USHORT
18+
import org.jetbrains.kotlinx.dataframe.impl.columns.ofBoxedArray
19+
import org.jetbrains.kotlinx.dataframe.impl.columns.ofCollection
20+
import org.jetbrains.kotlinx.dataframe.impl.columns.ofPrimitiveArray
421
import kotlin.reflect.KType
522
import kotlin.reflect.typeOf
623

7-
public interface ColumnDataHolder<T> : Iterable<T> {
8-
9-
public val size: Int
24+
/**
25+
* Represents the contents of a column; however, it may be implemented.
26+
* The default implementation is found at [ColumnDataHolderImpl].
27+
*/
28+
public interface ColumnDataHolder<T> : List<T> {
1029

1130
public fun toSet(): Set<T>
1231

13-
public fun toList(): List<T>
14-
15-
public fun contains(value: T): Boolean
32+
public operator fun get(range: IntRange): List<T>
1633

17-
public operator fun get(index: Int): T
34+
public fun add(element: T)
1835

19-
public operator fun get(range: IntRange): List<T>
36+
public fun canAdd(element: T): Boolean
2037

2138
public val distinct: Lazy<Set<T>>
2239

2340
public companion object
2441
}
2542

2643
public fun <T> Collection<T>.toColumnDataHolder(type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
27-
ColumnDataHolderImpl.of(this, type, distinct)
44+
ColumnDataHolder.ofCollection(this, type, distinct)
2845

2946
public inline fun <reified T> Collection<T>.toColumnDataHolder(distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
3047
this.toColumnDataHolder(typeOf<T>(), distinct)
3148

3249
public fun <T> Array<T>.toColumnDataHolder(type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
33-
ColumnDataHolderImpl.of(this, type, distinct)
50+
ColumnDataHolder.ofBoxedArray(this, type, distinct)
3451

3552
public inline fun <reified T> Array<T>.toColumnDataHolder(distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
3653
this.toColumnDataHolder(typeOf<T>(), distinct)
3754

3855
public fun BooleanArray.asColumnDataHolder(distinct: Lazy<Set<Boolean>>? = null): ColumnDataHolder<Boolean> =
39-
ColumnDataHolderImpl.of(this, typeOf<Boolean>(), distinct)
56+
ColumnDataHolder.ofPrimitiveArray(this, BOOLEAN, distinct)
4057

4158
public fun ByteArray.asColumnDataHolder(distinct: Lazy<Set<Byte>>? = null): ColumnDataHolder<Byte> =
42-
ColumnDataHolderImpl.of(this, typeOf<Byte>(), distinct)
59+
ColumnDataHolder.ofPrimitiveArray(this, BYTE, distinct)
4360

4461
public fun ShortArray.asColumnDataHolder(distinct: Lazy<Set<Short>>? = null): ColumnDataHolder<Short> =
45-
ColumnDataHolderImpl.of(this, typeOf<Short>(), distinct)
62+
ColumnDataHolder.ofPrimitiveArray(this, SHORT, distinct)
4663

4764
public fun IntArray.asColumnDataHolder(distinct: Lazy<Set<Int>>? = null): ColumnDataHolder<Int> =
48-
ColumnDataHolderImpl.of(this, typeOf<Int>(), distinct)
65+
ColumnDataHolder.ofPrimitiveArray(this, INT, distinct)
4966

5067
public fun LongArray.asColumnDataHolder(distinct: Lazy<Set<Long>>? = null): ColumnDataHolder<Long> =
51-
ColumnDataHolderImpl.of(this, typeOf<Long>(), distinct)
68+
ColumnDataHolder.ofPrimitiveArray(this, LONG, distinct)
5269

5370
public fun FloatArray.asColumnDataHolder(distinct: Lazy<Set<Float>>? = null): ColumnDataHolder<Float> =
54-
ColumnDataHolderImpl.of(this, typeOf<Float>(), distinct)
71+
ColumnDataHolder.ofPrimitiveArray(this, FLOAT, distinct)
5572

5673
public fun DoubleArray.asColumnDataHolder(distinct: Lazy<Set<Double>>? = null): ColumnDataHolder<Double> =
57-
ColumnDataHolderImpl.of(this, typeOf<Double>(), distinct)
74+
ColumnDataHolder.ofPrimitiveArray(this, DOUBLE, distinct)
5875

5976
public fun CharArray.asColumnDataHolder(distinct: Lazy<Set<Char>>? = null): ColumnDataHolder<Char> =
60-
ColumnDataHolderImpl.of(this, typeOf<Char>(), distinct)
77+
ColumnDataHolder.ofPrimitiveArray(this, CHAR, distinct)
6178

6279
public fun UByteArray.asColumnDataHolder(distinct: Lazy<Set<UByte>>? = null): ColumnDataHolder<UByte> =
63-
ColumnDataHolderImpl.of(this, typeOf<UByte>(), distinct)
80+
ColumnDataHolder.ofPrimitiveArray(this, UBYTE, distinct)
6481

6582
public fun UShortArray.asColumnDataHolder(distinct: Lazy<Set<UShort>>? = null): ColumnDataHolder<UShort> =
66-
ColumnDataHolderImpl.of(this, typeOf<UShort>(), distinct)
83+
ColumnDataHolder.ofPrimitiveArray(this, USHORT, distinct)
6784

6885
public fun UIntArray.asColumnDataHolder(distinct: Lazy<Set<UInt>>? = null): ColumnDataHolder<UInt> =
69-
ColumnDataHolderImpl.of(this, typeOf<UInt>(), distinct)
86+
ColumnDataHolder.ofPrimitiveArray(this, UINT, distinct)
7087

7188
public fun ULongArray.asColumnDataHolder(distinct: Lazy<Set<ULong>>? = null): ColumnDataHolder<ULong> =
72-
ColumnDataHolderImpl.of(this, typeOf<ULong>(), distinct)
89+
ColumnDataHolder.ofPrimitiveArray(this, ULONG, distinct)

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

Lines changed: 93 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.FrameColumnImpl
2121
import org.jetbrains.kotlinx.dataframe.impl.columns.ValueColumnImpl
2222
import org.jetbrains.kotlinx.dataframe.impl.columns.addPath
2323
import org.jetbrains.kotlinx.dataframe.impl.columns.guessColumnType
24+
import org.jetbrains.kotlinx.dataframe.impl.columns.ofBoxedArray
25+
import org.jetbrains.kotlinx.dataframe.impl.columns.ofCollection
2426
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumnKind
2527
import org.jetbrains.kotlinx.dataframe.impl.getValuesType
2628
import org.jetbrains.kotlinx.dataframe.impl.splitByIndices
@@ -42,6 +44,49 @@ public interface DataColumn<out T> : BaseColumn<T> {
4244

4345
public companion object {
4446

47+
public fun <T> createValueColumn(
48+
name: String,
49+
values: ColumnDataHolder<T>,
50+
type: KType,
51+
defaultValue: T? = null,
52+
): ValueColumn<T> = ValueColumnImpl(values, name, type, defaultValue)
53+
54+
public fun createValueColumn(name: String, values: BooleanArray): ValueColumn<Boolean> =
55+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Boolean>())
56+
57+
public fun createValueColumn(name: String, values: ByteArray): ValueColumn<Byte> =
58+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Byte>())
59+
60+
public fun createValueColumn(name: String, values: ShortArray): ValueColumn<Short> =
61+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Short>())
62+
63+
public fun createValueColumn(name: String, values: IntArray): ValueColumn<Int> =
64+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Int>())
65+
66+
public fun createValueColumn(name: String, values: LongArray): ValueColumn<Long> =
67+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Long>())
68+
69+
public fun createValueColumn(name: String, values: FloatArray): ValueColumn<Float> =
70+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Float>())
71+
72+
public fun createValueColumn(name: String, values: DoubleArray): ValueColumn<Double> =
73+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Double>())
74+
75+
public fun createValueColumn(name: String, values: CharArray): ValueColumn<Char> =
76+
createValueColumn(name, values.asColumnDataHolder(), typeOf<Char>())
77+
78+
public fun createValueColumn(name: String, values: UByteArray): ValueColumn<UByte> =
79+
createValueColumn(name, values.asColumnDataHolder(), typeOf<UByte>())
80+
81+
public fun createValueColumn(name: String, values: UShortArray): ValueColumn<UShort> =
82+
createValueColumn(name, values.asColumnDataHolder(), typeOf<UShort>())
83+
84+
public fun createValueColumn(name: String, values: UIntArray): ValueColumn<UInt> =
85+
createValueColumn(name, values.asColumnDataHolder(), typeOf<UInt>())
86+
87+
public fun createValueColumn(name: String, values: ULongArray): ValueColumn<ULong> =
88+
createValueColumn(name, values.asColumnDataHolder(), typeOf<ULong>())
89+
4590
/**
4691
* Creates [ValueColumn] using given [name], [values] and [type].
4792
*
@@ -56,7 +101,15 @@ public interface DataColumn<out T> : BaseColumn<T> {
56101
type: KType,
57102
infer: Infer = Infer.None,
58103
defaultValue: T? = null,
59-
): ValueColumn<T> = ValueColumnImpl(values, name, getValuesType(values, type, infer), defaultValue)
104+
): ValueColumn<T> {
105+
val valueType = getValuesType(values, type, infer)
106+
return createValueColumn(
107+
name = name,
108+
values = ColumnDataHolder.ofCollection(values, valueType),
109+
type = valueType,
110+
defaultValue = defaultValue,
111+
)
112+
}
60113

61114
/**
62115
* Creates [ValueColumn] using given [name], [values] and reified column [type].
@@ -74,25 +127,56 @@ public interface DataColumn<out T> : BaseColumn<T> {
74127
infer: Infer = Infer.None,
75128
): ValueColumn<T> =
76129
createValueColumn(
77-
name,
78-
values,
79-
getValuesType(
80-
values,
81-
typeOf<T>(),
82-
infer,
130+
name = name,
131+
values = values,
132+
type = getValuesType(
133+
values = values,
134+
type = typeOf<T>(),
135+
infer = infer,
83136
),
84137
)
85138

139+
public fun <T> createValueColumn(
140+
name: String,
141+
values: Array<T>,
142+
type: KType,
143+
infer: Infer = Infer.None,
144+
defaultValue: T? = null,
145+
): ValueColumn<T> {
146+
val valueType = getValuesType(values.asList(), type, infer)
147+
return createValueColumn(
148+
name = name,
149+
values = ColumnDataHolder.ofBoxedArray(values, valueType),
150+
type = valueType,
151+
defaultValue = defaultValue,
152+
)
153+
}
154+
155+
public inline fun <reified T> createValueColumn(
156+
name: String,
157+
values: Array<T>,
158+
infer: Infer = Infer.None,
159+
): ValueColumn<T> =
160+
createValueColumn(
161+
name = name,
162+
values = values,
163+
type = getValuesType(values.asList(), typeOf<T>(), infer),
164+
)
165+
86166
public fun <T> createColumnGroup(name: String, df: DataFrame<T>): ColumnGroup<T> = ColumnGroupImpl(name, df)
87167

88168
public fun <T> createFrameColumn(name: String, df: DataFrame<T>, startIndices: Iterable<Int>): FrameColumn<T> =
89-
FrameColumnImpl(name, df.splitByIndices(startIndices.asSequence()).toList(), lazy { df.schema() })
169+
FrameColumnImpl(
170+
name,
171+
df.splitByIndices(startIndices.asSequence()).toList().toColumnDataHolder(),
172+
lazy { df.schema() },
173+
)
90174

91175
public fun <T> createFrameColumn(
92176
name: String,
93177
groups: List<DataFrame<T>>,
94178
schema: Lazy<DataFrameSchema>? = null,
95-
): FrameColumn<T> = FrameColumnImpl(name, groups, schema)
179+
): FrameColumn<T> = FrameColumnImpl(name, groups.toColumnDataHolder(), schema)
96180

97181
public fun <T> createWithTypeInference(
98182
name: String,

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package org.jetbrains.kotlinx.dataframe.impl
22

33
import org.jetbrains.kotlinx.dataframe.AnyFrame
44
import org.jetbrains.kotlinx.dataframe.AnyRow
5+
import org.jetbrains.kotlinx.dataframe.ColumnDataHolder
56
import org.jetbrains.kotlinx.dataframe.DataColumn
67
import org.jetbrains.kotlinx.dataframe.DataFrame
78
import org.jetbrains.kotlinx.dataframe.DataRow
89
import org.jetbrains.kotlinx.dataframe.api.concat
910
import org.jetbrains.kotlinx.dataframe.api.toDataFrame
11+
import org.jetbrains.kotlinx.dataframe.impl.columns.empty
12+
import org.jetbrains.kotlinx.dataframe.impl.columns.emptyForType
1013
import org.jetbrains.kotlinx.dataframe.impl.columns.guessColumnType
1114
import kotlin.reflect.KClass
1215
import kotlin.reflect.KType
@@ -28,7 +31,7 @@ internal abstract class DataCollectorBase<T>(initCapacity: Int) : DataCollector<
2831

2932
override var hasNulls = false
3033

31-
override val data = ArrayList<T?>(initCapacity)
34+
override val data = ColumnDataHolder.empty<T>(initCapacity)
3235

3336
val values: List<T?>
3437
get() = data
@@ -62,8 +65,15 @@ internal class TypedColumnDataCollector<T>(initCapacity: Int = 0, val type: KTyp
6265

6366
internal val kclass = type.jvmErasure
6467

68+
override val data: ColumnDataHolder<T?> =
69+
ColumnDataHolder.emptyForType(
70+
type = type,
71+
initCapacity = initCapacity,
72+
strictTypes = checkTypes,
73+
)
74+
6575
override fun add(value: T?) {
66-
if (checkTypes && value != null && !value.javaClass.kotlin.isSubclassOf(kclass)) {
76+
if (checkTypes && data.canAdd(value) && value != null && !value.javaClass.kotlin.isSubclassOf(kclass)) {
6777
throw IllegalArgumentException(
6878
"Can not add value of class ${value.javaClass.kotlin.qualifiedName} to column of type $type. Value = $value",
6979
)

0 commit comments

Comments
 (0)