Description
I was using ReverseDiff in a function that uses normcdf and observed the following error:
MethodError: promote_rule(::Type{Irrational{:invsqrt2}}, ::Type{ReverseDiff.TrackedReal{Float64,Float64,ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}}}) is ambiguous. Candidates:
promote_rule(::Type{R}, ::Type{ReverseDiff.TrackedReal{V,D,O}}) where {R<:Real, V, D, O} in ReverseDiff at HOMEDIR/.julia/v0.6/ReverseDiff/src/tracked.jl:257
promote_rule(::Type{#s268} where #s268<:Irrational, ::Type{T}) where T<:Number in Base at irrationals.jl:17
Possible fix, define
promote_rule(::Type{R<:Irrational}, ::Type{ReverseDiff.TrackedReal{V,D,O}})
ForwardOptimize at macros.jl:126 [inlined]
- at scalars.jl:12 [inlined]
normcdf(::ReverseDiff.TrackedReal{ReverseDiff.TrackedReal{Float64,Float64,ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}},ReverseDiff.TrackedReal{Float64,Float64,ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}},Void}) at norm.jl:15
I suspect that the corrective code to avoid ambiguity looks something like:
promote_rule{R<:Irrational, V, D, O}(::Type{R}, ::Type{ReverseDiff.TrackedReal{V,D,O}}) = TrackedReal{promote_type(R,V),D,O}
Am I correct? If so, is this line worth adding to the repository to avoid similar ambiguities with irrationals in the future?