Implement Commons RNG-like samplers in kmath-prob module for Multiplatform #164

Merged
CommanderTvis merged 44 commits from feature/mp-samplers into dev 2021-03-31 09:25:44 +03:00
20 changed files with 71 additions and 76 deletions
Showing only changes of commit f18cd9ad40 - Show all commits

View File

@ -3,10 +3,10 @@ package kscience.kmath.commons.prob
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.blocking
import kscience.kmath.prob.fromSource
import kscience.kmath.prob.samplers.GaussianSampler
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.blocking
import kscience.kmath.stat.fromSource
import kscience.kmath.stat.samplers.GaussianSampler
import org.apache.commons.rng.simple.RandomSource
import java.time.Duration
import java.time.Instant

View File

@ -3,8 +3,8 @@ package kscience.kmath.commons.prob
import kotlinx.coroutines.runBlocking
import kscience.kmath.chains.Chain
import kscience.kmath.chains.collectWithState
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.samplers.ZigguratNormalizedGaussianSampler
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.samplers.ZigguratNormalizedGaussianSampler
private data class AveragingChainState(var num: Int = 0, var value: Double = 0.0)

View File

@ -1,11 +1,11 @@
package kscience.kmath.commons.optimization
import kotlinx.coroutines.runBlocking
import kscience.kmath.commons.expressions.DerivativeStructureExpression
import kscience.kmath.expressions.symbol
import kscience.kmath.stat.Distribution
import kscience.kmath.stat.Fitting
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.normal
import kscience.kmath.stat.distributions.NormalDistribution
import org.junit.jupiter.api.Test
import kotlin.math.pow
@ -39,20 +39,15 @@ internal class OptimizeTest {
}
@Test
fun testCmFit() {
fun testCmFit() = runBlocking {
val a by symbol
val b by symbol
val c by symbol
val sigma = 1.0
val generator = Distribution.normal(0.0, sigma)
val generator = NormalDistribution(0.0, sigma)
val chain = generator.sample(RandomGenerator.default(112667))
val x = (1..100).map(Int::toDouble)
val y = x.map {
it.pow(2) + it + 1 + chain.nextDouble()
}
val y = x.map { it.pow(2) + it + 1.0 + chain.next() }
val yErr = List(x.size) { sigma }
val chi2 = Fitting.chiSquared(x, y, yErr) { x1 ->

View File

@ -1,12 +1,12 @@
package kscience.kmath.prob.distributions
package kscience.kmath.stat.distributions
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.UnivariateDistribution
import kscience.kmath.prob.internal.InternalErf
import kscience.kmath.prob.samplers.GaussianSampler
import kscience.kmath.prob.samplers.NormalizedGaussianSampler
import kscience.kmath.prob.samplers.ZigguratNormalizedGaussianSampler
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.UnivariateDistribution
import kscience.kmath.stat.internal.InternalErf
import kscience.kmath.stat.samplers.GaussianSampler
import kscience.kmath.stat.samplers.NormalizedGaussianSampler
import kscience.kmath.stat.samplers.ZigguratNormalizedGaussianSampler
import kotlin.math.*
public inline class NormalDistribution(public val sampler: GaussianSampler) : UnivariateDistribution<Double> {

View File

@ -1,4 +1,4 @@
package kscience.kmath.prob.internal
package kscience.kmath.stat.internal
import kotlin.math.abs

View File

@ -1,4 +1,4 @@
package kscience.kmath.prob.internal
package kscience.kmath.stat.internal
import kotlin.math.*

View File

@ -1,4 +1,4 @@
package kscience.kmath.prob.internal
package kscience.kmath.stat.internal
import kotlin.math.ln
import kotlin.math.min

View File

@ -1,10 +1,10 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.prob.internal.InternalUtils
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kscience.kmath.stat.internal.InternalUtils
import kotlin.math.ln
import kotlin.math.pow

View File

@ -1,10 +1,10 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.prob.next
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kscience.kmath.stat.next
import kotlin.math.*
/**

View File

@ -1,10 +1,10 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.prob.internal.InternalUtils
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kscience.kmath.stat.internal.InternalUtils
import kotlin.math.ceil
import kotlin.math.max
import kotlin.math.min

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kotlin.math.*
/**

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.chains.map
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
/**
* Sampling from a Gaussian distribution with given mean and standard deviation.

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kotlin.math.exp
/**

View File

@ -1,12 +1,12 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.chains.ConstantChain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.prob.internal.InternalUtils
import kscience.kmath.prob.next
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kscience.kmath.stat.internal.InternalUtils
import kscience.kmath.stat.next
import kotlin.math.*
/**

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kotlin.math.ln
import kotlin.math.sqrt

View File

@ -1,6 +1,6 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.prob.Sampler
import kscience.kmath.stat.Sampler
/**
* Marker interface for a sampler that generates values from an N(0,1)

View File

@ -1,8 +1,8 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
/**
* Sampler for the Poisson distribution.

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kotlin.math.ceil
import kotlin.math.exp

View File

@ -1,9 +1,9 @@
package kscience.kmath.prob.samplers
package kscience.kmath.stat.samplers
import kscience.kmath.chains.Chain
import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.Sampler
import kscience.kmath.prob.chain
import kscience.kmath.stat.RandomGenerator
import kscience.kmath.stat.Sampler
import kscience.kmath.stat.chain
import kotlin.math.*
/**

View File

@ -3,7 +3,7 @@ package kscience.kmath.stat
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.runBlocking
import kscience.kmath.prob.samplers.GaussianSampler
import kscience.kmath.stat.samplers.GaussianSampler
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test