JuliaPy / PythonCall.jl

Python and Julia in harmony.
https://juliapy.github.io/PythonCall.jl/stable/
MIT License
715 stars 61 forks source link

Support more of abstract array interface #462

Open MilesCranmer opened 4 months ago

MilesCranmer commented 4 months ago

Currently similar will return an array of a different type:

from juliacall import Main as jl
import numpy as np

x = np.random.randn(5)
y = jl.similar(x)

print(jl.typeof(x))
# PyArray{Float64, 1, true, true, Float64}
print(jl.typeof(y))
# Vector{Float64}

This can introduce some type instabilities in libraries due to the assumption that container type is preserved by similar.

I guess we just need the "optional methods" from here: https://docs.julialang.org/en/v1/manual/interfaces/#man-interface-array