Skip to content

Commit dd0c26a

Browse files
committed
refined error messages
1 parent 0c6ee95 commit dd0c26a

File tree

1 file changed

+5
-16
lines changed

1 file changed

+5
-16
lines changed

src/MarkovChainMonteCarlo.jl

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -219,20 +219,14 @@ end
219219
## -------- Autodifferentiation procedures ------ ##
220220

221221
function autodiff_gradient(model::AdvancedMH.DensityModel, params, autodiff_protocol)
222-
if autodiff_protocol == GradFreeProtocol
223-
throw(
224-
ArgumentError(
225-
"Calling gradient on a Sampling with `GradFreeProtocol`. \n Please construct the `XYZSampling{<:AutodiffProtocol}()` object with `AutodiffProtocol` from the implemented options that is compatible with the chosen Emulator (e.g., `AbstractGP` emulators are compatible with `ForwardDiffProtocol`).",
226-
),
227-
)
228-
elseif autodiff_protocol == ForwardDiffProtocol
222+
if autodiff_protocol == ForwardDiffProtocol
229223
return ForwardDiff.gradient(x -> AdvancedMH.logdensity(model, x), params)
230224
elseif autodiff_protocol == ReverseDiffProtocol
231225
return ReverseDiff.gradient(x -> AdvancedMH.logdensity(model, x), params)
232226
else
233227
throw(
234228
ArgumentError(
235-
"autodifferentiation protocol $(autodiff_protocol) has no `autodiff_gradient` method implemented.",
229+
"Calling `autodiff_gradient(...)` on a sampler with protocol $(autodiff_protocol) that has *no* gradient implementation.\n Please select from a protocol with a gradient implementation (e.g., `ForwardDiffProtocol`).",
236230
),
237231
)
238232
end
@@ -243,22 +237,17 @@ autodiff_gradient(model::AdvancedMH.DensityModel, params, sampler::MH) where {MH
243237
autodiff_gradient(model::AdvancedMH.DensityModel, params, typeof(sampler).parameters[2]) # hacky way of getting the "AutodiffProtocol"
244238

245239
function autodiff_hessian(model::AdvancedMH.DensityModel, params, autodiff_protocol)
246-
if autodiff_protocol == GradFreeProtocol
247-
throw(
248-
ArgumentError(
249-
"Calling hessian on a Sampling with `GradFreeProtocol`. \n Please construct the `XYZSampling{<:AutodiffProtocol}()` object with `AutodiffProtocol` from the implemented options that is compatible with the chosen Emulator (e.g., `AbstractGP` emulators are compatible with `ForwardDiffProtocol`).",
250-
),
251-
)
252-
elseif autodiff_protocol == ForwardDiffProtocol
240+
if autodiff_protocol == ForwardDiffProtocol
253241
return Symmetric(ForwardDiff.hessian(x -> AdvancedMH.logdensity(model, x), params))
254242
elseif autodiff_protocol == ReverseDiffProtocol
255243
return Symmetric(ReverseDiff.hessian(x -> AdvancedMH.logdensity(model, x), params))
256244
else
257245
throw(
258246
ArgumentError(
259-
"autodifferentiation protocol $(autodiff_protocol) has no `autodiff_hessian` method implemented.",
247+
"Calling `autodiff_hessian(...)` on a sampler with protocol $(autodiff_protocol) that has *no* hessian implementation.\n Please select from a protocol with a hessian implementation (e.g., `ForwardDiffProtocol`).",
260248
),
261249
)
250+
262251
end
263252
end
264253

0 commit comments

Comments
 (0)