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 { dependencies {
compile 'ch.qos.logback:logback-classic:1.2.3' 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: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: kotlin_version
compile group: 'javax.cache', name: 'cache-api', version: '1.1.0' 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-plots')
compile project(':dataforge-gui:dataforge-html') compile project(':dataforge-gui:dataforge-html')
compile 'org.controlsfx:controlsfx:8.40.14' 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 'no.tornado:tornadofx-controlsfx:0.1.1'
compile group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.10.2' 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 // optional dependency for JFreeChart
//compileOnly project(":dataforge-plots:plots-jfc") //compileOnly project(":dataforge-plots:plots-jfc")

View File

@ -16,10 +16,9 @@
package hep.dataforge.maths.chain package hep.dataforge.maths.chain
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.channels.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.channels.produce
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
@ -48,8 +47,7 @@ interface Chain<out R> : Sequence<R> {
/** /**
* Chain as a coroutine receive channel * Chain as a coroutine receive channel
*/ */
val channel: ReceiveChannel<R> val flow: Flow<R> get() = flow { while (true) emit(next()) }
get() = GlobalScope.produce { while (true) send(next()) }
override fun iterator(): Iterator<R> { override fun iterator(): Iterator<R> {
return object : Iterator<R> { return object : Iterator<R> {
@ -77,10 +75,7 @@ interface Chain<out R> : Sequence<R> {
return parent.fork().map(func) return parent.fork().map(func)
} }
override val channel: ReceiveChannel<T> override val flow: Flow<T> get() = parent.flow.map { func.invoke(it) }
get() {
return parent.channel.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.Chain
import hep.dataforge.maths.chain.SimpleChain 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.MultivariateRealDistribution
import org.apache.commons.math3.distribution.RealDistribution import org.apache.commons.math3.distribution.RealDistribution
import org.apache.commons.math3.random.RandomGenerator import org.apache.commons.math3.random.RandomGenerator
@ -40,14 +41,15 @@ val MultivariateRealDistribution.chain: Chain<DoubleArray>
* @param targetDensity target probability density * @param targetDensity target probability density
*/ */
fun <T : Any> rejectingChain( fun <T : Any> rejectingChain(
proposal: Chain<T>, proposal: Chain<T>,
proposalDensity: (T) -> Double, proposalDensity: (T) -> Double,
factor: Double = 1.0, factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator, generator: RandomGenerator = defaultGenerator,
targetDensity: (T) -> Double): Chain<T> { targetDensity: (T) -> Double,
): Chain<T> {
return SimpleChain { return SimpleChain {
//TODO check if target density higher than proposal density? //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 * Sample given distribution using this disribution and accept-reject method
*/ */
fun RealDistribution.rejectingChain( fun RealDistribution.rejectingChain(
factor: Double = 1.0, factor: Double = 1.0,
generator: RandomGenerator = defaultGenerator, generator: RandomGenerator = defaultGenerator,
targetDensity: (Double) -> Double): Chain<Double> { targetDensity: (Double) -> Double,
): Chain<Double> {
return rejectingChain(this.chain, this::density, factor, generator, targetDensity) 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.buildContext
import hep.dataforge.configure import hep.dataforge.configure
import hep.dataforge.fx.FXPlugin
import hep.dataforge.fx.output.FXOutputManager import hep.dataforge.fx.output.FXOutputManager
import hep.dataforge.io.output.stream import hep.dataforge.io.output.stream
import hep.dataforge.meta.Meta import hep.dataforge.meta.Meta
@ -39,6 +40,7 @@ import inr.numass.data.SpectrumGenerator
import inr.numass.models.NBkgSpectrum import inr.numass.models.NBkgSpectrum
import inr.numass.models.sterile.SterileNeutrinoSpectrum import inr.numass.models.sterile.SterileNeutrinoSpectrum
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.javafx.JavaFx
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.PrintWriter import java.io.PrintWriter
import kotlin.math.sqrt import kotlin.math.sqrt
@ -46,7 +48,7 @@ import kotlin.math.sqrt
fun main() { 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() output = FXOutputManager()
} }
@ -71,9 +73,9 @@ fun main() {
} }
} }
(14000.0..18600.0 step 10.0).forEach { // (14000.0..18600.0 step 10.0).forEach {
println("$it\t${spectrum.value(it,params)}") // println("$it\t${spectrum.value(it,params)}")
} // }
fun plotSpectrum(name: String, vararg override: Pair<String, Double>): Plot { fun plotSpectrum(name: String, vararg override: Pair<String, Double>): Plot {
val x = (14000.0..18600.0).step(100.0).toList() val x = (14000.0..18600.0).step(100.0).toList()
@ -141,7 +143,7 @@ fun main() {
} }
plots.setType<DataPlot>() plots.setType<DataPlot>()
+plotResidual("trap", "trap" to 0.99) +plotResidual("trap", "trap" to 0.99)
context.launch(Dispatchers.Main) { context.launch(Dispatchers.JavaFx) {
try { try {
+plotFitResidual("trap_fit", "trap" to 0.99) +plotFitResidual("trap_fit", "trap" to 0.99)
} catch (ex: Exception) { } catch (ex: Exception) {
@ -149,7 +151,7 @@ fun main() {
} }
} }
+plotResidual("X", "X" to 0.11) +plotResidual("X", "X" to 0.11)
context.launch(Dispatchers.Main) { context.launch(Dispatchers.JavaFx) {
+plotFitResidual("X_fit", "X" to 0.11) +plotFitResidual("X_fit", "X" to 0.11)
} }
+plotResidual("sterile_1", "U2" to 1e-3) +plotResidual("sterile_1", "U2" to 1e-3)
@ -157,7 +159,7 @@ fun main() {
+plotFitResidual("sterile_1_fit", "U2" to 1e-3) +plotFitResidual("sterile_1_fit", "U2" to 1e-3)
} }
+plotResidual("sterile_3", "msterile2" to (3000 * 3000).toDouble(), "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) +plotFitResidual("sterile_3_fit", "msterile2" to (3000 * 3000).toDouble(), "U2" to 1e-3)
} }