Update coroutines version

This commit is contained in:
Alexander Nozik 2021-05-29 18:08:43 +03:00
parent 50802232c3
commit 65c83f3524
5 changed files with 30 additions and 30 deletions

View File

@ -2,7 +2,7 @@ description = 'dataforge-core'
dependencies {
compile 'ch.qos.logback:logback-classic:1.2.3'
compile 'org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.3.2'
compile 'org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.5.0'
compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: kotlin_version
compile group: 'javax.cache', name: 'cache-api', version: '1.1.0'
}

View File

@ -11,10 +11,10 @@ dependencies {
compile project(':dataforge-plots')
compile project(':dataforge-gui:dataforge-html')
compile 'org.controlsfx:controlsfx:8.40.14'
compile "no.tornado:tornadofx:1.7.17"
compile "no.tornado:tornadofx:1.7.19"
compile 'no.tornado:tornadofx-controlsfx:0.1.1'
compile group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.10.2'
compile 'org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.0.1'
compile 'org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.5.0'
// optional dependency for JFreeChart
//compileOnly project(":dataforge-plots:plots-jfc")

View File

@ -16,10 +16,9 @@
package hep.dataforge.maths.chain
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.map
import kotlinx.coroutines.channels.produce
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
@ -48,8 +47,7 @@ interface Chain<out R> : Sequence<R> {
/**
* Chain as a coroutine receive channel
*/
val channel: ReceiveChannel<R>
get() = GlobalScope.produce { while (true) send(next()) }
val flow: Flow<R> get() = flow { while (true) emit(next()) }
override fun iterator(): Iterator<R> {
return object : Iterator<R> {
@ -77,10 +75,7 @@ interface Chain<out R> : Sequence<R> {
return parent.fork().map(func)
}
override val channel: ReceiveChannel<T>
get() {
return parent.channel.map { func.invoke(it) }
}
override val flow: Flow<T> get() = parent.flow.map { func.invoke(it) }
}
}
}

View File

@ -18,7 +18,8 @@ package hep.dataforge.stat
import hep.dataforge.maths.chain.Chain
import hep.dataforge.maths.chain.SimpleChain
import kotlinx.coroutines.channels.dropWhile
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.first
import org.apache.commons.math3.distribution.MultivariateRealDistribution
import org.apache.commons.math3.distribution.RealDistribution
import org.apache.commons.math3.random.RandomGenerator
@ -40,14 +41,15 @@ val MultivariateRealDistribution.chain: Chain<DoubleArray>
* @param targetDensity target probability density
*/
fun <T : Any> rejectingChain(
proposal: Chain<T>,
proposalDensity: (T) -> Double,
factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator,
targetDensity: (T) -> Double): Chain<T> {
proposal: Chain<T>,
proposalDensity: (T) -> Double,
factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator,
targetDensity: (T) -> Double,
): Chain<T> {
return SimpleChain {
//TODO check if target density higher than proposal density?
proposal.channel.dropWhile { generator.nextDouble() < targetDensity(it) / proposalDensity(it) / factor }.receive()
proposal.flow.dropWhile { generator.nextDouble() < targetDensity(it) / proposalDensity(it) / factor }.first()
}
}
@ -55,8 +57,9 @@ fun <T : Any> rejectingChain(
* Sample given distribution using this disribution and accept-reject method
*/
fun RealDistribution.rejectingChain(
factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator,
targetDensity: (Double) -> Double): Chain<Double> {
factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator,
targetDensity: (Double) -> Double,
): Chain<Double> {
return rejectingChain(this.chain, this::density, factor, generator, targetDensity)
}

View File

@ -18,6 +18,7 @@ package inr.numass.scripts.models
import hep.dataforge.buildContext
import hep.dataforge.configure
import hep.dataforge.fx.FXPlugin
import hep.dataforge.fx.output.FXOutputManager
import hep.dataforge.io.output.stream
import hep.dataforge.meta.Meta
@ -39,6 +40,7 @@ import inr.numass.data.SpectrumGenerator
import inr.numass.models.NBkgSpectrum
import inr.numass.models.sterile.SterileNeutrinoSpectrum
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.javafx.JavaFx
import kotlinx.coroutines.launch
import java.io.PrintWriter
import kotlin.math.sqrt
@ -46,7 +48,7 @@ import kotlin.math.sqrt
fun main() {
val context = buildContext("NUMASS", NumassPlugin::class.java, JFreeChartPlugin::class.java) {
val context = buildContext("NUMASS", NumassPlugin::class.java, FXPlugin::class.java, JFreeChartPlugin::class.java) {
output = FXOutputManager()
}
@ -71,9 +73,9 @@ fun main() {
}
}
(14000.0..18600.0 step 10.0).forEach {
println("$it\t${spectrum.value(it,params)}")
}
// (14000.0..18600.0 step 10.0).forEach {
// println("$it\t${spectrum.value(it,params)}")
// }
fun plotSpectrum(name: String, vararg override: Pair<String, Double>): Plot {
val x = (14000.0..18600.0).step(100.0).toList()
@ -141,7 +143,7 @@ fun main() {
}
plots.setType<DataPlot>()
+plotResidual("trap", "trap" to 0.99)
context.launch(Dispatchers.Main) {
context.launch(Dispatchers.JavaFx) {
try {
+plotFitResidual("trap_fit", "trap" to 0.99)
} catch (ex: Exception) {
@ -149,7 +151,7 @@ fun main() {
}
}
+plotResidual("X", "X" to 0.11)
context.launch(Dispatchers.Main) {
context.launch(Dispatchers.JavaFx) {
+plotFitResidual("X_fit", "X" to 0.11)
}
+plotResidual("sterile_1", "U2" to 1e-3)
@ -157,7 +159,7 @@ fun main() {
+plotFitResidual("sterile_1_fit", "U2" to 1e-3)
}
+plotResidual("sterile_3", "msterile2" to (3000 * 3000).toDouble(), "U2" to 1e-3)
context.launch(Dispatchers.Main) {
context.launch(Dispatchers.JavaFx) {
+plotFitResidual("sterile_3_fit", "msterile2" to (3000 * 3000).toDouble(), "U2" to 1e-3)
}