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
Add a hardcoded reader for TMatrixTSym<T> (no file ever carries its StreamerInfo) #73
Line item of #9: Missing derived class streamer for TMatrixTSym<double> (uproot-issue-359.root; formerly "unknown type TMatrixTSym3cdouble3e"). Currently a special-cased NotImplementedError at src/rootfilespec/dynamic.py:95-100.
Spec:Matrices and vectors §2.2 — TMatrixTSym<Element>::Streamer passes ReadClassBuffer the TClass of TMatrixTBase<Element>, not its own, so "the file carries no streamer info for TMatrixTSym<T> at all … a reader … must dispatch on the name." The error message's premise (a missing derived streamer) is therefore wrong: it is never there. Confirmed: this file's entire streamer-info list is one entry, TMatrixTBase<double> v5.
§4 gives the read procedure: read the frame (the version word is TMatrixTBase's, 5), decode the base's members from the base's info, then — past the end implied by the byte count — read fNrows × (fNrows + 1) / 2 values of T in row order, row i holding fNcols − i of them. TMatrixTSym is one of the three extending classes of Buffer framing §2.4: "A byte count is a lower bound on the length of the object." The spec uses this very file as its independent witness: five records, 29×29 and 58×58, accounting to the byte. data/classes/matrix.root in the vendored spec is a second test vector.
Suggested fix: one hardcoded class in bootstrap/ dispatched on the name prefix TMatrixTSym<, which reads its base via the file's TMatrixTBase<T> info and then the packed triangle; element width from the template argument (double → 8, float → 4).
Severity / size: low, S–M, self-contained. Clears 1 xfail. The "object may extend past its byte count" handling overlaps #98.
Activity