Most numpy scalar types are not automatically converted to Julia types outside of arrays
- Lenguaje dominante
- Julia
- Estrellas
- 1.5k
- Forks
- 186
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Numpy arrays of numeric types are automatically converted to Julia types, but scalar values of the same numeric types are not usually converted.
Here is a demonstration. I skipped float128 and complex256 (and longfloat and clongfloat) because of Issue #743
```Julia
using PyCall
py"""
import numpy as np
# The numerical scalar types
types = [ # many of these are aliases of each other
# Bool
np.bool_, np.bool8,
# Integers
np.byte, np.short, np.intc, np.int_, np.longlong, np.int8, np.int16, np.int32, np.int64,
# Unsigned integers
np.ubyte, np.ushort, np.uintc, np.uint, np.ulonglong, np.uint8, np.uint16, np.uint32, np.uint64,
# Floating-point numbers
np.half, np.single, np.double, np.float_, np.float16, np.float32, np.float64,
# Complex floating-point numbers
np.csingle, np.complex_, np.complex64, np.complex128
]
# The aliased dtypes disappear in the dictionary
d_arrays = {t:np.array([1,2,3,4], dtype=t) for t in types}
d_scalars = {t:d_arrays[t][0] for t in types}
"""
```
The result is that all the arrays convert correctly, but only np.float64 and np.complex128 scalars convert correctly. The rest just become PyObjects and have to converted manually.
```Julia
julia> py"d_arrays"
Dict{Any,Any} with 16 entries:
PyObject => Complex{Float32}[1.0+0.0im, 2.0+0.0im, 3.0+0.0im, 4.0+0.0im]
PyObject => Int32[1, 2, 3, 4]
PyObject => UInt8[0x01, 0x02, 0x03, 0x04]
PyObject => Int16[1, 2, 3, 4]
PyObject => [1, 2, 3, 4]
PyObject => Float16[1.0, 2.0, 3.0, 4.0]
PyObject => UInt64[0x0000000000000001, 0x0000000000000002, 0x0000000000000003, 0x0000000000000004]
PyObject => Float32[1.0, 2.0, 3.0, 4.0]
PyObject => Bool[1, 1, 1, 1]
PyObject => UInt16[0x0001, 0x0002, 0x0003, 0x0004]
PyObject => UInt32[0x00000001, 0x00000002, 0x00000003, 0x00000004]
PyObject => UInt64[0x0000000000000001, 0x0000000000000002, 0x0000000000000003, 0x0000000000000004]
PyObject => Int8[1, 2, 3, 4]
PyObject => [1, 2, 3, 4]
PyObject => [1.0, 2.0, 3.0, 4.0]
PyObject => Complex{Float64}[1.0+0.0im, 2.0+0.0im, 3.0+0.0im, 4.0+0.0im]
```
```Julia
julia> py"d_elements"
Dict{Any,Any} with 16 entries:
PyObject => PyObject (1+0j)
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1.0
PyObject => PyObject 1
PyObject => PyObject 1.0
PyObject => PyObject True
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => PyObject 1
PyObject => 1.0
PyObject => 1.0+0.0im
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Start by reproducing the Julia and Python demonstration in this issue, then trace PyCall's conversion path for NumPy scalar values and compare it with array conversion. Done means the listed supported numeric scalar types convert to corresponding Julia values like their arrays; float128 and complex256 remain excluded because of Issue #743.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- julia, python
- Área
- backend-api-design
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100