Kotlin / kotlin-jupyter

Kotlin kernel for Jupyter/IPython
Apache License 2.0
1.1k stars 106 forks source link

Add hierarchies visualization API to lib-ext #220

Closed ileasile closed 3 years ago

ileasile commented 3 years ago

API for different hierarchies visualization. Visualize class types hierarchy and classloaders hierarchy: image

It is easy to define own wrappers for KMath expressions, KotlinDL network layers, Dataframe hierarchical keys, and so on. Examples:

class HKClass(node: KClass<*>) : NodeWrapper<KClass<*>>(node) {
    override val ingoingEdges by lazy {
        node.superclasses.map { HKClass(it) }
    }
}

class HClassLoader(node: ClassLoader) : NodeWrapper<ClassLoader>(node) {
    override val ingoingEdges by lazy {
        node.parent?.let { listOf(HClassLoader(it)) } ?: emptyList()
    }
    override val label: String get() {
        return when (node) {
            is URLClassLoader -> node.urLs.joinToString("\\n", "URL ClassLoader:\\n") {
                it.toString()
            }
            else -> node.toString()
        }
    }
}