RVec and std::vector in ROOT 6.30/04

Dear ROOT experts.
I am encountering an issue with the usage of RVec and std:vector in ROOT 6.30/04.
In 6.30/02 the functionality worked as expected.
I would appreciate it if you could confirm whether this behavior is intentional or if it is indeed an issue.
I have provided a snippet below that can be used to reproduce the problem on lxplus.

Thank you for your assistance.

Maria


Python 3.9.18 (main, Jan 4 2024, 00:00:00)

[GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] on linux

Type “help”, “copyright”, “credits” or “license” for more information.

>>> import ROOT
>>> ROOT.gInterpreter.Declare("""
#include <vector>
#include "ROOT/RVec.hxx"
ROOT::VecOps::RVec<float> test2;
std::vector<float> ret2;
""")
cling JIT session error: Failed to materialize symbols: { (main, { _ZN4ROOT6VecOps4RVecIfEC1Ev }) }

[runStaticInitializersOnce]: Failed to materialize symbols: { (main, { _ZN4ROOT8Internal6VecOps18SmallVectorStorageIfLj12EEC2Ev, __orc_init_func.cling-module-223, _ZNSaIfEC2Ev, _ZN4ROOT8Internal6VecOps25SmallVectorTemplateCommonIfE3endEv, _ZN4ROOT8Internal6VecOps25SmallVectorTemplateCommonIfE5beginEv, _ZN9__gnu_cxx13new_allocatorIfED2Ev, _ZN4ROOT6VecOps4RVecIfED2Ev, _ZN4ROOT6VecOps5RVecNIfLj12EED2Ev, _ZN4ROOT8Internal6VecOps23SmallVectorTemplateBaseIfLb1EEC2Em, _ZNSt12_Destroy_auxILb1EE9__destroyIPfEEvT_S3_, _ZN4ROOT8Internal6VecOps23SmallVectorTemplateBaseIfLb1EE13destroy_rangeEPfS4_, __cxx_global_var_initcling_module_223_, _ZN4ROOT6VecOps4RVecIfED1Ev, test2, _ZN4ROOT6Detail6VecOps8RVecImplIfEC2Ej, _ZNSt12_Vector_baseIfSaIfEE12_Vector_implD2Ev, _ZSt8_DestroyIPfEvT_S1_, _ZNSt12_Vector_baseIfSaIfEED2Ev, _ZNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataC2Ev, _ZNK4ROOT8Internal6VecOps25SmallVectorTemplateCommonIfE10getFirstElEv, ret2, _ZNSt12_Vector_baseIfSaIfEE13_M_deallocateEPfm, _ZNSt12_Vector_baseIfSaIfEE12_Vector_implD1Ev, _ZN4ROOT8Internal6VecOps25SmallVectorTemplateCommonIfEC2Em, _ZNSt12_Vector_baseIfSaIfEE19_M_get_Tp_allocatorEv, _ZN9__gnu_cxx13new_allocatorIfEC2Ev, _ZNK4ROOT8Internal6VecOps15SmallVectorBase4sizeEv, _ZNSt12_Vector_baseIfSaIfEE12_Vector_implC1Ev, _ZN4ROOT8Internal6VecOps15SmallVectorBaseC2EPvm, _ZSt8_DestroyIPffEvT_S1_RSaIT0_E, __cxx_global_var_initcling_module_223_.1, _ZNSt6vectorIfSaIfEED2Ev, _ZNK4ROOT8Internal6VecOps15SmallVectorBase4OwnsEv, _ZN9__gnu_cxx13new_allocatorIfE10deallocateEPfm, _ZNSt12_Vector_baseIfSaIfEE12_Vector_implC2Ev, __clang_call_terminate, _ZNSt6vectorIfSaIfEEC2Ev, _ZNSaIfED2Ev, _ZNSt16allocator_traitsISaIfEE10deallocateERS0_Pfm, _ZNK4ROOT8Internal6VecOps25SmallVectorTemplateCommonIfE7isSmallEv, _ZNSt6vectorIfSaIfEED1Ev, _ZNSt12_Vector_baseIfSaIfEEC2Ev, $.cling-module-223.__inits.0, _ZNSt6vectorIfSaIfEEC1Ev, _ZN4ROOT6VecOps5RVecNIfLj12EEC2Ev, _ZN4ROOT6Detail6VecOps8RVecImplIfED2Ev, _GLOBAL__sub_I_cling_module_223 }) }

[runStaticInitializersOnce]: Failed to materialize symbols: { (main, { __orc_init_func.cling-module-223 }) }

True

Hi,

Thanks for the interesting post and welcome to the ROOT community!
I think you are right. The library of RVec, libROOTVecOps, does not seem to be loaded properly (did not yet test on 6.30.02, will do that soon).
To unblock you, the simplest recipe is to let ROOT autoload what’s needed by using ProcessLine. In your case (slightly modded):

import ROOT
ROOT.gInterpreter.ProcessLine("""
ROOT::RVec<float> test2{3,2,1};
std::vector<float> ret2{1,2,3};
""")
print(ROOT.test2)
print(ROOT.ret2)

gives

{ 3.00000f, 2.00000f, 1.00000f }
{ 1.00000f, 2.00000f, 3.00000f }

I hope this unblocks you.

Cheers,
D

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.