dot syntax in pyjulia


#1

Hello, I have a question about using dot syntax in python. In trying to write a broadcast-able function in julia that I can call from python, i have found it convenient to do the following:

export func

function func(x::Float64, y::Float64)
    <body>
end

func(x::Union{Float64, Array{Float64}}, y::Union{Float64, Array{Float64}})=func.(x, y)

I may be going off the rails here, but otherwise I’m not sure how to make broadcasting available on the python-side. Any thoughts would be much appreciated.


#2

I would just do:

export func

function scalarfunc(x, y)
    <body>
end

func(x, y) = scalarfunc.(x, y)

Broadcasting works just fine on scalars and adds no overhead, so the “broadcasted” function can be completely separate from the scalar kernel.


#3

so, do i lose anything by not specifying type in the function signature? that’s what worried me about this.


#4

Nope! Method signatures are really only required if you specifically want to depend upon the internal structure of an argument or a particular behavior — so you can dispatch to it over a different (often more general) implementation. The performance of methods written as f(x::Float64) = ... vs. f(x::Number) = ... vs. f(x) = ... will be identical.


#5

thank you!