-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Labels
Description
Check duplicate issues.
- Checked for duplicates
Description
We used to trigger instantiations of templates in Python using cppyy wrapper classes as template arguments, but this broke when we moved to ROOT 6.32 (it's still broken in 6.34).
This is what we get:
❯ python
Python 3.11.9 (main, Jun 18 2024, 17:35:16) [GCC 13.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cppyy
>>> cppyy.include("vector")
True
>>> cppyy.cppdef("struct MyData {};")
True
>>> my_vec = cppyy.gbl.std.vector[cppyy.gbl.MyData]
>>> import ROOT
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/ROOT/6.32.10-73580/x86_64-el9-gcc13-opt/lib/ROOT/__init__.py", line 39, in <module>
_register_pythonizations()
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/ROOT/6.32.10-73580/x86_64-el9-gcc13-opt/lib/ROOT/_pythonization/__init__.py", line 302, in _register_pythonizations
importlib.import_module(__name__ + '.' + module_name)
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/Python/3.11.9-2924c/x86_64-el9-gcc13-opt/lib/python3.11/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/ROOT/6.32.10-73580/x86_64-el9-gcc13-opt/lib/ROOT/_pythonization/_runtime_error.py", line 34, in <module>
@pythonization("runtime_error", ns="std")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/ROOT/6.32.10-73580/x86_64-el9-gcc13-opt/lib/ROOT/_pythonization/__init__.py", line 99, in pythonization_impl
_find_used_classes(ns, passes_filter, user_pythonizor, npars)
File "/cvmfs/lhcb.cern.ch/lib/lcg/releases/ROOT/6.32.10-73580/x86_64-el9-gcc13-opt/lib/ROOT/_pythonization/__init__.py", line 264, in _find_used_classes
instance_name = var_name + "<" + ",".join(args) + ">"
^^^^^^^^^^^^^^
TypeError: sequence item 0: expected str instance, MyData_meta found
>>>
If I replace cppyy.gbl.std.vector[cppyy.gbl.MyData]
with cppyy.gbl.std.vector["MyData"]
the problem disappears.
Reproducer
I used the EP-SFT builds of ROOT via something like source /cvmfs/sft.cern.ch/lcg/views/LCG_107a/x86_64-el9-gcc13-opt/setup.sh
, then i run this little bit of Python:
import cppyy
cppyy.include("vector")
cppyy.cppdef("struct MyData {};")
my_vec = cppyy.gbl.std.vector[cppyy.gbl.MyData]
import ROOT
ROOT version
ROOT v6.34.04
Built for linuxx8664gcc on Feb 11 2025, 14:05:34
From tags/6-34-04@6-34-04
With g++ (GCC) 13.1.0
Binary directory: /cvmfs/sft.cern.ch/lcg/releases/ROOT/6.34.04-2bf94/x86_64-el9-gcc13-opt/bin
Installation method
EP-SFT managed installations
Operating system
Linux RHEL9
Additional context
No response