@@ -3,8 +3,7 @@ using LogDensityProblems: Value, ValueGradient
33using Test
44
55using Distributions
6- import ForwardDiff
7- import Flux
6+ import ForwardDiff, Flux, ReverseDiff
87using Parameters: @unpack
98using DocStringExtensions: SIGNATURES
109using TransformVariables
131130 @test logdensity (ValueGradient, ∇ℓ, x) ≅ ValueGradient (f (x), - 6 .* x)
132131end
133132
133+ @testset " AD via ReverseDiff" begin
134+ f (x) = - 3 * abs2 (x[1 ])
135+ ℓ = TransformedLogDensity (as (Array, asℝ, 1 ), f)
136+ ∇ℓ = ADgradient (:ReverseDiff , ℓ)
137+ x = randn (1 )
138+ @test logdensity (Value, ℓ, x) ≅ logdensity (Value, ∇ℓ, x)
139+ @test logdensity (ValueGradient, ∇ℓ, x) ≅ ValueGradient (f (x), - 6 .* x)
140+ end
141+
134142@testset " @iffinite" begin
135143 flag = [0 ]
136144 f (x) = (y = LogDensityProblems. @iffinite x; flag[1 ] += 1 ; y)
151159 @test logdensity (ValueGradient, ∇P, [1.0 ]) ≅ ValueGradient (- 1.0 , [- 2.0 ])
152160 @test logdensity (ValueGradient, ∇P, [- 1.0 ]) ≅ ValueGradient (- Inf , randn (1 ))
153161end
162+
163+ @testset " ADgradient missing method" begin
164+ msg = " Don't know how to AD with Foo, consider `import Foo` if there is such a package."
165+ P = TransformedLogDensity (as (Array, 1 ), x -> sum (abs2, x))
166+ @test_logs ((:info , msg), @test_throws (MethodError, ADgradient (:Foo , P)))
167+ end
0 commit comments