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.