Kotlin / dataframe

Structured data processing in Kotlin
https://kotlin.github.io/dataframe/overview.html
Apache License 2.0
784 stars 50 forks source link

It fails to rename nullable inline value column #526

Closed holgerbrandl closed 4 months ago

holgerbrandl commented 7 months ago

Expected: It should run the following example


import org.jetbrains.kotlinx.dataframe.api.*

@JvmInline
value class Speed(val kmh: Number){
}

class PathSegment(
    val id: String, val speedLimit: Speed? = null,
)

fun main() {
    val segments = listOf(PathSegment("foo", Speed(2.3)), PathSegment("bar",))

    val df = segments.toDataFrame()
    df.rename("speedLimit" to "speed_limit").print()
}

Observed: It fails with

Exception in thread "main" java.lang.NullPointerException
    at org.kalasim.scratch.Speed.hashCode-impl(InlineClassDf.kt)
    at org.kalasim.scratch.Speed.hashCode(InlineClassDf.kt)
    at org.jetbrains.kotlinx.dataframe.impl.UtilsKt.rollingHash(Utils.kt:99)
    at org.jetbrains.kotlinx.dataframe.impl.columns.UtilsKt.getHashCode(Utils.kt:39)
    at org.jetbrains.kotlinx.dataframe.impl.columns.DataColumnImpl$hashCode$2.invoke(DataColumnImpl.kt:36)
    at org.jetbrains.kotlinx.dataframe.impl.columns.DataColumnImpl$hashCode$2.invoke(DataColumnImpl.kt:36)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at org.jetbrains.kotlinx.dataframe.impl.columns.DataColumnImpl.getHashCode(DataColumnImpl.kt:36)
    at org.jetbrains.kotlinx.dataframe.impl.columns.DataColumnImpl.hashCode(DataColumnImpl.kt:38)
    at java.base/java.util.HashMap.hash(HashMap.java:340)
    at java.base/java.util.HashMap.put(HashMap.java:608)
    at org.jetbrains.kotlinx.dataframe.impl.api.RenameKt.renameImpl(rename.kt:64)
    at org.jetbrains.kotlinx.dataframe.impl.api.RenameKt.renameImpl(rename.kt:19)
    at org.jetbrains.kotlinx.dataframe.api.RenameKt.into(rename.kt:57)
    at org.jetbrains.kotlinx.dataframe.api.RenameKt.rename(rename.kt:22)
    at org.kalasim.scratch.InlineClassDfKt.main(InlineClassDf.kt:18)
    at org.kalasim.scratch.InlineClassDfKt.main(InlineClassDf.kt)

Tested version v0.12

Jolanrensen commented 4 months ago

I assume this was fixed by the PR #542