Skip to content

Gradient of pdf of beta distribution errors. Missing rule? #210

Closed
@mattiasvillani

Description

@mattiasvillani

Not sure if this is a bug, or a missing feature yet to be implemented.
I am on Julia 1.10.0-beta2+0.x64.linux.gnu
within the following environment:

Status ~/Dropbox/Study/Julia/AutoDiff/Project.toml
[6e4b80f9] BenchmarkTools v1.3.2
⌃ [31c24e10] Distributions v0.25.45
[f6369f11] ForwardDiff v0.10.36
[5087d2c0] IncGammaBeta v0.1.0
⌅ [276daf66] SpecialFunctions v0.8.0

Gradient of pdf for Beta distribution (wrt to the parameters of the distribution) works in ForwardDiff.jl, but not in Diffractor.jl:
gradient(ForwardDiffBackend(), θ -> pdf(Beta(θ[1],θ[2]), 0.4), [0.3, 0.8]) # works gradient(DiffractorForwardBackend(), θ -> pdf(Beta(θ[1],θ[2]), 0.4), [0.3, 0.8]) # errors
The error message is given at the end of this text.

For the normal pdf, both packages work however, so the suggestion in the error message of a missing rule (for the Beta function?) is probably correct:
gradient(ForwardDiffBackend(), θ -> pdf(Normal(θ[1],θ[2]), 0.4), [0.3, 0.8]) # works gradient(DiffractorForwardBackend(), θ -> pdf(Normal(θ[1],θ[2]), 0.4), [0.3, 0.8]) # works


ERROR MESSAGE from the command that errored above:

ERROR: Attempted to AD a foreigncall. Missing rule?
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] betapdf
@ Diffractor ~/.julia/packages/StatsFuns/P7Mci/src/rmath.jl:70 [inlined]
[3] (::Diffractor.∂☆recurse{1})(::ZeroBundle{1, typeof(StatsFuns.RFunctions.betapdf)}, ::Diffractor.TangentBundle{1, Float64, Diffractor.TaylorTangent{…}}, ::Diffractor.TangentBundle{1, Float64, Diffractor.TaylorTangent{…}}, ::ZeroBundle{1, Float64})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/recurse_fwd.jl:0
[4] (::Diffractor.∂☆internal{1})(::ZeroBundle{1, typeof(StatsFuns.RFunctions.betapdf)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:121
[5] (::Diffractor.∂☆{1})(::ZeroBundle{1, typeof(StatsFuns.RFunctions.betapdf)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:160
[6] pdf
@ Diffractor ~/.julia/packages/Distributions/9Albf/src/univariates.jl:619 [inlined]
[7] (::Diffractor.∂☆recurse{1})(::ZeroBundle{1, typeof(pdf)}, ::Diffractor.CompositeBundle{1, Beta{Float64}, Tuple{Diffractor.TangentBundle{…}, Diffractor.TangentBundle{…}}}, ::ZeroBundle{1, Float64})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/recurse_fwd.jl:0
[8] (::Diffractor.∂☆internal{1})(::ZeroBundle{1, typeof(pdf)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:121
[9] (::Diffractor.∂☆{1})(::ZeroBundle{1, typeof(pdf)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:160
[10] #49
@ Diffractor ./REPL[51]:1 [inlined]
[11] (::Diffractor.∂☆recurse{1})(::ZeroBundle{1, var"#49#50"}, ::Diffractor.TangentBundle{1, Vector{Float64}, Diffractor.TaylorTangent{Tuple{Vector{Float64}}}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/recurse_fwd.jl:0
[12] (::Diffractor.∂☆internal{1})(::ZeroBundle{1, var"#49#50"}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:121
[13] (::Diffractor.∂☆{1})(::ZeroBundle{1, var"#49#50"}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/stage1/forward.jl:160
[14] (::Diffractor.var"#pushforward#359"{var"#49#50", Tuple{Vector{Float64}}})(vs::Tuple{Vector{Float64}})
@ Diffractor ~/.julia/packages/Diffractor/vzpvE/src/AbstractDifferentiation.jl:13
[15] (::Diffractor.var"#358#362"{Diffractor.var"#pushforward#359"{var"#49#50", Tuple{Vector{Float64}}}})(cols::Vector{Float64})
@ Diffractor ~/.julia/packages/AbstractDifferentiation/eEkWP/src/AbstractDifferentiation.jl:526
[16] mapslices(f::Diffractor.var"#358#362"{Diffractor.var"#pushforward#359"{var"#49#50", Tuple{Vector{Float64}}}}, A::Matrix{Float64}; dims::Int64)
@ Base ./abstractarray.jl:3179
[17] jacobian(b::DiffractorForwardBackend, f::Function, args::Vector{Float64})
@ Diffractor ~/.julia/packages/AbstractDifferentiation/eEkWP/src/AbstractDifferentiation.jl:524
[18] gradient(ab::DiffractorForwardBackend, f::Function, xs::Vector{Float64})
@ AbstractDifferentiation ~/.julia/packages/AbstractDifferentiation/eEkWP/src/AbstractDifferentiation.jl:43
[19] top-level scope
@ REPL[51]:1
Some type information was truncated. Use show(err) to see complete types.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions