JuliaPy / JuliaPy/PyCall.jl

AttributeError("'numpy.ndarray' object has no attribute 'name'")

Offen
#1,086 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Julia
Sterne
1.5k
Forks
186
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I intend to execute example at github page of pyg4ometry module https://github.com/g4edge/pyg4ometry.
```
import pyg4ometry as pg4
from g4edgetestdata import G4EdgeTestData

g4data = G4EdgeTestData()
# define a geometry registry
reg = pg4.geant4.Registry()

# build the world volume
world_s = pg4.geant4.solid.Orb("WorldAir", 1.5, reg, lunit="cm")
world_l = pg4.geant4.LogicalVolume(world_s, "G4_AIR", "WorldAir", reg)
reg.setWorld(world_l)

# import an STL file
reader = pg4.stl.Reader(g4data["stl/utah_teapot.stl"], registry=reg)
teapot_s = reader.getSolid()

# place the teapot in the world
teapot_l = pg4.geant4.LogicalVolume(teapot_s, "G4_Cu", "UtahTeapot", reg)
pg4.geant4.PhysicalVolume([0, 0, 0], [0, 0, 0], teapot_l, "UtahTeapot", world_l, reg)

# export to GDML file "geometry.gdml"
writer = pg4.gdml.Writer()
writer.addDetector(reg)
writer.write("./geometry.gdml")

# start an interactive VTK viewer instance
viewer = pg4.visualisation.VtkViewer()
viewer.addLogicalVolume(reg.getWorldVolume())
viewer.view()
```

For PyCall i create virtual environment with pyg4ometry and pybdsim installed. No ROOT usage is required. PyCall is then build with python executable from that environment.
I replace the first 3 lines with
```
pg4 = pyimport("pyg4ometry")
g4etd = pyimport("g4edgetestdata")
g4data = g4etd.G4EdgeTestData()
```
Executions breaks at line
```
writer.addDetector(reg)
```
with
```
ERROR: PyError ($(Expr(:escape, :(ccall(#= /home/alpha/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:43 =# @pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, pyargsptr, kw)))))
AttributeError("'numpy.ndarray' object has no attribute 'name'")
File "/home/alpha/pythonenvs/paper2024c/lib/python3.12/site-packages/pyg4ometry/gdml/Writer.py", line 76, in addDetector
self.writeLogicalVolume(logical)
File "/home/alpha/pythonenvs/paper2024c/lib/python3.12/site-packages/pyg4ometry/gdml/Writer.py", line 381, in writeLogicalVolume
dve = self.writePhysicalVolume(dv)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/alpha/pythonenvs/paper2024c/lib/python3.12/site-packages/pyg4ometry/gdml/Writer.py", line 429, in writePhysicalVolume
self.writeVectorVariable(pvol, pv.rotation)
File "/home/alpha/pythonenvs/paper2024c/lib/python3.12/site-packages/pyg4ometry/gdml/Writer.py", line 190, in writeVectorVariable
if allow_ref and vv.name in self.registry.defineDict:
^^^^^^^

Stacktrace:
[1] pyerr_check
@ ~/.julia/packages/PyCall/1gn3u/src/exception.jl:75 [inlined]
[2] pyerr_check
@ ~/.julia/packages/PyCall/1gn3u/src/exception.jl:79 [inlined]
[3] _handle_error(msg::String)
@ PyCall ~/.julia/packages/PyCall/1gn3u/src/exception.jl:96
[4] macro expansion
@ ~/.julia/packages/PyCall/1gn3u/src/exception.jl:110 [inlined]
[5] #107
@ ~/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:43 [inlined]
[6] disable_sigint
@ ./c.jl:167 [inlined]
[7] __pycall!
@ ~/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:42 [inlined]
[8] _pycall!(ret::PyObject, o::PyObject, args::Tuple{PyObject}, nargs::Int64, kw::Ptr{Nothing})
@ PyCall ~/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:29
[9] _pycall!(ret::PyObject, o::PyObject, args::Tuple{PyObject}, kwargs::@Kwargs{})
@ PyCall ~/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:11
[10] (::PyObject)(::PyObject, ::Vararg{Any}; kwargs::@Kwargs{})
@ PyCall ~/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:86
[11] top-level scope
@ ~/modeling/Paper2024c/Calibration/Calibration.jl:89
```
When Python code is executed in py""" """ capsule, it executes without errors.
```
Julia Version 1.11.0
Commit 501a4f25c2 (2024-10-07 11:40 UTC)
Build Info:

Note: This is an unofficial build, please report bugs to the project
responsible for this build and not to the Julia project unless you can
reproduce the issue using official builds available at https://julialang.org/downloads

Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 128 × Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, icelake-server)
Threads: 64 default, 0 interactive, 32 GC (on 128 virtual cores)
Environment:
LD_LIBRARY_PATH =
JULIA_EDITOR = code
JULIA_NUM_THREADS = 64
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Reproduce the reported Julia 1.11 and Python 3.12 setup, starting with writer.addDetector(reg). Compare the pyimport-based calls with execution inside the py"""...""" capsule, then inspect pyg4ometry/gdml/Writer.py at addDetector, writePhysicalVolume, and writeVectorVariable. Done means identifying whether PyCall causes the ndarray/object mismatch and documenting or fixing the compatibility behavior.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
julia, numpy, python
Bereich
developer-experience
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.