This commit is contained in:
Alexander Nozik 2021-02-19 13:38:32 +03:00
parent 209e17cd42
commit 6581f3dd8a
13 changed files with 25 additions and 11 deletions

View File

@ -4,7 +4,7 @@ plugins {
id("ru.mipt.npm.project") id("ru.mipt.npm.project")
} }
internal val kmathVersion: String by extra("0.2.0-dev-7") internal val kmathVersion: String by extra("0.2.0")
allprojects { allprojects {
repositories { repositories {

View File

@ -69,6 +69,14 @@ benchmark {
targets.register("benchmarks") targets.register("benchmarks")
// This one matches sourceSet name above // This one matches sourceSet name above
configurations.register("buffer") {
warmups = 1 // number of warmup iterations
iterations = 3 // number of iterations
iterationTime = 500 // time in seconds per iteration
iterationTimeUnit = "ms" // time unity for iterationTime, default is seconds
include("BufferBenchmark")
}
configurations.register("dot") { configurations.register("dot") {
warmups = 1 // number of warmup iterations warmups = 1 // number of warmup iterations
iterations = 3 // number of iterations iterations = 3 // number of iterations

View File

@ -4,6 +4,7 @@ import space.kscience.kmath.nd.DefaultStrides
import space.kscience.kmath.nd.NDBuffer import space.kscience.kmath.nd.NDBuffer
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
fun main() { fun main() {
val n = 6000 val n = 6000
val array = DoubleArray(n * n) { 1.0 } val array = DoubleArray(n * n) { 1.0 }

View File

@ -4,6 +4,7 @@ import space.kscience.kmath.nd.NDStructure
import space.kscience.kmath.nd.mapToBuffer import space.kscience.kmath.nd.mapToBuffer
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
@Suppress("UNUSED_VARIABLE")
fun main() { fun main() {
val n = 6000 val n = 6000
val structure = NDStructure.build(intArrayOf(n, n), Buffer.Companion::auto) { 1.0 } val structure = NDStructure.build(intArrayOf(n, n), Buffer.Companion::auto) { 1.0 }

View File

@ -3,6 +3,7 @@ package space.kscience.kmath.complex
import space.kscience.kmath.memory.MemoryReader import space.kscience.kmath.memory.MemoryReader
import space.kscience.kmath.memory.MemorySpec import space.kscience.kmath.memory.MemorySpec
import space.kscience.kmath.memory.MemoryWriter import space.kscience.kmath.memory.MemoryWriter
import space.kscience.kmath.misc.UnstableKMathAPI
import space.kscience.kmath.operations.ExtendedField import space.kscience.kmath.operations.ExtendedField
import space.kscience.kmath.operations.FieldElement import space.kscience.kmath.operations.FieldElement
import space.kscience.kmath.operations.Norm import space.kscience.kmath.operations.Norm
@ -45,6 +46,7 @@ private val PI_DIV_2 = Complex(PI / 2, 0)
/** /**
* A field of [Complex]. * A field of [Complex].
*/ */
@OptIn(UnstableKMathAPI::class)
public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, RingWithNumbers<Complex> { public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, RingWithNumbers<Complex> {
public override val zero: Complex = 0.0.toComplex() public override val zero: Complex = 0.0.toComplex()
public override val one: Complex = 1.0.toComplex() public override val one: Complex = 1.0.toComplex()
@ -166,6 +168,7 @@ public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, Rin
* @property re The real part. * @property re The real part.
* @property im The imaginary part. * @property im The imaginary part.
*/ */
@OptIn(UnstableKMathAPI::class)
public data class Complex(val re: Double, val im: Double) : FieldElement<Complex, ComplexField> { public data class Complex(val re: Double, val im: Double) : FieldElement<Complex, ComplexField> {
public constructor(re: Number, im: Number) : this(re.toDouble(), im.toDouble()) public constructor(re: Number, im: Number) : this(re.toDouble(), im.toDouble())
public constructor(re: Number) : this(re.toDouble(), 0.0) public constructor(re: Number) : this(re.toDouble(), 0.0)

View File

@ -3,6 +3,7 @@ package space.kscience.kmath.complex
import space.kscience.kmath.memory.MemoryReader import space.kscience.kmath.memory.MemoryReader
import space.kscience.kmath.memory.MemorySpec import space.kscience.kmath.memory.MemorySpec
import space.kscience.kmath.memory.MemoryWriter import space.kscience.kmath.memory.MemoryWriter
import space.kscience.kmath.misc.UnstableKMathAPI
import space.kscience.kmath.operations.* import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MemoryBuffer import space.kscience.kmath.structures.MemoryBuffer
@ -34,6 +35,7 @@ public val Quaternion.r: Double
/** /**
* A field of [Quaternion]. * A field of [Quaternion].
*/ */
@OptIn(UnstableKMathAPI::class)
public object QuaternionField : Field<Quaternion>, Norm<Quaternion, Quaternion>, PowerOperations<Quaternion>, public object QuaternionField : Field<Quaternion>, Norm<Quaternion, Quaternion>, PowerOperations<Quaternion>,
ExponentialOperations<Quaternion>, RingWithNumbers<Quaternion> { ExponentialOperations<Quaternion>, RingWithNumbers<Quaternion> {
override val zero: Quaternion = 0.toQuaternion() override val zero: Quaternion = 0.toQuaternion()

View File

@ -91,7 +91,7 @@ public class BufferMatrixContext<T : Any, R : Ring<T>>(
public class BufferMatrix<T : Any>( public class BufferMatrix<T : Any>(
public override val rowNum: Int, public override val rowNum: Int,
public override val colNum: Int, public override val colNum: Int,
public val buffer: Buffer<out T>, public val buffer: Buffer<T>,
) : Matrix<T> { ) : Matrix<T> {
init { init {

View File

@ -9,9 +9,9 @@ package space.kscience.kmath.structures
public inline class RealBuffer(public val array: DoubleArray) : MutableBuffer<Double> { public inline class RealBuffer(public val array: DoubleArray) : MutableBuffer<Double> {
override val size: Int get() = array.size override val size: Int get() = array.size
override inline operator fun get(index: Int): Double = array[index] override operator fun get(index: Int): Double = array[index]
override inline operator fun set(index: Int, value: Double) { override operator fun set(index: Int, value: Double) {
array[index] = value array[index] = value
} }

View File

@ -17,7 +17,7 @@ public fun <T> Buffer<T>.asFlow(): Flow<T> = iterator().asFlow()
* Flat map a [Flow] of [Buffer] into continuous [Flow] of elements * Flat map a [Flow] of [Buffer] into continuous [Flow] of elements
*/ */
@FlowPreview @FlowPreview
public fun <T> Flow<Buffer<out T>>.spread(): Flow<T> = flatMapConcat { it.asFlow() } public fun <T> Flow<Buffer<T>>.spread(): Flow<T> = flatMapConcat { it.asFlow() }
/** /**
* Collect incoming flow into fixed size chunks * Collect incoming flow into fixed size chunks

View File

@ -28,7 +28,7 @@ internal class RingBufferTest {
val windowed = flow.windowed(10) val windowed = flow.windowed(10)
runBlocking { runBlocking {
val first = windowed.take(1).single() @Suppress("UNUSED_VARIABLE") val first = windowed.take(1).single()
val res = windowed.take(15).map { it.asSequence().average() }.toList() val res = windowed.take(15).map { it.asSequence().average() }.toList()
assertEquals(0.0, res[0]) assertEquals(0.0, res[0])
assertEquals(4.5, res[9]) assertEquals(4.5, res[9])

View File

@ -13,7 +13,7 @@ public infix fun BufferMatrix<Double>.dot(other: BufferMatrix<Double>): BufferMa
val resultArray = DoubleArray(this.rowNum * other.colNum) val resultArray = DoubleArray(this.rowNum * other.colNum)
//convert to array to insure there is no memory indirection //convert to array to insure there is no memory indirection
fun Buffer<out Double>.unsafeArray() = if (this is RealBuffer) fun Buffer<Double>.unsafeArray() = if (this is RealBuffer)
this.array this.array
else else
DoubleArray(size) { get(it) } DoubleArray(size) { get(it) }

View File

@ -70,7 +70,7 @@ public class RealHistogramSpace(
val ndCounter = NDStructure.auto(strides) { Counter.real() } val ndCounter = NDStructure.auto(strides) { Counter.real() }
val hBuilder = HistogramBuilder<Double> { point, value -> val hBuilder = HistogramBuilder<Double> { point, value ->
val index = getIndex(point) val index = getIndex(point)
ndCounter[index].add(1.0) ndCounter[index].add(value.toDouble())
} }
hBuilder.apply(builder) hBuilder.apply(builder)
val values: NDBuffer<Double> = ndCounter.mapToBuffer { it.value } val values: NDBuffer<Double> = ndCounter.mapToBuffer { it.value }

View File

@ -2,13 +2,12 @@ pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
jcenter() jcenter()
maven("https://repo.kotlin.link")
maven("https://dl.bintray.com/kotlin/kotlin-eap") maven("https://dl.bintray.com/kotlin/kotlin-eap")
maven("https://dl.bintray.com/mipt-npm/kscience")
maven("https://dl.bintray.com/mipt-npm/dev")
maven("https://dl.bintray.com/kotlin/kotlinx") maven("https://dl.bintray.com/kotlin/kotlinx")
} }
val toolsVersion = "0.7.6" val toolsVersion = "0.7.7"
val kotlinVersion = "1.4.30" val kotlinVersion = "1.4.30"
plugins { plugins {