From f05a22ce8b7c55c848c7c9f33a4a2382eba3aec1 Mon Sep 17 00:00:00 2001 From: slwu89 <10673535+slwu89@users.noreply.github.com> Date: Mon, 13 Feb 2023 19:27:16 -0800 Subject: [PATCH 1/4] add method for Distributions.rand(::ResettableRNG, ::Binomial --- src/parameterized/binomial.jl | 4 ++++ test/runtests.jl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/parameterized/binomial.jl b/src/parameterized/binomial.jl index 72981b96..e2c8a45e 100644 --- a/src/parameterized/binomial.jl +++ b/src/parameterized/binomial.jl @@ -29,6 +29,10 @@ end Binomial(n) = Binomial(n, 0.5) +function Dists.rand(rng::ResettableRNG, d::Dists.Binomial) + rand(rng.rng, d) +end + ############################################################################### @kwstruct Binomial(n, p) diff --git a/test/runtests.jl b/test/runtests.jl index 3ccf0f45..f44804f8 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -116,6 +116,10 @@ end @test ℓ ≈ logdensity_def(Binomial(; n, logitp), y) @test ℓ ≈ logdensity_def(Binomial(; n, probitp), y) + rng = ResettableRNG(Random.Xoshiro()) + @test rand(rng, Binomial(n=0, p=1.0)) == 0 + @test rand(rng, Binomial(n=10, p=1.0)) == 10 + @test_broken logdensity_def(Binomial(n, p), CountingMeasure(ℤ[0:n]), x) ≈ binomlogpdf(n, p, x) end From 57bfb3db47e16763dacb419abd60c331aa4ee058 Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Sun, 26 Feb 2023 09:36:30 -0800 Subject: [PATCH 2/4] Fix ResettableRNG dispatch --- src/parameterized/binomial.jl | 8 ++------ src/resettable-rng.jl | 8 ++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/parameterized/binomial.jl b/src/parameterized/binomial.jl index e2c8a45e..1825cb69 100644 --- a/src/parameterized/binomial.jl +++ b/src/parameterized/binomial.jl @@ -23,16 +23,12 @@ end x ∈ (0, 1) end -function Base.rand(rng::AbstractRNG, ::Type, d::Binomial{(:n, :p)}) - rand(rng, Dists.Binomial(d.n, d.p)) +function Base.rand(rng::AbstractRNG, ::Type{T}, d::Binomial{(:n, :p)}) where {T} + rand(rng, T, Dists.Binomial(d.n, d.p)) end Binomial(n) = Binomial(n, 0.5) -function Dists.rand(rng::ResettableRNG, d::Dists.Binomial) - rand(rng.rng, d) -end - ############################################################################### @kwstruct Binomial(n, p) diff --git a/src/resettable-rng.jl b/src/resettable-rng.jl index a6297a21..02223e97 100644 --- a/src/resettable-rng.jl +++ b/src/resettable-rng.jl @@ -57,6 +57,14 @@ for T in vcat(subtypes(Signed), subtypes(Unsigned), subtypes(AbstractFloat)) end end +function Base.rand(r::ResettableRNG, d::AbstractMeasure) + rand(r.rng, d) +end + +function Base.rand(r::ResettableRNG, ::Type{T}, d::AbstractMeasure) where {T} + rand(r.rng, T, d) +end + Base.iterate(r::ResettableRNG) = iterate(r, nothing) function Base.iterate(r::ResettableRNG, ::Nothing) From c11a1e90f15b0048e6c5f8ea6c1beb29ca3492e4 Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Sun, 26 Feb 2023 09:44:41 -0800 Subject: [PATCH 3/4] Test with MersenneTwister (Xoshiro not available in Julia 1.6) --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index f44804f8..97f6833e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -116,7 +116,7 @@ end @test ℓ ≈ logdensity_def(Binomial(; n, logitp), y) @test ℓ ≈ logdensity_def(Binomial(; n, probitp), y) - rng = ResettableRNG(Random.Xoshiro()) + rng = ResettableRNG(Random.MersenneTwister()) @test rand(rng, Binomial(n=0, p=1.0)) == 0 @test rand(rng, Binomial(n=10, p=1.0)) == 10 From 9ff9bb5e47b82a97f837843cba1e05ae459d5d0a Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Sun, 26 Feb 2023 09:51:19 -0800 Subject: [PATCH 4/4] bump version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 26a3a666..a88a1b63 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "MeasureTheory" uuid = "eadaa1a4-d27c-401d-8699-e962e1bbc33b" authors = ["Chad Scherrer and contributors"] -version = "0.18.1" +version = "0.18.2" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"