You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Remove hand-written assumed.TFormula (it shadows the file's own StreamerInfo) and fix TStreamerLoop of TString* #72
Line item of #9: TFormula.update_members is not implemented (uproot-issue-181.root). Also found independently by the bootstrap review (#66).
Problem 1 — self-inflicted shadowing.src/rootfilespec/bootstrap/assumed.py:102-142 defines a hand-written TFormula that is exported in bootstrap.__all__, so src/rootfilespec/dynamic.py:27-30 skips the file's own info ("already declared") and reading hits the deliberate NotImplementedError. Spec, TFormula and TF1: "Every version of both classes that a released ROOT ever wrote is streamer-info driven … no hand-written layout is needed." uproot-issue-181.root carries complete TFormula v8 and TF1 v7 infos; uproot-issue-607.root (TFormula v10) and the spec fixture data/classes/formula.root are unreadable for the same reason.
Problem 2 — exposed once (1) is removed. With TFormula dropped from BOOTSTRAP_TYPES at runtime, the generated class fails in fOper. The cause is the preceding member fExpr, a TStreamerLoop (501) of TString*: TStreamerLoop.member_definition (src/rootfilespec/bootstrap/TStreamerInfo.py:448-478) generates list[Ref[TString]], i.e. object slots. Element types §8: the form is chosen by a strstr for ** in fTypeName — one * is c plain objects, ** is c object slots, and "a TString* loop is c bare counted strings". Bytes in the file agree: 40 00 00 07 00 09 | 04 70 6f 6c 35 = frame, then the bare counted string "pol5", then 01 (the is-present flag of fOper).
Suggested fix: delete TFormula from assumed.py and bootstrap/__init__.py; in TStreamerLoop.member_definition use the pointee type directly unless fTypeName contains **.
Note for #67 / #22:TFormula ≤ 8 and ≥ 9 are two unrelated C++ classes under one name (Formula.md intro and §1.1: "TFormula at version ≤ 8 is the old class, ≥ 9 is the new one"), likewise TF1 ≤ 7 / ≥ 8.
Severity / size: medium (any file with a TF1/TFormula fails), S–M. Clears 1 xfail.
Activity