Compare commits

..

No commits in common. "a84f1e150033221b9dfb69638b6e1a953ef6d4fe" and "5129f29084ed810871a93d0d816205e0f638fa71" have entirely different histories.

31 changed files with 46 additions and 68 deletions

View File

@ -15,7 +15,6 @@
### Deprecated ### Deprecated
### Removed ### Removed
- `asPolynomial` function due to scope pollution
### Fixed ### Fixed
- Median statistics - Median statistics

View File

@ -1,3 +1,4 @@
import space.kscience.gradle.isInDevelopment
import space.kscience.gradle.useApache2Licence import space.kscience.gradle.useApache2Licence
import space.kscience.gradle.useSPCTeam import space.kscience.gradle.useSPCTeam
@ -63,7 +64,14 @@ ksciencePublish {
useApache2Licence() useApache2Licence()
useSPCTeam() useSPCTeam()
} }
repository("spc","https://maven.sciprog.center/kscience") github("kmath", "SciProgCentre")
space(
if (isInDevelopment) {
"https://maven.pkg.jetbrains.space/spc/p/sci/dev"
} else {
"https://maven.pkg.jetbrains.space/spc/p/sci/maven"
}
)
sonatype("https://oss.sonatype.org") sonatype("https://oss.sonatype.org")
} }

View File

@ -17,7 +17,7 @@ val benchmarksVersion = spclibs.versions.kotlinx.benchmark.get()
dependencies { dependencies {
api("space.kscience:gradle-tools:$toolsVersion") api("space.kscience:gradle-tools:$toolsVersion")
//plugins form benchmarks //plugins form benchmarks
api("org.jetbrains.kotlinx:kotlinx-benchmark-plugin:0.4.9") api("org.jetbrains.kotlinx:kotlinx-benchmark-plugin:0.4.7")
//api("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion") //api("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion")
//to be used inside build-script only //to be used inside build-script only
//implementation(spclibs.kotlinx.serialization.json) //implementation(spclibs.kotlinx.serialization.json)

View File

@ -2,13 +2,10 @@
* Copyright 2018-2021 KMath contributors. * Copyright 2018-2021 KMath contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
rootProject.name = "kmath"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
}
dependencyResolutionManagement { dependencyResolutionManagement {
val projectProperties = java.util.Properties() val projectProperties = java.util.Properties()
file("../gradle.properties").inputStream().use { file("../gradle.properties").inputStream().use {

View File

@ -54,9 +54,9 @@ fun Project.addBenchmarkProperties() {
p.extensions.findByType(KScienceReadmeExtension::class.java)?.run { p.extensions.findByType(KScienceReadmeExtension::class.java)?.run {
benchmarksProject.extensions.findByType(BenchmarksExtension::class.java)?.configurations?.forEach { cfg -> benchmarksProject.extensions.findByType(BenchmarksExtension::class.java)?.configurations?.forEach { cfg ->
property("benchmark${cfg.name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}") { property("benchmark${cfg.name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}") {
val launches = benchmarksProject.layout.buildDirectory.dir("reports/benchmarks/${cfg.name}").get() val launches = benchmarksProject.buildDir.resolve("reports/benchmarks/${cfg.name}")
val resDirectory = launches.files().maxByOrNull { val resDirectory = launches.listFiles()?.maxByOrNull {
LocalDateTime.parse(it.name, ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant() LocalDateTime.parse(it.name, ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()
} }

View File

@ -9,9 +9,8 @@ kotlin.native.ignoreDisabledTargets=true
org.gradle.configureondemand=true org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4096m org.gradle.jvmargs=-Xmx4096m
toolsVersion=0.14.8-kotlin-1.8.20
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.workers.max=4 org.gradle.workers.max=4
toolsVersion=0.15.0-kotlin-1.9.20
#kotlin.experimental.tryK2=true
#kscience.wasm.disabled=true

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -17,7 +17,7 @@ internal class TestFeatures {
fun printNumeric() { fun printNumeric() {
val num = object : Number() { val num = object : Number() {
override fun toByte(): Byte = throw UnsupportedOperationException() override fun toByte(): Byte = throw UnsupportedOperationException()
// override fun toChar(): Char = throw UnsupportedOperationException() override fun toChar(): Char = throw UnsupportedOperationException()
override fun toDouble(): Double = throw UnsupportedOperationException() override fun toDouble(): Double = throw UnsupportedOperationException()
override fun toFloat(): Float = throw UnsupportedOperationException() override fun toFloat(): Float = throw UnsupportedOperationException()
override fun toInt(): Int = throw UnsupportedOperationException() override fun toInt(): Int = throw UnsupportedOperationException()

View File

@ -8,8 +8,9 @@
"OVERRIDING_FINAL_MEMBER", "OVERRIDING_FINAL_MEMBER",
"RETURN_TYPE_MISMATCH_ON_OVERRIDE", "RETURN_TYPE_MISMATCH_ON_OVERRIDE",
"CONFLICTING_OVERLOADS", "CONFLICTING_OVERLOADS",
"NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING",
"PropertyName", "PropertyName",
"ClassName", "ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING", "ClassName",
) )
@file:JsModule("binaryen") @file:JsModule("binaryen")

View File

@ -1,20 +1,17 @@
plugins { plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.jvm")
} }
description = "Commons math binding for kmath" description = "Commons math binding for kmath"
kscience { dependencies {
jvm() api(project(":kmath-core"))
jvmMain { api(project(":kmath-complex"))
api(projects.kmathCore) api(project(":kmath-coroutines"))
api(projects.kmathComplex) api(project(":kmath-optimization"))
api(projects.kmathCoroutines) api(project(":kmath-stat"))
api(projects.kmathOptimization) api(project(":kmath-functions"))
api(projects.kmathStat)
api(projects.kmathFunctions)
api("org.apache.commons:commons-math3:3.6.1") api("org.apache.commons:commons-math3:3.6.1")
}
} }
readme { readme {

View File

@ -6,6 +6,7 @@ kscience {
jvm() jvm()
js() js()
native() native()
wasm() wasm()
dependencies { dependencies {

View File

@ -10,7 +10,6 @@ import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.nd.Structure2D import space.kscience.kmath.nd.Structure2D
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.VirtualBuffer
import kotlin.math.max import kotlin.math.max
/** /**
@ -34,10 +33,7 @@ public interface XYColumnarData<out T, out X : T, out Y : T> : ColumnarData<T> {
else -> null else -> null
} }
public companion object { public companion object{
/**
* Create data form two buffers (zero-copy)
*/
@UnstableKMathAPI @UnstableKMathAPI
public fun <T, X : T, Y : T> of(x: Buffer<X>, y: Buffer<Y>): XYColumnarData<T, X, Y> { public fun <T, X : T, Y : T> of(x: Buffer<X>, y: Buffer<Y>): XYColumnarData<T, X, Y> {
require(x.size == y.size) { "Buffer size mismatch. x buffer size is ${x.size}, y buffer size is ${y.size}" } require(x.size == y.size) { "Buffer size mismatch. x buffer size is ${x.size}, y buffer size is ${y.size}" }
@ -47,26 +43,6 @@ public interface XYColumnarData<out T, out X : T, out Y : T> : ColumnarData<T> {
override val y: Buffer<Y> = y override val y: Buffer<Y> = y
} }
} }
/**
* Create two-column data from a list of row-objects (zero-copy)
*/
@UnstableKMathAPI
public fun <I, T, X : T, Y : T> ofList(
list: List<I>,
xConverter: (I) -> X,
yConverter: (I) -> Y,
): XYColumnarData<T, X, Y> = object : XYColumnarData<T, X, Y> {
override val size: Int get() = list.size
override val x: Buffer<X> = VirtualBuffer(list.size) {
xConverter(list[it])
}
override val y: Buffer<Y> = VirtualBuffer(list.size) {
yConverter(list[it])
}
}
} }
} }
@ -80,10 +56,9 @@ public fun <T> ColumnarData<T>.asXYData(
ySymbol: Symbol, ySymbol: Symbol,
): XYColumnarData<T, T, T> = object : XYColumnarData<T, T, T> { ): XYColumnarData<T, T, T> = object : XYColumnarData<T, T, T> {
init { init {
requireNotNull(this@asXYData[xSymbol]) { "The column with name $xSymbol is not present in $this" } requireNotNull(this@asXYData[xSymbol]){"The column with name $xSymbol is not present in $this"}
requireNotNull(this@asXYData[ySymbol]) { "The column with name $ySymbol is not present in $this" } requireNotNull(this@asXYData[ySymbol]){"The column with name $ySymbol is not present in $this"}
} }
override val size: Int get() = this@asXYData.size override val size: Int get() = this@asXYData.size
override val x: Buffer<T> get() = this@asXYData[xSymbol]!! override val x: Buffer<T> get() = this@asXYData[xSymbol]!!
override val y: Buffer<T> get() = this@asXYData[ySymbol]!! override val y: Buffer<T> get() = this@asXYData[ySymbol]!!

View File

@ -7,6 +7,7 @@ package space.kscience.kmath.operations
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.symbol
/** /**
* An algebra for generic boolean logic * An algebra for generic boolean logic
@ -60,8 +61,8 @@ public interface LogicAlgebra<T : Any> : Algebra<T> {
public companion object { public companion object {
public val TRUE: Symbol = Symbol("TRUE")//by symbol public val TRUE: Symbol by symbol
public val FALSE: Symbol = Symbol("FALSE")// by symbol public val FALSE: Symbol by symbol
} }
} }

View File

@ -65,7 +65,9 @@ public class RingBuffer<T>(
} }
} }
private fun Int.forward(n: Int): Int = (this + n) % (buffer.size)
@Suppress("NOTHING_TO_INLINE")
private inline fun Int.forward(n: Int): Int = (this + n) % (buffer.size)
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)

View File

@ -21,3 +21,8 @@ public fun <C> Polynomial(coefficients: List<C>, reverse: Boolean = false): Poly
@Suppress("FunctionName") @Suppress("FunctionName")
public fun <C> Polynomial(vararg coefficients: C, reverse: Boolean = false): Polynomial<C> = public fun <C> Polynomial(vararg coefficients: C, reverse: Boolean = false): Polynomial<C> =
Polynomial(with(coefficients) { if (reverse) reversed() else toList() }) Polynomial(with(coefficients) { if (reverse) reversed() else toList() })
/**
* Represents [this] constant as a [Polynomial].
*/
public fun <C> C.asPolynomial() : Polynomial<C> = Polynomial(listOf(this))

View File

@ -15,6 +15,3 @@ readme {
An API and basic implementation for arranging objects in a continuous memory block. An API and basic implementation for arranging objects in a continuous memory block.
""".trimIndent() """.trimIndent()
} }
//rootProject.the<NodeJsRootExtension>().versions.webpack.version = "5.76.2"
//rootProject.the<NodeJsRootExtension>().nodeVersion = "20.8.0"

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.memory package space.kscience.kmath.memory
import kotlin.experimental.ExperimentalNativeApi
@PublishedApi @PublishedApi
internal class NativeMemory( internal class NativeMemory(
val array: ByteArray, val array: ByteArray,
@ -28,7 +26,6 @@ internal class NativeMemory(
return NativeMemory(copy) return NativeMemory(copy)
} }
@OptIn(ExperimentalNativeApi::class)
private val reader: MemoryReader = object : MemoryReader { private val reader: MemoryReader = object : MemoryReader {
override val memory: Memory get() = this@NativeMemory override val memory: Memory get() = this@NativeMemory
@ -51,7 +48,6 @@ internal class NativeMemory(
override fun reader(): MemoryReader = reader override fun reader(): MemoryReader = reader
@OptIn(ExperimentalNativeApi::class)
private val writer: MemoryWriter = object : MemoryWriter { private val writer: MemoryWriter = object : MemoryWriter {
override val memory: Memory get() = this@NativeMemory override val memory: Memory get() = this@NativeMemory