Some other syntax ideas for making Julia easier to integrate gradually to a Python library:
Say we have a file in our library file1.py
:
import numpy as np
from juliapkg import jldispatch
@jldispatch("file2.jl", function="foo2")
def foo(x):
return np.sum(x ** 2)
where file2.jl
would be in the same directory as file1.py
, and have:
function foo2(x)
return sum(xi -> x^2, x)
end
Here, basically jldispatch(file, func_sym)
could attach the Julia function foo2
to the Python function foo
, via:
def jldispatch(file, function):
def apply(f):
if juliapkg.juliacall_installed():
jl.seval(file)
return jl.seval(function)
else:
return f
return apply
So this could let you easily attach Julia code to Python functions.
Perhaps this jldispatch
could also have an extension
argument which could associate the juliapkg.isinstalled()
to a particular Python extension. That way, only pip install mypkg[julia]
would set up the Julia acceleration.