JuliaPy / JuliaPy/PyCall.jl

Operator(+) overloading for PyObject

Abierto
#846 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Julia
Estrellas
1.5k
Forks
186
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I port my following Python code into using PyPlot:
```julia
import PyPlot

const plt = PyPlot

fig, ax = plt.subplots(facecolor="w", edgecolor="k")

t = 1:24
x = 1:24
y= 24:-1:1
ax.plot(t,x, label="x")
ax2 = ax.twinx()
ax2.plot(t,y, label="y")

lines, labels = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines + lines2, labels + labels2, loc="upper left", fontsize=20, ncol = 1)

fig.tight_layout()
plt.show()
```

In `lines + lines2`, I encounter an error:
```
PyError ($(Expr(:escape, :(ccall(#= C:\Users\meta\.julia\packages\PyCall\BcTLp\src\pyoperators.jl:12 =# @pysym(:PyNumber_Add), PyPtr, (PyPtr, PyPtr), a, b)))))
TypeError("unsupported operand type(s) for +: 'Line2D' and 'Line2D'")

Stacktrace:
[1] pyerr_check at C:\Users\meta\.julia\packages\PyCall\BcTLp\src\exception.jl:62 [inlined]
[2] pyerr_check at C:\Users\meta\.julia\packages\PyCall\BcTLp\src\exception.jl:66 [inlined]
[3] _handle_error(::String) at C:\Users\meta\.julia\packages\PyCall\BcTLp\src\exception.jl:83
[4] macro expansion at C:\Users\meta\.julia\packages\PyCall\BcTLp\src\exception.jl:97 [inlined]
[5] + at C:\Users\meta\.julia\packages\PyCall\BcTLp\src\pyoperators.jl:11 [inlined]
[6] _broadcast_getindex_evalf at .\broadcast.jl:648 [inlined]
[7] _broadcast_getindex at .\broadcast.jl:621 [inlined]
[8] getindex at .\broadcast.jl:575 [inlined]
[9] macro expansion at .\broadcast.jl:932 [inlined]
[10] macro expansion at .\simdloop.jl:77 [inlined]
[11] copyto! at .\broadcast.jl:931 [inlined]
[12] copyto! at .\broadcast.jl:886 [inlined]
[13] copy at .\broadcast.jl:862 [inlined]
[14] materialize at .\broadcast.jl:837 [inlined]
[15] broadcast_preserving_zero_d at .\broadcast.jl:826 [inlined]
[16] +(::Array{PyObject,1}, ::Array{PyObject,1}) at .\arraymath.jl:47
[17] top-level scope at In[177]:17
[18] include_string(::Function, ::Module, ::String, ::String) at .\loading.jl:1091
[19] execute_code(::String, ::String) at C:\Users\meta\.julia\packages\IJulia\rWZ9e\src\execute_request.jl:27
[20] execute_request(::ZMQ.Socket, ::IJulia.Msg) at C:\Users\meta\.julia\packages\IJulia\rWZ9e\src\execute_request.jl:86
[21] #invokelatest#1 at .\essentials.jl:710 [inlined]
[22] invokelatest at .\essentials.jl:709 [inlined]
[23] eventloop(::ZMQ.Socket) at C:\Users\meta\.julia\packages\IJulia\rWZ9e\src\eventloop.jl:8
[24] (::IJulia.var"#15#18")() at .\task.jl:356
```

It seems that operator `+` is not appropriately overloaded for PyObject.
I wonder that how to tackle this issue.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Reproduce el caso reportado de lines + lines2 y, después, inspecciona src/pyoperators.jl:11 y la ruta de arrays/broadcast de Julia mostrada en el stack trace. Determina la semántica prevista para combinar estos arrays de PyObject y define la finalización haciendo que la operación se comporte de forma coherente con esa intención, con cobertura de regresión si la estructura de pruebas del proyecto identifica un lugar adecuado.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia, python
Área
tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.