miranov25 / RootInteractive

5 stars 12 forks source link

makeDefine support for detecting output type -> #293 #304

Closed pl0xz0rz closed 1 year ago

pl0xz0rz commented 1 year ago

This PR:

miranov25 commented 1 year ago

Thanks. Could you add also parsed name to the dictionary? I think we will have name and c++ name (hashed) to avoid clash with the global namespace

In [7]:  pprint.pprint(parsed)
{'dependencies': ['array1D0', 'array1D2'],
 'implementation': 'ROOT::VecOps::RVec<float> arrayD(ROOT::VecOps::RVec<float> '
                   '&array1D0, ROOT::VecOps::RVec<float> &array1D2)){\n'
                   '    ROOT::VecOps::RVec<float> result(10);\n'
                   '    for(size_t i=0; i<10; i++){\n'
                   '        result[i] = (array1D0[1+i*1]) - '
                   '(array1D2[0+i*2]);\n'
                   '    }\n'
                   '    \n'
                   '    return result;\n'
                   '} ',
 'type': 'ROOT::VecOps::RVec<float>'}
miranov25 commented 1 year ago

There are 2 brackets - the compilation is failing now

In [9]: ROOT.gInterpreter.Declare( parsed["implementation"])
input_line_81:1:107: error: expected function body after function declarator
ROOT::VecOps::RVec<float> arrayD(ROOT::VecOps::RVec<float> &array1D0, ROOT::VecOps::RVec<float> &array1D2)){
                                                                                                          ^
Out[9]: False
miranov25 commented 1 year ago
In [3]:  pprint.pprint(parsed)
{'dependencies': ['array1D0', 'array1D2'],
 'implementation': 'ROOT::VecOps::RVec<float> arrayD(ROOT::VecOps::RVec<float> '
                   '&array1D0, ROOT::VecOps::RVec<float> &array1D2){\n'
                   '    ROOT::VecOps::RVec<float> result(10);\n'
                   '    for(size_t i=0; i<10; i++){\n'
                   '        result[i] = (array1D0[1+i*1]) - '
                   '(array1D2[0+i*2]);\n'
                   '    }\n'
                   '    \n'
                   '    return result;\n'
                   '} ',
 'name': 'arrayD',
 'type': 'ROOT::VecOps::RVec<float>'}
miranov25 commented 1 year ago

test 0 - OK

    parsed= makeDefine("arrayD","array1D0[1:10]-array1D2[:20:2]", rdf,3, True)  # working
    rdf = makeDefineRDFv2("arrayD0", parsed["name"], parsed,  rdf, verbose=1)               # working warning seconda time
    rdf.Snapshot("makeTestRDataFrame","makeTestRDataFrameD0.root")
miranov25 commented 1 year ago

test 2 - OK

   parsed= makeDefine("arrayDAll","array1D0[:]-array1D2[:]", rdf,3, True)  # working
    rdf = makeDefineRDFv2("arrayDAall", parsed["name"], parsed,  rdf, verbose=1)               # working warning second time
    rdf.Snapshot("makeTestRDataFrame","makeTestRDataFrameDAll.root")
miranov25 commented 1 year ago

test 2 - - 1D function fix range -OK

    parsed = makeDefine("arrayCos","cos(array1D0[1:10])", rdf,3, True);
    rdf = makeDefineRDFv2("arrayCos0", parsed["name"], parsed,  rdf, verbose=1)
    rdf.Snapshot("makeTestRDataFrame","makeTestRDataFrameCos0.root");
miranov25 commented 1 year ago

test 3 - - 1D function full range -OK

    parsed = makeDefine("arrayCosAll","cos(array1D0[:])", rdf,3, True);
    rdf = makeDefineRDFv2("arrayCosAll", parsed["name"], parsed,  rdf, verbose=1)
    rdf.Snapshot("makeTestRDataFrame","makeTestRDataFrameCosAll.root");
miranov25 commented 1 year ago
# test 4  - 1D member function failing
    parsed = makeDefine("arrayPx","array1DTrack[1:10].Px()", rdf,3, True);
    rdf = makeDefineRDFv2("arrayPx", parsed["name"], parsed,  rdf, verbose=1)
    rdf.Snapshot("makeTestRDataFrame","makeTestRDataFrameArrayPx.root");
miranov25 commented 1 year ago

Member Function should be recognized:

In [9]: val = getClassMethod("TParticle","Px")
In [10]: val
Out[10]: ('double ', 'double TParticle::Px()')
miranov25 commented 1 year ago

Tests are OK. Merging