diff --git a/Project.toml b/Project.toml index fe3b64f..cc44faf 100644 --- a/Project.toml +++ b/Project.toml @@ -1,15 +1,12 @@ name = "SliceSampling" uuid = "43f4d3e8-9711-4a8c-bd1b-03ac73a255cf" -version = "0.7.4" +version = "0.7.5" [deps] AbstractMCMC = "80f14c24-f653-4e6a-9b94-39d6b0f70001" -Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" LogDensityProblems = "6fdf6af0-433a-55f7-b3ed-c6c6e0b8df7c" -LogDensityProblemsAD = "996a588d-648d-4e1f-a8f0-a84b347e47b1" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Requires = "ae029012-a4dd-5104-9daa-d747884805df" @@ -21,14 +18,10 @@ SliceSamplingTuringExt = ["Turing"] [compat] AbstractMCMC = "4, 5" -Accessors = "0.1" Distributions = "0.25" -FillArrays = "1" LinearAlgebra = "1" LogDensityProblems = "2" -LogDensityProblemsAD = "1" Random = "1" -Requires = "1" Turing = "0.37, 0.38" julia = "1.10" diff --git a/ext/SliceSamplingTuringExt.jl b/ext/SliceSamplingTuringExt.jl index 784f50c..713a04d 100644 --- a/ext/SliceSamplingTuringExt.jl +++ b/ext/SliceSamplingTuringExt.jl @@ -2,12 +2,10 @@ module SliceSamplingTuringExt if isdefined(Base, :get_extension) - using LogDensityProblemsAD using Random using SliceSampling using Turing else - using ..LogDensityProblemsAD using ..Random using ..SliceSampling using ..Turing diff --git a/src/SliceSampling.jl b/src/SliceSampling.jl index a795a16..c43875c 100644 --- a/src/SliceSampling.jl +++ b/src/SliceSampling.jl @@ -2,17 +2,11 @@ module SliceSampling using AbstractMCMC -using Accessors using Distributions -using FillArrays using LinearAlgebra using LogDensityProblems using Random -# The following is necessary because Turing wraps all models with -# LogDensityProblemsAD by default. So we need access to these types. -using LogDensityProblemsAD - # reexports using AbstractMCMC: sample, MCMCThreads, MCMCDistributed, MCMCSerial export sample, MCMCThreads, MCMCDistributed, MCMCSerial @@ -59,14 +53,6 @@ function initial_sample(::Random.AbstractRNG, ::Any) ) end -# If target is from `LogDensityProblemsAD`, unwrap target before calling `initial_sample`. -# This is necessary since Turing wraps `DynamicPPL.Model`s when passed to an `externalsampler`. -function initial_sample( - rng::Random.AbstractRNG, wrap::LogDensityProblemsAD.ADGradientWrapper -) - return initial_sample(rng, parent(wrap)) -end - function exceeded_max_prop(max_prop::Int) return error( "Exceeded maximum number of proposal $(max_prop), ", @@ -116,18 +102,4 @@ include("multivariate/latent.jl") export GibbsPolarSlice include("multivariate/gibbspolar.jl") -# Turing Compatibility - -if !isdefined(Base, :get_extension) - using Requires -end - -@static if !isdefined(Base, :get_extension) - function __init__() - @require Turing = "fce5fe82-541a-59a6-adf8-730c64b5f9a0" include( - "../ext/SliceSamplingTuringExt.jl" - ) - end -end - end diff --git a/src/multivariate/randpermgibbs.jl b/src/multivariate/randpermgibbs.jl index 84bc100..05b4f77 100644 --- a/src/multivariate/randpermgibbs.jl +++ b/src/multivariate/randpermgibbs.jl @@ -38,7 +38,8 @@ end function LogDensityProblems.logdensity(gibbs::GibbsTarget, θi) (; model, idx, θ) = gibbs - return LogDensityProblems.logdensity(model, (@set θ[idx] = θi)) + θ[idx] = θi + return LogDensityProblems.logdensity(model, θ) end function AbstractMCMC.step( @@ -73,7 +74,7 @@ function AbstractMCMC.step( unislices = if sampler.unislice isa AbstractVector sampler.unislice else - Fill(sampler.unislice, d) + fill(sampler.unislice, d) end props = zeros(Int, d)