diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..619ac79f6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libraries"] + path = libraries + url = https://github.com/Kotlin/kotlin-jupyter-libraries.git diff --git a/docs/README-STUB.md b/docs/README-STUB.md index 60b9c3035..041baa30c 100644 --- a/docs/README-STUB.md +++ b/docs/README-STUB.md @@ -52,7 +52,7 @@ Uninstall: `pip uninstall kotlin-jupyter-kernel` ### From sources ```bash -git clone [[repo_url]] +git clone --recurse-submodules [[repo_url]] cd kotlin-jupyter ./gradlew install ``` @@ -160,7 +160,7 @@ When a library is included with `%use` keyword, the following functionality is a - library initialization code - renderers for special types, e.g. charts and data frames -This behavior is defined by `json` library descriptor. Descriptors for all supported libraries can be found in [libraries](../libraries) directory. +This behavior is defined by `json` library descriptor. Descriptors for all supported libraries can be found in [libraries](https://github.com/Kotlin/kotlin-jupyter-libraries) repository. A library descriptor may provide a set of properties with default values that can be overridden when library is included. The major use case for library properties is to specify a particular version of library. If descriptor has only one property, it can be defined without naming: @@ -175,8 +175,7 @@ Several libraries can be included in single `%use` statement, separated by `,`: ``` %use lets-plot, krangl, mysql(8.0.15) ``` -You can also specify the source of library descriptor. By default, it's taken from the `libraries` directory -of kernel installation. If you want to try descriptor from another revision, use the following syntax: +You can also specify the source of library descriptor. By default, it's taken from the [libraries repository](https://github.com/Kotlin/kotlin-jupyter-libraries). If you want to try descriptor from another revision, use the following syntax: ``` // Specify some git tag from this repository %use lets-plot@0.8.2.5 diff --git a/docs/README.md b/docs/README.md index f9312fa3a..61f9d4e79 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,7 +52,7 @@ Uninstall: `pip uninstall kotlin-jupyter-kernel` ### From sources ```bash -git clone https://github.com/Kotlin/kotlin-jupyter.git +git clone --recurse-submodules https://github.com/Kotlin/kotlin-jupyter.git cd kotlin-jupyter ./gradlew install ``` @@ -167,7 +167,7 @@ When a library is included with `%use` keyword, the following functionality is a - library initialization code - renderers for special types, e.g. charts and data frames -This behavior is defined by `json` library descriptor. Descriptors for all supported libraries can be found in [libraries](../libraries) directory. +This behavior is defined by `json` library descriptor. Descriptors for all supported libraries can be found in [libraries](https://github.com/Kotlin/kotlin-jupyter-libraries) repository. A library descriptor may provide a set of properties with default values that can be overridden when library is included. The major use case for library properties is to specify a particular version of library. If descriptor has only one property, it can be defined without naming: @@ -182,8 +182,7 @@ Several libraries can be included in single `%use` statement, separated by `,`: ``` %use lets-plot, krangl, mysql(8.0.15) ``` -You can also specify the source of library descriptor. By default, it's taken from the `libraries` directory -of kernel installation. If you want to try descriptor from another revision, use the following syntax: +You can also specify the source of library descriptor. By default, it's taken from the [libraries repository](https://github.com/Kotlin/kotlin-jupyter-libraries). If you want to try descriptor from another revision, use the following syntax: ``` // Specify some git tag from this repository %use lets-plot@0.8.2.5 diff --git a/docs/libraries.md b/docs/libraries.md index 49d5c41bb..27f2ac4d2 100644 --- a/docs/libraries.md +++ b/docs/libraries.md @@ -8,7 +8,7 @@ Generally, there are two ways of adding new library: To support new `JVM` library and make it available via `%use` magic command you need to create a library descriptor for it. -Check [libraries](../libraries) directory to see examples of library descriptors. +Check [libraries][libs-repo] repository to see examples of library descriptors. Library descriptor is a `.json` file with the following fields: - `properties`: a dictionary of properties that are used within library descriptor @@ -37,7 +37,7 @@ To register new library descriptor: 1. For private usage - create it anywhere on your computer and reference it using file syntax. 2. Alternative way for private usage - create descriptor in `.jupyter_kotlin/libraries` folder and reference it using "default" syntax -3. For sharing with community - commit it to [libraries](../libraries) directory and create pull request. +3. For sharing with community - commit it to [libraries][libs-repo] repository and create pull request. If you are maintaining some library and want to update your library descriptor, create pull request with your update. After your request is accepted, new version of your library will be available to all Kotlin Jupyter users @@ -155,3 +155,5 @@ resources. This file should contain FQNs of all integration classes in the JSON ``` Classes derived from `LibraryDefinition` should be added to the `definitions` array. Classes derived from `LibraryDefinitionProducer` should be added to the `producers` array. + +[libs-repo]: https://github.com/Kotlin/kotlin-jupyter-libraries \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 8577c7ca7..c4b9952b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,6 +25,8 @@ githubRepoName=kotlin-jupyter projectRepoUrl=https://github.com/Kotlin/kotlin-jupyter docsRepo=git@github.com:ileasile/kotlin-jupyter-docs.git pushRepoUrl=git@github.com:Kotlin/kotlin-jupyter.git +librariesRepoUrl=git@github.com:Kotlin/kotlin-jupyter-libraries.git +librariesRepoUserAndName=Kotlin/kotlin-jupyter-libraries # Workaround for https://github.com/Kotlin/dokka/issues/1405 org.gradle.jvmargs=-XX:MaxMetaspaceSize=1024m -Xmx2048m diff --git a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/ResolutionInfoProvider.kt b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/ResolutionInfoProvider.kt index fee302425..b2275459b 100644 --- a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/ResolutionInfoProvider.kt +++ b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/ResolutionInfoProvider.kt @@ -42,7 +42,7 @@ class StandardResolutionInfoProvider(override var fallback: LibraryResolutionInf } private fun tryGetAsRef(ref: String): LibraryResolutionInfo? { - val response = getHttp("$GitHubApiPrefix/contents/$LibrariesDir?ref=$ref") + val response = getHttp("$GitHubApiPrefix/contents/$RemoteLibrariesDir?ref=$ref") return if (response.status.successful) LibraryResolutionInfo.getInfoByRef(ref) else null } diff --git a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/constants.kt b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/constants.kt index 796d7bee0..372edbf6e 100644 --- a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/constants.kt +++ b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/constants.kt @@ -7,8 +7,9 @@ const val LibrariesDir = "libraries" const val LocalCacheDir = "cache" const val LocalSettingsDir = ".jupyter_kotlin" const val GitHubApiHost = "api.github.com" -const val GitHubRepoOwner = "kotlin" -const val GitHubRepoName = "kotlin-jupyter" +const val GitHubRepoOwner = "Kotlin" +const val GitHubRepoName = "kotlin-jupyter-libraries" +const val RemoteLibrariesDir = "" const val GitHubApiPrefix = "https://$GitHubApiHost/repos/$GitHubRepoOwner/$GitHubRepoName" const val LibraryDescriptorExt = "json" const val LibraryPropertiesFile = ".properties" diff --git a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/httpUtil.kt b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/httpUtil.kt index 5ca31cde6..b74b55b38 100644 --- a/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/httpUtil.kt +++ b/jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/httpUtil.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlinx.jupyter.config.getLogger fun getLatestCommitToLibraries(ref: String, sinceTimestamp: String?): Pair? { val logger = getLogger() return logger.catchAll { - var url = "$GitHubApiPrefix/commits?path=$LibrariesDir&sha=$ref" + var url = "$GitHubApiPrefix/commits?path=$RemoteLibrariesDir&sha=$ref" if (sinceTimestamp != null) { url += "&since=$sinceTimestamp" } @@ -20,7 +20,7 @@ fun getLatestCommitToLibraries(ref: String, sinceTimestamp: String?): Pair { name -> if (name == null) throw ReplLibraryLoadingException(message = "Reference library resolver needs name to be specified") - val url = "$GitHubApiPrefix/contents/$LibrariesDir/$name.$LibraryDescriptorExt?ref=$sha" + val url = "$GitHubApiPrefix/contents/$RemoteLibrariesDir/$name.$LibraryDescriptorExt?ref=$sha" getLogger().info("Requesting library descriptor at $url") val response = getHttp(url).jsonObject diff --git a/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionDetection.kt b/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionDetection.kt index aa34187c6..37e34d014 100644 --- a/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionDetection.kt +++ b/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionDetection.kt @@ -4,9 +4,14 @@ import org.gradle.api.Project import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.invoke import java.io.ByteArrayOutputStream +import java.io.File import java.nio.file.Path -fun Project.getPropertyByCommand(propName: String, cmdArgs: Array): String { +fun Project.getPropertyByCommand( + propName: String, + cmdArgs: Array, + workingDir: File? = null, +): String { val prop = project.findProperty(propName) as String? if (prop != null) { @@ -17,6 +22,7 @@ fun Project.getPropertyByCommand(propName: String, cmdArgs: Array): Stri val result = exec { commandLine(*cmdArgs) standardOutput = outputStream + workingDir?.let { this.workingDir = it } } val output = outputStream.toString() diff --git a/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionUpdating.kt b/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionUpdating.kt index 0ba8d677d..51bd05b9d 100644 --- a/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionUpdating.kt +++ b/kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlinx/jupyter/build/versionUpdating.kt @@ -31,9 +31,6 @@ private val Project.libParamValue get() = prop("jupyter.lib.param.value" private val Project.prGithubUser get() = prop("jupyter.github.user") private val Project.prGithubToken get() = prop("jupyter.github.token") -private val Project.githubRepoOwner get() = prop("githubRepoUser") -private val Project.githubRepoName get() = prop("githubRepoName") - @Serializable class NewPrData( val title: String, @@ -89,11 +86,12 @@ fun ProjectWithInstallOptions.prepareKotlinVersionUpdateTasks() { val pushChangesTask = tasks.register("pushChanges") { dependsOn(updateLibraryParamTask) + val librariesDir = projectDir.resolve(librariesPath) fun execGit(vararg args: String, configure: ExecSpec.() -> Unit = {}): ExecResult { return exec { this.executable = "git" this.args = args.asList() - this.workingDir = projectDir + this.workingDir = librariesDir configure() } @@ -106,8 +104,13 @@ fun ProjectWithInstallOptions.prepareKotlinVersionUpdateTasks() { execGit("add", ".") execGit("commit", "-m", "[AUTO] Update library version") - val repoUrl = rootProject.property("pushRepoUrl") as String - execGit("push", "--force", "-u", repoUrl, getCurrentBranch() + ":refs/heads/" + updateLibBranchName!!) { + val repoUrl = rootProject.property("librariesRepoUrl") as String + val currentBranch = getPropertyByCommand( + "build.libraries.branch", + arrayOf("git", "rev-parse", "--abbrev-ref", "HEAD"), + librariesDir, + ) + execGit("push", "--force", "-u", repoUrl, "$currentBranch:refs/heads/" + updateLibBranchName!!) { this.standardOutput = object : OutputStream() { override fun write(b: Int) { } } @@ -123,6 +126,7 @@ fun ProjectWithInstallOptions.prepareKotlinVersionUpdateTasks() { doLast { val user = rootProject.prGithubUser val password = rootProject.prGithubToken + val repoUserAndName = rootProject.property("librariesRepoUserAndName") as String fun githubRequest( method: Method, request: String, @@ -141,9 +145,8 @@ fun ProjectWithInstallOptions.prepareKotlinVersionUpdateTasks() { return response } - val fullRepo = "${rootProject.githubRepoOwner}/${rootProject.githubRepoName}" val prResponse = githubRequest( - Method.POST, "repos/$fullRepo/pulls", + Method.POST, "repos/$repoUserAndName/pulls", Json.encodeToJsonElement( NewPrData( title = "Update `${rootProject.libName}` library to `${rootProject.libParamValue}`", @@ -157,7 +160,7 @@ fun ProjectWithInstallOptions.prepareKotlinVersionUpdateTasks() { val prNumber = (prResponse.jsonObject["number"] as JsonPrimitive).int githubRequest( - Method.POST, "repos/$fullRepo/issues/$prNumber/labels", + Method.POST, "repos/$repoUserAndName/issues/$prNumber/labels", Json.encodeToJsonElement( SetLabelsData(listOf("no-changelog", "library-descriptors")) ) diff --git a/libraries b/libraries new file mode 160000 index 000000000..454a2ee36 --- /dev/null +++ b/libraries @@ -0,0 +1 @@ +Subproject commit 454a2ee36a6c9632a07c5ef2b3f9c298f8b79301 diff --git a/libraries/.properties b/libraries/.properties deleted file mode 100644 index 631fb49c3..000000000 --- a/libraries/.properties +++ /dev/null @@ -1 +0,0 @@ -formatVersion=2 diff --git a/libraries/dataframe.json b/libraries/dataframe.json deleted file mode 100644 index d163fd54a..000000000 --- a/libraries/dataframe.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "Kotlin framework for structured data processing", - "properties": { - "v": "0.8.0-dev-297-0.10.0.114" - }, - "repositories": [ - "https://oss.sonatype.org/service/local/repo_groups/public/content" - ], - "init": ["%use lets-plot-dataframe"], - "link": "https://github.com/nikitinas/dataframe", - "dependencies": [ - "org.jetbrains.kotlinx:dataframe:$v" - ] -} \ No newline at end of file diff --git a/libraries/deeplearning4j-cuda.json b/libraries/deeplearning4j-cuda.json deleted file mode 100644 index 757ba57e4..000000000 --- a/libraries/deeplearning4j-cuda.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "description": "Deep learning library for the JVM (CUDA support)", - "properties": { - "v": "1.0.0-beta6", - "cuda": "10.2", - "slf4j": "1.7.25", - "freemarker": "2.3.29" - }, - "link": "https://github.com/eclipse/deeplearning4j", - "dependencies": [ - "org.freemarker:freemarker:$freemarker", - "org.nd4j:nd4j-api:$v", - "org.nd4j:nd4j-cuda-$cuda:$v", - "org.nd4j:nd4j-cuda-$cuda-platform:$v", - "org.deeplearning4j:deeplearning4j-core:$v", - "org.deeplearning4j:deeplearning4j-common:$v", - "org.deeplearning4j:deeplearning4j-datasets:$v", - "org.deeplearning4j:deeplearning4j-nn:$v", - "org.deeplearning4j:deeplearning4j-nlp:$v", - "org.deeplearning4j:deeplearning4j-ui:$v", - "org.deeplearning4j:deeplearning4j-cuda-$cuda:$v", - "org.slf4j:slf4j-simple:$slf4j", - "org.slf4j:slf4j-api:$slf4j" - ], - "imports": [ - "org.nd4j.config.*", - "org.nd4j.linalg.activations.*", - "org.nd4j.linalg.api.ndarray.INDArray", - "org.nd4j.linalg.dataset.DataSet", - "org.nd4j.linalg.dataset.api.iterator.DataSetIterator", - "org.nd4j.linalg.factory.Nd4j", - "org.nd4j.linalg.learning.config.*", - "org.nd4j.linalg.lossfunctions.LossFunctions.*", - "org.deeplearning4j.eval.Evaluation", - "org.deeplearning4j.nn.conf.*", - "org.deeplearning4j.nn.conf.layers.*", - "org.deeplearning4j.nn.multilayer.MultiLayerNetwork", - "org.deeplearning4j.nn.weights.WeightInit", - "org.deeplearning4j.optimize.listeners.ScoreIterationListener", - "org.deeplearning4j.datasets.iterator.impl.ListDataSetIterator" - ], - "init": [ - ] -} diff --git a/libraries/deeplearning4j.json b/libraries/deeplearning4j.json deleted file mode 100644 index c6e59f538..000000000 --- a/libraries/deeplearning4j.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "description": "Deep learning library for the JVM", - "properties": { - "v": "1.0.0-beta6", - "slf4j": "1.7.25", - "freemarker": "2.3.29" - }, - "link": "https://github.com/eclipse/deeplearning4j", - "dependencies": [ - "org.freemarker:freemarker:$freemarker", - "org.nd4j:nd4j-api:$v", - "org.nd4j:nd4j-native:$v", - "org.nd4j:nd4j-native-platform:$v", - "org.deeplearning4j:deeplearning4j-core:$v", - "org.deeplearning4j:deeplearning4j-common:$v", - "org.deeplearning4j:deeplearning4j-datasets:$v", - "org.deeplearning4j:deeplearning4j-nn:$v", - "org.deeplearning4j:deeplearning4j-nlp:$v", - "org.deeplearning4j:deeplearning4j-ui:$v", - "org.slf4j:slf4j-simple:$slf4j", - "org.slf4j:slf4j-api:$slf4j" - ], - "imports": [ - "org.nd4j.config.*", - "org.nd4j.linalg.activations.*", - "org.nd4j.linalg.api.ndarray.INDArray", - "org.nd4j.linalg.dataset.DataSet", - "org.nd4j.linalg.dataset.api.iterator.DataSetIterator", - "org.nd4j.linalg.factory.Nd4j", - "org.nd4j.linalg.learning.config.*", - "org.nd4j.linalg.lossfunctions.LossFunctions.*", - "org.deeplearning4j.eval.Evaluation", - "org.deeplearning4j.nn.conf.*", - "org.deeplearning4j.nn.conf.layers.*", - "org.deeplearning4j.nn.multilayer.MultiLayerNetwork", - "org.deeplearning4j.nn.weights.WeightInit", - "org.deeplearning4j.optimize.listeners.ScoreIterationListener", - "org.deeplearning4j.datasets.iterator.impl.ListDataSetIterator" - ], - "init": [ - ] -} \ No newline at end of file diff --git a/libraries/default.json b/libraries/default.json deleted file mode 100644 index 4c33771ef..000000000 --- a/libraries/default.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "description": "Default imports: dataframe and Lets-Plot libraries", - "init": [ - "%use dataframe, lets-plot-dataframe" - ] -} \ No newline at end of file diff --git a/libraries/exposed.json b/libraries/exposed.json deleted file mode 100644 index 3060c0bbc..000000000 --- a/libraries/exposed.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "Kotlin SQL framework", - "properties": { - "v": "0.31.1" - }, - "link": "https://github.com/JetBrains/Exposed", - "dependencies": [ - "org.jetbrains.exposed:exposed-core:$v" - ], - "imports": [ - "org.jetbrains.exposed.sql.transactions.*", - "org.jetbrains.exposed.sql.*" - ] -} diff --git a/libraries/fuel.json b/libraries/fuel.json deleted file mode 100644 index d4a9e70ba..000000000 --- a/libraries/fuel.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "description": "HTTP networking library", - "properties": { - "v": "-SNAPSHOT" - }, - "link": "https://github.com/kittinunf/fuel", - "dependencies": [ - "com.github.kittinunf.fuel:fuel:$v", - "com.github.kittinunf.fuel:fuel-gson:$v", - "com.github.kittinunf.fuel:fuel-rxjava:$v", - "com.github.kittinunf.fuel:fuel-coroutines:$v" - ], - "imports": [ - "com.github.kittinunf.fuel.*" - ] -} \ No newline at end of file diff --git a/libraries/gral.json b/libraries/gral.json deleted file mode 100644 index c781b231e..000000000 --- a/libraries/gral.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "description": "Java library for displaying plots", - "properties": { - "v": "0.11" - }, - "link": "https://github.com/eseifert/gral", - "dependencies": [ - "de.erichseifert.gral:gral-core:$v" - ], - "imports": [ - "de.erichseifert.gral.data.*", - "de.erichseifert.gral.data.filters.*", - "de.erichseifert.gral.graphics.*", - "de.erichseifert.gral.plots.*", - "de.erichseifert.gral.plots.lines.*", - "de.erichseifert.gral.plots.points.*", - "de.erichseifert.gral.util.*" - ], - "init": [ - "fun T.show(sizeX: Double, sizeY: Double): Any {\n val writer = de.erichseifert.gral.io.plots.DrawableWriterFactory.getInstance().get(\"image/svg+xml\")\n\n val buf = java.io.ByteArrayOutputStream()\n\n writer.write(this, buf, sizeX, sizeY)\n\n return MIME(writer.mimeType to buf.toString())\n}" - ] -} diff --git a/libraries/jdsp.json b/libraries/jdsp.json deleted file mode 100644 index 5a84b849f..000000000 --- a/libraries/jdsp.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "Java library for signal processing", - "properties": { - "v": "0.5.1" - }, - "link": "https://github.com/psambit9791/jDSP", - "dependencies": [ - "com.github.psambit9791:jdsp:$v" - ] -} \ No newline at end of file diff --git a/libraries/kaliningraph.json b/libraries/kaliningraph.json deleted file mode 100644 index 15c63557f..000000000 --- a/libraries/kaliningraph.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "link": "https://github.com/breandan/kaliningraph", - "description": "Graph library with a DSL for constructing graphs and visualizing the behavior of graph algorithms", - "dependencies": [ - "com.github.breandan:kaliningraph:0.1.4" - ], - "imports": [ - "edu.mcgill.kaliningraph.*", - "edu.mcgill.kaliningraph.matrix.*", - "edu.mcgill.kaliningraph.circuits.*", - "org.ejml.data.*", - "org.ejml.kotlin.*" - ], - "renderers": { - "edu.mcgill.kaliningraph.LabeledGraph": "HTML(($it as edu.mcgill.kaliningraph.Graph<*, *, *>).html())", - "edu.mcgill.kaliningraph.circuits.Gate": "HTML(($it as edu.mcgill.kaliningraph.circuits.Gate).graph.html())", - "edu.mcgill.kaliningraph.circuits.NFunction": "HTML(($it as edu.mcgill.kaliningraph.circuits.NFunction).graph.html())", - "edu.mcgill.kaliningraph.circuits.ComputationGraph": "HTML(($it as edu.mcgill.kaliningraph.Graph<*, *, *>).html())", - "edu.mcgill.kaliningraph.matrix.BMat": "HTML(\"\")", - "edu.mcgill.kaliningraph.matrix.BSqMat": "HTML(\"\")" - } -} diff --git a/libraries/khttp.json b/libraries/khttp.json deleted file mode 100644 index 98d22ac36..000000000 --- a/libraries/khttp.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "description": "HTTP networking library", - "properties": { - "v": "39f76b4186" - }, - "link": "https://github.com/jkcclemens/khttp", - "repositories": [ - "https://jitpack.io" - ], - "dependencies": [ - "com.github.jkcclemens:khttp:$v" - ] -} diff --git a/libraries/klaxon.json b/libraries/klaxon.json deleted file mode 100644 index e9ee7d46f..000000000 --- a/libraries/klaxon.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "description": "JSON parser for Kotlin", - "properties": { - "v": "5.5" - }, - "link": "https://github.com/cbeust/klaxon", - "dependencies": [ - "com.beust:klaxon:$v" - ], - "imports": [ - "com.beust.klaxon.*" - ] -} diff --git a/libraries/kmath.json b/libraries/kmath.json deleted file mode 100644 index 81e83a128..000000000 --- a/libraries/kmath.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "description": "Experimental Kotlin algebra-based mathematical library", - "properties": { - "v": "0.2.1" - }, - "link": "https://github.com/mipt-npm/kmath", - "repositories": [ - "https://repo.kotlin.link" - ], - "dependencies": [ - "space.kscience:kmath-commons:$v", - "space.kscience:kmath-for-real-jvm:$v" - ], - "imports": [ - "space.kscience.kmath.linear.*", - "space.kscience.kmath.operations.*", - "space.kscience.kmath.structures.*", - "space.kscience.kmath.real.*" - ] -} diff --git a/libraries/kotlin-dl.json b/libraries/kotlin-dl.json deleted file mode 100644 index 9b3ebd899..000000000 --- a/libraries/kotlin-dl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "description": "KotlinDL library which provides Keras-like API for deep learning", - "link": "https://github.com/JetBrains/KotlinDL", - "properties": { - "v": "0.2.0-alpha-1" - }, - "dependencies": [ - "org.jetbrains.kotlinx:kotlin-deeplearning-api:$v" - ], - "imports": [ - "org.jetbrains.kotlinx.dl.api.core.*", - "org.jetbrains.kotlinx.dl.api.core.activation.*", - "org.jetbrains.kotlinx.dl.api.core.initializer.*", - "org.jetbrains.kotlinx.dl.api.core.layer.*", - "org.jetbrains.kotlinx.dl.api.core.loss.*", - "org.jetbrains.kotlinx.dl.api.core.metric.*", - "org.jetbrains.kotlinx.dl.api.core.optimizer.*" - ] -} \ No newline at end of file diff --git a/libraries/kotlin-statistics.json b/libraries/kotlin-statistics.json deleted file mode 100644 index b3a1ccccd..000000000 --- a/libraries/kotlin-statistics.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "description": "Idiomatic statistical operators for Kotlin", - "properties": { - "v": "-SNAPSHOT" - }, - "link": "https://github.com/thomasnield/kotlin-statistics", - "dependencies": [ - "com.github.thomasnield:kotlin-statistics:$v" - ], - "imports": [ - "org.nield.kotlinstatistics.*" - ] -} diff --git a/libraries/krangl.json b/libraries/krangl.json deleted file mode 100644 index 5f9e38ed5..000000000 --- a/libraries/krangl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "description": "Kotlin DSL for data wrangling", - "properties": { - "v": "0.16.2" - }, - "link": "https://github.com/holgerbrandl/krangl", - "dependencies": [ - "com.github.holgerbrandl:krangl:$v" - ], - "imports": [ - "krangl.*" - ], - "init": [ - "fun krangl.DataFrame.toHTML(limit: Int = 20, truncate: Int = 50) : String\n{val sb = StringBuilder()\nsb.append(\"\")\nsb.append(\"\")\ncols.forEach { sb.append(\"\") }\nsb.append(\"\")\nrows.take(limit).forEach {\n sb.append(\"\")\n it.values.map{it.toString()}.forEach { \n val truncated = if (truncate > 0 && it.length > truncate) {\n if (truncate < 4) it.substring(0, truncate)\n else it.substring(0, truncate - 3) + \"...\"\n } else {\n it\n }\n sb.append(\"\"\"\"\"\") \n }\n sb.append(\"\")\n}\nsb.append(\"
${it.name}
$truncated
\")\nif(limit < rows.count())\n sb.append(\"

... only showing top $limit rows

\")\nsb.append(\"\")\nreturn sb.toString()}" - ], - "renderers": { - "krangl.SimpleDataFrame": "HTML($it.toHTML())" - } -} diff --git a/libraries/kravis.json b/libraries/kravis.json deleted file mode 100644 index 78582ae18..000000000 --- a/libraries/kravis.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "description": "Kotlin grammar for data visualization", - "properties": { - "v": "0.7.4" - }, - "link": "https://github.com/holgerbrandl/kravis", - "dependencies": [ - "com.github.holgerbrandl:kravis:$v" - ], - "imports": [ - "kravis.*" - ], - "renderers": { - "kravis.GGPlot": "$it.show()" - } -} diff --git a/libraries/lets-plot-dataframe.json b/libraries/lets-plot-dataframe.json deleted file mode 100644 index 148c41bf6..000000000 --- a/libraries/lets-plot-dataframe.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "description": "A bridge between Lets-Plot and dataframe libraries", - "link": "https://github.com/JetBrains/lets-plot-kotlin", - "properties": { - "v": "0.0.12-dev-8-0.10.0.114" - }, - "repositories": [ - "https://oss.sonatype.org/service/local/repo_groups/public/content" - ], - "dependencies": [ - "org.jetbrains.kotlinx:lets-plot-dsl:$v" - ] -} diff --git a/libraries/lets-plot-gt.json b/libraries/lets-plot-gt.json deleted file mode 100644 index 128981046..000000000 --- a/libraries/lets-plot-gt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "description": "Lets-Plot visualisation for GeoTools toolkit", - "link": "https://github.com/JetBrains/lets-plot-kotlin", - "properties": { - "api": "3.0.1", - "gt": "[23,)" - }, - "repositories": [ - "https://repo.osgeo.org/repository/release" - ], - "dependencies": [ - "org.jetbrains.lets-plot:lets-plot-kotlin-geotools:$api", - "org.geotools:gt-geojson:$gt" - ], - "imports": [ - "jetbrains.letsPlot.toolkit.geotools.toSpatialDataset" - ] -} diff --git a/libraries/lets-plot.json b/libraries/lets-plot.json deleted file mode 100644 index 080130670..000000000 --- a/libraries/lets-plot.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "description": "ggplot-like interactive visualization for Kotlin", - "properties": { - "api": "3.0.1", - "lib": "2.0.4", - "js": "2.0.4", - "isolatedFrame": "" - }, - "link": "https://github.com/JetBrains/lets-plot-kotlin", - "dependencies": [ - "org.jetbrains.lets-plot:lets-plot-kotlin-kernel:$api", - "org.jetbrains.lets-plot:lets-plot-common:$lib", - "org.jetbrains.lets-plot:lets-plot-image-export:$lib", - "io.github.microutils:kotlin-logging-jvm:2.0.5" - ], - "imports": [ - "jetbrains.letsPlot.*", - "jetbrains.letsPlot.geom.*", - "jetbrains.letsPlot.stat.*", - "jetbrains.letsPlot.label.*", - "jetbrains.letsPlot.scale.*", - "jetbrains.letsPlot.facet.*", - "jetbrains.letsPlot.sampling.*", - "jetbrains.letsPlot.export.*", - "jetbrains.letsPlot.tooltips.layer_tooltips", - "jetbrains.letsPlot.tooltips.tooltips_none", - "jetbrains.letsPlot.bistro.corr.CorrPlot", - "jetbrains.letsPlot.tooltips.layerTooltips", - "jetbrains.letsPlot.tooltips.tooltipsNone" - ], - "init": [ - "import jetbrains.letsPlot.LetsPlot", - "import jetbrains.letsPlot.frontend.NotebookFrontendContext", - "val isolatedFrameParam = if(\"$isolatedFrame\".isNotEmpty()) \"$isolatedFrame\".toBoolean() else null", - "val frontendContext = LetsPlot.setupNotebook(\"$js\", isolatedFrameParam) {DISPLAY(HTML(it))}", - "LetsPlot.apiVersion = \"$api\"", - "// Load library JS", - "DISPLAY(HTML(frontendContext.getConfigureHtml()))" - ], - "renderers": { - "jetbrains.letsPlot.intern.Plot": "HTML(frontendContext.getHtml($it))", - "jetbrains.letsPlot.GGBunch": "HTML(frontendContext.getHtml($it))" - } -} diff --git a/libraries/lib-ext.json b/libraries/lib-ext.json deleted file mode 100644 index 4d6d53e9e..000000000 --- a/libraries/lib-ext.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "Extended functionality for Jupyter kernel", - "properties": { - "v": "$kernelMavenVersion" - }, - "link": "https://github.com/Kotlin/kotlin-jupyter", - "dependencies": [ - "org.jetbrains.kotlinx:kotlin-jupyter-lib-ext:$v" - ] -} diff --git a/libraries/londogard-nlp-toolkit.json b/libraries/londogard-nlp-toolkit.json deleted file mode 100644 index 7ca3fe758..000000000 --- a/libraries/londogard-nlp-toolkit.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "description": "A Natural Language Processing (NLP) toolkit for Kotlin on the JVM", - "link": "https://github.com/londogard/londogard-nlp-toolkit", - "properties": { - "v": "v1.0.0" - }, - "repositories": [ - "https://jitpack.io" - ], - "dependencies": [ - "com.londogard:londogard-nlp-toolkit:$v" - ], - "imports": [ - "com.londogard.nlp.embeddings.*", - "com.londogard.nlp.embeddings.sentence.*", - "com.londogard.nlp.wordfreq.*", - "com.londogard.nlp.tokenizer.*", - "com.londogard.nlp.stopwords.*", - "com.londogard.nlp.stemmer.*", - "com.londogard.nlp.utils.LanguageSupport", - "com.londogard.nlp.utils.LanguageSupport.*" - ] -} diff --git a/libraries/multik.json b/libraries/multik.json deleted file mode 100644 index eeb67d509..000000000 --- a/libraries/multik.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "description": "Multidimensional array library for Kotlin", - "properties": { - "v": "0.0.1" - }, - "link": "https://github.com/Kotlin/multik", - "dependencies": [ - "org.jetbrains.kotlinx:multik-api:$v", - "org.jetbrains.kotlinx:multik-default:$v" - ], - "imports": [ - "org.jetbrains.kotlinx.multik.api.*", - "org.jetbrains.kotlinx.multik.ndarray.data.*", - "org.jetbrains.kotlinx.multik.ndarray.operations.*" - ] -} \ No newline at end of file diff --git a/libraries/mysql.json b/libraries/mysql.json deleted file mode 100644 index 85518b967..000000000 --- a/libraries/mysql.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "MySql JDBC Connector", - "properties": { - "v": "8.0.17" - }, - "link": "https://github.com/mysql/mysql-connector-j", - "dependencies": [ - "mysql:mysql-connector-java:$v" - ] -} diff --git a/libraries/plotly-server.json b/libraries/plotly-server.json deleted file mode 100644 index 87463dff4..000000000 --- a/libraries/plotly-server.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "[beta] Plotly.kt jupyter integration for dynamic plots.", - "properties": { - "v": "0.4.0" - }, - "link": "https://github.com/mipt-npm/plotly.kt", - "repositories": [ - "https://repo.kotlin.link", - "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-js-wrappers" - ], - "dependencies": [ - "space.kscience:plotlykt-server:$v" - ] -} \ No newline at end of file diff --git a/libraries/plotly.json b/libraries/plotly.json deleted file mode 100644 index 442ee6fc0..000000000 --- a/libraries/plotly.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "[beta] Plotly.kt jupyter integration for static plots.", - "properties": { - "v": "0.4.0" - }, - "link": "https://github.com/mipt-npm/plotly.kt", - "repositories": [ - "https://repo.kotlin.link", - "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-js-wrappers" - ], - "dependencies": [ - "space.kscience:plotlykt-jupyter:$v" - ] -} \ No newline at end of file diff --git a/libraries/rdkit.json b/libraries/rdkit.json deleted file mode 100644 index cc56a38d2..000000000 --- a/libraries/rdkit.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "Open-Source Cheminformatics Software", - "properties": { - "v": "1.0.0" - }, - "link": "https://www.rdkit.org/", - "dependencies": [ - "org.jetbrains.kotlinx:rdkit-jupyter:$v" - ] -} diff --git a/libraries/serialization.json b/libraries/serialization.json deleted file mode 100644 index 8f9aef230..000000000 --- a/libraries/serialization.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "Kotlin multi-format reflection-less serialization", - "properties": { - "v": "1.1.0" - }, - "link": "https://github.com/Kotlin/kotlinx.serialization", - "dependencies": [ - "org.jetbrains.kotlinx:kotlinx-serialization-json:$v" - ], - "imports": [ - "kotlinx.serialization.*", - "kotlinx.serialization.json.*" - ] -} diff --git a/libraries/smile.json b/libraries/smile.json deleted file mode 100644 index dcac29d64..000000000 --- a/libraries/smile.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "description": "Statistical Machine Intelligence and Learning Engine", - "properties": { - "v": "2.4.0" - }, - "link": "https://github.com/haifengl/smile", - "dependencies": [ - "com.github.haifengl:smile-kotlin:$v" - ], - "imports": [ - "org.apache.commons.csv.CSVFormat", - "smile.*", - "smile.association.*", - "smile.classification.*", - "smile.clustering.*", - "smile.manifold.*", - "smile.mds.*", - "smile.nlp.*", - "smile.wavelet.*" - ] -} diff --git a/libraries/spark.json b/libraries/spark.json deleted file mode 100644 index cd0abe306..000000000 --- a/libraries/spark.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "description": "Unified analytics engine for large-scale data processing", - "properties": { - "scala": "2.11.12", - "spark": "2.4.4" - }, - "link": "https://github.com/apache/spark", - "dependencies": [ - "org.apache.spark:spark-mllib_2.11:$spark", - "org.apache.spark:spark-sql_2.11:$spark", - "org.apache.spark:spark-repl_2.11:$spark", - "org.apache.spark:spark-streaming-flume-assembly_2.11:$spark", - "org.apache.spark:spark-graphx_2.11:$spark", - "org.apache.spark:spark-launcher_2.11:$spark", - "org.apache.spark:spark-catalyst_2.11:$spark", - "org.apache.spark:spark-streaming_2.11:$spark", - "org.apache.spark:spark-core_2.11:$spark", - "org.scala-lang:scala-library:$scala", - "org.scala-lang:scala-reflect:$scala", - "org.scala-lang:scala-compiler:$scala", - "org.scala-lang.modules:scala-xml_2.11:1.2.0", - "commons-io:commons-io:2.5" - ], - "imports": [ - "org.apache.spark.sql.*", - "org.apache.spark.api.java.*", - "org.apache.spark.ml.feature.*", - "org.apache.spark.sql.functions.*" - ], - "init": [ - "org.apache.log4j.Logger.getLogger(\"org\").setLevel(org.apache.log4j.Level.OFF)", - "org.apache.log4j.Logger.getLogger(\"akka\").setLevel(org.apache.log4j.Level.OFF)", - "val spark = SparkSession\n .builder()\n .appName(\"Spark example\")\n .master(\"local\")\n .getOrCreate()", - "val sc = spark.sparkContext()", - "%dumpClassesForSpark", - "fun Dataset.toHTML(limit: Int = 20, truncate: Int = 50): String {\n val sb = StringBuilder()\n\n sb.append(\"\")\n sb.append(\"\"\"\"\"\")\n sb.append(schema().fieldNames().map { \"\"}.joinToString(\"\"))\n sb.append(\"\")\n\n limit(limit).collectAsList().forEach { row ->\n sb.append(\"\")\n (0 until row.size()).map {\n row[it].toString()\n }.forEach {\n val truncated = if (truncate > 0 && it.length > truncate) {\n if (truncate < 4) it.substring(0, truncate)\n else it.substring(0, truncate - 3) + \"...\"\n } else {\n it\n }\n sb.append(\"\"\"\"\"\")\n }\n sb.append(\"\")\n }\n sb.append(\"
${it}
$truncated
\")\n if(limit < count())\n sb.append(\"

... only showing top $limit rows

\")\n sb.append(\"\")\n return sb.toString()\n}" - ], - "initCell": [ - "scala.Console.setOut(System.out)", - "scala.Console.setErr(System.err)" - ], - "renderers": { - "org.apache.spark.sql.Dataset": "HTML($it.toHTML())" - } -} diff --git a/src/test/kotlin/org/jetbrains/kotlinx/jupyter/test/repl/ReplWithStandardResolverTests.kt b/src/test/kotlin/org/jetbrains/kotlinx/jupyter/test/repl/ReplWithStandardResolverTests.kt index f2aabb9bb..8cf00ebba 100644 --- a/src/test/kotlin/org/jetbrains/kotlinx/jupyter/test/repl/ReplWithStandardResolverTests.kt +++ b/src/test/kotlin/org/jetbrains/kotlinx/jupyter/test/repl/ReplWithStandardResolverTests.kt @@ -1,8 +1,6 @@ package org.jetbrains.kotlinx.jupyter.test.repl import org.intellij.lang.annotations.Language -import org.jetbrains.kotlinx.jupyter.libraries.GitHubRepoName -import org.jetbrains.kotlinx.jupyter.libraries.GitHubRepoOwner import org.jetbrains.kotlinx.jupyter.libraries.LibrariesDir import org.jetbrains.kotlinx.jupyter.libraries.LibraryDescriptorExt import org.jetbrains.kotlinx.jupyter.libraries.LibraryResolutionInfo @@ -27,7 +25,7 @@ class ReplWithStandardResolverTests : AbstractSingleReplTest() { @file:DependsOn("org.geotools:gt-shapefile:[23,)") @file:DependsOn("org.geotools:gt-cql:[23,)") - %use lets-plot@cfcf8257116ad3753b176a9f779eaaea4619dacd(api=2.0.1) + %use lets-plot@f2bb7075b316e7181ff8fddb1e045c4ed2c26442(api=2.0.1) @file:DependsOn("org.jetbrains.lets-plot:lets-plot-kotlin-geotools:2.0.1") @@ -67,6 +65,7 @@ class ReplWithStandardResolverTests : AbstractSingleReplTest() { @Test fun testUseFileUrlRef() { val commit = "cfcf8257116ad3753b176a9f779eaaea4619dacd" + val libsCommit = "f2bb7075b316e7181ff8fddb1e045c4ed2c26442" val libraryPath = "src/test/testData/test-init.json" val res1 = eval( @@ -79,7 +78,7 @@ class ReplWithStandardResolverTests : AbstractSingleReplTest() { val res2 = eval( """ - %use @url[https://raw.githubusercontent.com/$GitHubRepoOwner/$GitHubRepoName/$commit/$libraryPath](name=y, value=43) + %use @url[https://raw.githubusercontent.com/Kotlin/kotlin-jupyter/$commit/$libraryPath](name=y, value=43) y """.trimIndent() ) @@ -88,7 +87,7 @@ class ReplWithStandardResolverTests : AbstractSingleReplTest() { val displays = mutableListOf() val handler = TestDisplayHandler(displays) - val res3 = eval("%use lets-plot@$commit", handler) + val res3 = eval("%use lets-plot@$libsCommit", handler) assertEquals(1, displays.count()) assertUnit(res3.resultValue) displays.clear()