I like to look inside different Julia packages to get familiar with the syntax and sometimes find function definitions like this (example from Wavelets package):
function dwt end
And later on in the same file(a part of a for loop):
for (Xwt, Xwt!, _Xwt!, fw) in ((:dwt, :dwt!, :_dwt!, true),
(:idwt, :idwt!, :_dwt!, false))
@eval begin
# filter
function ($Xwt)(x::DWTArray{T}, filter::OrthoFilter,
L::Integer=maxtransformlevels(x)) where T<:ValueType
y = Array{T}(undef, size(x))
return ($_Xwt!)(y, x, filter, L, $fw)
end
Another example from the Tracker package:
function _forward end
function track(f::F, xs...; kw...) where F
y, back = _forward(f, xs...; kw...)
track(Call(back, tracker.(xs)), y)
end
Can anyone please explain the purpose and how this works?
Thank you