Hello Julia community,
julia> pdf(Normal(), 0.3)
0.38138781546052414
I want to know how the pdf
function is implemented, but the source code for Distribution.jl
tells me nothing (in fact it looks like an infinite loop).
Am I missing something? Wouldn’t there at least have to have a 2\pi somewhere?
julia-1.1> d = Normal()
julia-1.1> @less pdf(d, 0.3) # shows this is implemented via a macro, so try something else
julia-1.1> @code_lowered pdf(d,0.3)
CodeInfo(
1 ─ %1 = (Base.getproperty)(d, :μ)
│ %2 = (Base.getproperty)(d, :σ)
│ %3 = (Distributions.normpdf)(%1, %2, x)
└── return %3
)
julia-1.1> @less Distributions.normpdf(0.0,1.0,0.3) # this is what you want
Page up to see your beloved constant.
2 Likes
In case it is not clear: pdf
and other relevant functions are implemented in StatsFuns.jl.
2 Likes
Technically, functions are not implemented, methods are. What you linked are some generic fallback methods for dealing with some general cases (and the first one doesn’t look like a function definition at all, maybe a bug?).
You can also use
@edit pdf(Normal(), 0.3)
to take you to the source code (if your editor is set up properly).
In this case it takes you to a macro defining functions using primitives from StatsFuns, which I agree is rather opaque.