Determining whether two methods are both extensions of the same function?

I have two functions with the same name, but from two different packages. How do I determine whether one of them is an extension of the other or both are extensions of the same function? I have in mind mean() which occurs in both Distributions.jl and Statistics.jl

I only starting using Julia recently, but doesn’t methods(mean) tell you what you want to know? If there are multiple methods from different sources for function mean it will list them. E.g.

julia> using Statistics

julia> using Distributions

julia> methods(mean)
# 88 methods for generic function "mean":
[1] mean(d::DiscreteUniform) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/discreteuniform.jl:52
[2] mean(d::Hypergeometric) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/hypergeometric.jl:47
[3] mean(d::Kolmogorov) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/continuous/kolmogorov.jl:22
[4] mean(d::Chernoff) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/continuous/chernoff.jl:220
[5] mean(r::AbstractRange{var"#s828"} where var"#s828"<:Real) in Statistics at /usr/share/julia/stdlib/v1.5/Statistics/src/Statistics.jl:185
[6] mean(A::AbstractArray{T,N} where N, w::StatsBase.AbstractWeights{W,T,V} where V<:AbstractArray{T,1} where T<:Real, dims::Int64) where {T<:Number, W<:Real} in StatsBase at deprecated.jl:70
[7] mean(A::AbstractArray; dims) in Statistics at /usr/share/julia/stdlib/v1.5/Statistics/src/Statistics.jl:164
[8] mean(A::AbstractArray, w::StatsBase.UnitWeights; dims) in StatsBase at /home/melis/.julia/packages/StatsBase/548SN/src/weights.jl:620
[9] mean(A::AbstractArray, w::StatsBase.AbstractWeights; dims) in StatsBase at /home/melis/.julia/packages/StatsBase/548SN/src/weights.jl:613
[10] mean(d::Bernoulli) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/bernoulli.jl:60
[11] mean(d::BetaBinomial) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/betabinomial.jl:57
[12] mean(d::Binomial) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/binomial.jl:68
[13] mean(d::DiscreteNonParametric) in Distributions at /home/melis/.julia/packages/Distributions/jFoHB/src/univariate/discrete/discretenonparametric.jl:156
...

You could also do this:

julia> import Distributions, Statistics, StatsBase

julia> Distributions.mean === Statistics.mean

julia> Distributions.mean === StatsBase.mean

julia> Statistics.mean === StatsBase.mean

This will print true if the two means are the same generic function.

5 Likes

Thanks!