Skip to content

Commit 3d9225a

Browse files
committed
ChainRulesCore: frule(): explicitly fall-back to RuleConfig-less version
``` Running tests: 1 ambiguities found. To get a list, set `broken = false`. Ambiguity #1 frule(::ChainRulesCore.RuleConfig, args...) in ChainRulesCore at /home/runner/.julia/packages/ChainRulesCore/I1EbV/src/rules.jl:64 frule(::Any, ::typeof(Distributions.logpdf), d::Distributions.Uniform, x::Real) in Distributions.DistributionsChainRulesCoreExt at /home/runner/work/Distributions.jl/Distributions.jl/ext/DistributionsChainRulesCoreExt/univariate/continuous/uniform.jl:1 Possible fix, define frule(::ChainRulesCore.RuleConfig, ::typeof(Distributions.logpdf), ::Distributions.Uniform, ::Real) Aqua: Test Failed at /home/runner/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:78 Expression: iszero(num_ambiguities) Stacktrace: [1] _test_ambiguities(packages::Vector{Base.PkgId}; broken::Bool, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}) @ Aqua ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:78 [2] _test_ambiguities @ ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:69 [inlined] [3] test_ambiguities(packages::Module; kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}) @ Aqua ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:28 [4] test_ambiguities(packages::Module) @ Aqua ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:28 [5] macro expansion @ ~/work/Distributions.jl/Distributions.jl/test/aqua.jl:19 [inlined] [6] macro expansion @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined] [7] top-level scope @ ~/work/Distributions.jl/Distributions.jl/test/aqua.jl:9 ```
1 parent 133a93e commit 3d9225a

File tree

3 files changed

+11
-0
lines changed

3 files changed

+11
-0
lines changed

ext/DistributionsChainRulesCoreExt/multivariate/dirichlet.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ function ChainRulesCore.frule((_, Δalpha)::Tuple{Any,Any}, ::Type{DT}, alpha::A
99
return d, Δd
1010
end
1111

12+
ChainRulesCore.frule(::ChainRulesCore.RuleConfig, Δ, pdf::Type{DT}, alpha::AbstractVector{T}; check_args::Bool = true) where {T <: Real, DT <: Union{Dirichlet{T}, Dirichlet}} =
13+
ChainRulesCore.frule(Δ, pdf, alpha, check_args=check_args)
14+
1215
function ChainRulesCore.rrule(::Type{DT}, alpha::AbstractVector{T}; check_args::Bool = true) where {T <: Real, DT <: Union{Dirichlet{T}, Dirichlet}}
1316
d = DT(alpha; check_args=check_args)
1417
digamma_alpha0 = SpecialFunctions.digamma(d.alpha0)
@@ -33,6 +36,9 @@ function ChainRulesCore.frule((_, Δd, Δx)::Tuple{Any,Any,Any}, ::typeof(Distri
3336
return Ω, ΔΩ
3437
end
3538

39+
ChainRulesCore.frule(::ChainRulesCore.RuleConfig, Δ, pdf::typeof(Distributions._logpdf), d::Dirichlet, x::AbstractVector{<:Real}) =
40+
ChainRulesCore.frule(Δ, pdf, d, x)
41+
3642
function ChainRulesCore.rrule(::typeof(Distributions._logpdf), d::T, x::AbstractVector{<:Real}) where {T<:Dirichlet}
3743
Ω = Distributions._logpdf(d, x)
3844
isfinite_Ω = isfinite(Ω)

ext/DistributionsChainRulesCoreExt/univariate/continuous/uniform.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ function ChainRulesCore.frule((_, Δd, _), ::typeof(logpdf), d::Uniform, x::Real
1212
return Ω, ΔΩ
1313
end
1414

15+
ChainRulesCore.frule(::ChainRulesCore.RuleConfig, Δ, pdf::typeof(logpdf), d::Uniform, x::Real) =
16+
ChainRulesCore.frule(Δ, pdf, d, x)
17+
1518
function ChainRulesCore.rrule(::typeof(logpdf), d::Uniform, x::Real)
1619
# Compute log probability
1720
a, b = params(d)

ext/DistributionsChainRulesCoreExt/univariate/discrete/poissonbinomial.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ for f in (:poissonbinomial_pdf, :poissonbinomial_pdf_fft)
88
A = Distributions.poissonbinomial_pdf_partialderivatives(p)
99
return y, A' * Δp
1010
end
11+
ChainRulesCore.frule(::ChainRulesCore.RuleConfig, Δ, pdf::typeof(Distributions.$f), p::AbstractVector{<:Real}) =
12+
ChainRulesCore.frule(Δ, pdf, p)
1113
function ChainRulesCore.rrule(::typeof(Distributions.$f), p::AbstractVector{<:Real})
1214
y = Distributions.$f(p)
1315
A = Distributions.poissonbinomial_pdf_partialderivatives(p)

0 commit comments

Comments
 (0)