Implement Commons RNG-like samplers in kmath-prob module for Multiplatform #164
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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 ->
|
||||
|
@ -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> {
|
||||
|
@ -1,4 +1,4 @@
|
||||
package kscience.kmath.prob.internal
|
||||
package kscience.kmath.stat.internal
|
||||
|
||||
import kotlin.math.abs
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package kscience.kmath.prob.internal
|
||||
package kscience.kmath.stat.internal
|
||||
|
||||
import kotlin.math.*
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package kscience.kmath.prob.internal
|
||||
package kscience.kmath.stat.internal
|
||||
|
||||
import kotlin.math.ln
|
||||
import kotlin.math.min
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
/**
|
||||
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user