Skip to content

Commit 3704672

Browse files
Bump Turing v0.40 (#42)
* bump Turing v0.40 * fix tighten compat for Turing `Turing.DynamicPPL.evaluate_and_sample!!` is only available on DynamicPPL v0.37, which is re-exported only on Turing v0.40. * fix formatting Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix add tests for drawing initial parameter * increment path version * run formatter Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 37f8fed commit 3704672

File tree

5 files changed

+43
-17
lines changed

5 files changed

+43
-17
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "SliceSampling"
22
uuid = "43f4d3e8-9711-4a8c-bd1b-03ac73a255cf"
3-
version = "0.7.7"
3+
version = "0.7.8"
44

55
[deps]
66
AbstractMCMC = "80f14c24-f653-4e6a-9b94-39d6b0f70001"
@@ -21,7 +21,7 @@ Distributions = "0.25"
2121
LinearAlgebra = "1"
2222
LogDensityProblems = "2"
2323
Random = "1"
24-
Turing = "0.39.5"
24+
Turing = "0.40"
2525
julia = "1.10"
2626

2727
[extras]

docs/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ Random = "1"
2828
SliceSampling = "0.7.1"
2929
StableRNGs = "1"
3030
Statistics = "1"
31-
Turing = "0.37, 0.38, 0.39"
31+
Turing = "0.37, 0.38, 0.39, 0.40"
3232
julia = "1.10"

ext/SliceSamplingTuringExt.jl

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
module SliceSamplingTuringExt
33

4+
using LogDensityProblems
45
using Random
56
using SliceSampling
67
using Turing
@@ -32,32 +33,38 @@ const SliceSamplingStates = Union{
3233
function Turing.Inference.getparams(::Turing.DynamicPPL.Model, sample::SliceSamplingStates)
3334
return sample.transition.params
3435
end
35-
36-
function Turing.Inference.getlogp_external(
37-
::Turing.DynamicPPL.Model, t::SliceSampling.Transition, state
38-
)
39-
return t.lp
40-
end
4136
# end
4237

4338
function SliceSampling.initial_sample(rng::Random.AbstractRNG, ℓ::Turing.LogDensityFunction)
39+
n_max_attempts = 1000
40+
4441
model =.model
4542
vi = Turing.DynamicPPL.VarInfo(rng, model, Turing.SampleFromUniform())
46-
vi_spl = last(Turing.DynamicPPL.evaluate!!(model, rng, vi, Turing.SampleFromUniform()))
43+
vi_spl = last(Turing.DynamicPPL.evaluate_and_sample!!(rng, model, vi, Turing.SampleFromUniform()))
4744
θ = vi_spl[:]
45+
ℓp = LogDensityProblems.logdensity(ℓ, θ)
4846

4947
init_attempt_count = 1
50-
while !all(isfinite.(θ))
51-
if init_attempt_count == 10
52-
@warn "failed to find valid initial parameters in $(init_attempt_count) tries; consider providing explicit initial parameters using the `initial_params` keyword"
48+
for attempts in 1:n_max_attempts
49+
if attempts == 10
50+
@warn "Failed to find valid initial parameters after $(init_attempt_count) attempts; consider providing explicit initial parameters using the `initial_params` keyword"
5351
end
5452

5553
# NOTE: This will sample in the unconstrained space.
56-
vi_spl = last(Turing.DynamicPPL.evaluate!!(model, rng, vi, Turing.SampleFromUniform()))
57-
θ = vi_spl[:]
54+
vi_spl = last(
55+
Turing.DynamicPPL.evaluate_and_sample!!(
56+
rng, model, vi, Turing.SampleFromUniform()
57+
),
58+
)
59+
θ = vi_spl[:]
60+
ℓp = LogDensityProblems.logdensity(ℓ, θ)
5861

59-
init_attempt_count += 1
62+
if all(isfinite.(θ)) && isfinite(ℓp)
63+
return θ
64+
end
6065
end
66+
67+
@error "Failed to find valid initial parameters after $(n_max_attempts) attempts; consider providing explicit initial parameters using the `initial_params` keyword"
6168
return θ
6269
end
6370

test/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ MCMCTesting = "0.3"
1818
Random = "1"
1919
StableRNGs = "1"
2020
Test = "1"
21-
Turing = "0.37, 0.38, 0.39"
21+
Turing = "0.37, 0.38, 0.39, 0.40"
2222
julia = "1.10"

test/turing.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,30 @@
88
return nothing
99
end
1010

11+
@model function illbehavedmodel()
12+
@addlogprob! -Inf
13+
return nothing
14+
end
15+
1116
@model function logp_check()
1217
a ~ Normal()
1318
return b ~ Normal()
1419
end
1520

21+
rng = Random.default_rng()
22+
@test begin
23+
init = SliceSampling.initial_sample(rng, LogDensityFunction(demo()))
24+
all(isfinite.(init))
25+
end
26+
27+
@test_warn "Warning: Failed" SliceSampling.initial_sample(
28+
rng, LogDensityFunction(illbehavedmodel())
29+
)
30+
31+
@test_warn "Error: Failed" SliceSampling.initial_sample(
32+
rng, LogDensityFunction(illbehavedmodel())
33+
)
34+
1635
n_samples = 1000
1736
model = demo()
1837

0 commit comments

Comments
 (0)