From 88b188dd3c55a2414d7c6243a405b7b16d462d17 Mon Sep 17 00:00:00 2001 From: "Xinxin (Cissie) Mei" Date: Mon, 5 Oct 2026 17:10:01 -0400 Subject: [PATCH 01/65] Read CODA streaming files that set the last-record bit on every record - EvioFile: keep scanning past a record with the last-record bit while another record header (magic word) follows. - Record.scan_events: when a record has no event index array, walk events by the length word of each event bank. - EvioFile.__del__: ignore BufferError when numpy views of the mmap are still alive. Before, these files showed 1 record and 0 events. Co-Authored-By: Claude Opus 5.5 --- pyevio/evio_file.py | 16 +++++++-- pyevio/record.py | 9 +++++ tests/test_record_scanning.py | 63 +++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 tests/test_record_scanning.py diff --git a/pyevio/evio_file.py b/pyevio/evio_file.py index 0b71c4b..2a79d20 100644 --- a/pyevio/evio_file.py +++ b/pyevio/evio_file.py @@ -6,6 +6,7 @@ from pyevio.file_header import FileHeader from pyevio.record import Record +from pyevio.record_header import RecordHeader from pyevio.event import Event @@ -63,7 +64,7 @@ def __del__(self): self.mm.close() if hasattr(self, 'file') and self.file and not self.file.closed: self.file.close() - except (ValueError, AttributeError): + except (ValueError, AttributeError, BufferError): # Ignore errors during cleanup pass @@ -96,8 +97,10 @@ def _scan_record_offsets(self) -> List[int]: # Move to next record offset += record.size - # Stop if this was the last record - if record.header.is_last_record: + # Stop if this was the last record. Some CODA writers set the + # last-record bit on every record, so keep going if another + # record header follows. + if record.header.is_last_record and not self._is_record_at(offset): break except Exception as e: @@ -107,6 +110,13 @@ def _scan_record_offsets(self) -> List[int]: return record_offsets + def _is_record_at(self, offset: int) -> bool: + """Check whether a record header (magic word in word 7) starts at offset.""" + if offset + RecordHeader.HEADER_SIZE > self.file_size: + return False + magic = struct.unpack(self.header.endian + 'I', self.mm[offset + 28:offset + 32])[0] + return magic == RecordHeader.MAGIC_NUMBER + @property def record_count(self) -> int: """Get the number of records in this file.""" diff --git a/pyevio/record.py b/pyevio/record.py index dbfdd63..ea4f41e 100644 --- a/pyevio/record.py +++ b/pyevio/record.py @@ -77,6 +77,15 @@ def scan_events(self) -> List[Tuple[int, int]]: # Update cumulative offset for next event current_offset += event_length + elif self.header.event_count > 0: + # No index array: walk events by the length word of each event bank + current_offset = self.data_start + while current_offset + 8 <= self.data_end and len(event_info) < self.header.event_count: + bank_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset+4])[0] + event_length = (bank_length + 1) * 4 + event_info.append((current_offset, event_length)) + current_offset += event_length + return event_info def get_events(self, start_event: Optional[int] = None, end_event: Optional[int] = None): diff --git a/tests/test_record_scanning.py b/tests/test_record_scanning.py new file mode 100644 index 0000000..bc3dd0b --- /dev/null +++ b/tests/test_record_scanning.py @@ -0,0 +1,63 @@ +import struct + +import pytest + +from pyevio.evio_file import EvioFile + +MAGIC = 0xc0da0100 +LAST_RECORD_BIT = 1 << 9 + + +def make_event(n_payload_words, tag=0xFF60): + """A bank: length word, tag/type/num word, then payload words.""" + words = [n_payload_words + 1, (tag << 16) | (0x10 << 8)] + list(range(n_payload_words)) + return struct.pack("<%dI" % len(words), *words) + + +def make_record(number, events, last, with_index): + index = struct.pack("<%dI" % len(events), *(len(e) for e in events)) if with_index else b"" + data = b"".join(events) + bit_info = LAST_RECORD_BIT if last else 0 + length_words = 14 + (len(index) + len(data)) // 4 + header = struct.pack("<14I", length_words, number, 14, len(events), len(index), + bit_info | 6, 0, MAGIC, len(data), 0, 0, 0, 0, 0) + return header + index + data + + +def write_file(path, records, trailer=b""): + header = struct.pack("<14I", 0x4556494F, 1, 14, len(records), 0, 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) + path.write_bytes(header + b"".join(records) + trailer) + return str(path) + + +def event_lengths(evio_file): + return [[e.length for e in evio_file.get_record(i).get_events()] + for i in range(evio_file.record_count)] + + +def test_standard_file(tmp_path): + records = [make_record(1, [make_event(2), make_event(3)], last=False, with_index=True), + make_record(2, [make_event(1)], last=True, with_index=True)] + with EvioFile(write_file(tmp_path / "std.evio", records)) as f: + assert event_lengths(f) == [[16, 20], [12]] + + +def test_last_record_bit_on_every_record(tmp_path): + """CODA streaming files set the last-record bit on every record.""" + records = [make_record(i, [make_event(i)], last=True, with_index=True) for i in range(1, 4)] + with EvioFile(write_file(tmp_path / "every_last.evio", records)) as f: + assert f.record_count == 3 + + +def test_stops_at_last_record_before_non_record_data(tmp_path): + records = [make_record(1, [make_event(1)], last=True, with_index=True)] + with EvioFile(write_file(tmp_path / "trailer.evio", records, trailer=b"\0" * 64)) as f: + assert f.record_count == 1 + + +@pytest.mark.parametrize("last", [False, True]) +def test_records_without_index_array(tmp_path, last): + records = [make_record(1, [make_event(2), make_event(0), make_event(5)], last=last, with_index=False), + make_record(2, [make_event(1)], last=True, with_index=False)] + with EvioFile(write_file(tmp_path / "no_index.evio", records)) as f: + assert event_lengths(f) == [[16, 8, 28], [12]] From d77dde27140c0e9a06f79000bdce2fe961e6462c Mon Sep 17 00:00:00 2001 From: "Xinxin (Cissie) Mei" Date: Mon, 5 Oct 2026 17:10:01 -0400 Subject: [PATCH 02/65] Add `pyevio web` viewer for CODA streaming fADC250 files A local web page that decodes EVIO v6 files in the browser: file checks, occupancy, rate, charge and timing plots (file, ROC and channel level), and a structure tree down to single hit words. `pyevio web [DIR]` serves it with a folder browser on localhost. Also adds examples/fadc250_stream_to_parquet.py and docs/web_viewer.md. Co-Authored-By: Claude Opus 5.5 --- README.md | 11 + docs/images/web_viewer_overview.png | Bin 0 -> 376751 bytes docs/images/web_viewer_plots_channel.png | Bin 0 -> 379081 bytes docs/images/web_viewer_plots_file.png | Bin 0 -> 181460 bytes docs/images/web_viewer_plots_roc.png | Bin 0 -> 200936 bytes docs/images/web_viewer_structure.png | Bin 0 -> 428320 bytes docs/web_viewer.md | 72 +++ examples/fadc250_stream_to_parquet.py | 147 +++++ pyevio/cli/__init__.py | 2 + pyevio/cli/web.py | 14 + pyevio/web/__init__.py | 98 ++++ pyevio/web/index.html | 693 +++++++++++++++++++++++ pyproject.toml | 5 +- 13 files changed, 1041 insertions(+), 1 deletion(-) create mode 100644 docs/images/web_viewer_overview.png create mode 100644 docs/images/web_viewer_plots_channel.png create mode 100644 docs/images/web_viewer_plots_file.png create mode 100644 docs/images/web_viewer_plots_roc.png create mode 100644 docs/images/web_viewer_structure.png create mode 100644 docs/web_viewer.md create mode 100644 examples/fadc250_stream_to_parquet.py create mode 100644 pyevio/cli/web.py create mode 100644 pyevio/web/__init__.py create mode 100644 pyevio/web/index.html diff --git a/README.md b/README.md index b78cbc5..b23b4e0 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,17 @@ pyevio hex sample.evio 0x100 --bytes --endian='>' pyevio ui sample.evio ``` +### Web Viewer + +```bash +# Serve the viewer at http://localhost:8765, file browser starts in /path/to/runs +pyevio web /path/to/runs +``` + +Browse a file in the browser: file checks, channel occupancy, rate, charge and timing plots for CODA streaming fADC250 data, and a structure tree down to single hit words. Decoding runs in the browser. See [docs/web_viewer.md](docs/web_viewer.md). + +![Web viewer overview](docs/images/web_viewer_overview.png) + ## Understanding EVIO File Structure EVIO files are organized hierarchically: diff --git a/docs/images/web_viewer_overview.png b/docs/images/web_viewer_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..702c0530dae7fb9edbd533507912db23dda1d448 GIT binary patch literal 376751 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

v~PCLJJwPK);@ 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

X{~V7)7lz@R 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

OxybQ_&*g-J{uYoc^gzj6g6r#;ll@(R{oy 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

x@juCR@JtEkPVeuD>1*k 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%0DmDKF#58)@a%&lLv+6!aYg!p?ev2y6`0<#V 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

CfzKD6AI(JgX_c4{#(HRz|bDAC9 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

%!v~4bBep`MP^KHG~%B&sPum_|Na$!97 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%0Al;2mCn7u?I(?f4;YSKBR2oYg zgb#CQw%>fhDRx6T1tuRY3awsV8{tibO?!MaUwX=Hz#Rcs9h3)s1-hYiI9It0&`ZOa zT)i^yDXt>Pl&~^(+Scx7#!%<7YyC-c^TtVg%IHPUv1UC@&Hiun)Uo5fXp8a1M(H{C zUt7doO%VvDW*s{^oXcYsx}l@Nr)TqKCnwh-6Z>8>vb5L-$G>hS{HX4Xqrm_Uiv@+l z-^k$n4{24;vbm*G4;`%+B(~I}1LJ9by)dF}OQB9At%*#W=t5Bmm}H;xqgWv@syIPv z^7dLTV*mtK%=wU2cy5wDf#BXxjz}p-!FBD_o$rv{1zt*O4j6A($-6D|7o@$E$UJ4! zE@w|(e}U6;@m9G`g>~M`e{$jUZbrx?C6b=x%Q|0VP!ev$&cRaSI}}lJ9UAd!qzIk+BQR8U-z^SA79gNgBZ1k z37tm1MUW-53SDZ=m8>?dmQb;2lnQQ+*jsPrmKBVYYX$O(?o@7CFQ>zecprkcaSP}a zg$q{J*0^tzR|XU%*ZZ7wta1wh!2Dpcd7|A=tML4urQfb;uRR5Y{ZG!nbR_p6gyR#7 z_tL5H=0aI^_*{9TEiD;!v8e0X=};hB$zw_yRWO^^LZp$qTb*d-=3Lx|@o`A7{n;98 z(V0R(Yr6@fM}dk80$2{QHHZ&~fUaL4lh`RhqtQ3op&Gi=1}D%O15tEC!!1*46Ua{l zg-|`t?%fT<-mmWqnzeOBOVmQP!{?~8HUgH#>zr4k7$w)#Yh3l^jxq57Gz0UDes=;Y zx%B10_4n_o`NE&h->xp5VOQ$Q(N*>nXz8jq&1P7?TWnOc7>dMi3gk3b zTf+<$1~{PrZDtc%1jt@S=DpP0Fh-92V4k9wjPQ6dj)lE&2^^U|+hcAS?A7^juX4!f zrptywV6_~PNxc>}cwf@--w;R%=$M`50n4y69_m^rEzBJNjm?~=qG8##GdJIE&1;;N zQMUp_YcepqPh_M^lsqh4I3;Beav%C)mZkG4NIKm*$W#FD3>$`Ikg?XLyEu$niA|kg zQZ6t*I#!pCVyVsnp8>1nt$O?Q%vYYdZ!h|Hr6llpY0AsD5~D;~MEwX5I_i;8&Dcoex9?xA za8WxJ3u>;e{BEZ0%)%G2|D0!b`xlqJ=2*$hsmaa_iM9pbd=5Hiy`fiB_h z+~rZ^;0tqp=QMjGGbb<87j#)FSMRgr8=?zAU$JmhvrtdyLBlNVpn1Y z_>n$Kn*uJft_;vSjV|YN!@oIq6tEC!ZH^-AvmIi{y~IdcTiakt4yy}+=>_(+*yy}P zTju&^GKq7L&e;zboZk7G)y;xo03`Q3tmO{W=0Qi#UbY>-Af&lwrq8Lep=C&udD6=> zI*NCAV{mS66$`J~c7y ze}a)iJ4wHIg#}__3YO4*g;^t-kw18@vU@ZxtfQpO>LR_=7sF`I8B`AN_%}lNA`0|Cz%@k~^wSdcfUEY}Y(55e1s5_yq9%`4jOEmE;V>vC|am(S#KO9$h&>w`ikxuDAEc zD}g|0xOX7L%FD_Ij?gA7?mkeE=XG07gcz0h8`mz$Uo&ogsp9cQ3t3mayBsvHHBtO% z5i;1AsQdWbn8^4xjIGbh!A*0F)Lr6hHyrpbNrGYtNEwnv34yHN1-^kI>?PM$N6)>+ zN&GIPp|Ege-SLt3Y$gO68Lxi`=B%{E{Fiytlly&z*Q2 z<)LmCG|qrcvh{GAF`0e(ECX8mF*nrIRlg#97wTULK{pa|>S$G;-a?WHs7a zTSo&){w-FLW9=0)}u#S&V0gWC9SqSh}b7yeelm{&B=t$?PGH@ z^QT)wqj?!tE8H}>D6hrRZ=FKI)SmM*T9BaNH2?L;*>kjMi@`Nf_qJnpFRl#LsgZ2b z@-qHSz&oJnKlnYw9b1)r^2G#Nq*g^udGqG$RMzjsRCMP7m#mSi9u>oS913F!aV!$U z*AZXwSFdrP|AXe#sly00i4gG)fbCFf^W$nd3 z)htYaPjA6!jp67qc){(z<2A9^;4ku&D5P6eda6X$H&z@G$$%Teifi*J86*>KS-Xq@H5xvUNkGi)f*{&el5y}P$N4^_Jt z{(r`TV^<^?v>Eo_gyi#h(D@#gP)T?AYb*voMsI&&iNh(eM^T9wQB$z2H zf6RQp0PRrFRsJrUA4i27F3ns=W7>+I{P}cE2G!DKr{0nWWilGFsD6Bol#Dl=N^ME0 zN8|MF)p|abyUWH98I%6b9y$84Eb)&I=za_&j#BE2EyBe=v?(Vgp>BMc6^;4b0csGp z0n9X-y`|_btgTb0LYPDmeWDa})K_J?N~xl#Xt)IL`AJV$HF=%N{ZjmV)*oyC$jPyH zZ)^&d8rz(@o~dD_rBm`B5x^q(B`V)dD`}Xb2MbsK{te*gZ_=-|h1b>j?|!4CKUeVD zybZalo0Y0&_Rgkvpjy3ZkyjDnBuEzi?zF|oao_*K;mTg@ey6M zmZ9p{SFdcXthnPW#%)j6UjCHqZ-t;tDEs_psY@#Sv9CdD70Ibnzu(X5nQ+7DnE?-M zhJkN|7V)Y)MwSUg{rIt@|Dsx7?q!VOTUZ6uP8{!j-&Q*B-SxXj%U}I$k#s`eGuv~} zgV(%s6f_#a@__P(-ZAi0@_^&Aa0PU&{{db)2X7|Ms9fY1bewE>0y2xEaHz8xd;?=T zw;3Vm_rMa&sWF=86b}eA*s$M~`rfSA%WzplWTd}ebLVK+89+G{K1 z#0Z;Ou?OLtA>e0>~U*sh@O zwGgON9`1Gk?&kwM866(6GolT-!sfzerlwS&+1N7z5r> 16) != 0xFF60 or (w[3] >> 16) != 0xFF31: + skipped += 1 + continue + frame = int(w[5]) + ts = int(w[6]) | (int(w[7]) << 32) + i = 2 + int(w[2]) + 1 # skip stream-info bank + nh = 0 + while i < len(w): + end = i + int(w[i]) + 1 + roc = int(w[i + 1] >> 16) + j = i + 2 + if (w[j + 1] >> 16) == 0xFF30: # skip ROC stream-info bank + j += int(w[j]) + 1 + while j < end: + plen = int(w[j]) + payload_words += plen - 1 + if plen > 1: + words.append(w[j + 2:j + plen + 1]) + b_frame.append(frame); b_roc.append(roc); b_port.append(int(w[j + 1] >> 16)); b_n.append(plen - 1) + nh += plen - 1 + j += plen + 1 + i = end + frames.append(frame) + ts_list.append(ts) + nhits.append(nh) + h = np.concatenate(words).astype(np.uint32) if words else np.empty(0, np.uint32) + del words + b_n = np.asarray(b_n, dtype=np.int64) + hits = { + "frame": np.repeat(np.asarray(b_frame, np.uint32), b_n), + "roc": np.repeat(np.asarray(b_roc, np.uint16), b_n), + "port": np.repeat(np.asarray(b_port, np.uint8), b_n), + "ch": ((h >> 13) & 0xF).astype(np.uint8), + "t_ns": (((h >> 17) & 0x3FFF) * 4).astype(np.uint16), + "q": (h & 0x1FFF).astype(np.uint16), + } + # sort by frame, then time in frame (the event builder delivers some frames out of order) + order = np.lexsort((hits["t_ns"], hits["frame"])) + hits = {k: v[order] for k, v in hits.items()} + frames, ts_list, nhits = map(np.asarray, (frames, ts_list, nhits)) + out_of_order = int((np.diff(frames) < 0).sum()) + order = np.argsort(frames, kind="stable") + frames, ts_list, nhits = frames[order], ts_list[order], nhits[order] + offsets = np.concatenate([[0], np.cumsum(nhits)[:-1]]) if len(nhits) else np.empty(0) + frame_tab = {"frame": frames.astype(np.uint32), "timestamp_ns": ts_list.astype(np.uint64), + "n_hits": nhits.astype(np.uint32), "hit_offset": offsets.astype(np.uint64)} + stats = {"records": f.record_count, "frames": len(frames), "hits": len(h), "skipped_events": skipped, + "out_of_order": out_of_order, "payload_words": payload_words} + return hits, frame_tab, stats + + +def validate(hits, frames, stats): + """Cheap self-consistency checks; raises AssertionError on failure.""" + assert stats["hits"] == stats["payload_words"], "hit count != sum of (payload bank length - 1)" + assert int(frames["n_hits"].sum()) == stats["hits"], "per-frame hit counts do not add up" + if stats["hits"]: + assert hits["t_ns"].max() < 65536, "hit time outside the 65.5 us frame" + f = frames["frame"] + if len(f): + return {"missing_frames": int(f[-1] - f[0] + 1 - len(np.unique(f))), "duplicate_frames": int(len(f) - len(np.unique(f)))} + return {} + + +def convert(path, out_dir, force=False): + path, out_dir = Path(path), Path(out_dir) + hits_p = out_dir / f"{path.stem}.hits.parquet" + frames_p = out_dir / f"{path.stem}.frames.parquet" + if not force and hits_p.exists() and hits_p.stat().st_mtime > path.stat().st_mtime: + print(f"skip {path.name} (already converted)") + return + t0 = time.time() + hits, frames, stats = decode(path) + checks = validate(hits, frames, stats) + meta = {"source_file": path.name, "source_bytes": str(path.stat().st_size), "decoder_version": DECODER_VERSION, + "hit_format": HIT_FORMAT, **{k: str(v) for k, v in {**stats, **checks}.items()}} + out_dir.mkdir(parents=True, exist_ok=True) + for table, p in ((hits, hits_p), (frames, frames_p)): + t = pa.table(table) + t = t.replace_schema_metadata({k.encode(): v.encode() for k, v in meta.items()}) + pq.write_table(t, p, compression="zstd") + print(f"done {path.name}: {stats['frames']:,} frames, {stats['hits']:,} hits, " + f"{stats['out_of_order']:,} out-of-order, {checks} -> {hits_p.name} " + f"({hits_p.stat().st_size / 1e6:.1f} MB) in {time.time() - t0:.1f} s") + + +def main(argv=None): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("files", nargs="+", help=".evio files to convert") + ap.add_argument("--out", default="out", help="output folder (default: ./out)") + ap.add_argument("--force", action="store_true", help="re-convert even if the Parquet is up to date") + args = ap.parse_args(argv) + failed = 0 + for p in args.files: + try: + convert(p, args.out, args.force) + except Exception as e: # keep going with the other files + failed += 1 + print(f"FAIL {p}: {e}", file=sys.stderr) + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pyevio/cli/__init__.py b/pyevio/cli/__init__.py index c63d425..43a5206 100644 --- a/pyevio/cli/__init__.py +++ b/pyevio/cli/__init__.py @@ -12,6 +12,7 @@ from pyevio.cli.hex import hex_command from pyevio.cli.ui import ui_command from pyevio.cli.ana import ana_command +from pyevio.cli.web import web_command @click.group(invoke_without_command=True) @@ -41,6 +42,7 @@ def cli(ctx, verbose): cli.add_command(hex_command) cli.add_command(ui_command) cli.add_command(ana_command) +cli.add_command(web_command) # Entry point for the CLI diff --git a/pyevio/cli/web.py b/pyevio/cli/web.py new file mode 100644 index 0000000..83257ca --- /dev/null +++ b/pyevio/cli/web.py @@ -0,0 +1,14 @@ +import click + + +@click.command(name="web") +@click.argument("start_dir", type=click.Path(exists=True, file_okay=False), default=".") +@click.option('--port', '-p', default=8765, show_default=True, help="Port to serve on (localhost only)") +@click.option('--no-browser', is_flag=True, help="Do not open a browser tab") +def web_command(start_dir, port, no_browser): + """Browse EVIO files in a web page: checks, plots and structure tree. + + START_DIR is the folder the file browser opens in (default: current directory). + """ + from pyevio.web import serve + serve(start_dir, port, open_browser=not no_browser) diff --git a/pyevio/web/__init__.py b/pyevio/web/__init__.py new file mode 100644 index 0000000..f06b547 --- /dev/null +++ b/pyevio/web/__init__.py @@ -0,0 +1,98 @@ +"""Local web server for the EVIO stream viewer (index.html), with a folder browser. + +The viewer decodes files in the browser. The server only lists folders and +streams file bytes, and listens on 127.0.0.1. To view files on a remote machine, +run `pyevio web --no-browser` there and connect with +`ssh -L 8765:localhost:8765 user@host`. +""" +import functools +import http.server +import json +import os +import shutil +import webbrowser +from pathlib import Path +from urllib.parse import parse_qs, urlparse + +HERE = Path(__file__).resolve().parent +EVIO_SUFFIXES = {".evio", ".dat"} + + +class Handler(http.server.SimpleHTTPRequestHandler): + start_dir = str(Path.cwd()) + + def do_GET(self): + url = urlparse(self.path) + q = {k: v[0] for k, v in parse_qs(url.query).items()} + if url.path == "/api/start": + return self._json({"dir": self.start_dir}) + if url.path == "/api/ls": + return self._ls(q.get("dir", self.start_dir), q.get("all") == "1") + if url.path == "/api/file": + return self._file(q.get("path", "")) + if url.path not in ("/", "/index.html"): + return self.send_error(404) + return super().do_GET() + + def _json(self, obj, code=200): + body = json.dumps(obj).encode() + self.send_response(code) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.send_header("Cache-Control", "no-store") + self.end_headers() + self.wfile.write(body) + + def _ls(self, d, show_all): + p = Path(os.path.expanduser(d)).resolve() + if p.is_file(): + p = p.parent + if not p.is_dir(): + return self._json({"error": f"Folder not found: {p}"}, 404) + dirs, files = [], [] + try: + for e in sorted(os.scandir(p), key=lambda e: e.name.lower()): + if e.name.startswith("."): + continue + try: + if e.is_dir(): + dirs.append(e.name) + elif e.is_file() and (show_all or Path(e.name).suffix.lower() in EVIO_SUFFIXES): + files.append({"name": e.name, "size": e.stat().st_size}) + except OSError: + continue + except PermissionError: + return self._json({"error": f"No permission to read {p}"}, 403) + parent = str(p.parent) if p.parent != p else None + return self._json({"dir": str(p), "parent": parent, "dirs": dirs, "files": files}) + + def _file(self, path): + p = Path(os.path.expanduser(path)).resolve() + if not p.is_file(): + return self._json({"error": f"File not found: {p}"}, 404) + size = p.stat().st_size + self.send_response(200) + self.send_header("Content-Type", "application/octet-stream") + self.send_header("Content-Length", str(size)) + self.end_headers() + with open(p, "rb") as f: + shutil.copyfileobj(f, self.wfile, 1 << 20) + + def log_message(self, fmt, *args): # keep the terminal quiet except for errors + if args and str(args[1]).startswith(("4", "5")): + super().log_message(fmt, *args) + + +def serve(start_dir=".", port=8765, open_browser=True): + """Serve the viewer at http://localhost: until Ctrl+C.""" + Handler.start_dir = str(Path(os.path.expanduser(start_dir)).resolve()) + handler = functools.partial(Handler, directory=str(HERE)) + with http.server.ThreadingHTTPServer(("127.0.0.1", port), handler) as httpd: + url = f"http://localhost:{port}/index.html" + print(f"Viewer: {url} (Ctrl+C to stop)\nFile browser starts in: {Handler.start_dir}") + if open_browser: + webbrowser.open(url) + try: + httpd.serve_forever() + except KeyboardInterrupt: + pass diff --git a/pyevio/web/index.html b/pyevio/web/index.html new file mode 100644 index 0000000..9a46803 --- /dev/null +++ b/pyevio/web/index.html @@ -0,0 +1,693 @@ + + + +EVIO Stream Viewer + + + + + +

+
+

EVIO Stream Viewer

+ + + +
+
Drop an .evio file anywhere on this page. It is decoded in your browser and never uploaded. EVIO v6 with CODA streaming fADC250 data (0xFF60 time frames) gets full plots; any other EVIO v6 file shows the structure tree.
+ +
+
No file selected
+ +
Click Open .evio file or drag a file onto this page. When started with pyevio web, you can also pick a file from any folder with Browse folders.
+
+ + +
+ + + + + diff --git a/pyproject.toml b/pyproject.toml index 5222f32..19f8b18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,4 +28,7 @@ build-backend = "setuptools.build_meta" version = {attr = "pyevio.__version__"} [project.scripts] -pyevio = "pyevio.cli:main" \ No newline at end of file +pyevio = "pyevio.cli:main" + +[tool.setuptools.package-data] +pyevio = ["web/*.html"] From 4586c4dde2722626c601444251f5ac3712be40d2 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sat, 10 Oct 2026 23:53:14 -0400 Subject: [PATCH 03/65] Restrict setuptools package discovery to pyevio Flat-layout auto-discovery picked up space/ as a second top-level package and refused to build, so uv run / pip install failed. Co-Authored-By: Claude Fable 5.1 --- pyproject.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 19f8b18..34f00aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,11 @@ build-backend = "setuptools.build_meta" [tool.setuptools.dynamic] version = {attr = "pyevio.__version__"} +# Only the library is a package; docs/, examples/, space/ and tests/ sit +# beside it in a flat layout and must not be discovered as packages. +[tool.setuptools.packages.find] +include = ["pyevio*"] + [project.scripts] pyevio = "pyevio.cli:main" From 51b2184f6413caf858f2f50495653b2c2b2b26ac Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sat, 10 Oct 2026 23:58:38 -0400 Subject: [PATCH 04/65] Add pytest to the default dev dependency group `uv run pytest` now works without --extra test, in worktrees too. Co-Authored-By: Claude Fable 5.1 --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 34f00aa..d7886b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,10 @@ dependencies = [ [project.optional-dependencies] test = ["pytest"] +# uv installs the dev group by default, so `uv run pytest` works without extras. +[dependency-groups] +dev = ["pytest"] + [build-system] requires = ["setuptools", "wheel", "build", "twine"] From b4924b69c3e5dad093e9b7d1ba5bee444f504825 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:17:49 -0400 Subject: [PATCH 05/65] Correct the two F10 bank-scanning tests to EVIO length semantics F10: test_complex_event_structure and test_real_world_event_structure failed on main and gui-fix because their fixtures were wrong. A length word counts the words that follow it, so the length-11 bank at 0x28 of the real-world stream spans words 10..21 and the 0x000F header at 0x50 is nested inside it: the event has two top-level banks. The complex fixture declared lengths that disagreed with its byte sizes under any convention. Both tests now build EVIO-consistent data, pin the nested structure, and pass. Status: RESOLVED. The investigation exposed that Bank treats the length word as counting itself (size, end_offset and data_length one word short; to_numpy drops the last payload word of every leaf bank). The new strict XFAIL test_bank_length_counts_words_that_follow pins that defect as F38. Co-Authored-By: Claude Fable 5.1 --- tests/test_bank_scanning.py | 357 +++++++++++------------------------- 1 file changed, 105 insertions(+), 252 deletions(-) diff --git a/tests/test_bank_scanning.py b/tests/test_bank_scanning.py index 7e8b5b7..046219c 100644 --- a/tests/test_bank_scanning.py +++ b/tests/test_bank_scanning.py @@ -1,49 +1,9 @@ -import pytest -import struct -import io import mmap -from typing import List, Tuple -import os -import tempfile - -from pyevio.bank import Bank - -# Debug function to analyze memory dumps -def debug_memory_dump(data, offset, length, title=None): - """Print a detailed memory dump with analysis of bank structures.""" - if title: - print(f"\n{title}") - - for i in range(0, length*4, 16): - if offset + i >= len(data): - break - - # Get chunk of data - chunk = data[offset+i:offset+i+16] - hex_values = ' '.join([f"{b:02X}" for b in chunk]) - - # Add interpretation for words - words = [] - for j in range(0, len(chunk), 4): - if j+4 <= len(chunk): - word_bytes = chunk[j:j+4] - word_val = struct.unpack("> 16) & 0xFFFF - data_type = (word_val >> 8) & 0xFF - num = word_val & 0xFF - interpretation = f"Tag=0x{tag:04X}, Type=0x{data_type:02X}, Num=0x{num:02X}" - else: - interpretation = f"0x{word_val:08X}" +import struct - words.append(interpretation) +import pytest - word_info = ' | '.join(words) - print(f"{offset+i:04X}: {hex_values:<48} {word_info}") +from pyevio.bank import Bank class MockMemoryMap: @@ -101,40 +61,19 @@ def create_mock_bank(length, tag, data_type, num, data=None, endian='<'): return header_word1 + header_word2 + data -def create_mock_event(banks, endian='<'): - """ - Create a mock event containing the specified banks. - - Args: - banks: List of bank data (bytes) to include in the event - endian: Endianness ('<' for little endian, '>' for big endian) +def evio_bank(tag, data_type, num, payload, endian='<'): + """Build a bank the EVIO way: the length word counts the words that follow it. - Returns: - Tuple of (event_bytes, bank_offsets) + `create_mock_bank` above takes a length that includes the length word + itself, which is the convention `Bank` uses today (see + test_bank_length_counts_words_that_follow). Use this builder for data + that must match what the evio writers produce. """ - # Calculate total length of all banks in words - total_length = sum(len(bank) for bank in banks) // 4 - - # Add event header (2 words) to total length - event_length = total_length + 2 - - # Create event header - event_header = struct.pack(f"{endian}I", event_length) - event_tag = struct.pack(f"{endian}I", 0xFF60 << 16 | 0x10 << 8 | 0x01) # Standard ROC event - - # Combine header and banks - event_data = event_header + event_tag - - # Track bank offsets - bank_offsets = [] - offset = 8 # Start after event header - - for bank in banks: - bank_offsets.append(offset) - event_data += bank - offset += len(bank) - - return event_data, bank_offsets + assert len(payload) % 4 == 0, "payload is whole 32-bit words" + length = len(payload) // 4 + 1 + header = struct.pack(f"{endian}II", length, + ((tag & 0xFFFF) << 16) | ((data_type & 0xFF) << 8) | (num & 0xFF)) + return header + payload def print_hex_dump(data, title=None): @@ -256,65 +195,45 @@ def test_nonstandard_tag_patterns(self): assert children[0].num == 0x11 assert children[0].length == 3 - # Debug version of our data_bank creation - shows what's happening def test_complex_event_structure(self): - """Test parsing of a complex event structure similar to the one analyzed.""" - # Create a segment bank (similar to the 0xFF31 bank) - segment_data = struct.pack(" words 0..20 (21 words) + offset 0x08 0xFF31 segment, 4 payload words, length 5 -> 6 words + offset 0x20 0x0002 bank of banks, length 9 -> 10 words + offset 0x28 0xFF30 segment, 3 payload words, length 4 -> 5 words + offset 0x3C 3 zero words of padding inside the ROC bank + offset 0x48 0x000F leaf bank, 1 payload word, length 2 -> 3 words + """ + segment_bank = evio_bank(0xFF31, 0x20, 0x01, struct.pack(" 0x50), so the event has two top-level banks. + REAL_WORLD_EVENT_WORDS = ( + 21, 0xFF601001, + 7, 0xFF312001, 0x32010003, 0, 0, 0, 0x42010001, + 0x00020011, + 11, 0x00021011, + 7, 0xFF302011, 0x31010003, 0, 0, 0, 0x41850001, + 0, + 2, 0x000F0001, + ) + + def test_real_world_event_structure(self, tmp_path): + """Top-level banks of the dumped event follow the length words, with the 0x000F header nested.""" + path = tmp_path / "real_world_event.bin" + path.write_bytes(struct.pack("<22I", *self.REAL_WORLD_EVENT_WORDS)) + + with open(path, 'rb') as f, mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm: + event_bank = Bank(mm, 0, '<') + assert (event_bank.length, event_bank.tag, event_bank.data_type) == (21, 0xFF60, 0x10) + + children = event_bank.get_children() + assert [(c.offset, c.tag, c.data_type, c.num, c.length) for c in children] == [ + (0x08, 0xFF31, 0x20, 0x01, 7), + (0x28, 0x0002, 0x10, 0x11, 11), + ] + + # Inside the ROC bank: the 0xFF30 segment, then the truncated header, which is no bank. + roc_children = children[1].get_children() + assert [(c.offset, c.tag, c.data_type, c.length) for c in roc_children] == [ + (0x30, 0xFF30, 0x20, 7), + ] + assert all(c.tag != 0x000F for c in children + roc_children) + + @pytest.mark.xfail(strict=True, reason="F38: Bank counts the length word as part of its own " + "length; size, end_offset and data_length are one word short") + def test_bank_length_counts_words_that_follow(self): + """A leaf bank with three uint32 payload words occupies five words and yields all three.""" + bank_bytes = evio_bank(0x0101, Bank.TYPE_UINT32, 0x01, struct.pack(" Date: Sun, 11 Oct 2026 00:17:49 -0400 Subject: [PATCH 06/65] Add the golden-set and SRO corpus harness under tests/golden F35: tests/golden/test_golden.py runs one test per row of the evio-optim golden manifest (44 rows, sha256 verified): header event-count sum, events found by scan_events, no event past EOF, and the I9 error contract for v4 and v1-3 files. The .dump rows skip (no file header). Today's result: 4 pass (writer_noidx_le, zeroev_le for cpp and java), 36 strict XFAIL with the finding number: F3 trailer ghosts, F4 compressed records, F9 generic version error, F39 HIPO file type id rejected. No golden row exercises F8. tests/golden/test_corpus.py checks record and event counts of the eight converted SRO corpus files; marked slow, runs only with PYEVIO_CORPUS=1. All eight are strict XFAIL on F3 (trailer counted as a record, trailer index read as events); the LZ4 files also on F4. pyproject: pyyaml in the dev group, the slow marker registered. Co-Authored-By: Claude Fable 5.1 --- pyproject.toml | 10 +- tests/golden/test_corpus.py | 101 ++ tests/golden/test_golden.py | 177 +++ uv.lock | 2170 +++++++++++++++++++++++++++++++++++ 4 files changed, 2457 insertions(+), 1 deletion(-) create mode 100644 tests/golden/test_corpus.py create mode 100644 tests/golden/test_golden.py create mode 100644 uv.lock diff --git a/pyproject.toml b/pyproject.toml index d7886b8..5aaaab9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,10 @@ test = ["pytest"] # uv installs the dev group by default, so `uv run pytest` works without extras. [dependency-groups] -dev = ["pytest"] +dev = [ + "pytest", + "pyyaml>=6.0.3", +] [build-system] @@ -39,5 +42,10 @@ include = ["pyevio*"] [project.scripts] pyevio = "pyevio.cli:main" +[tool.pytest.ini_options] +markers = [ + "slow: scans multi-gigabyte files; tests/golden/test_corpus.py runs only with PYEVIO_CORPUS=1", +] + [tool.setuptools.package-data] pyevio = ["web/*.html"] diff --git a/tests/golden/test_corpus.py b/tests/golden/test_corpus.py new file mode 100644 index 0000000..aa9e71b --- /dev/null +++ b/tests/golden/test_corpus.py @@ -0,0 +1,101 @@ +"""Converted SRO corpus: record and event counts per file. + +How to run +---------- +The corpus holds eight files of 12—16 GB each; walking the record headers of +one takes seconds. The module is marked ``slow`` and runs only when +``PYEVIO_CORPUS=1`` is set:: + + PYEVIO_CORPUS=1 uv run pytest tests/golden/test_corpus.py -v + +Paths: the manifest ``CORPUS_MANIFEST`` (default +``/home/romanov/dev/evio-optim/space-evio-lib-23/golden_manifest/corpus.yaml``) +names each file by absolute path under ``/data/evio-lib/corpus/``. The +module skips itself when the manifest is absent. + +Where the data comes from +------------------------- +evio-optim converted the raw SRO streaming files +(``/data/sro_boyarinov_data_2026/sro_000791.evio.0000N``) to clean EVIO v6 +with ``evio_convert_format``, uncompressed and LZ4. Each manifest row +records ``records`` (data records written) and ``event_count`` (complete +events plus salvaged tail events) as counted by the converter. + +What one test checks +-------------------- +``EvioFile.record_count`` equals ``records``, the record header event-count +sum equals ``event_count``, and no event from ``Record.scan_events`` +extends past the end of the file. Rows that fail today carry +``xfail(strict=True)`` with the finding number. +""" + +import os + +import pytest + +yaml = pytest.importorskip("yaml") + +from pyevio.evio_file import EvioFile # noqa: E402 + +pytestmark = pytest.mark.slow + +MANIFEST_PATH = os.environ.get( + "CORPUS_MANIFEST", + "/home/romanov/dev/evio-optim/space-evio-lib-23/golden_manifest/corpus.yaml", +) + +if os.environ.get("PYEVIO_CORPUS") != "1": + pytest.skip("set PYEVIO_CORPUS=1 to scan the 15 GB corpus files", allow_module_level=True) + +if not os.path.isfile(MANIFEST_PATH): + pytest.skip(f"corpus manifest absent: {MANIFEST_PATH}", allow_module_level=True) + +with open(MANIFEST_PATH) as manifest_file: + MANIFEST = yaml.safe_load(manifest_file) + +# Today every corpus file fails the same way: the trailer +# record is counted as a data record, and its index yields two ghost events +# per data record that reach past EOF (F3). The LZ4 files add F4: the data +# records are walked as uncompressed bytes. +XFAIL_BY_COMPRESSION = { + "none": "F3: trailer counted as a record; trailer index read as events past EOF", + "lz4": "F4 (and F3): LZ4 records walked as uncompressed bytes; trailer ghosts", +} + + +def corpus_params(): + params = [] + for row in MANIFEST["files"]: + reason = XFAIL_BY_COMPRESSION.get(row["compression"]) + marks = [pytest.mark.xfail(strict=True, reason=reason)] if reason else [] + params.append(pytest.param(row, id=os.path.basename(row["path"]), marks=marks)) + return params + + +@pytest.mark.parametrize("row", corpus_params()) +def test_corpus_file(row): + path = row["path"] + if not os.path.isfile(path): + pytest.skip(f"corpus file absent: {path}") + + file_size = os.path.getsize(path) + with EvioFile(path) as evio_file: + record_count = evio_file.record_count + header_events = evio_file.get_total_event_count() + scanned_events = 0 + past_eof = 0 + for record_i in range(record_count): + for offset, length in evio_file.get_record(record_i).scan_events(): + scanned_events += 1 + if offset + length > file_size: + past_eof += 1 + + # The counts are the report numbers: print them so `-s` or the log shows them. + print(f"{os.path.basename(path)}: records={record_count} (manifest {row['records']}) " + f"header_events={header_events} scanned={scanned_events} (manifest {row['event_count']}) " + f"past_eof={past_eof}") + + assert record_count == row["records"], "record count" + assert header_events == row["event_count"], "record header event counts" + assert scanned_events == row["event_count"], "events found by scan_events" + assert past_eof == 0, f"{past_eof} events past EOF" diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py new file mode 100644 index 0000000..4c9e789 --- /dev/null +++ b/tests/golden/test_golden.py @@ -0,0 +1,177 @@ +"""Golden-set harness: pyevio against the evio-optim golden manifest. + +How to run +---------- +The golden set lives outside the repository. The module skips itself when +either path is absent: + +- manifest: ``GOLDEN_MANIFEST`` (default + ``/home/romanov/dev/evio-optim/space-evio-lib-23/golden_manifest/manifest.yaml``) +- files: ``golden_root`` from the manifest (``/data/evio-lib/golden``) + +Run only this module:: + + uv run pytest tests/golden/test_golden.py -v + +The sibling module ``test_corpus.py`` covers the converted SRO corpus +(15 GB files); it runs only with ``PYEVIO_CORPUS=1``. + +Where the data comes from +------------------------- +The golden set was written by the evio C++ and Java libraries at the +``lib_git_sha`` recorded in the manifest (generators +``evio/src/utils/cpp/golden_gen.cpp``, ``GoldenGen.java``, ``gen_v13.py``). +Each manifest row carries ``path``, ``case``, ``description``, ``sha256``, +``event_count`` and content digests. One test runs per row; the test id is +the path below ``cases/`` because the same ``case`` name exists for both +writers. + +What one test checks +-------------------- +1. The file is present and its sha256 matches the manifest (a mismatch is a + broken reference: stop and ask, never regenerate over it). +2. ``.dump`` rows are record streams without a file header: skipped. +3. v4 and v1—3 rows: ``EvioFile`` raises ``ValueError`` whose message names + the detected version and points at the evio tools (the I9 contract, see + ``assert_unsupported_version_message``). +4. v6 rows: the header event-count sum equals the manifest count, the + events found by ``Record.scan_events`` number the same, and no event + extends past the end of the file. + +Rows that fail today carry ``xfail(strict=True)`` with the finding number +from the findings ledger, so a fix flips the test loudly. +""" + +import hashlib +import os +import re + +import pytest + +yaml = pytest.importorskip("yaml") + +from pyevio.evio_file import EvioFile # noqa: E402 + +MANIFEST_PATH = os.environ.get( + "GOLDEN_MANIFEST", + "/home/romanov/dev/evio-optim/space-evio-lib-23/golden_manifest/manifest.yaml", +) + +if not os.path.isfile(MANIFEST_PATH): + pytest.skip(f"golden manifest absent: {MANIFEST_PATH}", allow_module_level=True) + +with open(MANIFEST_PATH) as manifest_file: + MANIFEST = yaml.safe_load(manifest_file) + +GOLDEN_ROOT = MANIFEST["golden_root"] + +if not os.path.isdir(GOLDEN_ROOT): + pytest.skip(f"golden root absent: {GOLDEN_ROOT}", allow_module_level=True) + + +# EVIO version each legacy row carries in word 5 of its first block header. +# These rows must fail with the I9 message instead of being read. +LEGACY_VERSION = { + "v4_le.evio": 4, + "v4_be.evio": 4, + "v4dict_le.evio": 4, + "v13_legacy.evio": 3, +} + +# Today's failures by case name, decided by running every row with pyevio. +# F3: a trailer with an index yields `index_array_length // 4` ghost events +# (two per data record) that reach past EOF. +# F4: compressed records are walked as uncompressed bytes: every event of the +# data record is garbage, plus the F3 ghosts. +# F9: legacy files fail with "Invalid EVIO file: file_type_id = ..." instead +# of a message naming the version. +# F39: the HIPO file type id 0x4849504F is rejected although the +# file is EVIO v6. +TRAILER_GHOSTS = "F3: trailer index read as event index; ghost events past EOF" +XFAIL_BY_CASE = { + "append_le.evio": TRAILER_GHOSTS, + "basic_be.evio": TRAILER_GHOSTS, + "basic_le.evio": TRAILER_GHOSTS, + "deepnest_le.evio": TRAILER_GHOSTS, + "dict_le.evio": TRAILER_GHOSTS, + "dictfirst_le.evio": TRAILER_GHOSTS, + "first_le.evio": TRAILER_GHOSTS, + "hugeev_le.evio": TRAILER_GHOSTS, + "manyrec_le.evio": TRAILER_GHOSTS, + "writer_traileridx_le.evio": TRAILER_GHOSTS, + "split_le_1.evio.0": TRAILER_GHOSTS, + "split_le_1.evio.1": TRAILER_GHOSTS, + "lz4_le.evio": "F4 (and F3): LZ4 record walked as uncompressed bytes", + "lz4best_le.evio": "F4 (and F3): LZ4_BEST record walked as uncompressed bytes", + "gzip_le.evio": "F4 (and F3): gzip record walked as uncompressed bytes", + "v4_le.evio": "F9: generic file_type_id error instead of a version message", + "v4_be.evio": "F9: generic file_type_id error instead of a version message", + "v4dict_le.evio": "F9: generic file_type_id error instead of a version message", + "v13_legacy.evio": "F9: generic file_type_id error instead of a version message", + "hipo_le.evio": "F39: HIPO file type id 0x4849504F rejected; then F3 (trailer with index)", +} + + +def manifest_params(): + params = [] + for row in MANIFEST["files"]: + test_id = row["path"].split("cases/", 1)[-1] + marks = [] + if row["path"].endswith(".dump"): + marks.append(pytest.mark.skip(reason="buffer dump, no file header")) + elif row["case"] in XFAIL_BY_CASE: + marks.append(pytest.mark.xfail(strict=True, reason=XFAIL_BY_CASE[row["case"]])) + params.append(pytest.param(row, id=test_id, marks=marks)) + return params + + +def sha256_of(path): + digest = hashlib.sha256() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(1 << 20), b""): + digest.update(chunk) + return digest.hexdigest() + + +def assert_unsupported_version_message(message, version): + """The I9 contract for files pyevio does not read. + + The message names the detected EVIO version ("version 4") and tells the + reader where to go: an evio tool (evio2xml, eviocopy) or the evio + library. + """ + assert re.search(rf"(?i)\bversion\s*{version}\b", message), \ + f"message does not name EVIO version {version}: {message!r}" + assert re.search(r"(?i)evio2xml|eviocopy|evio (tools?|librar|utilit)", message), \ + f"message does not point at the evio tools: {message!r}" + + +@pytest.mark.parametrize("row", manifest_params()) +def test_golden_file(row): + path = os.path.join(GOLDEN_ROOT, row["path"]) + if not os.path.isfile(path): + pytest.fail(f"golden file missing: {path} (regenerate per the decision table)") + assert sha256_of(path) == row["sha256"], \ + f"sha256 mismatch for {path}: the golden reference is broken, stop and ask" + + if row["case"] in LEGACY_VERSION: + with pytest.raises(ValueError) as raised: + EvioFile(path) + assert_unsupported_version_message(str(raised.value), LEGACY_VERSION[row["case"]]) + return + + file_size = os.path.getsize(path) + with EvioFile(path) as evio_file: + header_events = evio_file.get_total_event_count() + scanned_events = 0 + past_eof = [] + for record_i in range(evio_file.record_count): + record = evio_file.get_record(record_i) + for offset, length in record.scan_events(): + scanned_events += 1 + if offset + length > file_size: + past_eof.append((record_i, offset, length)) + + assert header_events == row["event_count"], "record header event counts" + assert scanned_events == row["event_count"], "events found by scan_events" + assert past_eof == [], f"events past EOF ({file_size} bytes): {past_eof[:5]}" diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..830d6be --- /dev/null +++ b/uv.lock @@ -0,0 +1,2170 @@ +version = 1 +revision = 5 +requires-python = ">=3.9" +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370, upload-time = "2024-08-27T21:00:03.328Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/e0/be8dcc796cfdd96708933e0e2da99ba4bb8f9b2caa9d560a50f3f09a65f3/contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", size = 265366, upload-time = "2024-08-27T20:50:09.947Z" }, + { url = "https://files.pythonhosted.org/packages/50/d6/c953b400219443535d412fcbbc42e7a5e823291236bc0bb88936e3cc9317/contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", size = 249226, upload-time = "2024-08-27T20:50:16.1Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460, upload-time = "2024-08-27T20:50:22.536Z" }, + { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623, upload-time = "2024-08-27T20:50:28.806Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761, upload-time = "2024-08-27T20:50:35.126Z" }, + { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015, upload-time = "2024-08-27T20:50:40.318Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672, upload-time = "2024-08-27T20:50:55.643Z" }, + { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688, upload-time = "2024-08-27T20:51:11.293Z" }, + { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145, upload-time = "2024-08-27T20:51:15.2Z" }, + { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019, upload-time = "2024-08-27T20:51:19.365Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1f/9375917786cb39270b0ee6634536c0e22abf225825602688990d8f5c6c19/contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", size = 266356, upload-time = "2024-08-27T20:51:24.146Z" }, + { url = "https://files.pythonhosted.org/packages/05/46/9256dd162ea52790c127cb58cfc3b9e3413a6e3478917d1f811d420772ec/contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", size = 250915, upload-time = "2024-08-27T20:51:28.683Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443, upload-time = "2024-08-27T20:51:33.675Z" }, + { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548, upload-time = "2024-08-27T20:51:39.322Z" }, + { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118, upload-time = "2024-08-27T20:51:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162, upload-time = "2024-08-27T20:51:49.683Z" }, + { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396, upload-time = "2024-08-27T20:52:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297, upload-time = "2024-08-27T20:52:21.843Z" }, + { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808, upload-time = "2024-08-27T20:52:25.163Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181, upload-time = "2024-08-27T20:52:29.13Z" }, + { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838, upload-time = "2024-08-27T20:52:33.911Z" }, + { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549, upload-time = "2024-08-27T20:52:39.179Z" }, + { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177, upload-time = "2024-08-27T20:52:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735, upload-time = "2024-08-27T20:52:51.05Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679, upload-time = "2024-08-27T20:52:58.473Z" }, + { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549, upload-time = "2024-08-27T20:53:06.593Z" }, + { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068, upload-time = "2024-08-27T20:53:23.442Z" }, + { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833, upload-time = "2024-08-27T20:53:39.243Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681, upload-time = "2024-08-27T20:53:43.05Z" }, + { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283, upload-time = "2024-08-27T20:53:47.232Z" }, + { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879, upload-time = "2024-08-27T20:53:51.597Z" }, + { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573, upload-time = "2024-08-27T20:53:55.659Z" }, + { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184, upload-time = "2024-08-27T20:54:00.225Z" }, + { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262, upload-time = "2024-08-27T20:54:05.234Z" }, + { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806, upload-time = "2024-08-27T20:54:09.889Z" }, + { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710, upload-time = "2024-08-27T20:54:14.536Z" }, + { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107, upload-time = "2024-08-27T20:54:29.735Z" }, + { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458, upload-time = "2024-08-27T20:54:45.507Z" }, + { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643, upload-time = "2024-08-27T20:55:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301, upload-time = "2024-08-27T20:55:56.509Z" }, + { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972, upload-time = "2024-08-27T20:54:50.347Z" }, + { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375, upload-time = "2024-08-27T20:54:54.909Z" }, + { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188, upload-time = "2024-08-27T20:55:00.184Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644, upload-time = "2024-08-27T20:55:05.673Z" }, + { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141, upload-time = "2024-08-27T20:55:11.047Z" }, + { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469, upload-time = "2024-08-27T20:55:15.914Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894, upload-time = "2024-08-27T20:55:31.553Z" }, + { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829, upload-time = "2024-08-27T20:55:47.837Z" }, + { url = "https://files.pythonhosted.org/packages/b3/e3/b9f72758adb6ef7397327ceb8b9c39c75711affb220e4f53c745ea1d5a9a/contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", size = 265518, upload-time = "2024-08-27T20:56:01.333Z" }, + { url = "https://files.pythonhosted.org/packages/ec/22/19f5b948367ab5260fb41d842c7a78dae645603881ea6bc39738bcfcabf6/contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", size = 249350, upload-time = "2024-08-27T20:56:05.432Z" }, + { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167, upload-time = "2024-08-27T20:56:10.034Z" }, + { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279, upload-time = "2024-08-27T20:56:15.41Z" }, + { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519, upload-time = "2024-08-27T20:56:21.813Z" }, + { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922, upload-time = "2024-08-27T20:56:26.983Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017, upload-time = "2024-08-27T20:56:42.246Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773, upload-time = "2024-08-27T20:56:58.58Z" }, + { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353, upload-time = "2024-08-27T20:57:02.718Z" }, + { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817, upload-time = "2024-08-27T20:57:06.328Z" }, + { url = "https://files.pythonhosted.org/packages/d1/09/60e486dc2b64c94ed33e58dcfb6f808192c03dfc5574c016218b9b7680dc/contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c", size = 261886, upload-time = "2024-08-27T20:57:10.863Z" }, + { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008, upload-time = "2024-08-27T20:57:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690, upload-time = "2024-08-27T20:57:19.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/24/dc3dcd77ac7460ab7e9d2b01a618cb31406902e50e605a8d6091f0a8f7cc/contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", size = 261894, upload-time = "2024-08-27T20:57:23.873Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099, upload-time = "2024-08-27T20:57:28.58Z" }, + { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838, upload-time = "2024-08-27T20:57:32.913Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551, upload-time = "2025-04-15T17:34:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399, upload-time = "2025-04-15T17:34:51.427Z" }, + { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061, upload-time = "2025-04-15T17:34:55.961Z" }, + { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956, upload-time = "2025-04-15T17:35:00.992Z" }, + { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872, upload-time = "2025-04-15T17:35:06.177Z" }, + { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027, upload-time = "2025-04-15T17:35:11.244Z" }, + { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641, upload-time = "2025-04-15T17:35:26.701Z" }, + { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075, upload-time = "2025-04-15T17:35:43.204Z" }, + { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534, upload-time = "2025-04-15T17:35:46.554Z" }, + { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188, upload-time = "2025-04-15T17:35:50.064Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636, upload-time = "2025-04-15T17:35:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636, upload-time = "2025-04-15T17:35:58.283Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053, upload-time = "2025-04-15T17:36:03.235Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985, upload-time = "2025-04-15T17:36:08.275Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750, upload-time = "2025-04-15T17:36:13.29Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246, upload-time = "2025-04-15T17:36:18.329Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728, upload-time = "2025-04-15T17:36:33.878Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762, upload-time = "2025-04-15T17:36:51.295Z" }, + { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196, upload-time = "2025-04-15T17:36:55.002Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017, upload-time = "2025-04-15T17:36:58.576Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580, upload-time = "2025-04-15T17:37:03.105Z" }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530, upload-time = "2025-04-15T17:37:07.026Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688, upload-time = "2025-04-15T17:37:11.481Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331, upload-time = "2025-04-15T17:37:18.212Z" }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963, upload-time = "2025-04-15T17:37:22.76Z" }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681, upload-time = "2025-04-15T17:37:33.001Z" }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674, upload-time = "2025-04-15T17:37:48.64Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480, upload-time = "2025-04-15T17:38:06.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489, upload-time = "2025-04-15T17:38:10.338Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042, upload-time = "2025-04-15T17:38:14.239Z" }, + { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630, upload-time = "2025-04-15T17:38:19.142Z" }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670, upload-time = "2025-04-15T17:38:23.688Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694, upload-time = "2025-04-15T17:38:28.238Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986, upload-time = "2025-04-15T17:38:33.502Z" }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060, upload-time = "2025-04-15T17:38:38.672Z" }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747, upload-time = "2025-04-15T17:38:43.712Z" }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895, upload-time = "2025-04-15T17:39:00.224Z" }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098, upload-time = "2025-04-15T17:43:29.649Z" }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535, upload-time = "2025-04-15T17:44:44.532Z" }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096, upload-time = "2025-04-15T17:44:48.194Z" }, + { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090, upload-time = "2025-04-15T17:43:34.084Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643, upload-time = "2025-04-15T17:43:38.626Z" }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443, upload-time = "2025-04-15T17:43:44.522Z" }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865, upload-time = "2025-04-15T17:43:49.545Z" }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162, upload-time = "2025-04-15T17:43:54.203Z" }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355, upload-time = "2025-04-15T17:44:01.025Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935, upload-time = "2025-04-15T17:44:17.322Z" }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168, upload-time = "2025-04-15T17:44:33.43Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550, upload-time = "2025-04-15T17:44:37.092Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214, upload-time = "2025-04-15T17:44:40.827Z" }, + { url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681, upload-time = "2025-04-15T17:44:59.314Z" }, + { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101, upload-time = "2025-04-15T17:45:04.165Z" }, + { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599, upload-time = "2025-04-15T17:45:08.456Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807, upload-time = "2025-04-15T17:45:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729, upload-time = "2025-04-15T17:45:20.166Z" }, + { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791, upload-time = "2025-04-15T17:45:24.794Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "contourpy" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", +] +dependencies = [ + { name = "numpy", version = "2.5.4", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/5a/a55177dd22553a277388e8a1b3220e92de91bacb28356cdc73caa240121d/contourpy-1.4.0.tar.gz", hash = "sha256:20156f5a1ac4f8ce02656e39a61e82164a3d359796dc8026f75b062783d500e1", size = 13323726, upload-time = "2026-09-11T19:05:05.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/ba/01bde9753bdbba04a6da9d2bff3881f021bc708f654655e95fae26d3b3a3/contourpy-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:186ba929df36d61b6127da2e89cd1357e4cb79aca647381ab1a6feb0b152877b", size = 297302, upload-time = "2026-09-11T19:02:45.103Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f5/c5bf67522d49a2222f3154fe46879451d26f0e35ece41770758a64ea78cb/contourpy-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c76f3a5318164db7d9401132fc1b5364b784c613c93fa506e3b5e6d1bf353ec8", size = 284921, upload-time = "2026-09-11T19:02:48.049Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cc/cb989599eec12fda312e127eb8e04a8b21a7a6c94bf7ff1bc68273334a42/contourpy-1.4.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:43c3ccbb32c6294b183dcc8e8c46dacf5ecef809497e3d48a5be298eef185ad0", size = 356332, upload-time = "2026-09-11T19:02:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/47/fb/6f620d7602507817b0b4c21dd790ed68688f1f4ae9c29aacf21f08db5cf1/contourpy-1.4.0-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86d05cec773c9507a3950122e0e40ce77c23c75ceeb2fc189514e71893cbb34b", size = 405878, upload-time = "2026-09-11T19:02:54.093Z" }, + { url = "https://files.pythonhosted.org/packages/32/4e/693c6d6bdece679f0953775eef3a1b66d56be55478d936e7deb1f3004422/contourpy-1.4.0-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2deb580178ca19437a84bd77e4bc2cd91a8ccad212413a83c273900868b5978c", size = 408296, upload-time = "2026-09-11T19:02:56.528Z" }, + { url = "https://files.pythonhosted.org/packages/78/f9/b6831508960d559581c448532ba4df312217072975486dbf2b24fcc5b76f/contourpy-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:875f42444c9cf48d56f724f2637e60d0f73b3b12c9041e1484580a233edf9591", size = 383243, upload-time = "2026-09-11T19:02:58.638Z" }, + { url = "https://files.pythonhosted.org/packages/f2/21/52903825a0ae7bb625e8bd30a09816d4c3c5d6174a469c10a616166cf780/contourpy-1.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f863c6100bf926cf47d13f3cd75f9bb8ebd98aaab230eeb4468b91f98f39a6b3", size = 1357306, upload-time = "2026-09-11T19:03:01.036Z" }, + { url = "https://files.pythonhosted.org/packages/d8/79/d68b1ce8539e4071518fed9523f558398f34dcd078b8927b109c72dad2ef/contourpy-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3863ef2e2b13fe93f8c0ebb08ee400cb07153b8b0e91c5acb26e4537f283634f", size = 1427243, upload-time = "2026-09-11T19:03:03.866Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f0/b75a10e9d0616b97a30de277b6dfe83f1879880854c7330337309530eb48/contourpy-1.4.0-cp312-cp312-win32.whl", hash = "sha256:5450f091ac1be0be3ad3a2a3b3f23b5e443e78c670ced4fd347d626f92a28fd2", size = 347345, upload-time = "2026-09-11T19:03:06.192Z" }, + { url = "https://files.pythonhosted.org/packages/50/a9/dab08786bb4d77ef9a046b3c1be923be4e73c5d07d91f5a54e8ea9b09e41/contourpy-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e697d94e69f499ff6bebb899cae97a58d5d14f0e1fe9568b43a0248d2f9af8c", size = 234083, upload-time = "2026-09-11T19:03:08.122Z" }, + { url = "https://files.pythonhosted.org/packages/47/b9/3ba509755a970dbde5948e7142ac21f266be72f38017cc4087a05fdceee1/contourpy-1.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:0c7a4c2716a4e98342221954416a836cca77c996c14ddbf22b5f01d5d93ca09c", size = 559521, upload-time = "2026-09-11T19:03:10.047Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8b/62a6eacea08ea0b6ab0159a7783df7ed421ff9c1ff58fef7c31f58fa5e52/contourpy-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e21d1d4a9db5b3a793649c7ab0ddb4697f2818929eec871a7b9c45fce7b2a1ea", size = 297330, upload-time = "2026-09-11T19:03:11.809Z" }, + { url = "https://files.pythonhosted.org/packages/3f/2f/103cdc5b7077cd569989d3ddb99ee3d4e96ee31bde8df2a6e426b2dc6195/contourpy-1.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:196759a3e4db60e1546167e361090ebb6d199aa3aafc9e34ea17a5ac3b23e814", size = 285037, upload-time = "2026-09-11T19:03:13.781Z" }, + { url = "https://files.pythonhosted.org/packages/bf/25/97001d1fdf940e6f5adfc592d4f5899fff95daf7dceead3988fe09987d2d/contourpy-1.4.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c0e07c691f3b3321913ed9b8161c50ea5f77fadd006f52f5e755359b0dcbfc5", size = 356675, upload-time = "2026-09-11T19:03:15.374Z" }, + { url = "https://files.pythonhosted.org/packages/a6/5e/9a7241a89e2f74402aefa2569e1349ad2750ff77823c04c788eaaedb7fdd/contourpy-1.4.0-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f861af508fca2384eef392bc1d8377cfa349b2b854cb11b45d89c75780e2561", size = 406990, upload-time = "2026-09-11T19:03:17.44Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/3a4fbbf6a806eada5453a6d16f6c7d96b9f4b3e57a3127368fb545986b8a/contourpy-1.4.0-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a03b32c2e7eda8b17757c022162c13c86f5c3d6f937dddf9ba3c3ff7b513953b", size = 407271, upload-time = "2026-09-11T19:03:19.523Z" }, + { url = "https://files.pythonhosted.org/packages/68/77/8f93ecbde1a4d11dfd460cd19a0c159f5487352e751fa87f5d78cc9db08e/contourpy-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1219a8898523cba821085f2da8a1b962cc696325763f09d7f93538ba43b2d70", size = 384707, upload-time = "2026-09-11T19:03:21.208Z" }, + { url = "https://files.pythonhosted.org/packages/05/07/e5cdf94d68961ee464de6b4fedd3d2f666584f59ccd124bb1290597122ab/contourpy-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:20da2f86bfaed60dbba729fe738c8241b1dd22b6cf7e8cbbf30df290bd04ba28", size = 1356741, upload-time = "2026-09-11T19:03:23.621Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8a/2301d07accb257ac08daeb631875fada06fedd019c20ff7b00ee07e9d211/contourpy-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ced1670fafee703b8277ab1645072a226e74f167166eae146fb743916119b67", size = 1426793, upload-time = "2026-09-11T19:03:25.955Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5d/a62648f06259d15c139b14eb8cf3c58fe53cb970a55f2bb77d1070e80a41/contourpy-1.4.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:abd0f7e51ecc52bf8c95713bd80b1c17c516a71fa391c54475308a4377903c2b", size = 117961, upload-time = "2026-09-11T19:03:27.713Z" }, + { url = "https://files.pythonhosted.org/packages/71/31/c5b7771ba6982f319ec90c0cf5c425b36891adfeee2d9f667f90b2d0c166/contourpy-1.4.0-cp313-cp313-win32.whl", hash = "sha256:510f7d93d94cf6ebf4e2cd0640bea16ab8affac7547230175b6745b596ce0599", size = 347438, upload-time = "2026-09-11T19:03:29.829Z" }, + { url = "https://files.pythonhosted.org/packages/68/c1/a59df0754bf83a6f3e153cc19d550a5b01f607e389b1c4d57f436f9139e0/contourpy-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6507a016976a75a15aee47809a34605de6244ccc056e6164bf9fb14b27eecad4", size = 234084, upload-time = "2026-09-11T19:03:31.657Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/97224f5decb1efa5a610f912195deb45321f73ec9b9dac485cd6fe2d5a6a/contourpy-1.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:423bd5f4b3f11d54a8c597234e513382e3454bb106b8ec7ae32ba4ed63f8d99b", size = 559559, upload-time = "2026-09-11T19:03:33.528Z" }, + { url = "https://files.pythonhosted.org/packages/75/b0/b548628c8dddf6e5e0a981b7fa8e4c008024df09c7d17c6a9e271edfa0b3/contourpy-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a3e67bc1a6a4618a1dac7c3053a9ffece5ddfa2046b2670b342cf430bb0b87d1", size = 297354, upload-time = "2026-09-11T19:03:35.017Z" }, + { url = "https://files.pythonhosted.org/packages/04/5a/513484208742f65af2648c519f0b7ab034616e183c4403538024c136a1ab/contourpy-1.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:072a702e2e178f4fcf96f04775d0c059e4c917925abf0d3208ebb6865df3c23d", size = 283729, upload-time = "2026-09-11T19:03:36.818Z" }, + { url = "https://files.pythonhosted.org/packages/35/da/5a6562febc994b2c4bf9d01e57a50458ef8a2051bb3e7b35a00333e0fc26/contourpy-1.4.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:404dbcd9233513dfd1323b66ea593fef90e899f658f6b8a9ed8e93bd0ca669db", size = 357819, upload-time = "2026-09-11T19:03:39.058Z" }, + { url = "https://files.pythonhosted.org/packages/6d/99/7b358ce888aaa426f755daa096c99c59d17c352037344e836f20e5d3b957/contourpy-1.4.0-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:61624f6722480aa7e168fd746164e7bfdf48f8ccb6542f1613741200dc37e2b1", size = 407795, upload-time = "2026-09-11T19:03:41.293Z" }, + { url = "https://files.pythonhosted.org/packages/be/02/34d7548adf08c60967435d79d7a90882eacc84f5093435287974c7e99943/contourpy-1.4.0-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2e741a39dfc96babe1722561e81351aeec104526c57dbe91c167c1db606c2d55", size = 408552, upload-time = "2026-09-11T19:03:42.728Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8c/9677dad226e5aaac5b823d5b09d881ebc32ff1648af417597649841e516c/contourpy-1.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e439ab450c93455feb0218532ded3e946ec7a9b5f459069f122cfa44b89229f6", size = 384850, upload-time = "2026-09-11T19:03:44.402Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/e3fbeaa489c223629fbb434737cb3de4ecaca9cae4825e77b92490f640f8/contourpy-1.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:417be048f7e122cefbe2a34c51a1f2b0410f8eb35796f794d45475ddb7872d9d", size = 1357601, upload-time = "2026-09-11T19:03:46.746Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55fec293d342c222ed58a5d4056df4362e192af2e59527a3d5d822de8828/contourpy-1.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:43d80072a32299bf945de0a6dd4e034ea0162e832261de2e07a274a5adbba9c9", size = 1427340, upload-time = "2026-09-11T19:03:48.745Z" }, + { url = "https://files.pythonhosted.org/packages/86/40/0faabf453edf59b0e3633381d7ca72c3414fb9b72b5cbb08b06ed792d3e5/contourpy-1.4.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:fa1b787362a3856e63dd2b89449f6c384d55ee1beb8f94f4bcc871b40f02462c", size = 118355, upload-time = "2026-09-11T19:03:50.047Z" }, + { url = "https://files.pythonhosted.org/packages/38/0c/7ea75aa3559ae8a6805015e15a19c92b6480752ecc92526361e5776e88c5/contourpy-1.4.0-cp314-cp314-win32.whl", hash = "sha256:738c44fa71735a617f36da58e32810512407d283d5d1bb5b1cecb00d7eeba7cf", size = 356977, upload-time = "2026-09-11T19:04:11.401Z" }, + { url = "https://files.pythonhosted.org/packages/15/41/3df8cc14bb572c8b447f9dfbc876703f0f2f2896058285b5c87a1d4a638d/contourpy-1.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:181bea01bc742734ae672fa00c717d855dd35e1f029536406538c52e7b0cd73d", size = 240101, upload-time = "2026-09-11T19:04:12.772Z" }, + { url = "https://files.pythonhosted.org/packages/66/01/ee6830a5aa4565662a345172f6f35eeeed625d20f1c9d4ecd35318fe4ade/contourpy-1.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:64039341e2d8804f1a13bda8c69083eab935167bbd7e856cf096241f17d5bd45", size = 576359, upload-time = "2026-09-11T19:04:14.983Z" }, + { url = "https://files.pythonhosted.org/packages/51/af/49ee9c9cf012699e505c1b63c531cc99f19df50f205173092c4d541e3ec7/contourpy-1.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ef47fef9a912c77e3d84b014f701e5a9340f25703e9ed3bcebe37f91fb69dc49", size = 313601, upload-time = "2026-09-11T19:03:51.452Z" }, + { url = "https://files.pythonhosted.org/packages/ad/59/ce411ab2be0f805038626d8f4ca9ce563487ff51ff6c363e7512271564ed/contourpy-1.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:96019f059bcb3774acc0104be3360a57b36d33eaaa2e1d7f77c800ca8e07618b", size = 302812, upload-time = "2026-09-11T19:03:53.022Z" }, + { url = "https://files.pythonhosted.org/packages/95/b0/390915f9af14c1e2d3b2a9ad99d85b98df4352346a51e368cbb825f813c3/contourpy-1.4.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddf5a2596d716fd3793434844caf31abc7a40b1e8718431420c89858268fb909", size = 348996, upload-time = "2026-09-11T19:03:54.594Z" }, + { url = "https://files.pythonhosted.org/packages/c7/85/e0952576d54322f3e9983b1e049a7a31f42ce82c5c29d01821e6dd3780d7/contourpy-1.4.0-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dd59df9e2fb0aff8bd7fd1adb9f349b7c835245a9d0f18c2f2deeb537190f2b1", size = 400272, upload-time = "2026-09-11T19:03:56.822Z" }, + { url = "https://files.pythonhosted.org/packages/d6/7d/f13543a5e1598e4a4ad01d9d5e2d65f9c09c37660616429913d606c5977d/contourpy-1.4.0-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b7794ea07cab575633daad8d6e963b662053391022294d3aacc1d9ba9ef54114", size = 412895, upload-time = "2026-09-11T19:03:58.487Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a8/6e5eaff53507dfd2dfc428240eecda32453067277d4b3e7ca71210b2d611/contourpy-1.4.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1c8a74744fa746eeaa12f0f9ed7f8b4add9d8f1b14d95e3b5e133675eac888f", size = 377060, upload-time = "2026-09-11T19:04:00.122Z" }, + { url = "https://files.pythonhosted.org/packages/16/a3/d00e44d35511b3cead5bd794ee672d4eecf30d9de4ceac57a49d6204064f/contourpy-1.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:107ec46f7aa1664266d69b1181aadc953d58d39f7d8d648fa5b795d4a060b0de", size = 1345688, upload-time = "2026-09-11T19:04:02.705Z" }, + { url = "https://files.pythonhosted.org/packages/1e/01/1e533b0cae32c8edd63fe40435ec3b29345dab87321afcd28722d7f957d1/contourpy-1.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c89c7f38a0d7a94356d74e3391073c4325c4d47ad2fd065c3fe7dbae16c0c", size = 1416140, upload-time = "2026-09-11T19:04:04.77Z" }, + { url = "https://files.pythonhosted.org/packages/6d/0c/4ee66759f00d6a5d6909782f14f441d639fa18a4a43142e334351efc47f8/contourpy-1.4.0-cp314-cp314t-win32.whl", hash = "sha256:912c6afaa106e2f74ba22b30416b77ef7eb94e3bdc5a4df51ab147845dba9b6d", size = 371982, upload-time = "2026-09-11T19:04:06.233Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ac/b3e5324138c3e3741f526663f4f265f4f69dfdf26415a39428940864a5f6/contourpy-1.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:ef9440f6f8506246269a82734f5ff9e2e4c5e775b3996fc883cc491c5257eca6", size = 262907, upload-time = "2026-09-11T19:04:07.882Z" }, + { url = "https://files.pythonhosted.org/packages/19/37/c9aa45e47819dc15a38fc5c81a2fb987fde55e9d3b991fbde514e3b6b5f5/contourpy-1.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:fc9feef8f1f001c5b87decadc67c4a5d1eebb62ca39c4763d1237ff62cf2b707", size = 587071, upload-time = "2026-09-11T19:04:09.898Z" }, + { url = "https://files.pythonhosted.org/packages/cc/74/66d4e6fbea3bcb3fd4e5ae21c039ba31b8fc408b35884b4bc09b88016dce/contourpy-1.4.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:79b06c60d5e569ce12c5da8f0c51217cdc484386e2349fa717c30fafb56d2871", size = 297358, upload-time = "2026-09-11T19:04:16.718Z" }, + { url = "https://files.pythonhosted.org/packages/2e/8d/8f7f25e71d73f15d7859943189900d2d348e740388c9ef52a0180d284762/contourpy-1.4.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6f963ea9f0d68d2b6a02d861e3c0aae09ae25ba21f243fcf281e9fed468b078d", size = 283732, upload-time = "2026-09-11T19:04:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/f0/90/957549e3b03c407c670e3e191db63f4aef60dab6605bc967af3a806b543e/contourpy-1.4.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5545ff38229c15d11d822fc6f7415b932da9f4975f53e305b7b96ebfb01f889c", size = 357820, upload-time = "2026-09-11T19:04:20.077Z" }, + { url = "https://files.pythonhosted.org/packages/56/4c/fa8de87d907b41b05d03f4945a51675cd67319650d01b4c927d209ffa6ee/contourpy-1.4.0-cp315-cp315-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:630d32f06cedf37b7f1dd2b6a12e4492826bd477a4c9c7b2e2fee6ce3a2cea76", size = 407804, upload-time = "2026-09-11T19:04:21.781Z" }, + { url = "https://files.pythonhosted.org/packages/04/e7/96bd4f4a4ae285727befbdb4b332d53a2654cc5da4585d2525b47a063e1f/contourpy-1.4.0-cp315-cp315-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:be85d160e7c795113c2a93254dde2fc7e86b375322570eee78b420969426973c", size = 408559, upload-time = "2026-09-11T19:04:23.432Z" }, + { url = "https://files.pythonhosted.org/packages/ae/94/39660e8dc309f96bf7971eb4ec5659f272f84e42b34c9990a96ecce8442c/contourpy-1.4.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:018227e134b73090b06f911e773a526c77c9af426be29065500ce096a5accd4c", size = 384861, upload-time = "2026-09-11T19:04:25.198Z" }, + { url = "https://files.pythonhosted.org/packages/ab/7b/411dccbf73d5d19da49bf7735786b3baf4ddb1456412d48ae4d4ab1fc761/contourpy-1.4.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:4bffcb2e8cc5c0e837631acab59dd04265fdac376550e7c3e310523877c68cb7", size = 1357612, upload-time = "2026-09-11T19:04:27.614Z" }, + { url = "https://files.pythonhosted.org/packages/a0/39/bf2442130e7d5aae75a4de4504f0c8aca3ef3da3feac3940ee27ca985d83/contourpy-1.4.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc87f2ffa84a49a77d76cb792f28a48ff3b05a222aa0b2bddbd839ba78e1d5ca", size = 1427345, upload-time = "2026-09-11T19:04:29.646Z" }, + { url = "https://files.pythonhosted.org/packages/96/60/e5d9196dd83ccd7dd103762982b10ef19a4f72e8ef67ae7157699b9be0bb/contourpy-1.4.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:c8be3392b84cf43373a488874dc1ebf46f60784a70977f92586e18019d71c7ed", size = 118157, upload-time = "2026-09-11T19:04:31.091Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b2/ae3d90f08ba2ed82189d93b55ffbd41e559760e89af4f9ef54d51869f41d/contourpy-1.4.0-cp315-cp315-win32.whl", hash = "sha256:618137ec5778fb76d494c9ec854b104a377fddba0d128bef7136cce2c3bf0df8", size = 356982, upload-time = "2026-09-11T19:04:52.913Z" }, + { url = "https://files.pythonhosted.org/packages/02/a0/36648fff407dcf8b8482985d33367ffc0fe90be72383869312cd0bd00a1b/contourpy-1.4.0-cp315-cp315-win_amd64.whl", hash = "sha256:ea09dc704029930cbd097f75cb0cc1db9852adbcf1a151fac7e9559f7bcbfd19", size = 240101, upload-time = "2026-09-11T19:04:54.587Z" }, + { url = "https://files.pythonhosted.org/packages/07/09/49e987a96706b8f877596cee00d558d7880793a833addc6b33f80805e5dc/contourpy-1.4.0-cp315-cp315-win_arm64.whl", hash = "sha256:a5e2bb871b90cd7a52bdee63bf80ef7acb46398d27efc66d7679240016efc5aa", size = 576375, upload-time = "2026-09-11T19:04:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/e3/18/820ba24a070fe2a834af73e52245c501960746f5c1777ebc64ec0c0dec12/contourpy-1.4.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:432e89f835cf01f8d2123a130a3126b17ee6e0348e4d62c0973872b30aa873bf", size = 313543, upload-time = "2026-09-11T19:04:32.582Z" }, + { url = "https://files.pythonhosted.org/packages/d3/4c/f61a63d8107e0c1c3fa47d30ce45abad90b2ad48a1a9a4510332db7e0176/contourpy-1.4.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:3e0a2392533e5e2abdf277c951047516acc8d2f3c42b2dd9dc34c907c9ebabf2", size = 302702, upload-time = "2026-09-11T19:04:34.257Z" }, + { url = "https://files.pythonhosted.org/packages/9d/93/5af95cb5113ecc6e780ca0c6c79756a2cea8833f971bbae112dd4ad73ded/contourpy-1.4.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:758e7496cec3195fc28a28945eab3ceef348c47fb95c7afc2eca2f3901209c8c", size = 354370, upload-time = "2026-09-11T19:04:36.158Z" }, + { url = "https://files.pythonhosted.org/packages/47/75/5a9942446647202beb7b4d150891bfcb78fb112c73862484bbe4cc031092/contourpy-1.4.0-cp315-cp315t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bee6ff96653e0807cd0f8eaef00174a031e3a2effa5c20f49a5a8d574b05af23", size = 402340, upload-time = "2026-09-11T19:04:37.914Z" }, + { url = "https://files.pythonhosted.org/packages/c3/4f/bfdb0c67775a584f957211936661289789c4d0ec3e988bca2c8c02f8090e/contourpy-1.4.0-cp315-cp315t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a58b5f130afec61a093d743cdda435cc4047748b6791627e34a68f41ec3a9b07", size = 410721, upload-time = "2026-09-11T19:04:39.925Z" }, + { url = "https://files.pythonhosted.org/packages/65/d3/dddf13d6bb26e145c99debd1f2695018b5f3e24452dd9bfc9904c9d2ec89/contourpy-1.4.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9dc493e7924e5aa32d89d0b8e50986280f3d4b284968a792787bd7bcffd3cad", size = 382604, upload-time = "2026-09-11T19:04:41.793Z" }, + { url = "https://files.pythonhosted.org/packages/37/b4/89f0a5f6c6ccd322eae2704c7e933c82a4e594a61773933b4b0a18646866/contourpy-1.4.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c927ec747633e68c9920bcaad48b0bcefe648812b822f18c34e2d0e2270a3d2a", size = 1354996, upload-time = "2026-09-11T19:04:43.856Z" }, + { url = "https://files.pythonhosted.org/packages/5d/29/fc91cc1ac6f3b591a269f4357b656d6ed0c39eb17c148f41f6da2f9729b9/contourpy-1.4.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:80c7fc8e7ac217777ce7ba2db3cf8478652b5a4b335283111012ff9eaac9d842", size = 1425030, upload-time = "2026-09-11T19:04:45.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/b8/bb129f524210c5d3eb8616876e02af280fba8b5554e0ac1afad80b51e06b/contourpy-1.4.0-cp315-cp315t-win32.whl", hash = "sha256:90feb8da006803a95ba573fddc9536357d0c3faddc3a4c9e22816ca49af52878", size = 371854, upload-time = "2026-09-11T19:04:48.106Z" }, + { url = "https://files.pythonhosted.org/packages/d8/b1/bc774d9d200cfc4f073bba78b1bb1cb3b55bf1c8c345eae41fc2db510459/contourpy-1.4.0-cp315-cp315t-win_amd64.whl", hash = "sha256:de503609fdb71f597634ca64fb4bd2f13d27c97f140e912b1e8ed93544840df0", size = 262450, upload-time = "2026-09-11T19:04:49.502Z" }, + { url = "https://files.pythonhosted.org/packages/54/bf/eb4ff492e1c3d027617b5a20e4e6d63a035b41b8cf77a95950159556a3a5/contourpy-1.4.0-cp315-cp315t-win_arm64.whl", hash = "sha256:78ed5c5f962b3e156109f0531b174a65ba80d13cc681a70227b12524c162e184", size = 587064, upload-time = "2026-09-11T19:04:51.148Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fonttools" +version = "4.60.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/c4/db6a7b5eb0656534c3aa2596c2c5e18830d74f1b9aa5aa8a7dff63a0b11d/fonttools-4.60.2.tar.gz", hash = "sha256:d29552e6b155ebfc685b0aecf8d429cb76c14ab734c22ef5d3dea6fdf800c92c", size = 3562254, upload-time = "2025-12-09T13:38:11.835Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/de/9e10a99fb3070accb8884886a41a4ce54e49bf2fa4fc63f48a6cf2061713/fonttools-4.60.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4e36fadcf7e8ca6e34d490eef86ed638d6fd9c55d2f514b05687622cfc4a7050", size = 2850403, upload-time = "2025-12-09T13:35:53.14Z" }, + { url = "https://files.pythonhosted.org/packages/e4/40/d5b369d1073b134f600a94a287e13b5bdea2191ba6347d813fa3da00e94a/fonttools-4.60.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6e500fc9c04bee749ceabfc20cb4903f6981c2139050d85720ea7ada61b75d5c", size = 2398629, upload-time = "2025-12-09T13:35:56.471Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b5/123819369aaf99d1e4dc49f1de1925d4edc7379114d15a56a7dd2e9d56e6/fonttools-4.60.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22efea5e784e1d1cd8d7b856c198e360a979383ebc6dea4604743b56da1cbc34", size = 4893471, upload-time = "2025-12-09T13:35:58.927Z" }, + { url = "https://files.pythonhosted.org/packages/24/29/f8f8acccb9716b899be4be45e9ce770d6aa76327573863e68448183091b0/fonttools-4.60.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:677aa92d84d335e4d301d8ba04afca6f575316bc647b6782cb0921943fcb6343", size = 4854686, upload-time = "2025-12-09T13:36:01.767Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0d/f3f51d7519f44f2dd5c9a60d7cd41185ebcee4348f073e515a3a93af15ff/fonttools-4.60.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:edd49d3defbf35476e78b61ff737ff5efea811acff68d44233a95a5a48252334", size = 4871233, upload-time = "2025-12-09T13:36:06.094Z" }, + { url = "https://files.pythonhosted.org/packages/cc/3f/4d4fd47d3bc40ab4d76718555185f8adffb5602ea572eac4bbf200c47d22/fonttools-4.60.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:126839492b69cecc5baf2bddcde60caab2ffafd867bbae2a88463fce6078ca3a", size = 4988936, upload-time = "2025-12-09T13:36:08.42Z" }, + { url = "https://files.pythonhosted.org/packages/01/6f/83bbdefa43f2c3ae206fd8c4b9a481f3c913eef871b1ce9a453069239e39/fonttools-4.60.2-cp310-cp310-win32.whl", hash = "sha256:ffcab6f5537136046ca902ed2491ab081ba271b07591b916289b7c27ff845f96", size = 2278044, upload-time = "2025-12-09T13:36:10.641Z" }, + { url = "https://files.pythonhosted.org/packages/d4/04/7d9a137e919d6c9ef26704b7f7b2580d9cfc5139597588227aacebc0e3b7/fonttools-4.60.2-cp310-cp310-win_amd64.whl", hash = "sha256:9c68b287c7ffcd29dd83b5f961004b2a54a862a88825d52ea219c6220309ba45", size = 2326522, upload-time = "2025-12-09T13:36:12.981Z" }, + { url = "https://files.pythonhosted.org/packages/e0/80/b7693d37c02417e162cc83cdd0b19a4f58be82c638b5d4ce4de2dae050c4/fonttools-4.60.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a2aed0a7931401b3875265717a24c726f87ecfedbb7b3426c2ca4d2812e281ae", size = 2847809, upload-time = "2025-12-09T13:36:14.884Z" }, + { url = "https://files.pythonhosted.org/packages/f9/9a/9c2c13bf8a6496ac21607d704e74e9cc68ebf23892cf924c9a8b5c7566b9/fonttools-4.60.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dea6868e9d2b816c9076cfea77754686f3c19149873bdbc5acde437631c15df1", size = 2397302, upload-time = "2025-12-09T13:36:17.151Z" }, + { url = "https://files.pythonhosted.org/packages/56/f6/ce38ff6b2d2d58f6fd981d32f3942365bfa30eadf2b47d93b2d48bf6097f/fonttools-4.60.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2fa27f34950aa1fe0f0b1abe25eed04770a3b3b34ad94e5ace82cc341589678a", size = 5054418, upload-time = "2025-12-09T13:36:19.062Z" }, + { url = "https://files.pythonhosted.org/packages/88/06/5353bea128ff39e857c31de3dd605725b4add956badae0b31bc9a50d4c8e/fonttools-4.60.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13a53d479d187b09bfaa4a35ffcbc334fc494ff355f0a587386099cb66674f1e", size = 5031652, upload-time = "2025-12-09T13:36:21.206Z" }, + { url = "https://files.pythonhosted.org/packages/71/05/ebca836437f6ebd57edd6428e7eff584e683ff0556ddb17d62e3b731f46c/fonttools-4.60.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fac5e921d3bd0ca3bb8517dced2784f0742bc8ca28579a68b139f04ea323a779", size = 5030321, upload-time = "2025-12-09T13:36:23.515Z" }, + { url = "https://files.pythonhosted.org/packages/57/f9/eb9d2a2ce30c99f840c1cc3940729a970923cf39d770caf88909d98d516b/fonttools-4.60.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:648f4f9186fd7f1f3cd57dbf00d67a583720d5011feca67a5e88b3a491952cfb", size = 5154255, upload-time = "2025-12-09T13:36:25.879Z" }, + { url = "https://files.pythonhosted.org/packages/08/a2/088b6ceba8272a9abb629d3c08f9c1e35e5ce42db0ccfe0c1f9f03e60d1d/fonttools-4.60.2-cp311-cp311-win32.whl", hash = "sha256:3274e15fad871bead5453d5ce02658f6d0c7bc7e7021e2a5b8b04e2f9e40da1a", size = 2276300, upload-time = "2025-12-09T13:36:27.772Z" }, + { url = "https://files.pythonhosted.org/packages/de/2f/8e4c3d908cc5dade7bb1316ce48589f6a24460c1056fd4b8db51f1fa309a/fonttools-4.60.2-cp311-cp311-win_amd64.whl", hash = "sha256:91d058d5a483a1525b367803abb69de0923fbd45e1f82ebd000f5c8aa65bc78e", size = 2327574, upload-time = "2025-12-09T13:36:30.89Z" }, + { url = "https://files.pythonhosted.org/packages/c0/30/530c9eddcd1c39219dc0aaede2b5a4c8ab80e0bb88d1b3ffc12944c4aac3/fonttools-4.60.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e0164b7609d2b5c5dd4e044b8085b7bd7ca7363ef8c269a4ab5b5d4885a426b2", size = 2847196, upload-time = "2025-12-09T13:36:33.262Z" }, + { url = "https://files.pythonhosted.org/packages/19/2f/4077a482836d5bbe3bc9dac1c004d02ee227cf04ed62b0a2dfc41d4f0dfd/fonttools-4.60.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1dd3d9574fc595c1e97faccae0f264dc88784ddf7fbf54c939528378bacc0033", size = 2395842, upload-time = "2025-12-09T13:36:35.47Z" }, + { url = "https://files.pythonhosted.org/packages/dd/05/aae5bb99c5398f8ed4a8b784f023fd9dd3568f0bd5d5b21e35b282550f11/fonttools-4.60.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:98d0719f1b11c2817307d2da2e94296a3b2a3503f8d6252a101dca3ee663b917", size = 4949713, upload-time = "2025-12-09T13:36:37.874Z" }, + { url = "https://files.pythonhosted.org/packages/b4/37/49067349fc78ff0efbf09fadefe80ddf41473ca8f8a25400e3770da38328/fonttools-4.60.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d3ea26957dd07209f207b4fff64c702efe5496de153a54d3b91007ec28904dd", size = 4999907, upload-time = "2025-12-09T13:36:39.853Z" }, + { url = "https://files.pythonhosted.org/packages/16/31/d0f11c758bd0db36b664c92a0f9dfdcc2d7313749aa7d6629805c6946f21/fonttools-4.60.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ee301273b0850f3a515299f212898f37421f42ff9adfc341702582ca5073c13", size = 4939717, upload-time = "2025-12-09T13:36:43.075Z" }, + { url = "https://files.pythonhosted.org/packages/d9/bc/1cff0d69522e561bf1b99bee7c3911c08c25e919584827c3454a64651ce9/fonttools-4.60.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c6eb4694cc3b9c03b7c01d65a9cf35b577f21aa6abdbeeb08d3114b842a58153", size = 5089205, upload-time = "2025-12-09T13:36:45.468Z" }, + { url = "https://files.pythonhosted.org/packages/05/e6/fb174f0069b7122e19828c551298bfd34fdf9480535d2a6ac2ed37afacd3/fonttools-4.60.2-cp312-cp312-win32.whl", hash = "sha256:57f07b616c69c244cc1a5a51072eeef07dddda5ebef9ca5c6e9cf6d59ae65b70", size = 2264674, upload-time = "2025-12-09T13:36:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/75/57/6552ffd6b582d3e6a9f01780c5275e6dfff1e70ca146101733aa1c12a129/fonttools-4.60.2-cp312-cp312-win_amd64.whl", hash = "sha256:310035802392f1fe5a7cf43d76f6ff4a24c919e4c72c0352e7b8176e2584b8a0", size = 2314701, upload-time = "2025-12-09T13:36:51.09Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e4/8381d0ca6b6c6c484660b03517ec5b5b81feeefca3808726dece36c652a9/fonttools-4.60.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2bb5fd231e56ccd7403212636dcccffc96c5ae0d6f9e4721fa0a32cb2e3ca432", size = 2842063, upload-time = "2025-12-09T13:36:53.468Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2c/4367117ee8ff4f4374787a1222da0bd413d80cf3522111f727a7b8f80d1d/fonttools-4.60.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:536b5fab7b6fec78ccf59b5c59489189d9d0a8b0d3a77ed1858be59afb096696", size = 2393792, upload-time = "2025-12-09T13:36:55.742Z" }, + { url = "https://files.pythonhosted.org/packages/49/b7/a76b6dffa193869e54e32ca2f9abb0d0e66784bc8a24e6f86eb093015481/fonttools-4.60.2-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6b9288fc38252ac86a9570f19313ecbc9ff678982e0f27c757a85f1f284d3400", size = 4924020, upload-time = "2025-12-09T13:36:58.229Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4e/0078200e2259f0061c86a74075f507d64c43dd2ab38971956a5c0012d344/fonttools-4.60.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93fcb420791d839ef592eada2b69997c445d0ce9c969b5190f2e16828ec10607", size = 4980070, upload-time = "2025-12-09T13:37:00.311Z" }, + { url = "https://files.pythonhosted.org/packages/85/1f/d87c85a11cb84852c975251581862681e4a0c1c3bd456c648792203f311b/fonttools-4.60.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7916a381b094db4052ac284255186aebf74c5440248b78860cb41e300036f598", size = 4921411, upload-time = "2025-12-09T13:37:02.345Z" }, + { url = "https://files.pythonhosted.org/packages/75/c0/7efad650f5ed8e317c2633133ef3c64917e7adf2e4e2940c798f5d57ec6e/fonttools-4.60.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58c8c393d5e16b15662cfc2d988491940458aa87894c662154f50c7b49440bef", size = 5063465, upload-time = "2025-12-09T13:37:04.836Z" }, + { url = "https://files.pythonhosted.org/packages/18/a8/750518c4f8cdd79393b386bc81226047ade80239e58c6c9f5dbe1fdd8ea1/fonttools-4.60.2-cp313-cp313-win32.whl", hash = "sha256:19c6e0afd8b02008caa0aa08ab896dfce5d0bcb510c49b2c499541d5cb95a963", size = 2263443, upload-time = "2025-12-09T13:37:06.762Z" }, + { url = "https://files.pythonhosted.org/packages/b8/22/026c60376f165981f80a0e90bd98a79ae3334e9d89a3d046c4d2e265c724/fonttools-4.60.2-cp313-cp313-win_amd64.whl", hash = "sha256:6a500dc59e11b2338c2dba1f8cf11a4ae8be35ec24af8b2628b8759a61457b76", size = 2313800, upload-time = "2025-12-09T13:37:08.713Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ab/7cf1f5204e1366ddf9dc5cdc2789b571feb9eebcee0e3463c3f457df5f52/fonttools-4.60.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9387c532acbe323bbf2a920f132bce3c408a609d5f9dcfc6532fbc7e37f8ccbb", size = 2841690, upload-time = "2025-12-09T13:37:10.696Z" }, + { url = "https://files.pythonhosted.org/packages/00/3c/0bf83c6f863cc8b934952567fa2bf737cfcec8fc4ffb59b3f93820095f89/fonttools-4.60.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e6f1c824185b5b8fb681297f315f26ae55abb0d560c2579242feea8236b1cfef", size = 2392191, upload-time = "2025-12-09T13:37:12.954Z" }, + { url = "https://files.pythonhosted.org/packages/00/f0/40090d148b8907fbea12e9bdf1ff149f30cdf1769e3b2c3e0dbf5106b88d/fonttools-4.60.2-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:55a3129d1e4030b1a30260f1b32fe76781b585fb2111d04a988e141c09eb6403", size = 4873503, upload-time = "2025-12-09T13:37:15.142Z" }, + { url = "https://files.pythonhosted.org/packages/dc/e0/d8b13f99e58b8c293781288ba62fe634f1f0697c9c4c0ae104d3215f3a10/fonttools-4.60.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b196e63753abc33b3b97a6fd6de4b7c4fef5552c0a5ba5e562be214d1e9668e0", size = 4968493, upload-time = "2025-12-09T13:37:18.272Z" }, + { url = "https://files.pythonhosted.org/packages/46/c5/960764d12c92bc225f02401d3067048cb7b282293d9e48e39fe2b0ec38a9/fonttools-4.60.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de76c8d740fb55745f3b154f0470c56db92ae3be27af8ad6c2e88f1458260c9a", size = 4920015, upload-time = "2025-12-09T13:37:20.334Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ab/839d8caf253d1eef3653ef4d34427d0326d17a53efaec9eb04056b670fff/fonttools-4.60.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ba6303225c95998c9fda2d410aa792c3d2c1390a09df58d194b03e17583fa25", size = 5031165, upload-time = "2025-12-09T13:37:23.57Z" }, + { url = "https://files.pythonhosted.org/packages/de/bf/3bc862796a6841cbe0725bb5512d272239b809dba631a4b0301df885e62d/fonttools-4.60.2-cp314-cp314-win32.whl", hash = "sha256:0a89728ce10d7c816fedaa5380c06d2793e7a8a634d7ce16810e536c22047384", size = 2267526, upload-time = "2025-12-09T13:37:25.821Z" }, + { url = "https://files.pythonhosted.org/packages/fc/a1/c1909cacf00c76dc37b4743451561fbaaf7db4172c22a6d9394081d114c3/fonttools-4.60.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa8446e6ab8bd778b82cb1077058a2addba86f30de27ab9cc18ed32b34bc8667", size = 2319096, upload-time = "2025-12-09T13:37:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/29/b3/f66e71433f08e3a931b2b31a665aeed17fcc5e6911fc73529c70a232e421/fonttools-4.60.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4063bc81ac5a4137642865cb63dd270e37b3cd1f55a07c0d6e41d072699ccca2", size = 2925167, upload-time = "2025-12-09T13:37:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/2e/13/eeb491ff743594bbd0bee6e49422c03a59fe9c49002d3cc60eeb77414285/fonttools-4.60.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ebfdb66fa69732ed604ab8e2a0431e6deff35e933a11d73418cbc7823d03b8e1", size = 2430923, upload-time = "2025-12-09T13:37:32.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/db609f785e460796e53c4dbc3874a5f4948477f27beceb5e2d24b2537666/fonttools-4.60.2-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50b10b3b1a72d1d54c61b0e59239e1a94c0958f4a06a1febf97ce75388dd91a4", size = 4877729, upload-time = "2025-12-09T13:37:35.858Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d6/85e4484dd4bfb03fee7bd370d65888cccbd3dee2681ee48c869dd5ccb23f/fonttools-4.60.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:beae16891a13b4a2ddec9b39b4de76092a3025e4d1c82362e3042b62295d5e4d", size = 5096003, upload-time = "2025-12-09T13:37:37.862Z" }, + { url = "https://files.pythonhosted.org/packages/30/49/1a98e44b71030b83d2046f981373b80571868259d98e6dae7bc20099dac6/fonttools-4.60.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:522f017fdb3766fd5d2d321774ef351cc6ce88ad4e6ac9efe643e4a2b9d528db", size = 4974410, upload-time = "2025-12-09T13:37:40.166Z" }, + { url = "https://files.pythonhosted.org/packages/42/07/d6f775d950ee8a841012472c7303f8819423d8cc3b4530915de7265ebfa2/fonttools-4.60.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:82cceceaf9c09a965a75b84a4b240dd3768e596ffb65ef53852681606fe7c9ba", size = 5002036, upload-time = "2025-12-09T13:37:42.639Z" }, + { url = "https://files.pythonhosted.org/packages/73/f6/ba6458f83ce1a9f8c3b17bd8f7b8a2205a126aac1055796b7e7cfebbd38f/fonttools-4.60.2-cp314-cp314t-win32.whl", hash = "sha256:bbfbc918a75437fe7e6d64d1b1e1f713237df1cf00f3a36dedae910b2ba01cee", size = 2330985, upload-time = "2025-12-09T13:37:45.157Z" }, + { url = "https://files.pythonhosted.org/packages/91/24/fea0ba4d3a32d4ed1103a1098bfd99dc78b5fe3bb97202920744a37b73dc/fonttools-4.60.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0e5cd9b0830f6550d58c84f3ab151a9892b50c4f9d538c5603c0ce6fff2eb3f1", size = 2396226, upload-time = "2025-12-09T13:37:47.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/ae/a6d9446cb258d3fe87e311c2d7bacf8e8da3e5809fbdc3a8306db4f6b14e/fonttools-4.60.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3c75b8b42f7f93906bdba9eb1197bb76aecbe9a0a7cf6feec75f7605b5e8008", size = 2857184, upload-time = "2025-12-09T13:37:49.96Z" }, + { url = "https://files.pythonhosted.org/packages/3a/f3/1b41d0b6a8b908aa07f652111155dd653ebbf0b3385e66562556c5206685/fonttools-4.60.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0f86c8c37bc0ec0b9c141d5e90c717ff614e93c187f06d80f18c7057097f71bc", size = 2401877, upload-time = "2025-12-09T13:37:52.307Z" }, + { url = "https://files.pythonhosted.org/packages/71/57/048fd781680c38b05c5463657d0d95d5f2391a51972176e175c01de29d42/fonttools-4.60.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe905403fe59683b0e9a45f234af2866834376b8821f34633b1c76fb731b6311", size = 4878073, upload-time = "2025-12-09T13:37:56.477Z" }, + { url = "https://files.pythonhosted.org/packages/45/bb/363364f052a893cebd3d449588b21244a9d873620fda03ad92702d2e1bc7/fonttools-4.60.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38ce703b60a906e421e12d9e3a7f064883f5e61bb23e8961f4be33cfe578500b", size = 4835385, upload-time = "2025-12-09T13:37:58.882Z" }, + { url = "https://files.pythonhosted.org/packages/1c/38/e392bb930b2436287e6021672345db26441bf1f85f1e98f8b9784334e41d/fonttools-4.60.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9e810c06f3e79185cecf120e58b343ea5a89b54dd695fd644446bcf8c026da5e", size = 4853084, upload-time = "2025-12-09T13:38:01.578Z" }, + { url = "https://files.pythonhosted.org/packages/65/60/0d77faeaecf7a3276a8a6dc49e2274357e6b3ed6a1774e2fdb2a7f142db0/fonttools-4.60.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:38faec8cc1d12122599814d15a402183f5123fb7608dac956121e7c6742aebc5", size = 4971144, upload-time = "2025-12-09T13:38:03.748Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c7/6d3ac3afbcd598631bce24c3ecb919e7d0644a82fea8ddc4454312fc0be6/fonttools-4.60.2-cp39-cp39-win32.whl", hash = "sha256:80a45cf7bf659acb7b36578f300231873daba67bd3ca8cce181c73f861f14a37", size = 1499411, upload-time = "2025-12-09T13:38:05.586Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1c/9dedf6420e23f9fa630bb97941839dddd2e1e57d1b2b85a902378dbe0bd2/fonttools-4.60.2-cp39-cp39-win_amd64.whl", hash = "sha256:c355d5972071938e1b1e0f5a1df001f68ecf1a62f34a3407dc8e0beccf052501", size = 1547943, upload-time = "2025-12-09T13:38:07.604Z" }, + { url = "https://files.pythonhosted.org/packages/79/6c/10280af05b44fafd1dff69422805061fa1af29270bc52dce031ac69540bf/fonttools-4.60.2-py3-none-any.whl", hash = "sha256:73cf92eeda67cf6ff10c8af56fc8f4f07c1647d989a979be9e388a49be26552a", size = 1144610, upload-time = "2025-12-09T13:38:09.5Z" }, +] + +[[package]] +name = "fonttools" +version = "4.65.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/77/51/d63c7e52163ac14393a35bd14bd7c0da95f8f74be5d7cc988092f9965129/fonttools-4.65.0.tar.gz", hash = "sha256:762ba5431358d0dbd4a01982484a1d494fb267e91f974cdcf20b80eab8560f6f", size = 3674467, upload-time = "2026-09-10T15:35:54.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/d9/1caaa015dd207da7ccd3feba87289997bd88334ea3e74a367cdc7b0e50a3/fonttools-4.65.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93a73af2075036d36d7fbf856779c56a1b3b86ffcdae6abede7596604c42c156", size = 3095449, upload-time = "2026-09-10T15:33:04.814Z" }, + { url = "https://files.pythonhosted.org/packages/20/d6/988cd9b33ae2d92b15a51d73eb77c991f7a0fe90a7bc74526e9669247789/fonttools-4.65.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c130be2232e3caf8d2b476854ea78421ec1642917ff5ab695284bac31bbb072b", size = 2587697, upload-time = "2026-09-10T15:33:07.653Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6a/36f465a1c277131f9569f6a56fe99cf135391b4860b9c4f4b23e5b1cd5df/fonttools-4.65.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3944e0bdba42effb71959e43d91b599326b02b59c78310d5675e8a75525e7d8", size = 5313308, upload-time = "2026-09-10T15:33:09.975Z" }, + { url = "https://files.pythonhosted.org/packages/ee/56/151b5e81d20c63834f48ad37a0cbbbe2f9b248e38f8d10387f0cf5219244/fonttools-4.65.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb53892b570f7f1f0055e75fc4de32673e32f749c4c8a606b63d5c436650e634", size = 5253649, upload-time = "2026-09-10T15:33:12.225Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/6389215da9d4f98623aacdca9479c1030bbd516cb658e893bc54b61098ce/fonttools-4.65.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a6c8d184e523580a7c55d21cde37176a3c91cb539cf06c2aa36ffc634fd75296", size = 5277745, upload-time = "2026-09-10T15:33:14.783Z" }, + { url = "https://files.pythonhosted.org/packages/89/e3/c1037a1dfb7c8efe6f2a7d1951ebdde40cbbf82e9c5d796fcb03077e4790/fonttools-4.65.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e5ceccaf2e57d83b753a2b5db5d94aa0a8071886d4afebd2d520c9683e6bef0e", size = 5413259, upload-time = "2026-09-10T15:33:17.619Z" }, + { url = "https://files.pythonhosted.org/packages/44/b9/7dd72330168d39635c329f23a98279393b1e825e42a6db362e09897aad7b/fonttools-4.65.0-cp310-cp310-win32.whl", hash = "sha256:aff640a4fcb021fa83f9879d5bfa115b6931522dae991a24faa75888bd6aeff6", size = 1577124, upload-time = "2026-09-10T15:33:19.864Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c2/e959385b4626989b25b82b9f4f99e7c3ac68377d6846b376239b6f126966/fonttools-4.65.0-cp310-cp310-win_amd64.whl", hash = "sha256:5c1700a60e4ff23a0425d5a64abf43d092e6b55071354825781faf255904dcb4", size = 1633354, upload-time = "2026-09-10T15:33:21.963Z" }, + { url = "https://files.pythonhosted.org/packages/62/9e/58250cdc54d96fcfacb544e12997a6390fa4e6b71ae2241cfcfe5b341803/fonttools-4.65.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:06273c71e692caf5989c0437ca50875a5e49e216ddf653228fe9bb35bdc82c0f", size = 3089141, upload-time = "2026-09-10T15:33:24.509Z" }, + { url = "https://files.pythonhosted.org/packages/3e/67/0f0416069e38da0a1327a847a2e8dd1edb425d0043d8a3e63eb940070209/fonttools-4.65.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ca2b02d74e9ad7e21a1d11e4701425800a4b0c63cf90486e60258262feccbcbf", size = 2584298, upload-time = "2026-09-10T15:33:26.598Z" }, + { url = "https://files.pythonhosted.org/packages/99/0d/7e40e9957359afc0bab081131c215370a6d2d203361bb6f945ab595e924c/fonttools-4.65.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7830e9fa3bebc44dbc27ff44d8201def30ea5c48a773696d58e69e6bcd9cd5d4", size = 5498163, upload-time = "2026-09-10T15:33:29.071Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e6/e48cf0a272a5d4d17a09d44f92727e67f975ddfa94acc8464763d19a654d/fonttools-4.65.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3991732c87b3f054a2a8cf86dd0d602833fa8cb37c911503173771646e1013d", size = 5457456, upload-time = "2026-09-10T15:33:31.918Z" }, + { url = "https://files.pythonhosted.org/packages/e4/8a/a5c67ddeda82ee5e4ec3bc52ac1cbb685f0bb7a0516badc55643b454ab0d/fonttools-4.65.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6031e77b3fb8c765055ba2b8bd8dcb17030f3bf2484c448b472fdedf4460ba80", size = 5464334, upload-time = "2026-09-10T15:33:34.605Z" }, + { url = "https://files.pythonhosted.org/packages/d7/16/294e77383b2d39c9f8f25144a7ba23fe1cbbc05227cc72545097785ff07c/fonttools-4.65.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6813cc1e2e883bd6c15b3e04f72c78dc65fdc4ca861063adf5f341fbaec2ca62", size = 5595597, upload-time = "2026-09-10T15:33:37.591Z" }, + { url = "https://files.pythonhosted.org/packages/80/01/8e74ce8626c734959c782f2d89af8e9f14d078fd3d4ddf8b5a51401ae475/fonttools-4.65.0-cp311-cp311-win32.whl", hash = "sha256:4a5db8442453da4b6f43ad325879381b726bf2238a2253efd9584be21a2cefc2", size = 2441114, upload-time = "2026-09-10T15:33:40.592Z" }, + { url = "https://files.pythonhosted.org/packages/37/3e/835dc6c658426e2670b7f38c38295492fcbaeb06080e9dce89ce8105993c/fonttools-4.65.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f201796c8e24e657be77c16fa664e798a46122144217f90838982937a964f0a", size = 2498823, upload-time = "2026-09-10T15:33:43.402Z" }, + { url = "https://files.pythonhosted.org/packages/58/db/242fa4fce7f632c5f7ab15585343393b25792510c0c32bd218ad24d59f1c/fonttools-4.65.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e844a45c9e5ced6536f184cf1a65b5d65e8f7e711993b413e10500a8223622e5", size = 3097120, upload-time = "2026-09-10T15:33:46Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b6/42fa4d373416675f74446421cf0b2badb82a4245c60745f05f424f75c649/fonttools-4.65.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b30e953de049bf43fc0a63c7d0c44d205c923e4bbf24716aae1518c0e65f977c", size = 2584658, upload-time = "2026-09-10T15:33:48.473Z" }, + { url = "https://files.pythonhosted.org/packages/75/6f/d589b9d62280a846c77a2c383d852c6dcb79ae8aa02bf0fa46c8577af145/fonttools-4.65.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09c34bdeed8915bfb53bee0c8ed2254dbd8ec69c0014b7f3702f347c049bf358", size = 5425737, upload-time = "2026-09-10T15:33:51.473Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/de2c0c20a42c18e565a2617932beb08c06697bbdd0d3f62b108262e11583/fonttools-4.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:05595385ae99f4b9626cebb973bf171b8fe38a8f40708e6e42abba0ed7537778", size = 5402463, upload-time = "2026-09-10T15:33:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/2e/bc0f5c9dce21821454bb5812d3b23410bca33c8bbd5468386d0327aa0cff/fonttools-4.65.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d95b34dd68fbfc0e4a1740c421597656117f979ed8dc85de66e08f9f9981806e", size = 5362168, upload-time = "2026-09-10T15:33:57.481Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0d/2116763ade7e71e0e5d421babe1785d745be9b3d605bf914792ce1c97f79/fonttools-4.65.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:924d06e6130429168318db71c40174a765ad016fc4b56ca811287e3d7373b3a6", size = 5524117, upload-time = "2026-09-10T15:34:00.021Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5e/f9600553b9f645e3068553831685ff1dab6259536a23b38d2e048de38f17/fonttools-4.65.0-cp312-cp312-win32.whl", hash = "sha256:04f73dd01005752a6e75cf4a8dc6b70dc724d1d4bc34cc89522153f4a2f07680", size = 2432089, upload-time = "2026-09-10T15:34:02.803Z" }, + { url = "https://files.pythonhosted.org/packages/3a/02/e436a6a1863b9862bab9f82d6da33055dd7aa3738017edd902a163525dc2/fonttools-4.65.0-cp312-cp312-win_amd64.whl", hash = "sha256:3b5d9ba89edf778b376e669b879ae33a198bf45cf5a23c3f6514f935cf9d0d9d", size = 2483475, upload-time = "2026-09-10T15:34:05.09Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5c/343a4225e83eb06f82c1d8bf41fc5e5f71eab2f62bc7ca215c764722c0a9/fonttools-4.65.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8b7bb52817a24731d2e4f4df0e71fdde05e6c806c8f8f1517b015d142fdacfa5", size = 3094663, upload-time = "2026-09-10T15:34:07.235Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c9/49b2401be932741d9218181c08948c96db32eab21ecaaf79283b752e13e7/fonttools-4.65.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e2c21772fcf70325189707b19f346812690bb1b0bd7e207e6ac205244806b303", size = 2584521, upload-time = "2026-09-10T15:34:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/51/c9/48b07e6c5cf44fa56f758a04c3772a66c0e9ba82bbe22077e4076746a62b/fonttools-4.65.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c9b26816415b5e3d899e9077109d327b22140fe3c4066644d8cdbad5bb1569", size = 5395399, upload-time = "2026-09-10T15:34:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2d/5cc5a10c8ed56079d6c2e9e3e5920622529a2ae045c9f47a6055ccb1a319/fonttools-4.65.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6dd6243f60e2d6160c2966e1e14020dc261ffd741b69a2e4ca8bfd051592e4b7", size = 5376659, upload-time = "2026-09-10T15:34:15.239Z" }, + { url = "https://files.pythonhosted.org/packages/ab/6f/ccf33739d936bb3afa1655a225be7ee5d63d6d3c8b7d0e570bc5a2a7b899/fonttools-4.65.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:834962fd7cf21c58e81ac50a59e6ed2306f9df5e3dd481dad1cd7d2c4c60b773", size = 5336795, upload-time = "2026-09-10T15:34:17.817Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c1/ffd17483f2094f0f4118974295b514b5b82afd4f6e3c80c23f01684e97a6/fonttools-4.65.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:580eb68ff7bd6954a7a76afddd864bfc66eaaf5f5c20dd6ead9186d0055a4ffe", size = 5496530, upload-time = "2026-09-10T15:34:20.241Z" }, + { url = "https://files.pythonhosted.org/packages/b1/19/9aca7712d0676ba5f8d1530ce20478a9bb09cccd0153d56693337379cdcf/fonttools-4.65.0-cp313-cp313-win32.whl", hash = "sha256:7a18b2ffd44249fe84289253197aa65ad4f2de554c0d381f18b1f5939bc6bc60", size = 2430392, upload-time = "2026-09-10T15:34:22.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6f/f015dea0f4354e0798751b657cea2dee482914737f88bf1a078349ce92cf/fonttools-4.65.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ae1846b0f192fd485d26a455af19b8f5cf05aff08f9836f533913d8fcea133c", size = 2481620, upload-time = "2026-09-10T15:34:25.816Z" }, + { url = "https://files.pythonhosted.org/packages/64/29/606365ef601668bfebed14cfe3dc72bb7fcd1e23011bbb2833f17fea3065/fonttools-4.65.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:dc87a9f846bec83c3795804f62b4632716d46e3522869a3dd9cd44a5d245b006", size = 3098393, upload-time = "2026-09-10T15:34:28.472Z" }, + { url = "https://files.pythonhosted.org/packages/c7/61/11412939d6b7abf5ac7ce0d61d7f94a0a4fbabc9f1ab0a04fa622e0fc11c/fonttools-4.65.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa50dd7b9baf75e2bbd43401fc0d237f7a94a8ad2e0c57ea97160fc631af5eb0", size = 2585766, upload-time = "2026-09-10T15:34:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/db/17/734921d8aee8309801da42590375d32d4d46f771b73373ec9520d5d4220b/fonttools-4.65.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d2a9892fdb3b7e2d0f4174e3b907d226ff83698249762eeefce08ec5b2de1dd", size = 5380679, upload-time = "2026-09-10T15:34:33.933Z" }, + { url = "https://files.pythonhosted.org/packages/cf/eb/2a4d78d60d978e694cfa04c98e4d8ddbf7f028fd768ddef470bb9da5d69e/fonttools-4.65.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d815734e7fede0ad1f233f23f0f191cbe8fc64762ff041e589bc0f78e0b2397", size = 5321833, upload-time = "2026-09-10T15:34:36.295Z" }, + { url = "https://files.pythonhosted.org/packages/d9/ca/1cd48b5c11ef9658732787bf2362e1bf3871dad5945d2f6cc8f675ca769c/fonttools-4.65.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:71e4c67b6196a2f447f46476fd2302604721617f5e0a21b0988bdd87b6bb9687", size = 5320938, upload-time = "2026-09-10T15:34:38.992Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0d/90e6051bded926cccabe9dd0bce3b6ca012f4d5779d61167afbf4989ceb6/fonttools-4.65.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b11d8a4a0c3ca74bbd4c105b7ef82501945c939e6096d9934ec7d288cdf5aaa9", size = 5451747, upload-time = "2026-09-10T15:34:41.387Z" }, + { url = "https://files.pythonhosted.org/packages/18/74/23e0268e48029ff0752083f69312c49b738163d5af919add9dc4ac81e907/fonttools-4.65.0-cp314-cp314-win32.whl", hash = "sha256:8e44a34d91b3c793879767eb115867ced74d2eb94974e64e72fe9e2eea71cf1a", size = 2434246, upload-time = "2026-09-10T15:34:44.385Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2d/ee69affecd4bc81cb932a213438d4199fb48bf8ca6d664438ccc7f623c2a/fonttools-4.65.0-cp314-cp314-win_amd64.whl", hash = "sha256:0aa8901db22875c831d6a91796549590d7e747da37438f38b69d771b668be445", size = 2486706, upload-time = "2026-09-10T15:34:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/8e/9c/edee5f785198ce3327e1ddeace91c773122d47f086a67e0a84b800f4a940/fonttools-4.65.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:2e4a380ca40d3a5372e31b340f0da0d53b4583aadbb8e41f6a516afa69c509a4", size = 3172027, upload-time = "2026-09-10T15:34:49.269Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c6/252ec9884381089bc30da75978b072593920249de60219817f16cbc9145f/fonttools-4.65.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:661bd91c4be13721408b2d4b67a9b3fa7736713adc9a6c9780c9c60fc7959f90", size = 2619020, upload-time = "2026-09-10T15:34:51.453Z" }, + { url = "https://files.pythonhosted.org/packages/42/79/f71b0d202b8473bb45b07876c08a474de9fe560ed2c0cde642812a81e22a/fonttools-4.65.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62c5e42c79449def957adf8a9a65a43018efa7e2a6bc6baa3afe955e0d5fb2ab", size = 5545942, upload-time = "2026-09-10T15:34:54.804Z" }, + { url = "https://files.pythonhosted.org/packages/4a/bd/52e1bf33e0aebfe22ecc9a85c634db707c1dd9f6b1b438efeed98c55b959/fonttools-4.65.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:36fca8efc46b5adfca327c666e739fc05b7a7a6ef17840230f81b22f53230f61", size = 5351477, upload-time = "2026-09-10T15:34:57.514Z" }, + { url = "https://files.pythonhosted.org/packages/5c/76/8c6b2ad20beec95cd446f3a8bdc753c7e4a4fd69ef3e66704c0f7c8cb0b5/fonttools-4.65.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8aa1291e4c767abf1b0b79ca2d6895f7c0b661d9d95d03b5791c883a9d1e1f08", size = 5412271, upload-time = "2026-09-10T15:35:00.895Z" }, + { url = "https://files.pythonhosted.org/packages/79/49/fadbf11bbbd2d699d88a5498a0634280206e01e3bd5da9a4e0c504953ce9/fonttools-4.65.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fcf39949f56911348514b466714efa9118bec3d2be249e1c487263f7cda6edab", size = 5446450, upload-time = "2026-09-10T15:35:03.369Z" }, + { url = "https://files.pythonhosted.org/packages/df/77/5fda646d3a6d5ee26465865c00319cc0925cf484a3b42dd8232d5b39f973/fonttools-4.65.0-cp314-cp314t-win32.whl", hash = "sha256:ffc918702661f1d74d2fbb2f5551036b64f6d2d743139e105289b694bcd16f54", size = 2467858, upload-time = "2026-09-10T15:35:05.744Z" }, + { url = "https://files.pythonhosted.org/packages/ae/0f/afa0f3de70ebe02bba46b32cccb30b1de52624472b14ac2e7cd403d08db9/fonttools-4.65.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5a977e3645dbffaee924209828aa702a215f7ff68bc08010740c10c723787e62", size = 2518248, upload-time = "2026-09-10T15:35:07.846Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/b273cf5712b36a381c13284fbf244e811e1e1d7081aed20f200f0a191ffa/fonttools-4.65.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:7aa0518b45ff5286ad56f063938db3add3816e899aab58d782b3f9a252523caa", size = 3092770, upload-time = "2026-09-10T15:35:10.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/1d/d3e4511475954d4ec4f3c254e81f0fcc1ade504cb7381eeca48b8c44b8a6/fonttools-4.65.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:673e2b3ac4ac8e4f3607d390ecc5a606e5db5c4e88fb4cb2999593efb65afea2", size = 2584364, upload-time = "2026-09-10T15:35:13.54Z" }, + { url = "https://files.pythonhosted.org/packages/e5/3f/7cfaba467bdd1d3d04be21ba7b5bd75c6ca58ba280e0519707ca96a43c4d/fonttools-4.65.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a03cff943b204a90bf3d1c04c97b9509a8aa0ee99e2e544084ca43ad995975b", size = 5377819, upload-time = "2026-09-10T15:35:15.839Z" }, + { url = "https://files.pythonhosted.org/packages/25/17/a68d9b19a97bb2ee37e8098fea50657073df97c7e5392afbe1b9d7c0c581/fonttools-4.65.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:41f684ee6212e411196ab054f8308faf6605f154950e6f4686fb8f2103d624b0", size = 5341296, upload-time = "2026-09-10T15:35:18.527Z" }, + { url = "https://files.pythonhosted.org/packages/ad/8d/d744653ed607a241339015d4af6743ca3d85a74a2045a02cc06ea0383c71/fonttools-4.65.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:52ea9d2a8385075770db74d5e5718fa80b2222bb4fc62856a377dd2865ca8848", size = 5315310, upload-time = "2026-09-10T15:35:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c8/1ca6dc69cbaa0e394ff70d9e266777124d3ce3c6433026a6b4de50b890ae/fonttools-4.65.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:d0d25027ade65ec46b13c0436e51bcb7c5171a4ea255a5e7a8d0d1d3ab4cffd7", size = 5463840, upload-time = "2026-09-10T15:35:24.022Z" }, + { url = "https://files.pythonhosted.org/packages/07/97/d374df38a14f2ac04ba9ed96bca89d4988e7d63aa5ed85c54fd8f2badd7d/fonttools-4.65.0-cp315-cp315-win32.whl", hash = "sha256:22cb846d35d278235ef3b7e947c6040b2057d72e8305a314f21d5342eca49040", size = 2433149, upload-time = "2026-09-10T15:35:26.59Z" }, + { url = "https://files.pythonhosted.org/packages/62/c5/eb8f7506faf6a70c5a8f2eccbeea3cd826c748a6fd78c7b4b3effb5a3a11/fonttools-4.65.0-cp315-cp315-win_amd64.whl", hash = "sha256:aecc899fdbf9ecbf728f8977977e2e1043ee4d70c257124c8fa4cbcf796fcd83", size = 2485725, upload-time = "2026-09-10T15:35:28.945Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/2df0d97514feb8d857d5de854cd8d660d9a7ee1fd081bc98497124f515a8/fonttools-4.65.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:6275863dad195ee34b6e0ca3fc61c74096bc37e5d6fb8e049f4d68d65865a2b7", size = 3164065, upload-time = "2026-09-10T15:35:31.197Z" }, + { url = "https://files.pythonhosted.org/packages/15/33/e09661c09e6c8a3b0bd50da0e72918df7576dede31f39c948cc245011434/fonttools-4.65.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:d8ffd2f62b402180b0edae8f86a071f583970e2177143117db5cf4c52da60079", size = 2615195, upload-time = "2026-09-10T15:35:33.569Z" }, + { url = "https://files.pythonhosted.org/packages/64/d7/114b05f4193679d0935272220083ec43de7f918b5a777018c5ac5c1ae39e/fonttools-4.65.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:830f91327ca83bfc1278e7060068a498938f84d05dc4869675486f84f55d4fe1", size = 5521239, upload-time = "2026-09-10T15:35:36.291Z" }, + { url = "https://files.pythonhosted.org/packages/ba/10/67d615939f859ffe75663a67bca3593966febbcd0109ec72f20f73cbb4cc/fonttools-4.65.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9db2cb95847c18eef74a4ef0fe257a893ae3f4b0395f4866e2f426ab07f3d804", size = 5343802, upload-time = "2026-09-10T15:35:38.82Z" }, + { url = "https://files.pythonhosted.org/packages/d1/06/faa793a806da03acce862fbed353f76026b28103d43860d69be9a6a1f0fd/fonttools-4.65.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:be9b9a95ed0af03375e99020e921c4bc6b41fad10e053dea7acad370521a3c46", size = 5388482, upload-time = "2026-09-10T15:35:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/53/d2/eb7258df60e634db60c9a8cd72bc9eaf8dea409d1b1ceec3b9fb49531ad2/fonttools-4.65.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:bbd9faf777a9deb6790df4f2b0be611857c45fe86605e840d7154a028d828af7", size = 5435088, upload-time = "2026-09-10T15:35:44.639Z" }, + { url = "https://files.pythonhosted.org/packages/00/6a/58597f16e1265fe9205de3069e338a339e3eef0b1daf049ee08269458091/fonttools-4.65.0-cp315-cp315t-win32.whl", hash = "sha256:c779d838815b91889c95ed64c9be5950ad5a683279f91aeb23384cb757ddc6a3", size = 2464925, upload-time = "2026-09-10T15:35:47.224Z" }, + { url = "https://files.pythonhosted.org/packages/4b/95/122fc172006db747f4968e08c710f52a94f55eb007173b859b3f80b5b810/fonttools-4.65.0-cp315-cp315t-win_amd64.whl", hash = "sha256:d9484b7ee1b49b6b8a0231c849f3983723dec29e3a7366d9b1b02f4036f71944", size = 2513945, upload-time = "2026-09-10T15:35:49.895Z" }, + { url = "https://files.pythonhosted.org/packages/e6/35/f894ceb867118c0261d0f69a9bd516b045a3754238f76c88a49513ac7a83/fonttools-4.65.0-py3-none-any.whl", hash = "sha256:3060b8c1fc2329fa20265b7c138614143ea7c1624e26c5c180c76aeb74deae6f", size = 1196441, upload-time = "2026-09-10T15:35:52.347Z" }, +] + +[[package]] +name = "fonttools" +version = "4.66.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/87/b6/126c659ab7e0e03e01a5f5d223abf7b2c0691ae92718085a212a3924a2a3/fonttools-4.66.1.tar.gz", hash = "sha256:64967c6ddb0d4c610dfd8cb1485981b2d27972ddfb7d4bbbd9e199d2a089c450", size = 3694174, upload-time = "2026-09-29T16:11:53.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/2e/2c6d3daaa5152bbb2fc2b44037399366af7eb5fb2fbf7d9a236813753f77/fonttools-4.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d4f76868aea9cc4ce47fdbeaa904c02ee7d85dd0ad095071ae77f0bda6e62cf5", size = 3089406, upload-time = "2026-09-29T16:09:50.871Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1c/500fbc0fd5b6d9cb701c1107a6f38ec4d3319057681e520014c1b9beb009/fonttools-4.66.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34378db9a398b59de18cc79d942f0a907c6fc6301945e065ec888202f607aa3f", size = 2586728, upload-time = "2026-09-29T16:09:53.654Z" }, + { url = "https://files.pythonhosted.org/packages/38/f2/f3ac6374058bc93bd8a685c4849815b598bbd5e3ec5f706f3f4944a060e1/fonttools-4.66.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05c0fff6b4a5d872ed89cab2c4f81060b86ace263903eb4e8d0edcac47a60dfa", size = 5484428, upload-time = "2026-09-29T16:09:55.987Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e0/ed45f50fe7a7320656ac7dde60f26afa3a92a21e14749135b4c03f3385b7/fonttools-4.66.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:72299346b96b9244dabcc051b24e4653da4edfda6105544cfb10ce856a1afaac", size = 5447695, upload-time = "2026-09-29T16:09:58.02Z" }, + { url = "https://files.pythonhosted.org/packages/3c/c0/919293f7b38ff81a6014a7fce45fbcc113aaf473f22180a7f7897c702a67/fonttools-4.66.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c724e56213494c6695335577822b2d1628d102e71614de8b7eb8e30886d6a314", size = 5450236, upload-time = "2026-09-29T16:10:00.105Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2a/00864b96e013a05df55b347b3eb9b1726803267d52345676cd86e928ddf1/fonttools-4.66.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b913b8e9f7ca9bec44d1eb919f591c596c61041aa357c96be55ff93169859e91", size = 5588056, upload-time = "2026-09-29T16:10:02.225Z" }, + { url = "https://files.pythonhosted.org/packages/8c/88/7b0259de6d874686532a781059fd85796dcd3e07a12146361092141169f3/fonttools-4.66.1-cp311-cp311-win32.whl", hash = "sha256:e7ea7a08547a453fa000db96ed5714a3dc7e2b4255b9243f897921f8c10c169a", size = 1577702, upload-time = "2026-09-29T16:10:04.082Z" }, + { url = "https://files.pythonhosted.org/packages/39/ff/ccaddfb8ac343e90f40f86fa460f832cd45460c65ee9288b6da923c72728/fonttools-4.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:36bb24d4b98faacaff04af1d5e0a4285feba6ed1da6728cd34b6b6deb6bbb934", size = 1635298, upload-time = "2026-09-29T16:10:06.026Z" }, + { url = "https://files.pythonhosted.org/packages/06/1b/fcb22638f2f5918c855abfbab203701e4b03739953d26a59f3e6e59b8f30/fonttools-4.66.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8526b2b7ec4db6b81efb83438be52b1264eda9a4994d867163cfe8c65581ce8d", size = 3097433, upload-time = "2026-09-29T16:10:07.869Z" }, + { url = "https://files.pythonhosted.org/packages/7f/0d/f51141407f9a64efc9fb39b94b0194c4a99c1ffff50834e7ca7a3f1cdd53/fonttools-4.66.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6946fe7bfb28590a1fd4061a17609c9a843952deb65dcf30d1fe725070c3e7a4", size = 2587566, upload-time = "2026-09-29T16:10:10.099Z" }, + { url = "https://files.pythonhosted.org/packages/75/c0/5810d73f9102eb1a08f26b8f7a6c22498622b43e05e684cd5ec602be8ffd/fonttools-4.66.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09ae73bd219e1245debd8376077a0fa6e03175e255c4f51bae5f6a271bfe384a", size = 5416460, upload-time = "2026-09-29T16:10:12.182Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6e/babde908b879a3b51ffc230919d06a804912559dd4cf8c94f3fa2af69fec/fonttools-4.66.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b8ff9e0edbcee2fbf7dff0c41b9041c1901c26acf64e23adb67495012df11de", size = 5397326, upload-time = "2026-09-29T16:10:14.133Z" }, + { url = "https://files.pythonhosted.org/packages/e6/98/8522cc7a5e5ad64a2b2b6e9598489809ed4956c532b887c65b131b8500b7/fonttools-4.66.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:38ce8f5fbd5c17dd2153d47d7c8d4108f3deda3f2b4a79b60ddc470a58faded3", size = 5353857, upload-time = "2026-09-29T16:10:16.375Z" }, + { url = "https://files.pythonhosted.org/packages/15/f9/ab87d67c23178886e57f24397b3113b4ac35297f086467c2c4d4231671a8/fonttools-4.66.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8aed2bbcd6216253ef1b015763593365ee8084f621dfa53bb957c19d5e05f7cd", size = 5517604, upload-time = "2026-09-29T16:10:18.791Z" }, + { url = "https://files.pythonhosted.org/packages/d4/20/e126062610aea31919310b0b3de4d0bbe73ccbdcb3d0409cc52027db93ee/fonttools-4.66.1-cp312-cp312-win32.whl", hash = "sha256:9ea6c93091cbf83161a544388746a0911550bd98cb911faca3591cf5ead166ac", size = 2435084, upload-time = "2026-09-29T16:10:21.145Z" }, + { url = "https://files.pythonhosted.org/packages/f0/af/5c245a0587e5b7b3dd209f640b9f70d8e63404ad8dc93819ba578d685985/fonttools-4.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:261d8dc95845e751f975fe8d6075600593ee253470d46d1b84801688051b09f6", size = 2486987, upload-time = "2026-09-29T16:10:22.924Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f4/e410b8c913da5b3fdbb4d16db0f2d2a0952f59c4db8d52dcf2d421d82044/fonttools-4.66.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:53e5854ea8003efec34adc0863c18ce91da923018354d27366f7fee7db928d7a", size = 3095249, upload-time = "2026-09-29T16:10:25.261Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6a/275108baf41d9f2f4d1d77cf5f1e22200fe47efd5099dafabc3eba0b6197/fonttools-4.66.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:60f5ea17aed4262630afa43f26997ceabd6417fa05dcedf54c665f5a29193e18", size = 2587288, upload-time = "2026-09-29T16:10:27.101Z" }, + { url = "https://files.pythonhosted.org/packages/db/e7/11e5e6beb7e336d80f0ca870ae080033a91ebfe34fd5390dbcf78f8df56f/fonttools-4.66.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1801fdad5600118327171e0e8aa79f7cc48831dd55ab36998c9de03bd5ffe6cd", size = 5389836, upload-time = "2026-09-29T16:10:28.988Z" }, + { url = "https://files.pythonhosted.org/packages/4c/1c/6ec22372362b03350fe3da7bf33491a07cc9a553a36dd2383b76ec1741eb/fonttools-4.66.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:83572afe48733bad7a4a9c11721d3a726c2e976d82b063fc9bdd049d76955abd", size = 5372059, upload-time = "2026-09-29T16:10:31.011Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4a/cb7971f1c0f40f891028ee8c46dadc6897ef61e44aa925a23fba2ef06e2a/fonttools-4.66.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:08d8956e3ec990c75230d92f1630b215e8f3738c83a003421c22b31ebfd0ce15", size = 5332824, upload-time = "2026-09-29T16:10:33.563Z" }, + { url = "https://files.pythonhosted.org/packages/e0/86/563e671f1d43fa8ffb2518d7fe16630fb16c7faf0420cc39f8e80181f486/fonttools-4.66.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fdf4afd75c643e60ef4a96fe64fc8a9def27d2a542112332371a9e5066885f9a", size = 5490659, upload-time = "2026-09-29T16:10:35.788Z" }, + { url = "https://files.pythonhosted.org/packages/79/f7/2573ddfd256be6503458f8523e2893443e66257fc17f6055d7e0f0e721b7/fonttools-4.66.1-cp313-cp313-win32.whl", hash = "sha256:dbb7b950f8c02deaffb6968994691e8589d671b7ef8396bc9d5b5c0dfbb7292f", size = 2433450, upload-time = "2026-09-29T16:10:37.738Z" }, + { url = "https://files.pythonhosted.org/packages/d1/86/68bc2be04b83535607fbb70ebb2ba02380bf4286d79597c4515b7d247187/fonttools-4.66.1-cp313-cp313-win_amd64.whl", hash = "sha256:43d1284c1964666ee833f2badd3017dc138f53d4889043ffca66c5ce4188f188", size = 2485146, upload-time = "2026-09-29T16:10:39.772Z" }, + { url = "https://files.pythonhosted.org/packages/12/83/c745b210ec49379ebfe627e166b527f44671a1f6ec5e1e219d91caa8964d/fonttools-4.66.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b18803cbdef248e7ee1be59cb277fbbe1da1faaa6f726fa5d3557904e6a3d967", size = 3099264, upload-time = "2026-09-29T16:10:41.998Z" }, + { url = "https://files.pythonhosted.org/packages/35/af/dd698f10bf0f743873077259e8a6fce075861dde3bb01eb22b2c4f7aefe8/fonttools-4.66.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f08ab7f8461c37ecfdd29ad97fb0c0780b50501bd664bb0f46b6e83ed2b9d2a7", size = 2588769, upload-time = "2026-09-29T16:10:43.933Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/10b5caa2aa779e62411b67949bda9741d4d7532ba0b6dea647b715131260/fonttools-4.66.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7cf4f996f9b1cb549bff9ea4c50813988a26ec922c95cfa85c7e4f1270447e06", size = 5374278, upload-time = "2026-09-29T16:10:45.727Z" }, + { url = "https://files.pythonhosted.org/packages/6a/db/9ac5c6773feec1b40e57eac106d869886f66a1e44082d343ac1e1e1fb773/fonttools-4.66.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9261ef507f2dd74203443a472b65b5a26429eb378f975016dec7dc7305b24898", size = 5317826, upload-time = "2026-09-29T16:10:48.056Z" }, + { url = "https://files.pythonhosted.org/packages/04/0a/69beb11f6b714ac90ee73ad4600ac91d7dd4e1ce361d087c8425bb8472de/fonttools-4.66.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e1cde50b3ec84ca6fe63ca815de183dbecb88e8adf8ada82d8ea130ef12b2b43", size = 5316239, upload-time = "2026-09-29T16:10:50.201Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/7a77359e469d3a638df91d3e225cef4a3c1184c20e98381238042f7835fa/fonttools-4.66.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f0a8f16c4f3a5a87ca971de2631792d8cb4d570951f2000acf712f157d40db", size = 5449423, upload-time = "2026-09-29T16:10:52.337Z" }, + { url = "https://files.pythonhosted.org/packages/93/cf/ea0b2f1ef90431b1879d6e6c680a7fde497129cf511ab995ade0ff8e19a7/fonttools-4.66.1-cp314-cp314-win32.whl", hash = "sha256:b878c78b2af11b879bd4f26bb0d8bda2a4c64543fdd3f28efe2c80f97f043885", size = 2437673, upload-time = "2026-09-29T16:10:54.281Z" }, + { url = "https://files.pythonhosted.org/packages/b2/53/629dbb4a40c4a7b3de61442c6b4430d36ab6e0e8cf941c547f4fd66f3337/fonttools-4.66.1-cp314-cp314-win_amd64.whl", hash = "sha256:05aeb146451f37289f782c3c861f3d0f4b86c2dd2e4620b46683544c7406640e", size = 2489763, upload-time = "2026-09-29T16:10:56.262Z" }, + { url = "https://files.pythonhosted.org/packages/0e/59/342e5fce9438f88882524128d1feb0311d4014cb6f8bdeb4607fcc00713f/fonttools-4.66.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:66fad3b7874062c2a2692f0ae6dea56d24f01b778c7f191950ca3ff997e25a88", size = 3172931, upload-time = "2026-09-29T16:10:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/50/92/96196ebfd02676f28fa9b3776d85e18281bca0c8450d7e214c40e346bf92/fonttools-4.66.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eef76d5796e604f9d6753fa6d323c4eb9f4e0e43f1dcca553f3e6914f1667b64", size = 2621937, upload-time = "2026-09-29T16:11:00.845Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c3/3f4b761037ebc2e5597c52c218a9e95dbc4a2cab572828654f6004f422f5/fonttools-4.66.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c47299bca4b5acaaeb32100f77b944feea151de9ef1773365a410dc3d49b945b", size = 5546932, upload-time = "2026-09-29T16:11:03.126Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d1/3f506cc79608becbc287785db8c44eb3f93079b49752266eb9f57700ecc4/fonttools-4.66.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dfba62cc93199ba62c376f90f2a9147d92730d301e44f88e013e50ff5edf6193", size = 5353546, upload-time = "2026-09-29T16:11:05.394Z" }, + { url = "https://files.pythonhosted.org/packages/6d/27/6534d84430ba1641185f8a0c9e2c7ecd395b15ff98f96967e3fb3c728b09/fonttools-4.66.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2c7340497cf53490293e0c2b61011e0191633022ede0a0a964a68157a98b0fb4", size = 5414313, upload-time = "2026-09-29T16:11:07.618Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/831ceca06d78855b11dc203b0e3ba5e6fd8a63a71ee0343ea8bd367fda55/fonttools-4.66.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c666fefdd5613a0e99aa4516e6ff4ef87aa86cf1c7ba12a73550f4770e46b750", size = 5449661, upload-time = "2026-09-29T16:11:09.997Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e4/21dc18bcbc8d0354814f6ea58af3d76d3bcd9b0d7246df454cb9e00c1740/fonttools-4.66.1-cp314-cp314t-win32.whl", hash = "sha256:2ce4c93160535761f22c80b2afbc96cabc09855363a5d1a5554265b8a4c85901", size = 2471431, upload-time = "2026-09-29T16:11:12.237Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f4/eb0489e7d58ac0d3387584afc7f3e505f60f60fe4b4f5a0274f013d444a2/fonttools-4.66.1-cp314-cp314t-win_amd64.whl", hash = "sha256:b13c8c541ce0b794add3211b3641cc0e113d707f73e06235e6fe9731bd7c45a9", size = 2521288, upload-time = "2026-09-29T16:11:14.52Z" }, + { url = "https://files.pythonhosted.org/packages/eb/95/235679d5fe4265c251418cd02321de069281a700415389e14c4cce442e3d/fonttools-4.66.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:2d637468dac23aac0e223bd52e66f8faa3b0dfcef57435460fa2107e830226cd", size = 3093646, upload-time = "2026-09-29T16:11:16.809Z" }, + { url = "https://files.pythonhosted.org/packages/ad/2b/7bcd4046b3b5644c563059cce6421b488fe57f65c59171ef01ed11b66d3a/fonttools-4.66.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:90de3477394c73481d27d2b86091c1c736053ee13ff52c42f0e151948e8578c6", size = 2587335, upload-time = "2026-09-29T16:11:18.721Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b6/05a093ec04fa2ad449ecc67638aad0f8d60df380df2471b68b549fe2a4b2/fonttools-4.66.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d84ac0bf776b68396185bd919dd29e633d94300660335efc40b55b294b886903", size = 5371509, upload-time = "2026-09-29T16:11:20.742Z" }, + { url = "https://files.pythonhosted.org/packages/65/a9/55effa83e64b9ff4f379d9186236d50d03f6d4770d8346805c1b6620c370/fonttools-4.66.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0dc6fd99cb8c30941036308b148da9432640442a6f26f36d71dad9be24cbd0e9", size = 5334853, upload-time = "2026-09-29T16:11:22.928Z" }, + { url = "https://files.pythonhosted.org/packages/af/a8/44bb4021c585b76f8e480116e1f3fca62eb7d88fe5794e2ec84c10d2da76/fonttools-4.66.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d3b5403e82d0c7659ff1d9f956e29a3a68d094f043e9f5bc0442796fc3a4fb58", size = 5311704, upload-time = "2026-09-29T16:11:25.393Z" }, + { url = "https://files.pythonhosted.org/packages/63/dd/dd482902fb7fd8b71d3b6508431a57938b5e41b29bf6fb252ed3cfce065f/fonttools-4.66.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:b8b71db96d605784e2c5ebf0788a406018ea8fdd80338491f4c83613d5cd1fec", size = 5459477, upload-time = "2026-09-29T16:11:27.536Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a5/07611ba4d4b298b90908cb15005a6d730c334e25548f5175a09907b2eea6/fonttools-4.66.1-cp315-cp315-win32.whl", hash = "sha256:668f092bc0de8902167df6a0d5c5aedc3b4f9e43cf88eea92e9b46a2bd3968f5", size = 2436532, upload-time = "2026-09-29T16:11:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/42/a5/5c39a05bf7c518743c6072cd75b63cd27285c58a70b1086e923fc071fb84/fonttools-4.66.1-cp315-cp315-win_amd64.whl", hash = "sha256:7f49f2834f5d006fe0f3bb10fec73b261806c50941f0cfbc08294074ffc32210", size = 2488769, upload-time = "2026-09-29T16:11:31.967Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a6/1205f7a7dd746581498457e55bfbcdfbea87105a454a7b3465259816bb79/fonttools-4.66.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:71c7ca1b5f46f5dd549f56b47d47c0b709217675c23d3a7bc6aa1a69b6d9bbae", size = 3164459, upload-time = "2026-09-29T16:11:33.897Z" }, + { url = "https://files.pythonhosted.org/packages/33/42/915ff8f3c5d3bc9877007e708774e52f7ec431f9e59f607a86e50fe1864c/fonttools-4.66.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:2d320483928c7831f0139ecb361954a26b2e2a8995681200155835dd8cd4a7d5", size = 2618183, upload-time = "2026-09-29T16:11:36.067Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c6/cae2f6ebe38f8927a8d0978a349b202047268016344991a14ae978c2aee3/fonttools-4.66.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2aeb745f2664eb811026997c95628071137a777ea2ad296deec9cb393f0b23cf", size = 5524861, upload-time = "2026-09-29T16:11:38.099Z" }, + { url = "https://files.pythonhosted.org/packages/f2/14/1941629956b526d6fb46ee764cf0942221f0238581adb94de0ac229fe67f/fonttools-4.66.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3087a430722aba8de429c2539fd2a58a9cf05238cdfefd8626460001052ca878", size = 5346561, upload-time = "2026-09-29T16:11:40.366Z" }, + { url = "https://files.pythonhosted.org/packages/62/1f/b7e7f4757dcae74285f4ecd8453d870d63c7ba38a3d46bd9175a124c350b/fonttools-4.66.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:058cd823b80bac59e64dfad9e3b6fcd677852f9a3804971bbf6b48cc611e785c", size = 5392826, upload-time = "2026-09-29T16:11:42.653Z" }, + { url = "https://files.pythonhosted.org/packages/d9/71/76db3cbdcfac0e9b3ba26e1e6e8740040cfe5f7b5199dfb9b854bc8da2c3/fonttools-4.66.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:56d41d650cb8fc6cfe1d85ed7c62a0a56cbeed07bc65ca795475b914d401312a", size = 5439233, upload-time = "2026-09-29T16:11:45.088Z" }, + { url = "https://files.pythonhosted.org/packages/10/37/cdc6b213c9fbabdf36e9169f845e8596b419c7e0cceba48e5594b952d2cf/fonttools-4.66.1-cp315-cp315t-win32.whl", hash = "sha256:c258eba62260beb33c110b03a6912cefa3635239c4ab5615b7225fb6f7b85238", size = 2468614, upload-time = "2026-09-29T16:11:47.363Z" }, + { url = "https://files.pythonhosted.org/packages/fb/35/e2247e7e29e8da213e02691a6ada7a30592c7bc0d1db8d2786ebb9bea138/fonttools-4.66.1-cp315-cp315t-win_amd64.whl", hash = "sha256:5de5d80fbc0e50ff794c244e8fb7afd3eadfe0fa232ba8b162b8c551df22fcb4", size = 2516977, upload-time = "2026-09-29T16:11:49.425Z" }, + { url = "https://files.pythonhosted.org/packages/f6/10/d45b74135d5d642cb3a4fb0a957c1613ef93de4c8548671dfc3a5bf38299/fonttools-4.66.1-py3-none-any.whl", hash = "sha256:7234ae9e28db64273fbbfa72caebd0a97e3bdba6b05064114741b9539ef339d0", size = 1202222, upload-time = "2026-09-29T16:11:51.678Z" }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/01/e1/2069291243c926a2ff1cd706c7f3eeb9b62144bf60f77c9fb9ff2fb26bd3/iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960", size = 21209, upload-time = "2026-10-06T22:48:38.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7", size = 7552, upload-time = "2026-10-06T22:48:36.959Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286, upload-time = "2024-09-04T09:39:44.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440, upload-time = "2024-09-04T09:03:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758, upload-time = "2024-09-04T09:03:46.582Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311, upload-time = "2024-09-04T09:03:47.973Z" }, + { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109, upload-time = "2024-09-04T09:03:49.281Z" }, + { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814, upload-time = "2024-09-04T09:03:51.444Z" }, + { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881, upload-time = "2024-09-04T09:03:53.357Z" }, + { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972, upload-time = "2024-09-04T09:03:55.082Z" }, + { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787, upload-time = "2024-09-04T09:03:56.588Z" }, + { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212, upload-time = "2024-09-04T09:03:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399, upload-time = "2024-09-04T09:04:00.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688, upload-time = "2024-09-04T09:04:02.216Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493, upload-time = "2024-09-04T09:04:04.571Z" }, + { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191, upload-time = "2024-09-04T09:04:05.969Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644, upload-time = "2024-09-04T09:04:07.408Z" }, + { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877, upload-time = "2024-09-04T09:04:08.869Z" }, + { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347, upload-time = "2024-09-04T09:04:10.106Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442, upload-time = "2024-09-04T09:04:11.432Z" }, + { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762, upload-time = "2024-09-04T09:04:12.468Z" }, + { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319, upload-time = "2024-09-04T09:04:13.635Z" }, + { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260, upload-time = "2024-09-04T09:04:14.878Z" }, + { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589, upload-time = "2024-09-04T09:04:16.514Z" }, + { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080, upload-time = "2024-09-04T09:04:18.322Z" }, + { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049, upload-time = "2024-09-04T09:04:20.266Z" }, + { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376, upload-time = "2024-09-04T09:04:22.419Z" }, + { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231, upload-time = "2024-09-04T09:04:24.526Z" }, + { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634, upload-time = "2024-09-04T09:04:25.899Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024, upload-time = "2024-09-04T09:04:28.523Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484, upload-time = "2024-09-04T09:04:30.547Z" }, + { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078, upload-time = "2024-09-04T09:04:33.218Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645, upload-time = "2024-09-04T09:04:34.371Z" }, + { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022, upload-time = "2024-09-04T09:04:35.786Z" }, + { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536, upload-time = "2024-09-04T09:04:37.525Z" }, + { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808, upload-time = "2024-09-04T09:04:38.637Z" }, + { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531, upload-time = "2024-09-04T09:04:39.694Z" }, + { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894, upload-time = "2024-09-04T09:04:41.6Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296, upload-time = "2024-09-04T09:04:42.886Z" }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450, upload-time = "2024-09-04T09:04:46.284Z" }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168, upload-time = "2024-09-04T09:04:47.91Z" }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308, upload-time = "2024-09-04T09:04:49.465Z" }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186, upload-time = "2024-09-04T09:04:50.949Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877, upload-time = "2024-09-04T09:04:52.388Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204, upload-time = "2024-09-04T09:04:54.385Z" }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461, upload-time = "2024-09-04T09:04:56.307Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358, upload-time = "2024-09-04T09:04:57.922Z" }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119, upload-time = "2024-09-04T09:04:59.332Z" }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367, upload-time = "2024-09-04T09:05:00.804Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884, upload-time = "2024-09-04T09:05:01.924Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528, upload-time = "2024-09-04T09:05:02.983Z" }, + { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913, upload-time = "2024-09-04T09:05:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627, upload-time = "2024-09-04T09:05:05.119Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888, upload-time = "2024-09-04T09:05:06.191Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145, upload-time = "2024-09-04T09:05:07.919Z" }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448, upload-time = "2024-09-04T09:05:10.01Z" }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750, upload-time = "2024-09-04T09:05:11.598Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175, upload-time = "2024-09-04T09:05:13.22Z" }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963, upload-time = "2024-09-04T09:05:15.925Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220, upload-time = "2024-09-04T09:05:17.434Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463, upload-time = "2024-09-04T09:05:18.997Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842, upload-time = "2024-09-04T09:05:21.299Z" }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635, upload-time = "2024-09-04T09:05:23.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556, upload-time = "2024-09-04T09:05:25.907Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364, upload-time = "2024-09-04T09:05:27.184Z" }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887, upload-time = "2024-09-04T09:05:28.372Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530, upload-time = "2024-09-04T09:05:30.225Z" }, + { url = "https://files.pythonhosted.org/packages/11/88/37ea0ea64512997b13d69772db8dcdc3bfca5442cda3a5e4bb943652ee3e/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", size = 122449, upload-time = "2024-09-04T09:05:55.311Z" }, + { url = "https://files.pythonhosted.org/packages/4e/45/5a5c46078362cb3882dcacad687c503089263c017ca1241e0483857791eb/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", size = 65757, upload-time = "2024-09-04T09:05:56.906Z" }, + { url = "https://files.pythonhosted.org/packages/8a/be/a6ae58978772f685d48dd2e84460937761c53c4bbd84e42b0336473d9775/kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", size = 64312, upload-time = "2024-09-04T09:05:58.384Z" }, + { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966, upload-time = "2024-09-04T09:05:59.855Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044, upload-time = "2024-09-04T09:06:02.16Z" }, + { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879, upload-time = "2024-09-04T09:06:03.908Z" }, + { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751, upload-time = "2024-09-04T09:06:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990, upload-time = "2024-09-04T09:06:08.126Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122, upload-time = "2024-09-04T09:06:10.345Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126, upload-time = "2024-09-04T09:06:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313, upload-time = "2024-09-04T09:06:14.562Z" }, + { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784, upload-time = "2024-09-04T09:06:16.767Z" }, + { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988, upload-time = "2024-09-04T09:06:18.705Z" }, + { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980, upload-time = "2024-09-04T09:06:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847, upload-time = "2024-09-04T09:06:21.407Z" }, + { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494, upload-time = "2024-09-04T09:06:22.648Z" }, + { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491, upload-time = "2024-09-04T09:06:24.188Z" }, + { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648, upload-time = "2024-09-04T09:06:25.559Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257, upload-time = "2024-09-04T09:06:27.038Z" }, + { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906, upload-time = "2024-09-04T09:06:28.48Z" }, + { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951, upload-time = "2024-09-04T09:06:29.966Z" }, + { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715, upload-time = "2024-09-04T09:06:31.489Z" }, + { url = "https://files.pythonhosted.org/packages/d5/df/ce37d9b26f07ab90880923c94d12a6ff4d27447096b4c849bfc4339ccfdf/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", size = 58666, upload-time = "2024-09-04T09:06:43.756Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d3/e4b04f43bc629ac8e186b77b2b1a251cdfa5b7610fa189dc0db622672ce6/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", size = 57088, upload-time = "2024-09-04T09:06:45.406Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321, upload-time = "2024-09-04T09:06:47.557Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776, upload-time = "2024-09-04T09:06:49.235Z" }, + { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984, upload-time = "2024-09-04T09:06:51.336Z" }, + { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811, upload-time = "2024-09-04T09:06:53.078Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/07/bd78e6a8fae171ea041ef5bba3ed21a003522fa088834b069b1909981f30/kiwisolver-1.5.1.tar.gz", hash = "sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a", size = 104395, upload-time = "2026-08-28T10:28:27.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/54/1b8d2bc580414cc75b3a5b3d195981a6facacd8a8d986e589d0a3b51a709/kiwisolver-1.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1acc7e5b7ef05e9da8bb70cd6c7c4513090213d2e1ad9720f599f0bf6c52aec5", size = 123362, upload-time = "2026-08-28T10:24:43.402Z" }, + { url = "https://files.pythonhosted.org/packages/57/19/92c30f540dcfff86ff625389427c39b53a9aaea16420ddcc09b2ab8d1073/kiwisolver-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bad20d4c69c851c982a1e3606f4c293edfd5a87885786c50082412240c4b1ffd", size = 66551, upload-time = "2026-08-28T10:24:44.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ae/30b94088722e7bce8b821cd5ee935a87f80023e7243125f1accf98e39bf7/kiwisolver-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0a4faea5c6db201c6a21391d2ac926ea97acf7dacdbc3c417189e1adb1a00837", size = 64076, upload-time = "2026-08-28T10:24:46.184Z" }, + { url = "https://files.pythonhosted.org/packages/f1/0e/9f394d693be549fa3fab62498c2778294595991047adc3dcf10aa99b91c0/kiwisolver-1.5.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e05c2f7925f1d88778e53cb44f14e0223204a3bdd09a41664750363acfb1f2ef", size = 1628782, upload-time = "2026-08-28T10:24:47.91Z" }, + { url = "https://files.pythonhosted.org/packages/64/96/26efc04348c0f332b6e6c471dff132bb8b18b2df494a1b65826601674e62/kiwisolver-1.5.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3a4e41e3096bf1f0f1b76e2ffd6d828d6547f574f702d59bdbef7acfa59db9c", size = 1228112, upload-time = "2026-08-28T10:24:49.503Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ac/df9ddc19ec972cd97b60b262dd2c4be28c6192b5a779cad429c6657ee680/kiwisolver-1.5.1-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1d56ec54d257d05e0b50f5780d967540cd07beeaf9e5f645b26d50cce79f4d8", size = 1246756, upload-time = "2026-08-28T10:24:51.225Z" }, + { url = "https://files.pythonhosted.org/packages/cf/de/c38a246b8a4f4b293c7291aa650917b05c5549b0d532749bc523296e90c4/kiwisolver-1.5.1-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8de6f2a4ce7e7bd27d23dd94abf0ccafe0e0e5cc9c764b0577191f2c25f08f26", size = 1295555, upload-time = "2026-08-28T10:24:52.953Z" }, + { url = "https://files.pythonhosted.org/packages/b6/48/3c95a5232d8b5783050d8c8089b58bf1f57018f9135232d72c5aa6b0c01b/kiwisolver-1.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:16895f553ee6620a827d2da56b871f835fb70b9216cca5d188e885caf6e3bd23", size = 2179476, upload-time = "2026-08-28T10:24:54.568Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e9/b9e999336afc561b154e93682f597832bdc7446f2ee18b467c5b0e924867/kiwisolver-1.5.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b92f60017dda7d877fdc546438b5e28f31c523264f49cf5a48c1d0ce1a0dfbc", size = 2275258, upload-time = "2026-08-28T10:24:56.186Z" }, + { url = "https://files.pythonhosted.org/packages/76/cd/c1c550796ada4a59644b8264b425fe332686d2a086c4729fcc640ececdfe/kiwisolver-1.5.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:7824b5e8bdbf0bccb4ccd37bbb115849a1dc45437fb4de8351385ed07c437ee0", size = 2443424, upload-time = "2026-08-28T10:24:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/30f641eb8e10f6ad5bb9af8a15ec8eea386162a6ef491e68995b8680ef4e/kiwisolver-1.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:aa7d00b1700966d2917e54d278aba86897890ca9276dd8b76cf6446b6c181b92", size = 2249457, upload-time = "2026-08-28T10:25:00.223Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d9/211e016f8aa5b5bf496dd3bd7ebab4b73b22d91f025f25e20156a44a77fc/kiwisolver-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:96c30002424670b5e1e46495c2b8cbffef39cf77c1d79e76462029d50339785b", size = 70643, upload-time = "2026-08-28T10:25:01.888Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8e/ae7007266dea1fd93fcc48541042c1f6583958055de3b424a59ec16def25/kiwisolver-1.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:f0f4a42db92d6ec7677ab9d12830a2a8ec145a9c6d15db2b593466bc875c78d7", size = 68215, upload-time = "2026-08-28T10:25:03.136Z" }, + { url = "https://files.pythonhosted.org/packages/94/7b/2de6908edc668427c149af5f93112e931f87e1fa4cab80bac32c5844dccc/kiwisolver-1.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b3d78f7bb2b9d9a30345be1474b9aaa8685430b54afb51ba3639b5c6c11e9ed6", size = 123364, upload-time = "2026-08-28T10:25:04.359Z" }, + { url = "https://files.pythonhosted.org/packages/8a/24/e70914415c77c97be7e22c80a0740869cb7428768cc380fdcdf6703e7084/kiwisolver-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5025e36fb4fb275cef0a4e30dbb11cb4ae61d1c83deb90189cb5d7e4cafd6b55", size = 66558, upload-time = "2026-08-28T10:25:05.506Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2b/8b08b11833db4d475b8ef1f36174f8d8a7abd31bedd7e794be78e8814b48/kiwisolver-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc1a26b8e53395a01c2c611e58602fa47461f136fba7cd5542e6db6d64be1839", size = 64071, upload-time = "2026-08-28T10:25:06.7Z" }, + { url = "https://files.pythonhosted.org/packages/89/00/05c2d0369ac322d22d5c05f84b5c4a6856fa6207fbae42869108a28f0383/kiwisolver-1.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:95a02752aa032eef4aed01cda6d9b687c669bd0396bf4519eef8bba22a286720", size = 1438206, upload-time = "2026-08-28T10:25:08.254Z" }, + { url = "https://files.pythonhosted.org/packages/c0/05/c941a139f27438c1910d630fdc3ccfdab7c8407c72052299ead12ece086e/kiwisolver-1.5.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:719a35fa1156db3640555f95ebb94f60a444e64d1c69626b0edef5df78eba225", size = 1248975, upload-time = "2026-08-28T10:25:10.053Z" }, + { url = "https://files.pythonhosted.org/packages/58/a1/2669ee5512e39b9d4de25faacaedf788c957f93730c5f7c63993ec4f5933/kiwisolver-1.5.1-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:febcce10f2bcdbb80b4ea919238a6a4ac13dbc4c7cadbe8d5d75c3682f8b5404", size = 1266301, upload-time = "2026-08-28T10:25:11.754Z" }, + { url = "https://files.pythonhosted.org/packages/28/b8/353f52f2c7f861a9e90cd2e8f90f85b3ad03060835f823e08298d094c463/kiwisolver-1.5.1-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1d852545c4d0e35a72728d072cbaa59e2fa7dd84bdf01e068d670dd0ceb58eb6", size = 1319708, upload-time = "2026-08-28T10:25:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/21/0e/14b83200eadc2c1d63b76bac01c1813bf072aecf567429f303e00b70258e/kiwisolver-1.5.1-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:2e10ae1bba1899188b33557c10d73affcc12033edd18adddb57d209039976a4c", size = 971720, upload-time = "2026-08-28T10:25:14.934Z" }, + { url = "https://files.pythonhosted.org/packages/86/91/9d43d84d23b1cbff72a142d387ead1ea03db0cba8ff86ed5335addad3cc9/kiwisolver-1.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b69602970994a2ed8bbfa78c2f0394a7435226c6040489702d9f0a0ad0c07052", size = 2200119, upload-time = "2026-08-28T10:25:16.636Z" }, + { url = "https://files.pythonhosted.org/packages/ff/7c/f2bd9616f27ffb5e17cecc0baa5d0bbcee7e55aeddc0ccc871d69e2fc3ee/kiwisolver-1.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d50de98e8d807dc31822fff96f50293163a62418eb65487a21b42713d72ed0b7", size = 2295005, upload-time = "2026-08-28T10:25:18.374Z" }, + { url = "https://files.pythonhosted.org/packages/ba/17/ee671b72bf8f46a08379d4392c65582541759a542428197562f2898294ad/kiwisolver-1.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3221f78211074f561c44ca42eac0619828171bec15a2c4cf6f7747d07df76e8e", size = 1960982, upload-time = "2026-08-28T10:25:19.893Z" }, + { url = "https://files.pythonhosted.org/packages/2e/f7/0e26b4c05bee3bdb0f048dfa305e4fe701999ea17b51e9c616ef91035bbe/kiwisolver-1.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0ba9527afc80ae3d7814ed98b6572d02bf85eaf48065678342c5f0c6dab7a8c7", size = 2464918, upload-time = "2026-08-28T10:25:21.65Z" }, + { url = "https://files.pythonhosted.org/packages/ae/62/6eb431133d30ce656ac1e5ff72fac70dd34d54c3984f4011b9ac8bf77d54/kiwisolver-1.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e12dfea7f5fc2a34a9080efbf79c4c44eb380ec5b9c6fea09407e08f0d1e941d", size = 2270967, upload-time = "2026-08-28T10:25:23.643Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9f/6f9e489c188200e6fb3193935501894811e8c97577c8ffe9033589bf3521/kiwisolver-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a7587dc335f2c0f5bd577fd0540bd16c66006bdb60f759a1059f025e6c4f071", size = 70744, upload-time = "2026-08-28T10:25:25.061Z" }, + { url = "https://files.pythonhosted.org/packages/c6/6d/dfc430d1d43957061599adea3f08ea982bb6f4ab601a8c974bedcf2ba850/kiwisolver-1.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:e4e4523d6f336708d732516e6cfca7796cf3d96c9474eb5aecf6165f2f1fefc3", size = 68404, upload-time = "2026-08-28T10:25:26.186Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9b/65b302742389c6f96f2956bef5decf26011309feb2fc5d79613af18adea4/kiwisolver-1.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046", size = 123876, upload-time = "2026-08-28T10:25:27.44Z" }, + { url = "https://files.pythonhosted.org/packages/71/74/c21f339956f6f691b2ed7e31d5f3ae767304df6c460192739fc830853051/kiwisolver-1.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c", size = 66487, upload-time = "2026-08-28T10:25:28.728Z" }, + { url = "https://files.pythonhosted.org/packages/84/e5/bdb34e21523e01dceda064d63713f3bdec91388af24fba1eca7ea5e85864/kiwisolver-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1", size = 64660, upload-time = "2026-08-28T10:25:30.071Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f4/dadfec469313c7f428efa7e84b4aba9732f813c13ea7131a24b7b008ef57/kiwisolver-1.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38", size = 1477929, upload-time = "2026-08-28T10:25:31.495Z" }, + { url = "https://files.pythonhosted.org/packages/6f/35/09c58daac34e6f6ea5c6dee0094b422118e5a7c265586008a95fd135ac5f/kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002", size = 1278499, upload-time = "2026-08-28T10:25:33.375Z" }, + { url = "https://files.pythonhosted.org/packages/19/32/739765e24fbad29d13f83e546ea4abc215a78cea9d677ca09025b027724d/kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048", size = 1296677, upload-time = "2026-08-28T10:25:35.059Z" }, + { url = "https://files.pythonhosted.org/packages/df/32/03304d1010e2cc45e5b3b52cef7e43fed3a2a5cd6c87a89b4a88e1d85b5d/kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7", size = 1346037, upload-time = "2026-08-28T10:25:36.705Z" }, + { url = "https://files.pythonhosted.org/packages/3e/57/4c49377bfd274450dd72ecaa13eaac32ea804a03363e4d1db0c5aa999ceb/kiwisolver-1.5.1-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083", size = 988248, upload-time = "2026-08-28T10:25:38.299Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c3/38df144a08b6c5d75ca4504e5cc3141bb3bfef64c04f4ef48204f42711b6/kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148", size = 2228722, upload-time = "2026-08-28T10:25:40.038Z" }, + { url = "https://files.pythonhosted.org/packages/e7/11/3221838a89cd64d9b386353e000cd8a296069a20fbe3584507fdfd5bebae/kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c", size = 2325216, upload-time = "2026-08-28T10:25:41.699Z" }, + { url = "https://files.pythonhosted.org/packages/83/d4/075c219230697bb5db910d37262b9bacf880f92b4811a02ab81ed073a253/kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858", size = 1977689, upload-time = "2026-08-28T10:25:43.559Z" }, + { url = "https://files.pythonhosted.org/packages/bb/08/1d219c3c2dd960983d0d4da623d916e9de6385df2b0bab3d1af0e9b8fccc/kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6", size = 2491443, upload-time = "2026-08-28T10:25:45.242Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d3/024208ec1079d273f1047468d1bdffbf38bb75b7b268090fd3a0301b9d9a/kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444", size = 2295200, upload-time = "2026-08-28T10:25:46.984Z" }, + { url = "https://files.pythonhosted.org/packages/6e/7c/7b210498f9f92e1cd7855f260fa69ef056881087b199ee20c208f0e4189a/kiwisolver-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19", size = 70748, upload-time = "2026-08-28T10:25:48.444Z" }, + { url = "https://files.pythonhosted.org/packages/94/61/ef0daa157c8bb23672f7423e0d14c39db1dc6ef8ed47e6bc54c9c1bef3bf/kiwisolver-1.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c", size = 68324, upload-time = "2026-08-28T10:25:49.81Z" }, + { url = "https://files.pythonhosted.org/packages/08/c1/88018321d976f53c421e379c43bc6993e70ce0c8a3ec5edc4bfe102257f6/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450", size = 62272, upload-time = "2026-08-28T10:25:51.02Z" }, + { url = "https://files.pythonhosted.org/packages/85/d2/712bc17ea4f1d216034928069d612defbc6c95a471c55a7203a39faecb1a/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724", size = 64481, upload-time = "2026-08-28T10:25:52.22Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e6/6c5380d676f43b6d918033962ea5e72360ca69e5a404154bc496b598ffdb/kiwisolver-1.5.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a", size = 66260, upload-time = "2026-08-28T10:25:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/7087f5822cc8bb272679641404b1966a42504dac9ee74e2b33840475a0aa/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee", size = 123876, upload-time = "2026-08-28T10:25:54.644Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4b/9f385087ca09ee5ab9c09c6832561a7d2f7c78d3e5661d511e669f70e439/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2", size = 66487, upload-time = "2026-08-28T10:25:55.899Z" }, + { url = "https://files.pythonhosted.org/packages/47/8b/40d33ffd2f378094ed462e9a9a0907e59d4de9845e65a59561272da350d4/kiwisolver-1.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3", size = 64673, upload-time = "2026-08-28T10:25:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/ab/43/86aacc027959108b4c66eeae8b73cedb057dfa6eb3a335d05ad65197081c/kiwisolver-1.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d", size = 1477992, upload-time = "2026-08-28T10:25:58.479Z" }, + { url = "https://files.pythonhosted.org/packages/ed/40/b1d0369048c79733a32c8abb0f2718532e6630641368e33a81384246e844/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851", size = 1278821, upload-time = "2026-08-28T10:26:00.121Z" }, + { url = "https://files.pythonhosted.org/packages/61/a1/fa71c1792272ff9461432715ae60ffb7e11a4d7ac3bf68961b9cab6c60cf/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe", size = 1296805, upload-time = "2026-08-28T10:26:01.868Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3f0bd94af8e06ecc47eb834b195a06f05d48711ceb2352c56d6835160f0e/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89", size = 1346109, upload-time = "2026-08-28T10:26:03.59Z" }, + { url = "https://files.pythonhosted.org/packages/a4/44/3afe6ef9cf06d61220953a8963e94eca978491be1d9547cb01d82a1efa08/kiwisolver-1.5.1-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad", size = 988252, upload-time = "2026-08-28T10:26:05.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/30/a12bd7a7285a211e1747c3eec77b8c614dbfcc1dad942f7611a1a6921ae5/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a", size = 2228846, upload-time = "2026-08-28T10:26:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/233e2958abf0dab7b18d07e52f286e02e519d7651bfbbe97af9347564109/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8", size = 2325583, upload-time = "2026-08-28T10:26:09.093Z" }, + { url = "https://files.pythonhosted.org/packages/42/8e/7673060a27b01405b580058510adef34687069d229800239f5e44682d4d0/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f", size = 1978221, upload-time = "2026-08-28T10:26:11.127Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7b/1b882fc1a8b4a0bb8084e7d1d85004116d08c92c0705d31f2928dec607f2/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127", size = 2491819, upload-time = "2026-08-28T10:26:13.348Z" }, + { url = "https://files.pythonhosted.org/packages/39/9c/426deb49e62c5f69464b64bbeca064d3b758a7506b8913d986ef34f4619c/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b", size = 2295520, upload-time = "2026-08-28T10:26:15.042Z" }, + { url = "https://files.pythonhosted.org/packages/f5/22/deabbb3ad6d918d74b7831b2d8ae7151b09d21c87974e5ee8a456f58c94c/kiwisolver-1.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524", size = 70758, upload-time = "2026-08-28T10:26:16.504Z" }, + { url = "https://files.pythonhosted.org/packages/b9/71/02fa5c2fd92068bb8952847e70ee6c5cb280e7febe11653d17812acc53dd/kiwisolver-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5", size = 68329, upload-time = "2026-08-28T10:26:17.658Z" }, + { url = "https://files.pythonhosted.org/packages/dd/87/2d5dfad0daf17dcc18d98c48ed2332fc3f051cf599e60be6182a30dd4cf1/kiwisolver-1.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0324cd2567259b7a095f6cf18a52b0ffc6f3de9e69528ff1bc0e7a37bd43ff1a", size = 62337, upload-time = "2026-08-28T10:26:18.778Z" }, + { url = "https://files.pythonhosted.org/packages/08/c8/83e1624f15d6262b470dbcc80b09979fd4d5b2ea3ddfc6b6e3327e235726/kiwisolver-1.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:74ea337e0ec3f6f342a36a4f1b5cd94dd9affddcd28ba9aae2905af932ee8c6b", size = 64513, upload-time = "2026-08-28T10:26:19.909Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2d/827ec30eb07f528c08d8459ffb318ae91a56d793ee8acbea8b491f0ff906/kiwisolver-1.5.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ee9df1f0d77b9c6e94f4ac0fec533fbddd5ea3a327807f18d7b069ae019ded80", size = 66287, upload-time = "2026-08-28T10:26:21.078Z" }, + { url = "https://files.pythonhosted.org/packages/53/11/5c43a562529dad8def4b81e5e1877c612a7e0298105a5939b3b409d2079c/kiwisolver-1.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fc271a6f0a2126958f4090e5507b9da5848927dae331f8f763bd4aa642b3d2cd", size = 123940, upload-time = "2026-08-28T10:26:22.475Z" }, + { url = "https://files.pythonhosted.org/packages/64/db/9bd6c505c95128c258a55236bfbb3a7a3fb6023f863316b6d7d9f3c69052/kiwisolver-1.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9b3092d8992a1d69b7a59c3e39f35e1b9be327a17f68a7c35fc17329e337d6f2", size = 66493, upload-time = "2026-08-28T10:26:23.743Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f4/b3007a3ed5c9be73f81161140684cf7d9bdb9c4b632f5f484d2a1c713fb9/kiwisolver-1.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c2306e8bb53601979fcb3fa09cc65e031876d9ae01eff2fcbcd7a84ef94d5bc1", size = 64720, upload-time = "2026-08-28T10:26:24.95Z" }, + { url = "https://files.pythonhosted.org/packages/a1/13/08188f0cafa3a800403e4ff62b9aad4e7a17f9c4c7e080dc8f18c64794cf/kiwisolver-1.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:18a0cfb124546a4c2e6087c5f3029c7f44b37c85b142e0ced71f73a7599ac208", size = 1475867, upload-time = "2026-08-28T10:26:26.393Z" }, + { url = "https://files.pythonhosted.org/packages/8a/3e/053bdc3c9abdb8f2606225eda398adca25c0c91ab90add8222a69db65ee0/kiwisolver-1.5.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34ec467940442c9943016fb2d4c81d1ba84351eeca2f1a78f8bc87f1ba0d414c", size = 1282865, upload-time = "2026-08-28T10:26:28.118Z" }, + { url = "https://files.pythonhosted.org/packages/5e/64/a44c341b36b610588cc2f1e89b3cae072a3119aa8be578e90987cd640751/kiwisolver-1.5.1-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a83ee7107df13abe42a54a6654670eef9bb39425cf2e27f65e0007465e1286ab", size = 1300865, upload-time = "2026-08-28T10:26:30.125Z" }, + { url = "https://files.pythonhosted.org/packages/60/5e/7e7d716dca38c714478b741257a5b4a321d9932b8d851551a136dcaf3984/kiwisolver-1.5.1-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bebb89489b279b2f5661bbbb2abcc87bcd4a46607bb4a5c966f04f1db6b8df9a", size = 1348071, upload-time = "2026-08-28T10:26:31.829Z" }, + { url = "https://files.pythonhosted.org/packages/10/1a/2b98fdda8bf45b7be317e48ed12393d44334394d315c74b81f4a14c0e31b/kiwisolver-1.5.1-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:509735237ae0d849e8a843551d423d2500d2e0a9ac1611a145658b29c0fb9f85", size = 992191, upload-time = "2026-08-28T10:26:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/d893f5ede0e50f9e3fcf01f6015f42ec7d9cd221e26772701fe4a98745f9/kiwisolver-1.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:824c3d763a05ea9e9003610145186b0e9848c7584a5575c79bac5a8e7cd80bad", size = 2233854, upload-time = "2026-08-28T10:26:35.282Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/f85f6279555a6ee1639fef7bfe83adb037a03e11a6fc9eaa54b8d0380339/kiwisolver-1.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:1fff05e239575b1481b6ed1a782f6fad616efbf1f0b1f44e6e85c4dfe426e483", size = 2330621, upload-time = "2026-08-28T10:26:36.9Z" }, + { url = "https://files.pythonhosted.org/packages/56/31/e11aea078f66fc2fffcc179d38ca90d9da97652a241b64519169742ba46a/kiwisolver-1.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0627b9bceb9c3cdcf12b8a18655eedfed2692b038df27423383c120d0b7dc2d6", size = 1982848, upload-time = "2026-08-28T10:26:39.01Z" }, + { url = "https://files.pythonhosted.org/packages/af/ea/2956b63bf5140ca46aa2c2818e6aa03e2d5754dd2fa41db1c6b28922940c/kiwisolver-1.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8a708a47ade1fe19e8371d5da076bac0dd4b0a5a7985ad6c637f7f7e361b6baa", size = 2494850, upload-time = "2026-08-28T10:26:40.837Z" }, + { url = "https://files.pythonhosted.org/packages/11/d1/3829542258d8b3fc0898d221e7ef0e2c83eca0d348709bb8dbe54f3d4005/kiwisolver-1.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:007a5553dfc4f4e8d184f588a0200e2cd4b63a59cc8796df3c39909e679dc7a0", size = 2298067, upload-time = "2026-08-28T10:26:42.803Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0e/49522e1ab5788cbaf63a26fbd3b851f9028616828c961b8a31b35cb96df8/kiwisolver-1.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:f4167e87b397f273dc2356fcf1eaf50a6bac51e6105f45103ef7129c8efb0255", size = 72282, upload-time = "2026-08-28T10:26:44.268Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b6/22e7ca5315d363e6f81c9f37c9472e12e7b298731e77c0428e6a911a2c39/kiwisolver-1.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5c490db2168a508088f59140dd392556a54b8bd1048fc6383c8baff13c359673", size = 69855, upload-time = "2026-08-28T10:26:45.725Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/03a9cfbe871964c8758a816eb03ac96c806da2795a9a7cd9bf9648bfb594/kiwisolver-1.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4d4ca09bf13cff792b1884f64b98ee6c2467930d632233be25c56b442d99f10e", size = 126289, upload-time = "2026-08-28T10:26:47.023Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e3/14ce3041ca79dff9c9d884ca00c7bf32374e76028a865a9ecd99b4f5a517/kiwisolver-1.5.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:44b8faef94f1857e77fa0238f3390ff1ac51d2ea20a487e2e452a59fd2b5f5ca", size = 67709, upload-time = "2026-08-28T10:26:48.268Z" }, + { url = "https://files.pythonhosted.org/packages/af/c4/45030471a66ec8ef042e9f96ffe1d522c9ab12da180186a0898966fc1385/kiwisolver-1.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2ae70bc59790d2af72a3f76f24b272403e135070340281108b447cb77ea70819", size = 65909, upload-time = "2026-08-28T10:26:49.523Z" }, + { url = "https://files.pythonhosted.org/packages/42/73/17dce073a6ae259bb32cf9d686c4079d2e538868bc45967462bf33df914a/kiwisolver-1.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:43844c1a7ad6d723d5b5b4c4fc7f5bd399c40e288120d16257c7c9e8765c6e85", size = 1584907, upload-time = "2026-08-28T10:26:50.933Z" }, + { url = "https://files.pythonhosted.org/packages/8c/84/ae3c75909f507283cbfcc7e916c7e822579ef962020b97e6882b27b4478f/kiwisolver-1.5.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5e5aaad6be121f2515765e3b1c444352cb8eb4c86510801db8f2e50757316", size = 1392474, upload-time = "2026-08-28T10:26:52.638Z" }, + { url = "https://files.pythonhosted.org/packages/34/31/8bcc83caad5bce8fa4577152389848bf6bc110e51e573a2b4e7c2aa34c89/kiwisolver-1.5.1-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3fa5855898f6d3d01b72ccd48a2d65cbdee301251603fefe34e2025bddba219c", size = 1405246, upload-time = "2026-08-28T10:26:54.248Z" }, + { url = "https://files.pythonhosted.org/packages/55/72/220345537d790cf4ae54f8acfff4b5cc2468e0702a384d651cf7a771c63e/kiwisolver-1.5.1-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d66a64dd5dec136040ec2ae94aa026a912ee60fdd45bc28d3db30037fd809e88", size = 1456099, upload-time = "2026-08-28T10:26:56.042Z" }, + { url = "https://files.pythonhosted.org/packages/cd/10/3725fd2398f66d18c34b4e0f81a8d03764cd4f4f089f58a527f0b4428086/kiwisolver-1.5.1-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:9e51c119992ea8820706871c30a4642ec76de20ae82f9b50b9a45517d8e9f810", size = 1073695, upload-time = "2026-08-28T10:26:57.658Z" }, + { url = "https://files.pythonhosted.org/packages/86/cb/28d6e09e66b93e4588b2e6b7d84d020ccefea09e2f4de788510a07efeab7/kiwisolver-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:70ed9a45c7484d2b30cdacf60d220f494a1763b9fec1ad03285c6553fa0889f2", size = 2335355, upload-time = "2026-08-28T10:26:59.202Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b3/a0f31d5e4e40af7dc97c36b8a74fdd3a36cf3c8bbd098da9a23466ff6a94/kiwisolver-1.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:98b208a7cc42c803445ef551d6753cc42a5ea13e9cab1ee66cd8b9cb70195330", size = 2426524, upload-time = "2026-08-28T10:27:01.181Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c9/728f63bd58c72cafdc79fc306abeeac7391bec03b757a48dadeb30906521/kiwisolver-1.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c6834b92dd2428e2dd85ef3d85f723d3c12f20aaf43a2ddd4f944ca25d833408", size = 2063430, upload-time = "2026-08-28T10:27:03.06Z" }, + { url = "https://files.pythonhosted.org/packages/84/df/ce188b96f92f9a2c958231da140768918cba53c9713dc887b82f85462118/kiwisolver-1.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:5d142e352eb13facc7dd047489aebdff6ba78576c239f1ea04931979caaf0567", size = 2597513, upload-time = "2026-08-28T10:27:05.072Z" }, + { url = "https://files.pythonhosted.org/packages/69/d6/76947c8203768968382e5bd74d9cc95654746703a61ea53015f2c74a2e06/kiwisolver-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9b1c4900736e489a812c529100de4b8fb617d4db075e931e213c57424b83d9b", size = 2394488, upload-time = "2026-08-28T10:27:07.423Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d4/14b21e4eb203c4d15425e8b6a2c625a320b4a1f2f7557eead63ffc30ffb7/kiwisolver-1.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5978c3340f16a35c30f8ab2fa7bcf559973c55f1a5ef6970e1f621acf3c4db13", size = 75404, upload-time = "2026-08-28T10:27:08.892Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f5/53157899fc7f45f76421b77b99eb1639dd0f83f26ff9d76300c96bb4a3b0/kiwisolver-1.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ca307d6c259e5c98d3cb9ade55342b47a6839762caf2536f3d7b46ee660cc82e", size = 72946, upload-time = "2026-08-28T10:27:10.944Z" }, + { url = "https://files.pythonhosted.org/packages/75/62/f786c3a27f181fa339d851a77e266d208e776b9883cabc40a5b041a31b5a/kiwisolver-1.5.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:bb7c99f0673c03017a3ee01e54a5c2617a05468b11eabe513b0080e063ed95b1", size = 62420, upload-time = "2026-08-28T10:27:12.308Z" }, + { url = "https://files.pythonhosted.org/packages/02/cd/58a91ed25fbad0facdf503297b03768efab04bdf3141e5e3b49a34be7443/kiwisolver-1.5.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:0d8924877ce22e17326a99a418c3c82037da078df3c6a260b13eca677444e6e7", size = 64577, upload-time = "2026-08-28T10:27:13.502Z" }, + { url = "https://files.pythonhosted.org/packages/f6/5c/d501ef5a0958b226eac28306d24d5e5f114be0ace50e19cabae7b6b3b197/kiwisolver-1.5.1-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:534f02c1abb31ed6dbd3515545285c330b2f12d00fdb1fdb71658b9ca5a13a6a", size = 66284, upload-time = "2026-08-28T10:27:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a6/8fbecaf4fc18c02f31f05e47a84c010a80e3ec391ed2f0bdade1d62b5954/kiwisolver-1.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:cea20da04494e662b83c872683bf4ff2345206043d036315ed0e924b652e7294", size = 124031, upload-time = "2026-08-28T10:27:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c6/bf3090d2983b4204347cbdbe952116e7c3b2abf62b4e33e50167a13e75ee/kiwisolver-1.5.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:7fd82debf43c6acd0a94359d232f6bb516ee13f269a7993736a9ac9f988bb5d9", size = 66489, upload-time = "2026-08-28T10:27:17.506Z" }, + { url = "https://files.pythonhosted.org/packages/85/de/562dddef55fdd7c291da8626d6619e72b5fc0870e6ccca0e149a5731e7f3/kiwisolver-1.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:18170a77ddfecf40ec60d0928268dc95880c881864e015a8f34094ed18b9b9ad", size = 64806, upload-time = "2026-08-28T10:27:18.673Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/ba7b9c0164ce1cf62bf2872db63b8483289cf0f3110d6f9390eb09e409ed/kiwisolver-1.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca7f6fe0f37ca978a1e5eb7a3a68e6413f417e78e838324947ffd420202b198b", size = 1482211, upload-time = "2026-08-28T10:27:20.039Z" }, + { url = "https://files.pythonhosted.org/packages/13/dc/34da54efb4976616d45c20aae32d70e89d6e7395ed908029154d1609ef22/kiwisolver-1.5.1-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b973887ff782cfd6b67c9904ad8ca542e0bc5e4961503408b423b5a688b4d38", size = 1283739, upload-time = "2026-08-28T10:27:21.82Z" }, + { url = "https://files.pythonhosted.org/packages/5a/3a/30ffb62bee646e266e98a1b5cd276d9c75b6116fbfcb87c1190838c1b6df/kiwisolver-1.5.1-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f76fc85bd054c806960f917ec0f329e24e436f1712267d90588e4c39890caa63", size = 1301681, upload-time = "2026-08-28T10:27:23.876Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8d/13c70be22a8506880b35fdc38dca36629613bc493405c79f4037f2cd2bb9/kiwisolver-1.5.1-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:828f75af2b0080c8a972e75f649ab46af008e92c6104a57a759157200b835b75", size = 1349159, upload-time = "2026-08-28T10:27:25.899Z" }, + { url = "https://files.pythonhosted.org/packages/82/0e/993972b8ec6767f47cd69818fb3a5ff14510557d29f7d1a839be7574fa1b/kiwisolver-1.5.1-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:431dc224a1a92a5c8f582d96e505196a3b5997a7271076678da2dfde67b77e9a", size = 997613, upload-time = "2026-08-28T10:27:27.507Z" }, + { url = "https://files.pythonhosted.org/packages/36/82/ca26eddd2eda2420dfc56693449c1f821f78b485da9cbde9904c03af3f93/kiwisolver-1.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:61e9a64c7635095a6bfe483e2ff055d437c59bd45f3617a228b37277f0185d62", size = 2235109, upload-time = "2026-08-28T10:27:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/c7/84/97d920881e10840b8d7c7185620298e3e4c88820b05514e3a15a258b08a6/kiwisolver-1.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:3c24cd69455e1b00ddf770c13b6e2c33e07d6dc3f2d34add0bf9277c5c6bbd46", size = 2331207, upload-time = "2026-08-28T10:27:32.795Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ce/34d74b8f25acc58800f4c09268371e8d6159cf0f1206f1e4dc7835629b48/kiwisolver-1.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:27add358abe374ebaa3b8763ef380bc99051b5a4b18d94878366a9e4f59efef0", size = 1986696, upload-time = "2026-08-28T10:27:34.628Z" }, + { url = "https://files.pythonhosted.org/packages/0e/01/f892644014612527aef7031d3306a2ffc60b3cb044f802c1561f8e5e14f3/kiwisolver-1.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:255605693a483db7bd5c79f60437f7bf658f7f520d61aa42722e32257c941951", size = 2496400, upload-time = "2026-08-28T10:27:36.818Z" }, + { url = "https://files.pythonhosted.org/packages/32/6d/d8284e66e697026536e5f418b9cfe56567bffd3c775e3ecfbae373605854/kiwisolver-1.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:7d38b0c279c3032e8c9cc013b405c6df8e1668dbf15465779aa7f15f61201812", size = 2302967, upload-time = "2026-08-28T10:27:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/46/0a/69a355e27f32ba50d5b6369949b6a1702e122f5277c89bc76d452b81c1c4/kiwisolver-1.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:958254518717542d02d0688d0d20cbf771da5e415e6f49543f92481c850a4540", size = 72283, upload-time = "2026-08-28T10:27:40.491Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d8/7a95be90c33dcdd52204d4aa6384d731443225b887283bbd8b61e7931f6c/kiwisolver-1.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:da3275833be0edbaf4830fae08bae3dc7219f40ce0c37eaa6c25825957e06612", size = 69860, upload-time = "2026-08-28T10:27:41.835Z" }, + { url = "https://files.pythonhosted.org/packages/31/f8/9bc493e7f5707788ba7f621902c68f82dc3a7ba03c78fbd337b026cef1ed/kiwisolver-1.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:470d420f98d368d6f010633a20659b544c5fdfa5329e6b70219f2ef08fd4a7ef", size = 126336, upload-time = "2026-08-28T10:27:43.379Z" }, + { url = "https://files.pythonhosted.org/packages/d1/82/3aea86b3f99712db825e9ac5631bf99571e818a8b8961ff98cebd798413e/kiwisolver-1.5.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:83f78128fa28705fa85d01c59771c72fe81c11bd0e6155edbb9f818983a7d761", size = 67698, upload-time = "2026-08-28T10:27:44.613Z" }, + { url = "https://files.pythonhosted.org/packages/84/7d/8daafc5d2e7f9c47a4f78f8865d86d2a9cf399c2a85f86c44a993594410c/kiwisolver-1.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:9506e892bcc3b409831d363c6f53e5985e1c8d1f6f6b0256d00358684ff85378", size = 65945, upload-time = "2026-08-28T10:27:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c9/51dc974d9130da70a8c47a96160123443d387ffe1b6b833d6f91d9429339/kiwisolver-1.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cea90547bfd93807e0013a004dc76552be44fad3bc1cc2b38610a9e889ed098f", size = 1588030, upload-time = "2026-08-28T10:27:47.678Z" }, + { url = "https://files.pythonhosted.org/packages/e6/86/f3e1a730e7a995149d8d3ff9e313b6d8a17b2cf1d98a8eff139dc30463fb/kiwisolver-1.5.1-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8e4d953faaded9ec7ede36824e9814082d22d4c7b1eafbfa079ecba8cd0d076", size = 1390760, upload-time = "2026-08-28T10:27:49.676Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3b/8ba25a2b5a0d2375e046f1b72de5179513f0be95aba6e7b094c89303929f/kiwisolver-1.5.1-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e9c01d3dd7ceba4d1d436cc021d40d592466e40b9bc7f5d83dc4e98a5c9cd8c", size = 1403279, upload-time = "2026-08-28T10:27:51.242Z" }, + { url = "https://files.pythonhosted.org/packages/18/d0/278d5cb8be812740027d5ca0a7eda0c375488a88d6dce0fa60fcc2591ad2/kiwisolver-1.5.1-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37f801b5d7cc0e5a548921308e059fd2b057bb42972b591cfa3049f95423c4ed", size = 1454429, upload-time = "2026-08-28T10:27:53.213Z" }, + { url = "https://files.pythonhosted.org/packages/94/37/bcbab41063ec284c1d200efe5087cf087798c2f8916960aa8a20dd303290/kiwisolver-1.5.1-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:e68e151428b5384f766cd25739bf77c7e4a3dc93b5ded7a12118d9fbfdf78ab6", size = 1073225, upload-time = "2026-08-28T10:27:55.089Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c5/ab79dcdf5ae28909a51210ae0a1c579e97ff997b3466414f0d04c0994583/kiwisolver-1.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:8f8fddb8e323bd6eee4e54e69a39243beab22689070f4c66b472c4cc88bb89d8", size = 2334335, upload-time = "2026-08-28T10:27:56.78Z" }, + { url = "https://files.pythonhosted.org/packages/8d/8e/71d047468a189041d9c93f3b76844b924f9793b188c44bd149fa258912da/kiwisolver-1.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:3cc210010fd2f438a3ed430b45f1b501fd13a8618bf984dc2c5ce5b69b78752e", size = 2424982, upload-time = "2026-08-28T10:27:58.639Z" }, + { url = "https://files.pythonhosted.org/packages/7d/37/1347461bbea6d0e1f0580b94ef603b18e72c2be5f667fa1653867361a00b/kiwisolver-1.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:b5664603a253efd3a75716d793d1d3a6a82723b61dc6db767b2460bbbeec4c0f", size = 2062857, upload-time = "2026-08-28T10:28:00.407Z" }, + { url = "https://files.pythonhosted.org/packages/1f/87/c7f0976c9cd0d127643351bc0c9929e0b8899d7f49d4ec238cd909e39c42/kiwisolver-1.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a7b85b2cc6ea45e5f7e8c9a30bc9fabd47cda09106cbb4b967335c3e6c43b69d", size = 2596022, upload-time = "2026-08-28T10:28:02.183Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9a/59a6f6ae6f938c15076be2c21b6cedea973d71bb1349ec84fa485fab82cf/kiwisolver-1.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ab620eb663952455271ac37f9aaad86b73c969c02f11f53cea405b38e96a4300", size = 2395634, upload-time = "2026-08-28T10:28:03.977Z" }, + { url = "https://files.pythonhosted.org/packages/e9/2d/8982c1fb7926da5bb7ed60318c3665b5c3f941447271ac982960a11b8637/kiwisolver-1.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:cb6fae641357ed2f6e533c0d3c6504a4a5703621a50c89459e46051d56b61140", size = 75379, upload-time = "2026-08-28T10:28:06.307Z" }, + { url = "https://files.pythonhosted.org/packages/07/78/ba7b6dfa1708b82b373ac056928a30c545d5c1a627df9839dcec3c6c1881/kiwisolver-1.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:b390aec180a7c054919c04898835e1c77bced23ea8383eb2c570213bf25d1a86", size = 73011, upload-time = "2026-08-28T10:28:07.578Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c4/1407df7512a5b36cc79840e01710dc575733c461b13ab866cae77eaf87f3/kiwisolver-1.5.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:482676e5bd48d70ac99d9fc78863469845421e01184fa83f1f9366dc49f7e974", size = 134002, upload-time = "2026-08-28T10:28:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/16/45/c37a21ad5c0ab581a93c55ad544721aaa1f0ae94edb29c6a678a23d013e6/kiwisolver-1.5.1-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:072bdb15a3c19a5b5dbc8f8fb1f4e1884bf4f3507eeb4cc6334401274d37a5c0", size = 194292, upload-time = "2026-08-28T10:28:11.06Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c1/69f00d627949580e43d57af0aa465df46868d7c29801c137a55374101294/kiwisolver-1.5.1-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:a5a00665d1a0e26763a7338d7e911d4598fbc1d50dd0d6b7919b7dc6c5d6569f", size = 73362, upload-time = "2026-08-28T10:28:12.449Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f1/8bae9fac0f1837679ed59a5dd7e97e7eb943b738defa7cc0117ea0d107dc/kiwisolver-1.5.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a5716a33bfabb2c6ce27b6cf03253467b3804f83e215f4d202685cf93c6c9874", size = 59543, upload-time = "2026-08-28T10:28:13.794Z" }, + { url = "https://files.pythonhosted.org/packages/c3/3e/42e3639d32ef3ac6ede80c39dc1d1df6224927409960d8f762b6cb504efe/kiwisolver-1.5.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:685929988b208a911f1285e2f8ed54210b0d681a3dc0f03e00d599d291986e7e", size = 57504, upload-time = "2026-08-28T10:28:15.074Z" }, + { url = "https://files.pythonhosted.org/packages/e1/12/f4beaaceb740b96c363a8fa6f34dbdf37a58d9e5f15416427d7bf89c552a/kiwisolver-1.5.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e4e49f7e1a4e7191bdf9dc67a974db714501b1fc52c24324103d06a86abd5c08", size = 79885, upload-time = "2026-08-28T10:28:16.345Z" }, + { url = "https://files.pythonhosted.org/packages/02/24/18d8a755acdae79c37ca2f1a925795aab67b9456c30c8569c377ea3abc77/kiwisolver-1.5.1-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a887b6565bbfe80efde2b7f6e8890d7d9bbdb11bdb17028a3690c32fe0621f", size = 77582, upload-time = "2026-08-28T10:28:17.719Z" }, + { url = "https://files.pythonhosted.org/packages/df/a9/b86dde4f553ef74db0f9c32398614e24b2e8ec1d29a6ca04ae080d7dd29b/kiwisolver-1.5.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1983f0974a750a6f6556f368ba11105d1d8369c735b944747c9f12ae5aea7aae", size = 98321, upload-time = "2026-08-28T10:28:19.087Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1d/59ba570b1774e95e97fde3a0981b2e22118a7a495f73bf74cedc538566a0/kiwisolver-1.5.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:416ba7ff9f233b7036689bb5a3783537e838ad483f63558d2a800f75afe738b1", size = 59450, upload-time = "2026-08-28T10:28:20.383Z" }, + { url = "https://files.pythonhosted.org/packages/22/98/a6849f04dc18b5400e8b98affa2cd8fd86ed583085f036e57b32e571f4fa/kiwisolver-1.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8af9b142ad719ae3a911ebf616bc4b78b32bbab84d6a40d3ad2f129670509957", size = 57400, upload-time = "2026-08-28T10:28:21.632Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ce/a7dc71353dd06a4cbe02222773f52d4a28c81e5a452a75797f8ed113dc99/kiwisolver-1.5.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5daa1f19e097050b9c4d9a78fcc9263cb96c9dfae08037ddc1b7c4ad1889f2a2", size = 79891, upload-time = "2026-08-28T10:28:22.936Z" }, + { url = "https://files.pythonhosted.org/packages/10/b1/d61c61a84ff85d1a36a99df2c152b59ffedb1d356c598902aba44abcdb60/kiwisolver-1.5.1-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cdaeeb6c350106df6bf9d873395973e5f066a9713200b72cd64f55d0a3eafab6", size = 77605, upload-time = "2026-08-28T10:28:24.322Z" }, + { url = "https://files.pythonhosted.org/packages/d3/52/5aef56f21a460a6e43ab3cdfc7697d59d7b87deb0ec97a0f7b91aa4a521b/kiwisolver-1.5.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:17851e5dad4484be0cbccbde3b15331deae036de9aebd45eed964487802b172f", size = 98465, upload-time = "2026-08-28T10:28:25.696Z" }, +] + +[[package]] +name = "linkify-it-py" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "uc-micro-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946, upload-time = "2024-02-04T14:48:04.179Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820, upload-time = "2024-02-04T14:48:02.496Z" }, +] + +[[package]] +name = "linkify-it-py" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/45/98/7a1a5f31fd5c7ba93e963b168e244b8e3dd705b3d2a718e3c3307583bf57/linkify_it_py-2.2.0.tar.gz", hash = "sha256:907acd2d17ac1fbb9ddb62c8957ccbd6158cac602231a15c3b0cd1e215f03cee", size = 32939, upload-time = "2026-08-29T07:07:08.305Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/d4/1152d1c7ab42d8b908be64fd200ddc870dc9d4925e951198702084aa1a7d/linkify_it_py-2.2.0-py3-none-any.whl", hash = "sha256:3adc40eb5af300b2605fcfdb968c24e1d780a90f1f2221af7c15e5111e94d443", size = 21971, upload-time = "2026-08-29T07:07:07.164Z" }, +] + +[[package]] +name = "lz4" +version = "4.4.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/51/f1b86d93029f418033dddf9b9f79c8d2641e7454080478ee2aab5123173e/lz4-4.4.5.tar.gz", hash = "sha256:5f0b9e53c1e82e88c10d7c180069363980136b9d7a8306c4dca4f760d60c39f0", size = 172886, upload-time = "2025-11-03T13:02:36.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/45/2466d73d79e3940cad4b26761f356f19fd33f4409c96f100e01a5c566909/lz4-4.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d221fa421b389ab2345640a508db57da36947a437dfe31aeddb8d5c7b646c22d", size = 207396, upload-time = "2025-11-03T13:01:24.965Z" }, + { url = "https://files.pythonhosted.org/packages/72/12/7da96077a7e8918a5a57a25f1254edaf76aefb457666fcc1066deeecd609/lz4-4.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dc1e1e2dbd872f8fae529acd5e4839efd0b141eaa8ae7ce835a9fe80fbad89f", size = 207154, upload-time = "2025-11-03T13:01:26.922Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0e/0fb54f84fd1890d4af5bc0a3c1fa69678451c1a6bd40de26ec0561bb4ec5/lz4-4.4.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e928ec2d84dc8d13285b4a9288fd6246c5cde4f5f935b479f50d986911f085e3", size = 1291053, upload-time = "2025-11-03T13:01:28.396Z" }, + { url = "https://files.pythonhosted.org/packages/15/45/8ce01cc2715a19c9e72b0e423262072c17d581a8da56e0bd4550f3d76a79/lz4-4.4.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daffa4807ef54b927451208f5f85750c545a4abbff03d740835fc444cd97f758", size = 1278586, upload-time = "2025-11-03T13:01:29.906Z" }, + { url = "https://files.pythonhosted.org/packages/6d/34/7be9b09015e18510a09b8d76c304d505a7cbc66b775ec0b8f61442316818/lz4-4.4.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a2b7504d2dffed3fd19d4085fe1cc30cf221263fd01030819bdd8d2bb101cf1", size = 1367315, upload-time = "2025-11-03T13:01:31.054Z" }, + { url = "https://files.pythonhosted.org/packages/2a/94/52cc3ec0d41e8d68c985ec3b2d33631f281d8b748fb44955bc0384c2627b/lz4-4.4.5-cp310-cp310-win32.whl", hash = "sha256:0846e6e78f374156ccf21c631de80967e03cc3c01c373c665789dc0c5431e7fc", size = 88173, upload-time = "2025-11-03T13:01:32.643Z" }, + { url = "https://files.pythonhosted.org/packages/ca/35/c3c0bdc409f551404355aeeabc8da343577d0e53592368062e371a3620e1/lz4-4.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:7c4e7c44b6a31de77d4dc9772b7d2561937c9588a734681f70ec547cfbc51ecd", size = 99492, upload-time = "2025-11-03T13:01:33.813Z" }, + { url = "https://files.pythonhosted.org/packages/1d/02/4d88de2f1e97f9d05fd3d278fe412b08969bc94ff34942f5a3f09318144a/lz4-4.4.5-cp310-cp310-win_arm64.whl", hash = "sha256:15551280f5656d2206b9b43262799c89b25a25460416ec554075a8dc568e4397", size = 91280, upload-time = "2025-11-03T13:01:35.081Z" }, + { url = "https://files.pythonhosted.org/packages/93/5b/6edcd23319d9e28b1bedf32768c3d1fd56eed8223960a2c47dacd2cec2af/lz4-4.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6da84a26b3aa5da13a62e4b89ab36a396e9327de8cd48b436a3467077f8ccd4", size = 207391, upload-time = "2025-11-03T13:01:36.644Z" }, + { url = "https://files.pythonhosted.org/packages/34/36/5f9b772e85b3d5769367a79973b8030afad0d6b724444083bad09becd66f/lz4-4.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61d0ee03e6c616f4a8b69987d03d514e8896c8b1b7cc7598ad029e5c6aedfd43", size = 207146, upload-time = "2025-11-03T13:01:37.928Z" }, + { url = "https://files.pythonhosted.org/packages/04/f4/f66da5647c0d72592081a37c8775feacc3d14d2625bbdaabd6307c274565/lz4-4.4.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:33dd86cea8375d8e5dd001e41f321d0a4b1eb7985f39be1b6a4f466cd480b8a7", size = 1292623, upload-time = "2025-11-03T13:01:39.341Z" }, + { url = "https://files.pythonhosted.org/packages/85/fc/5df0f17467cdda0cad464a9197a447027879197761b55faad7ca29c29a04/lz4-4.4.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:609a69c68e7cfcfa9d894dc06be13f2e00761485b62df4e2472f1b66f7b405fb", size = 1279982, upload-time = "2025-11-03T13:01:40.816Z" }, + { url = "https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75419bb1a559af00250b8f1360d508444e80ed4b26d9d40ec5b09fe7875cb989", size = 1368674, upload-time = "2025-11-03T13:01:42.118Z" }, + { url = "https://files.pythonhosted.org/packages/fb/31/e97e8c74c59ea479598e5c55cbe0b1334f03ee74ca97726e872944ed42df/lz4-4.4.5-cp311-cp311-win32.whl", hash = "sha256:12233624f1bc2cebc414f9efb3113a03e89acce3ab6f72035577bc61b270d24d", size = 88168, upload-time = "2025-11-03T13:01:43.282Z" }, + { url = "https://files.pythonhosted.org/packages/18/47/715865a6c7071f417bef9b57c8644f29cb7a55b77742bd5d93a609274e7e/lz4-4.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:8a842ead8ca7c0ee2f396ca5d878c4c40439a527ebad2b996b0444f0074ed004", size = 99491, upload-time = "2025-11-03T13:01:44.167Z" }, + { url = "https://files.pythonhosted.org/packages/14/e7/ac120c2ca8caec5c945e6356ada2aa5cfabd83a01e3170f264a5c42c8231/lz4-4.4.5-cp311-cp311-win_arm64.whl", hash = "sha256:83bc23ef65b6ae44f3287c38cbf82c269e2e96a26e560aa551735883388dcc4b", size = 91271, upload-time = "2025-11-03T13:01:45.016Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ac/016e4f6de37d806f7cc8f13add0a46c9a7cfc41a5ddc2bc831d7954cf1ce/lz4-4.4.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:df5aa4cead2044bab83e0ebae56e0944cc7fcc1505c7787e9e1057d6d549897e", size = 207163, upload-time = "2025-11-03T13:01:45.895Z" }, + { url = "https://files.pythonhosted.org/packages/8d/df/0fadac6e5bd31b6f34a1a8dbd4db6a7606e70715387c27368586455b7fc9/lz4-4.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d0bf51e7745484d2092b3a51ae6eb58c3bd3ce0300cf2b2c14f76c536d5697a", size = 207150, upload-time = "2025-11-03T13:01:47.205Z" }, + { url = "https://files.pythonhosted.org/packages/b7/17/34e36cc49bb16ca73fb57fbd4c5eaa61760c6b64bce91fcb4e0f4a97f852/lz4-4.4.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7b62f94b523c251cf32aa4ab555f14d39bd1a9df385b72443fd76d7c7fb051f5", size = 1292045, upload-time = "2025-11-03T13:01:48.667Z" }, + { url = "https://files.pythonhosted.org/packages/90/1c/b1d8e3741e9fc89ed3b5f7ef5f22586c07ed6bb04e8343c2e98f0fa7ff04/lz4-4.4.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c3ea562c3af274264444819ae9b14dbbf1ab070aff214a05e97db6896c7597e", size = 1279546, upload-time = "2025-11-03T13:01:50.159Z" }, + { url = "https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24092635f47538b392c4eaeff14c7270d2c8e806bf4be2a6446a378591c5e69e", size = 1368249, upload-time = "2025-11-03T13:01:51.273Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e7/d667d337367686311c38b580d1ca3d5a23a6617e129f26becd4f5dc458df/lz4-4.4.5-cp312-cp312-win32.whl", hash = "sha256:214e37cfe270948ea7eb777229e211c601a3e0875541c1035ab408fbceaddf50", size = 88189, upload-time = "2025-11-03T13:01:52.605Z" }, + { url = "https://files.pythonhosted.org/packages/a5/0b/a54cd7406995ab097fceb907c7eb13a6ddd49e0b231e448f1a81a50af65c/lz4-4.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:713a777de88a73425cf08eb11f742cd2c98628e79a8673d6a52e3c5f0c116f33", size = 99497, upload-time = "2025-11-03T13:01:53.477Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7e/dc28a952e4bfa32ca16fa2eb026e7a6ce5d1411fcd5986cd08c74ec187b9/lz4-4.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:a88cbb729cc333334ccfb52f070463c21560fca63afcf636a9f160a55fac3301", size = 91279, upload-time = "2025-11-03T13:01:54.419Z" }, + { url = "https://files.pythonhosted.org/packages/2f/46/08fd8ef19b782f301d56a9ccfd7dafec5fd4fc1a9f017cf22a1accb585d7/lz4-4.4.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6bb05416444fafea170b07181bc70640975ecc2a8c92b3b658c554119519716c", size = 207171, upload-time = "2025-11-03T13:01:56.595Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3f/ea3334e59de30871d773963997ecdba96c4584c5f8007fd83cfc8f1ee935/lz4-4.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b424df1076e40d4e884cfcc4c77d815368b7fb9ebcd7e634f937725cd9a8a72a", size = 207163, upload-time = "2025-11-03T13:01:57.721Z" }, + { url = "https://files.pythonhosted.org/packages/41/7b/7b3a2a0feb998969f4793c650bb16eff5b06e80d1f7bff867feb332f2af2/lz4-4.4.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:216ca0c6c90719731c64f41cfbd6f27a736d7e50a10b70fad2a9c9b262ec923d", size = 1292136, upload-time = "2025-11-03T13:02:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/89/d1/f1d259352227bb1c185288dd694121ea303e43404aa77560b879c90e7073/lz4-4.4.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:533298d208b58b651662dd972f52d807d48915176e5b032fb4f8c3b6f5fe535c", size = 1279639, upload-time = "2025-11-03T13:02:01.649Z" }, + { url = "https://files.pythonhosted.org/packages/d2/fb/ba9256c48266a09012ed1d9b0253b9aa4fe9cdff094f8febf5b26a4aa2a2/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:451039b609b9a88a934800b5fc6ee401c89ad9c175abf2f4d9f8b2e4ef1afc64", size = 1368257, upload-time = "2025-11-03T13:02:03.35Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6d/dee32a9430c8b0e01bbb4537573cabd00555827f1a0a42d4e24ca803935c/lz4-4.4.5-cp313-cp313-win32.whl", hash = "sha256:a5f197ffa6fc0e93207b0af71b302e0a2f6f29982e5de0fbda61606dd3a55832", size = 88191, upload-time = "2025-11-03T13:02:04.406Z" }, + { url = "https://files.pythonhosted.org/packages/18/e0/f06028aea741bbecb2a7e9648f4643235279a770c7ffaf70bd4860c73661/lz4-4.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:da68497f78953017deb20edff0dba95641cc86e7423dfadf7c0264e1ac60dc22", size = 99502, upload-time = "2025-11-03T13:02:05.886Z" }, + { url = "https://files.pythonhosted.org/packages/61/72/5bef44afb303e56078676b9f2486f13173a3c1e7f17eaac1793538174817/lz4-4.4.5-cp313-cp313-win_arm64.whl", hash = "sha256:c1cfa663468a189dab510ab231aad030970593f997746d7a324d40104db0d0a9", size = 91285, upload-time = "2025-11-03T13:02:06.77Z" }, + { url = "https://files.pythonhosted.org/packages/49/55/6a5c2952971af73f15ed4ebfdd69774b454bd0dc905b289082ca8664fba1/lz4-4.4.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:67531da3b62f49c939e09d56492baf397175ff39926d0bd5bd2d191ac2bff95f", size = 207348, upload-time = "2025-11-03T13:02:08.117Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d7/fd62cbdbdccc35341e83aabdb3f6d5c19be2687d0a4eaf6457ddf53bba64/lz4-4.4.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a1acbbba9edbcbb982bc2cac5e7108f0f553aebac1040fbec67a011a45afa1ba", size = 207340, upload-time = "2025-11-03T13:02:09.152Z" }, + { url = "https://files.pythonhosted.org/packages/77/69/225ffadaacb4b0e0eb5fd263541edd938f16cd21fe1eae3cd6d5b6a259dc/lz4-4.4.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a482eecc0b7829c89b498fda883dbd50e98153a116de612ee7c111c8bcf82d1d", size = 1293398, upload-time = "2025-11-03T13:02:10.272Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9e/2ce59ba4a21ea5dc43460cba6f34584e187328019abc0e66698f2b66c881/lz4-4.4.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e099ddfaa88f59dd8d36c8a3c66bd982b4984edf127eb18e30bb49bdba68ce67", size = 1281209, upload-time = "2025-11-03T13:02:12.091Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/4d946bd1624ec229b386a3bc8e7a85fa9a963d67d0a62043f0af0978d3da/lz4-4.4.5-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2af2897333b421360fdcce895c6f6281dc3fab018d19d341cf64d043fc8d90d", size = 1369406, upload-time = "2025-11-03T13:02:13.683Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/d429ba4720a9064722698b4b754fb93e42e625f1318b8fe834086c7c783b/lz4-4.4.5-cp313-cp313t-win32.whl", hash = "sha256:66c5de72bf4988e1b284ebdd6524c4bead2c507a2d7f172201572bac6f593901", size = 88325, upload-time = "2025-11-03T13:02:14.743Z" }, + { url = "https://files.pythonhosted.org/packages/4b/85/7ba10c9b97c06af6c8f7032ec942ff127558863df52d866019ce9d2425cf/lz4-4.4.5-cp313-cp313t-win_amd64.whl", hash = "sha256:cdd4bdcbaf35056086d910d219106f6a04e1ab0daa40ec0eeef1626c27d0fddb", size = 99643, upload-time = "2025-11-03T13:02:15.978Z" }, + { url = "https://files.pythonhosted.org/packages/77/4d/a175459fb29f909e13e57c8f475181ad8085d8d7869bd8ad99033e3ee5fa/lz4-4.4.5-cp313-cp313t-win_arm64.whl", hash = "sha256:28ccaeb7c5222454cd5f60fcd152564205bcb801bd80e125949d2dfbadc76bbd", size = 91504, upload-time = "2025-11-03T13:02:17.313Z" }, + { url = "https://files.pythonhosted.org/packages/63/9c/70bdbdb9f54053a308b200b4678afd13efd0eafb6ddcbb7f00077213c2e5/lz4-4.4.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c216b6d5275fc060c6280936bb3bb0e0be6126afb08abccde27eed23dead135f", size = 207586, upload-time = "2025-11-03T13:02:18.263Z" }, + { url = "https://files.pythonhosted.org/packages/b6/cb/bfead8f437741ce51e14b3c7d404e3a1f6b409c440bad9b8f3945d4c40a7/lz4-4.4.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c8e71b14938082ebaf78144f3b3917ac715f72d14c076f384a4c062df96f9df6", size = 207161, upload-time = "2025-11-03T13:02:19.286Z" }, + { url = "https://files.pythonhosted.org/packages/e7/18/b192b2ce465dfbeabc4fc957ece7a1d34aded0d95a588862f1c8a86ac448/lz4-4.4.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b5e6abca8df9f9bdc5c3085f33ff32cdc86ed04c65e0355506d46a5ac19b6e9", size = 1292415, upload-time = "2025-11-03T13:02:20.829Z" }, + { url = "https://files.pythonhosted.org/packages/67/79/a4e91872ab60f5e89bfad3e996ea7dc74a30f27253faf95865771225ccba/lz4-4.4.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b84a42da86e8ad8537aabef062e7f661f4a877d1c74d65606c49d835d36d668", size = 1279920, upload-time = "2025-11-03T13:02:22.013Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bba042ec5a61fa77c7e380351a61cb768277801240249841defd2ff0a10742f", size = 1368661, upload-time = "2025-11-03T13:02:23.208Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/137ddeea14c2cb86864838277b2607d09f8253f152156a07f84e11768a28/lz4-4.4.5-cp314-cp314-win32.whl", hash = "sha256:bd85d118316b53ed73956435bee1997bd06cc66dd2fa74073e3b1322bd520a67", size = 90139, upload-time = "2025-11-03T13:02:24.301Z" }, + { url = "https://files.pythonhosted.org/packages/18/2c/8332080fd293f8337779a440b3a143f85e374311705d243439a3349b81ad/lz4-4.4.5-cp314-cp314-win_amd64.whl", hash = "sha256:92159782a4502858a21e0079d77cdcaade23e8a5d252ddf46b0652604300d7be", size = 101497, upload-time = "2025-11-03T13:02:25.187Z" }, + { url = "https://files.pythonhosted.org/packages/ca/28/2635a8141c9a4f4bc23f5135a92bbcf48d928d8ca094088c962df1879d64/lz4-4.4.5-cp314-cp314-win_arm64.whl", hash = "sha256:d994b87abaa7a88ceb7a37c90f547b8284ff9da694e6afcfaa8568d739faf3f7", size = 93812, upload-time = "2025-11-03T13:02:26.133Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/508f2ee73c126e4de53a3b8523ad14d666aeb00a6795425315f770dbf2f4/lz4-4.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6538aaaedd091d6e5abdaa19b99e6e82697d67518f114721b5248709b639fad", size = 207384, upload-time = "2025-11-03T13:02:27.043Z" }, + { url = "https://files.pythonhosted.org/packages/64/84/da7fda86dcc7b6d40d45dd28201fc136adfc390815126db41411bf1e5205/lz4-4.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:13254bd78fef50105872989a2dc3418ff09aefc7d0765528adc21646a7288294", size = 207137, upload-time = "2025-11-03T13:02:28.021Z" }, + { url = "https://files.pythonhosted.org/packages/01/95/fb9c5bffed0f985eab70daf2087a94ad55cbbf83024175f39ff663f48b22/lz4-4.4.5-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e64e61f29cf95afb43549063d8433b46352baf0c8a70aa45e2585618fcf59d86", size = 1290508, upload-time = "2025-11-03T13:02:29.485Z" }, + { url = "https://files.pythonhosted.org/packages/57/6e/6a39b5ca9b9538cc9d61248c431065ad76cc0f10b40cb07d60b5bdde7750/lz4-4.4.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff1b50aeeec64df5603f17984e4b5be6166058dcf8f1e26a3da40d7a0f6ab547", size = 1278102, upload-time = "2025-11-03T13:02:30.878Z" }, + { url = "https://files.pythonhosted.org/packages/73/57/551a7f95825c9721d8bee4ec02d8b139b1a44796e63d09a737ca0d67b6b1/lz4-4.4.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1dd4d91d25937c2441b9fc0f4af01704a2d09f30a38c5798bc1d1b5a15ec9581", size = 1366651, upload-time = "2025-11-03T13:02:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/4f/85/daa1ae5695ce40924813257d7f5a8990ba5dd78a9170f912dd85c498f97c/lz4-4.4.5-cp39-cp39-win32.whl", hash = "sha256:d64141085864918392c3159cdad15b102a620a67975c786777874e1e90ef15ce", size = 88165, upload-time = "2025-11-03T13:02:33.413Z" }, + { url = "https://files.pythonhosted.org/packages/df/db/3e84e506fdd5e04c9e8564d30bb08b0f3103dd9a2fb863c86bd46accb99a/lz4-4.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:f32b9e65d70f3684532358255dc053f143835c5f5991e28a5ac4c93ce94b9ea7", size = 99487, upload-time = "2025-11-03T13:02:34.246Z" }, + { url = "https://files.pythonhosted.org/packages/6a/85/40aa9d006fdebc4ae868c86ce2108a9453c2b524284817427de1284b5b00/lz4-4.4.5-cp39-cp39-win_arm64.whl", hash = "sha256:f9b8bde9909a010c75b3aea58ec3910393b758f3c219beed67063693df854db0", size = 91275, upload-time = "2025-11-03T13:02:35.117Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, +] + +[package.optional-dependencies] +linkify = [ + { name = "linkify-it-py", version = "2.0.3", source = { registry = "https://pypi.org/simple" } }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[package.optional-dependencies] +linkify = [ + { name = "linkify-it-py", version = "2.2.0", source = { registry = "https://pypi.org/simple" } }, +] + +[[package]] +name = "matplotlib" +version = "3.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "contourpy", version = "1.3.0", source = { registry = "https://pypi.org/simple" } }, + { name = "cycler" }, + { name = "fonttools", version = "4.60.2", source = { registry = "https://pypi.org/simple" } }, + { name = "importlib-resources" }, + { name = "kiwisolver", version = "1.4.7", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pillow", version = "11.3.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529, upload-time = "2024-12-13T05:56:34.184Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/94/27d2e2c30d54b56c7b764acc1874a909e34d1965a427fc7092bb6a588b63/matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50", size = 7885089, upload-time = "2024-12-13T05:54:24.224Z" }, + { url = "https://files.pythonhosted.org/packages/c6/25/828273307e40a68eb8e9df832b6b2aaad075864fdc1de4b1b81e40b09e48/matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff", size = 7770600, upload-time = "2024-12-13T05:54:27.214Z" }, + { url = "https://files.pythonhosted.org/packages/f2/65/f841a422ec994da5123368d76b126acf4fc02ea7459b6e37c4891b555b83/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26", size = 8200138, upload-time = "2024-12-13T05:54:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/272aca07a38804d93b6050813de41ca7ab0e29ba7a9dd098e12037c919a9/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50", size = 8312711, upload-time = "2024-12-13T05:54:34.396Z" }, + { url = "https://files.pythonhosted.org/packages/98/37/f13e23b233c526b7e27ad61be0a771894a079e0f7494a10d8d81557e0e9a/matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5", size = 9090622, upload-time = "2024-12-13T05:54:36.808Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8c/b1f5bd2bd70e60f93b1b54c4d5ba7a992312021d0ddddf572f9a1a6d9348/matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d", size = 7828211, upload-time = "2024-12-13T05:54:40.596Z" }, + { url = "https://files.pythonhosted.org/packages/74/4b/65be7959a8fa118a3929b49a842de5b78bb55475236fcf64f3e308ff74a0/matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c", size = 7894430, upload-time = "2024-12-13T05:54:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/e9/18/80f70d91896e0a517b4a051c3fd540daa131630fd75e02e250365353b253/matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099", size = 7780045, upload-time = "2024-12-13T05:54:46.414Z" }, + { url = "https://files.pythonhosted.org/packages/a2/73/ccb381026e3238c5c25c3609ba4157b2d1a617ec98d65a8b4ee4e1e74d02/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249", size = 8209906, upload-time = "2024-12-13T05:54:49.459Z" }, + { url = "https://files.pythonhosted.org/packages/ab/33/1648da77b74741c89f5ea95cbf42a291b4b364f2660b316318811404ed97/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423", size = 8322873, upload-time = "2024-12-13T05:54:53.066Z" }, + { url = "https://files.pythonhosted.org/packages/57/d3/8447ba78bc6593c9044c372d1609f8ea10fb1e071e7a9e0747bea74fc16c/matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e", size = 9099566, upload-time = "2024-12-13T05:54:55.522Z" }, + { url = "https://files.pythonhosted.org/packages/23/e1/4f0e237bf349c02ff9d1b6e7109f1a17f745263809b9714a8576dc17752b/matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3", size = 7838065, upload-time = "2024-12-13T05:54:58.337Z" }, + { url = "https://files.pythonhosted.org/packages/1a/2b/c918bf6c19d6445d1cefe3d2e42cb740fb997e14ab19d4daeb6a7ab8a157/matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70", size = 7891131, upload-time = "2024-12-13T05:55:02.837Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e5/b4e8fc601ca302afeeabf45f30e706a445c7979a180e3a978b78b2b681a4/matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483", size = 7776365, upload-time = "2024-12-13T05:55:05.158Z" }, + { url = "https://files.pythonhosted.org/packages/99/06/b991886c506506476e5d83625c5970c656a491b9f80161458fed94597808/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f", size = 8200707, upload-time = "2024-12-13T05:55:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e2/556b627498cb27e61026f2d1ba86a78ad1b836fef0996bef5440e8bc9559/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00", size = 8313761, upload-time = "2024-12-13T05:55:12.95Z" }, + { url = "https://files.pythonhosted.org/packages/58/ff/165af33ec766ff818306ea88e91f9f60d2a6ed543be1eb122a98acbf3b0d/matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0", size = 9095284, upload-time = "2024-12-13T05:55:16.199Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8b/3d0c7a002db3b1ed702731c2a9a06d78d035f1f2fb0fb936a8e43cc1e9f4/matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b", size = 7841160, upload-time = "2024-12-13T05:55:19.991Z" }, + { url = "https://files.pythonhosted.org/packages/49/b1/999f89a7556d101b23a2f0b54f1b6e140d73f56804da1398f2f0bc0924bc/matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6", size = 7891499, upload-time = "2024-12-13T05:55:22.142Z" }, + { url = "https://files.pythonhosted.org/packages/87/7b/06a32b13a684977653396a1bfcd34d4e7539c5d55c8cbfaa8ae04d47e4a9/matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45", size = 7776802, upload-time = "2024-12-13T05:55:25.947Z" }, + { url = "https://files.pythonhosted.org/packages/65/87/ac498451aff739e515891bbb92e566f3c7ef31891aaa878402a71f9b0910/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858", size = 8200802, upload-time = "2024-12-13T05:55:28.461Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6b/9eb761c00e1cb838f6c92e5f25dcda3f56a87a52f6cb8fdfa561e6cf6a13/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64", size = 8313880, upload-time = "2024-12-13T05:55:30.965Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/c8eaa600e2085eec7e38cbbcc58a30fc78f8224939d31d3152bdafc01fd1/matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df", size = 9094637, upload-time = "2024-12-13T05:55:33.701Z" }, + { url = "https://files.pythonhosted.org/packages/71/1f/c6e1daea55b7bfeb3d84c6cb1abc449f6a02b181e7e2a5e4db34c3afb793/matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799", size = 7841311, upload-time = "2024-12-13T05:55:36.737Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3a/2757d3f7d388b14dd48f5a83bea65b6d69f000e86b8f28f74d86e0d375bd/matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb", size = 7919989, upload-time = "2024-12-13T05:55:39.024Z" }, + { url = "https://files.pythonhosted.org/packages/24/28/f5077c79a4f521589a37fe1062d6a6ea3534e068213f7357e7cfffc2e17a/matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a", size = 7809417, upload-time = "2024-12-13T05:55:42.412Z" }, + { url = "https://files.pythonhosted.org/packages/36/c8/c523fd2963156692916a8eb7d4069084cf729359f7955cf09075deddfeaf/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c", size = 8226258, upload-time = "2024-12-13T05:55:47.259Z" }, + { url = "https://files.pythonhosted.org/packages/f6/88/499bf4b8fa9349b6f5c0cf4cead0ebe5da9d67769129f1b5651e5ac51fbc/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764", size = 8335849, upload-time = "2024-12-13T05:55:49.763Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9f/20a4156b9726188646a030774ee337d5ff695a965be45ce4dbcb9312c170/matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041", size = 9102152, upload-time = "2024-12-13T05:55:51.997Z" }, + { url = "https://files.pythonhosted.org/packages/10/11/237f9c3a4e8d810b1759b67ff2da7c32c04f9c80aa475e7beb36ed43a8fb/matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965", size = 7896987, upload-time = "2024-12-13T05:55:55.941Z" }, + { url = "https://files.pythonhosted.org/packages/56/eb/501b465c9fef28f158e414ea3a417913dc2ac748564c7ed41535f23445b4/matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c", size = 7885919, upload-time = "2024-12-13T05:55:59.66Z" }, + { url = "https://files.pythonhosted.org/packages/da/36/236fbd868b6c91309a5206bd90c3f881f4f44b2d997cd1d6239ef652f878/matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7", size = 7771486, upload-time = "2024-12-13T05:56:04.264Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838, upload-time = "2024-12-13T05:56:06.792Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492, upload-time = "2024-12-13T05:56:09.964Z" }, + { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500, upload-time = "2024-12-13T05:56:13.55Z" }, + { url = "https://files.pythonhosted.org/packages/57/68/c2feb4667adbf882ffa4b3e0ac9967f848980d9f8b5bebd86644aa67ce6a/matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac", size = 7822962, upload-time = "2024-12-13T05:56:16.358Z" }, + { url = "https://files.pythonhosted.org/packages/0c/22/2ef6a364cd3f565442b0b055e0599744f1e4314ec7326cdaaa48a4d864d7/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c", size = 7877995, upload-time = "2024-12-13T05:56:18.805Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/2737456e566e9f4d94ae76b8aa0d953d9acb847714f9a7ad80184474f5be/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca", size = 7769300, upload-time = "2024-12-13T05:56:21.315Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1f/e709c6ec7b5321e6568769baa288c7178e60a93a9da9e682b39450da0e29/matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db", size = 8313423, upload-time = "2024-12-13T05:56:26.719Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/5a1f868782cd13f053a679984e222007ecff654a9bfbac6b27a65f4eeb05/matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865", size = 7854624, upload-time = "2024-12-13T05:56:29.359Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.9" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" } }, + { name = "cycler" }, + { name = "fonttools", version = "4.65.0", source = { registry = "https://pypi.org/simple" } }, + { name = "kiwisolver", version = "1.5.1", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pillow", version = "12.3.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/6f/340b04986e67aac6f66c5145ce68bf72c64bed30f92c8913499a6e6b8f99/matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217", size = 8296625, upload-time = "2026-04-24T00:11:43.376Z" }, + { url = "https://files.pythonhosted.org/packages/bb/2f/127081eb83162053ebb9678ceac64220b93a663e0167432566e9c7c82aab/matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b", size = 8188790, upload-time = "2026-04-24T00:11:46.556Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b7/d8bcec2626c35f96972bff656299fef4578113ea6193c8fdad324710410c/matplotlib-3.10.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aa972116abb4c9d201bf245620b433726cb6856f3bef6a78f776a00f5c92d37", size = 8769389, upload-time = "2026-04-24T00:11:48.959Z" }, + { url = "https://files.pythonhosted.org/packages/12/49/b78e214a527ea732033b7f4d37f7afb504d74ba9d134bd47938230dfb8b1/matplotlib-3.10.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae2f11957b27ce53497dd4d7b235c4d4f1faf383dfb39d0c5beb833bff883294", size = 9589657, upload-time = "2026-04-24T00:11:51.915Z" }, + { url = "https://files.pythonhosted.org/packages/5f/15/5246f7b43beae19c74dfee651d58d6cc8112e06f77adb4e88cc04f2e3a23/matplotlib-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b049278ddce116aaa1c1377ebf58adea909132dfce0281cf7e3a1ea9fc2e2c65", size = 9651983, upload-time = "2026-04-24T00:11:54.766Z" }, + { url = "https://files.pythonhosted.org/packages/75/77/5acecfe672ba0fa1b8c0454f69ce155d1e6fc5852fa7206bf9afaf767121/matplotlib-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:82834c3c292d24d3a8aae77cd2d20019de69d692a34a970e4fdb8d33e2ea3dda", size = 8199701, upload-time = "2026-04-24T00:11:58.389Z" }, + { url = "https://files.pythonhosted.org/packages/4c/8c/290f021104741fea63769c31494f5324c0cd249bf536a65a4350767b1f22/matplotlib-3.10.9-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:68cfdcede415f7c8f5577b03303dd94526cdb6d11036cecdc205e08733b2d2bb", size = 8306860, upload-time = "2026-04-24T00:12:01.207Z" }, + { url = "https://files.pythonhosted.org/packages/51/18/325cd32ece1120d1da51cc4e4294c6580190699490183fc2fe8cb6d61ec5/matplotlib-3.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfca0129678bd56379db26c52b5d77ed7de314c047492fbdc763aa7501710cfb", size = 8199254, upload-time = "2026-04-24T00:12:04.239Z" }, + { url = "https://files.pythonhosted.org/packages/79/db/e28c1b83e3680740aa78925f5fb2ae4d16207207419ad75ea9fe604f8676/matplotlib-3.10.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e436d155fa8a3399dc62683f8f5d0e2e50d25d0144a73edd73f82eec8f4abfb", size = 8777092, upload-time = "2026-04-24T00:12:06.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/fa/3ce7adfe9ba101748f465211660d9c6374c876b671bdb8c2bb6d347e8b94/matplotlib-3.10.9-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56fc0bd271b00025c6edfdc7c2dcd247372c8e1544971d62e1dc7c17367e8bf9", size = 9595691, upload-time = "2026-04-24T00:12:09.706Z" }, + { url = "https://files.pythonhosted.org/packages/36/c4/6960a76686ed668f2c60f84e9799ba4c0d56abdb36b1577b60c1d061d1ec/matplotlib-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5a6104ed666402ba5106d7f36e0e0cdca4e8d7fa4d39708ca88019e2835a2eb", size = 9659771, upload-time = "2026-04-24T00:12:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0d/271aace3342157c64700c9ff4c59c7b392f3dbab393692e8db6fbe7ab96c/matplotlib-3.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:d730e984eddf56974c3e72b6129c7ca462ac38dc624338f4b0b23eb23ecba00f", size = 8205112, upload-time = "2026-04-24T00:12:15.773Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ee/cb57ad4754f3e7b9174ce6ce66d9205fb827067e48a9f58ac09d7e7d6b77/matplotlib-3.10.9-cp311-cp311-win_arm64.whl", hash = "sha256:51bf0ddbdc598e060d46c16b5590708f81a1624cefbaaf62f6a81bf9285b8c80", size = 8132310, upload-time = "2026-04-24T00:12:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/35/c6/5581e26c72233ebb2a2a6fed2d24fb7c66b4700120b813f51b0555acf0b6/matplotlib-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0c3c28d9fbcc1fe7a03be236d73430cf6409c41fb2383a7ac52fe932b072cb1", size = 8319908, upload-time = "2026-04-24T00:12:21.323Z" }, + { url = "https://files.pythonhosted.org/packages/b7/18/4880dd762e40cd360c1bf06e890c5a97b997e91cb324602b1a19950ad5ce/matplotlib-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cb28c2bd769aa3e98322c6ab09854cbcc52ab69d2759d681bba3e327b2b320", size = 8216016, upload-time = "2026-04-24T00:12:23.4Z" }, + { url = "https://files.pythonhosted.org/packages/32/91/d024616abdba99e83120e07a20658976f6a343646710760c4a51df126029/matplotlib-3.10.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae20801130378b82d647ff5047c07316295b68dc054ca6b3c13519d0ea624285", size = 8789336, upload-time = "2026-04-24T00:12:26.096Z" }, + { url = "https://files.pythonhosted.org/packages/5c/04/030a2f61ef2158f5e4c259487a92ac877732499fb33d871585d89e03c42d/matplotlib-3.10.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c63ebcd8b4b169eb2f5c200552ae6b8be8999a005b6b507ed76fb8d7d674fe2", size = 9604602, upload-time = "2026-04-24T00:12:29.052Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c2/541e4d09d87bb6b5830fc28b4c887a9a8cf4e1c6cee698a8c05552ae2003/matplotlib-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d75d11c949914165976c621b2324f9ef162af7ebf4b057ddf95dd1dba7e5edcf", size = 9670966, upload-time = "2026-04-24T00:12:32.131Z" }, + { url = "https://files.pythonhosted.org/packages/04/a1/4571fc46e7702de8d0c2dc54ad1b2f8e29328dea3ee90831181f7353d93c/matplotlib-3.10.9-cp312-cp312-win_amd64.whl", hash = "sha256:d091f9d758b34aaaaa6331d13574bf01891d903b3dec59bfff458ef7551de5d6", size = 8217462, upload-time = "2026-04-24T00:12:35.226Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d0/2269edb12aa30c13c8bcc9382892e39943ce1d28aab4ec296e0381798e81/matplotlib-3.10.9-cp312-cp312-win_arm64.whl", hash = "sha256:10cc5ce06d10231c36f40e875f3c7e8050362a4ee8f0ee5d29a6b3277d57bb42", size = 8136688, upload-time = "2026-04-24T00:12:37.442Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d3/8d4f6afbecb49fc04e060a57c0fce39ea51cc163a6bd87303ccd698e4fa6/matplotlib-3.10.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b580440f1ff81a0e34122051a3dfabb7e4b7f9e380629929bde0eff9af72165f", size = 8320331, upload-time = "2026-04-24T00:12:39.688Z" }, + { url = "https://files.pythonhosted.org/packages/63/d9/9e14bc7564bf92d5ffa801ae5fac819ce74b925dfb55e3ebde61a3bbad3e/matplotlib-3.10.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b1b745c489cd1a77a0dc1120a05dc87af9798faebc913601feb8c73d89bf2d1e", size = 8216461, upload-time = "2026-04-24T00:12:42.494Z" }, + { url = "https://files.pythonhosted.org/packages/8a/17/4402d0d14ccf1dfc70932600b68097fbbf9c898a4871d2cbbe79c7801a32/matplotlib-3.10.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f3bcac1ca5ed000a6f4337d47ba67dfddf37ed6a46c15fd7f014997f7bf865f", size = 8790091, upload-time = "2026-04-24T00:12:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0b/322aeec06dd9b91411f92028b37d447342770a24392aa4813e317064dad5/matplotlib-3.10.9-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a8d66a55def891c33147ba3ba9bfcabf0b526a43764c818acbb4525e5ed0838", size = 9605027, upload-time = "2026-04-24T00:12:47.583Z" }, + { url = "https://files.pythonhosted.org/packages/74/88/5f13482f55e7b00bcfc09838b093c2456e1379978d2a146844aae05350ad/matplotlib-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d843374407c4017a6403b59c6c81606773d136f3259d5b6da3131bc814542cc2", size = 9671269, upload-time = "2026-04-24T00:12:50.878Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/0840fd2f93da988ec660b8ad1984abe9f25d2aed22a5e394ff1c68c88307/matplotlib-3.10.9-cp313-cp313-win_amd64.whl", hash = "sha256:f4399f64b3e94cd500195490972ae1ee81170df1636fa15364d157d5bdd7b921", size = 8217588, upload-time = "2026-04-24T00:12:53.784Z" }, + { url = "https://files.pythonhosted.org/packages/47/b9/d706d06dd605c49b9f83a2aed8c13e3e5db70697d7a80b7e3d7915de6b17/matplotlib-3.10.9-cp313-cp313-win_arm64.whl", hash = "sha256:ba7b3b8ef09eab7df0e86e9ae086faa433efbfbdb46afcb3aa16aabf779469a8", size = 8136913, upload-time = "2026-04-24T00:12:56.501Z" }, + { url = "https://files.pythonhosted.org/packages/9b/45/6e32d96978264c8ca8c4b1010adb955a1a49cfaf314e212bbc8908f04a61/matplotlib-3.10.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:09218df8a93712bd6ea133e83a153c755448cf7868316c531cffcc43f69d1cc9", size = 8368019, upload-time = "2026-04-24T00:12:58.896Z" }, + { url = "https://files.pythonhosted.org/packages/86/0a/c8e3d3bba245f0f7fc424937f8ff7ef77291a36af3edb97ccd78aa93d84f/matplotlib-3.10.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:82368699727bfb7b0182e1aa13082e3c08e092fa1a25d3e1fd92405bff96f6d4", size = 8264645, upload-time = "2026-04-24T00:13:01.406Z" }, + { url = "https://files.pythonhosted.org/packages/3d/aa/5bf5a14fe4fed73a4209a155606f8096ff797aad89c6c35179026571133e/matplotlib-3.10.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3225f4e1edcb8c86c884ddf79ebe20ecd0a67d30188f279897554ccd8fded4dc", size = 8802194, upload-time = "2026-04-24T00:13:03.702Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5e/b4be852d6bba6fd15893fadf91ff26ae49cb91aac789e95dde9d342e664f/matplotlib-3.10.9-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de2445a0c6690d21b7eb6ce071cebad6d40a2e9bdf10d039074a96ba19797b99", size = 9622684, upload-time = "2026-04-24T00:13:06.647Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/ed428c971139112ef730f62770654d609467346d09d4b62617e1afd68a5a/matplotlib-3.10.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b2b9516251cb89ff618d757daec0e2ed1bf21248013844a853d87ef85ab3081d", size = 9680790, upload-time = "2026-04-24T00:13:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/e7/09/052e884aaf2b985c63cb79f715f1d5b6a3eaa7de78f6a52b9dbc077d5b53/matplotlib-3.10.9-cp313-cp313t-win_amd64.whl", hash = "sha256:e9fae004b941b23ff2edcf1567a857ed77bafc8086ffa258190462328434faf8", size = 8287571, upload-time = "2026-04-24T00:13:13.087Z" }, + { url = "https://files.pythonhosted.org/packages/f4/38/ae27288e788c35a4250491422f3db7750366fc8c97d6f36fbdecfc1f5518/matplotlib-3.10.9-cp313-cp313t-win_arm64.whl", hash = "sha256:6b63d9c7c769b88ab81e10dc86e4e0607cf56817b9f9e6cf24b2a5f1693b8e38", size = 8188292, upload-time = "2026-04-24T00:13:15.546Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e6/3bd8afd04949f02eabc1c17115ea5255e19cacd4d06fc5abdde4eeb0052c/matplotlib-3.10.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:172db52c9e683f5d12eaf57f0f54834190e12581fe1cc2a19595a8f5acb4e77d", size = 8321276, upload-time = "2026-04-24T00:13:18.318Z" }, + { url = "https://files.pythonhosted.org/packages/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97e35e8d39ccc85859095e01a53847432ba9a53ddf7986f7a54a11b73d0e143f", size = 8218218, upload-time = "2026-04-24T00:13:20.974Z" }, + { url = "https://files.pythonhosted.org/packages/85/8f/becc9722cafc64f5d2eb0b7c1bf5f585271c618a45dbd8fabeb021f898b6/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aba1615dabe83188e19d4f75a253c6a08423e04c1425e64039f800050a69de6b", size = 9608145, upload-time = "2026-04-24T00:13:23.228Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf8167e023ad956c15f36302911d5406bd99a9862c1a8499ea6f7c0e015dc2", size = 9885085, upload-time = "2026-04-24T00:13:25.849Z" }, + { url = "https://files.pythonhosted.org/packages/a5/fd/fa69f2221534e80cc5772ac2b7d222011a2acafc2ec7216d5dd174c864ae/matplotlib-3.10.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59476c6d29d612b8e9bb6ce8c5b631be6ba8f9e3a2421f22a02b192c7dd28716", size = 9672358, upload-time = "2026-04-24T00:13:28.906Z" }, + { url = "https://files.pythonhosted.org/packages/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl", hash = "sha256:336b9acc64d309063126edcdaca00db9373af3c476bb94388fe9c5a53ad13e6f", size = 8349970, upload-time = "2026-04-24T00:13:31.904Z" }, + { url = "https://files.pythonhosted.org/packages/64/dc/95d60ecaefe30680a154b52ea96ab4b0dab547f1fd6aa12f5fb655e89cae/matplotlib-3.10.9-cp314-cp314-win_arm64.whl", hash = "sha256:2dc9477819ffd78ad12a20df1d9d6a6bd4fec6aaa9072681465fddca052f1456", size = 8272785, upload-time = "2026-04-24T00:13:34.511Z" }, + { url = "https://files.pythonhosted.org/packages/70/a0/005d68bc8b8418300ce6591f18586910a8526806e2ab663933d9f20a41e9/matplotlib-3.10.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:da4e09638420548f31c354032a6250e473c68e5a4e96899b4844cf39ddea23fe", size = 8367999, upload-time = "2026-04-24T00:13:36.962Z" }, + { url = "https://files.pythonhosted.org/packages/22/05/1236cc9290be70b2498af20ca348add76e3fffe7f67b477db5133a84f3ea/matplotlib-3.10.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:345f6f68ecc8da0ca56fad2ea08fde1a115eda530079eca185d50a7bc3e146c6", size = 8264543, upload-time = "2026-04-24T00:13:39.851Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c2/071f5a5ff6c5bd63aaaf2f45c811d9bf2ced94bde188d9e1a519e21d0cba/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4edcfbd8565339aa62f1cd4012f7180926fdbe71850f7b0d3c379c175cd6b66c", size = 9622800, upload-time = "2026-04-24T00:13:42.296Z" }, + { url = "https://files.pythonhosted.org/packages/95/57/da7d1f10a85624b9e7db68e069dd94e58dc41dbf9463c5921632ecbe3661/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6be157fe17fc37cb95ac1d7374cf717ce9259616edec911a78d9d26dae8522d4", size = 9888561, upload-time = "2026-04-24T00:13:45.026Z" }, + { url = "https://files.pythonhosted.org/packages/67/b2/ef8d6bb59b0edb6c16c968b70f548aa13b54348972def5aa6ac85df67145/matplotlib-3.10.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e42042d54db34fda4e95a7bd3e5789c2a995d2dad3eb8850232ee534092fbbf", size = 9680884, upload-time = "2026-04-24T00:13:48.066Z" }, + { url = "https://files.pythonhosted.org/packages/61/1c/d21bfeb9931881ebe96bcfcff27c7ae4b160ae0ec291a714c42641a56d75/matplotlib-3.10.9-cp314-cp314t-win_amd64.whl", hash = "sha256:c27df8b3848f32a83d1767566595e43cfaa4460380974da06f4279a7ec143c39", size = 8432333, upload-time = "2026-04-24T00:13:51.008Z" }, + { url = "https://files.pythonhosted.org/packages/78/23/92493c3e6e1b635ccfff146f7b99e674808787915420373ac399283764c2/matplotlib-3.10.9-cp314-cp314t-win_arm64.whl", hash = "sha256:a49f1eadc84ca85fd72fa4e89e70e61bf86452df6f971af04b12c60761a0772c", size = 8324785, upload-time = "2026-04-24T00:13:53.633Z" }, + { url = "https://files.pythonhosted.org/packages/2c/2b/0e92ad0ac446633f928a1563db4aa8add407e1924faf0ded5b95b35afb27/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b", size = 8293058, upload-time = "2026-04-24T00:13:56.339Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/74682fd369f5299ceda438fea2a0662e6383b85c9383fb9cdfcf04713e07/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f", size = 8186627, upload-time = "2026-04-24T00:13:58.623Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e8/368aab88f3c4cd8992800f31abfe0670c3e47540ba20a97e9fdbcde594b3/matplotlib-3.10.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6640f75af2c6148293caa0a2b39dd806a492dd66c8a8b04035813e33d0fd2585", size = 8764117, upload-time = "2026-04-24T00:14:01.684Z" }, + { url = "https://files.pythonhosted.org/packages/63/e2/9f66ca6a651a52abfe0d4964ce01439ed34f3f1e119de10ff3a07f403043/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:42fb814efabe95c06c1994d8ab5a8385f43a249e23badd3ba931d4308e5bca20", size = 8304420, upload-time = "2026-04-24T00:14:04.57Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e8/467c03568218792906aa87b5e7bb379b605e056ed0c74fe00c051786d925/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f76e640a5268850bfda54b5131b1b1941cc685e42c5fa98ed9f2d64038308cba", size = 8197981, upload-time = "2026-04-24T00:14:07.233Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/afead29192170917537934c6aff4b008c805fff7b1ccea0c79120d96beda/matplotlib-3.10.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3fc0364dfbe1d07f6d15c5ebd0c5bf89e126916e5a8667dd4a7a6e84c36653d4", size = 8774002, upload-time = "2026-04-24T00:14:09.816Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "contourpy", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "cycler" }, + { name = "fonttools", version = "4.66.1", source = { registry = "https://pypi.org/simple" } }, + { name = "kiwisolver", version = "1.5.1", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "packaging" }, + { name = "pillow", version = "12.3.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/c8/9aa712a0afb882649424dd8de8ad9aa6235e796e84c6052e8f6dc1598d0d/matplotlib-3.11.2.tar.gz", hash = "sha256:cec596316640f2b394b8f0daa0ea61a8eae82d017b620b9f202befb972a59ea4", size = 32660610, upload-time = "2026-09-11T19:05:31.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/a9/a7fc5a63c427aeb9a4b99d6a0449f891be0952d3aee2b85229099f7b9f54/matplotlib-3.11.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5e1e923a3fc3326b99ec0a6ff1ab1338ac6c6cc62ad9d8a9c944197c7f8c6221", size = 9461046, upload-time = "2026-09-11T19:02:59.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d7/59d8ee63e4dee845d953515c50d67e6b8cefa953b453c6b803f197ae556e/matplotlib-3.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c27e577ece613ea12a0790e00b4eb80d901c59a3e16cad474f31d8b1529690b9", size = 9290872, upload-time = "2026-09-11T19:03:02.295Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a4/1ca765c63a60e3096ae2ad132eb25f6f7eab0377418cd0472808befd9665/matplotlib-3.11.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:07d9b9fa60cd4c393692f50d0bb03123242ddf61c99bb0e95e75feb354e7c1a8", size = 9854405, upload-time = "2026-09-11T19:03:04.796Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3d/f28ca971a4ad0ed83ebdd60230b09d99de8b91aba47964fac3a81eb2e2ba/matplotlib-3.11.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30ec15d7eefee71de16b7c689b42ba49715a4644650b76a6c7c70d79daf24e91", size = 10660507, upload-time = "2026-09-11T19:03:07.402Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0c/a743556bc64a9b57d2246b14d91b713078adfd2df4199f542df1861737a9/matplotlib-3.11.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:116cdb0eb0eb5644fc98eb2975d4b4dd4ad35e5c8e6b851c22e6976f371f7ab5", size = 10801141, upload-time = "2026-09-11T19:03:11.357Z" }, + { url = "https://files.pythonhosted.org/packages/66/54/91fe3fdfa29100b4668cbf9721577a10acde6e009694618230e4e7a97527/matplotlib-3.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:a24d5fd36e4f0e742c3851dcd20810e56a95633a342e4bf6cb591c678e8fe61f", size = 9329982, upload-time = "2026-09-11T19:03:14.25Z" }, + { url = "https://files.pythonhosted.org/packages/49/c1/13b70871c98d7e93f0d2ed71f226b8d6f873f1372124046068a6b4902fb5/matplotlib-3.11.2-cp311-cp311-win_arm64.whl", hash = "sha256:57b9ea60a835937c2012861923cbb91f47db8565775d326d1c42fc926aa10351", size = 9023542, upload-time = "2026-09-11T19:03:16.878Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ce/1bfcc4873b121597791ad74032943b123218c0613af0b97e8dd05e916fb1/matplotlib-3.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef752769cd962f39ea0b6ffc82d1ea43a0012c5a6157c7a075212fa509cfcff2", size = 9476466, upload-time = "2026-09-11T19:03:19.45Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c4/7f5f3601ee69baf072c0c7d3ce60c03e0618621c5a56c34a62a460e29d11/matplotlib-3.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ef31985c4dedb5f1424e1aec6849a47dd37689cb7fa3c20b1b82187f26806261", size = 9305583, upload-time = "2026-09-11T19:03:22.39Z" }, + { url = "https://files.pythonhosted.org/packages/b8/90/2b3fd67ee273163faeda6d514be70b5596eaa0fd77b60ffc294ad0b34f5f/matplotlib-3.11.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df4f7784aca81a94f254c0a2767d592ee25f407e488f5fa7203e51093fb6ca27", size = 9860353, upload-time = "2026-09-11T19:03:25.049Z" }, + { url = "https://files.pythonhosted.org/packages/f4/84/32549e7a462dc311aed2ab62e5d2538028840b5c53a8be0195c789937c3d/matplotlib-3.11.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b9a7ad579856284135e401ecc918c5f8a017ee30539298862a109f51b971710", size = 10670348, upload-time = "2026-09-11T19:03:28.108Z" }, + { url = "https://files.pythonhosted.org/packages/84/39/02e21b74f7439bd643d717ea846006d46e309e6d29b632b57751265311d6/matplotlib-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3aa4b8516fd26659e4363abbf317c703d9116496c5db2e9d0609a2866dd39dd2", size = 10810580, upload-time = "2026-09-11T19:03:31.402Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/0d239bde12b308262265c2d98909b2f0ecad2b5deeae96241642e822e9c7/matplotlib-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:c5c1c68ee401fc98271263410f0e5ce88285abacf7627132914e8adf3d70ff43", size = 9349409, upload-time = "2026-09-11T19:03:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/49/a8/06baf901c02246c8a222b655cc4540ef9c15e1549a04e07927f9cde716c3/matplotlib-3.11.2-cp312-cp312-win_arm64.whl", hash = "sha256:643ff850d8e0f5b8319337f87ed3cb59506afb3df3cc48de777d85871233be7b", size = 9028084, upload-time = "2026-09-11T19:03:37.032Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ce/fc58855a3d17f6cb8a87b6f9ccd100f65432a3a7ffed57309cbf14c78987/matplotlib-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d43ff8cebb50840648cb6429b2228621dbd709010f3117b3740abb20abf21c0", size = 9476987, upload-time = "2026-09-11T19:03:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/a9/29/2a47b700545aca050e0ed73c89ba21e08407e11f5f42a567421b220de6c1/matplotlib-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a8285cea8ef4d92aa041d1c33788bcae82248503300f93f1ca2136b9049452f", size = 9306050, upload-time = "2026-09-11T19:03:43.103Z" }, + { url = "https://files.pythonhosted.org/packages/a9/df/e7c10292f348cf55178a5b3c0092a38ea68891a3945f199ae8b7b8ac9dc1/matplotlib-3.11.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1944895967f87c84c9b4bad29a707b31f5b36df4a3a2339ea1f8ea3ce5105539", size = 9861060, upload-time = "2026-09-11T19:03:46.044Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b9/b978de6d43d47f1d4d8e653fac32c16d8d2e5f46bbbb822e26d7cb1adece/matplotlib-3.11.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af2661f6ac6bbd1d081996f54fdd9385715c625ace8cec0869055c0cfbf38981", size = 10670885, upload-time = "2026-09-11T19:03:48.942Z" }, + { url = "https://files.pythonhosted.org/packages/a3/80/d72f61bb2631ac15d17fada1f17e0f99fecba69d8376d34f17cf93b7eddd/matplotlib-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e5a90f8a707ebb6004a713b1cff091a40cc5df4c7c1cb165e5a505ebc11c292", size = 10811222, upload-time = "2026-09-11T19:03:51.665Z" }, + { url = "https://files.pythonhosted.org/packages/94/2e/6d1d33f242c705b5c6c6fb3f0fc141add51cb1abb62912e59de0835d28c4/matplotlib-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:bc067c462a86f0e57bf52fc6e058d90171a5420007dac00c46e90153050c69a7", size = 9349539, upload-time = "2026-09-11T19:03:54.534Z" }, + { url = "https://files.pythonhosted.org/packages/bb/bb/c0aa86a7f4c0e62f1c3c0711e361f6f23f87eb9018732a5e11994bd1b7ec/matplotlib-3.11.2-cp313-cp313-win_arm64.whl", hash = "sha256:3e8576f7c47e02fd4f21f44171302d2d1d58d4471d46da3d71fe8899d19539d9", size = 9028295, upload-time = "2026-09-11T19:03:57.261Z" }, + { url = "https://files.pythonhosted.org/packages/54/b4/4facdb700bc236e4c676495ca3798d8134ab8668cbfe0f6b2e9ebf962a38/matplotlib-3.11.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c9721f81275499da1feeb36a2cf8192ea086283b3bd16b7dc4c9d7aedb7396d6", size = 9478976, upload-time = "2026-09-11T19:04:00.12Z" }, + { url = "https://files.pythonhosted.org/packages/4c/a0/bba05f0a25bfeb0475c2f2a87958b31103aa6b7a5386017afb1a96212825/matplotlib-3.11.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a3040b209f3968b4e84161df7b174f07a9fad33b0f2d7e48ea3bbd3075e2863", size = 9307932, upload-time = "2026-09-11T19:04:02.976Z" }, + { url = "https://files.pythonhosted.org/packages/d4/42/81d5cba4bb39b41b0998efc880e129f2d7cdb94256ca49678fdcd9c21be5/matplotlib-3.11.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3fe71fbfb8ec0e310e0bc8537c3405a01f38f25f9394ed2135e6202fed542b", size = 10674370, upload-time = "2026-09-11T19:04:06.912Z" }, + { url = "https://files.pythonhosted.org/packages/29/5e/52f56f93d5b20815ee0ae352f7a38eff25580edb180b4fa7df87cfeba68f/matplotlib-3.11.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c8255de28f986d935a64c9ca71c0ec2d2f41d355691f5ea684725dc91413f71", size = 10954597, upload-time = "2026-09-11T19:04:09.948Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ae/f8918a1b564db49c53cd603eb3c8748c5767e4ce0fb2cf1d7c38653e4c5d/matplotlib-3.11.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a8756cc73d9af9a7fe0deb54ea2e75ef73b01d9e575877e72acad5458e660943", size = 10812583, upload-time = "2026-09-11T19:04:12.887Z" }, + { url = "https://files.pythonhosted.org/packages/ea/61/4315ef0d63937fe56f451887b4a0be3b8e8b22cf1d92a8d157caac54570d/matplotlib-3.11.2-cp314-cp314-win_amd64.whl", hash = "sha256:ecea603dd2fbf8242fd31a305a8b12a4ece2de28096870c65fdd0d1e35b8d9a6", size = 9505972, upload-time = "2026-09-11T19:04:15.788Z" }, + { url = "https://files.pythonhosted.org/packages/d5/00/02398b0a1a62ef73d9af0a957fe1773363eec9a6ca7e433c72ae2790fbce/matplotlib-3.11.2-cp314-cp314-win_arm64.whl", hash = "sha256:01dc8eaaab5a9fce9ff615eca82345728f289e4715b186ee10c6d85272fc26bb", size = 9184534, upload-time = "2026-09-11T19:04:18.691Z" }, + { url = "https://files.pythonhosted.org/packages/ec/c5/1e6ca10baa7e04f113c37856aadb4adc3dbb1c55fc7da6dc830bba1292d7/matplotlib-3.11.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79a258f58253dfa025af80a9e9bb228d75fced007f0e93ae7423fefbde81a74d", size = 9526415, upload-time = "2026-09-11T19:04:21.39Z" }, + { url = "https://files.pythonhosted.org/packages/e0/93/7561727af07ccc84747953c6a33eee3981cc436d04f465032e707ca0e429/matplotlib-3.11.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c0b83f044ce10a98027b105b3931548719a6e8c7ef986b4362651e0b5367c8dc", size = 9361064, upload-time = "2026-09-11T19:04:24.107Z" }, + { url = "https://files.pythonhosted.org/packages/c1/40/ce270ef2a6794d94a409fe28b8dabedffc07c07f9e5dbb89e0f605bd157d/matplotlib-3.11.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e43b188f0a5b75447bcc197728258166aa64365770ed1caa36595a5e1ca4bbba", size = 10684626, upload-time = "2026-09-11T19:04:27.201Z" }, + { url = "https://files.pythonhosted.org/packages/45/46/396e0307dbf1c1f2d0a3654caa6dbc780dd5379f5f11257369cf8d21d9fe/matplotlib-3.11.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3304eb5a59442a8867f6920d484591c0fa09ffc29e9260be2feec3351e25869", size = 10960602, upload-time = "2026-09-11T19:04:30.254Z" }, + { url = "https://files.pythonhosted.org/packages/1c/97/4defb84695477340aa88b27c9482cc1ca4de11f36f66b6c8c0ddd685def1/matplotlib-3.11.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:02329432ae5c6af87cf208ee575b701d698bdf0b1a3bb28cc6d53c36e967e575", size = 10822603, upload-time = "2026-09-11T19:04:32.964Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e7/eab54551c1ec6b72dcd678a078b6c6da8d4c85ec1ff0016e81fe52866304/matplotlib-3.11.2-cp314-cp314t-win_amd64.whl", hash = "sha256:f2ac30cf5eb5dff1b584627ae0b0e1186551a4f69ae3c75073911da497a29170", size = 9551206, upload-time = "2026-09-11T19:04:35.811Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0e/04698032cb4d8fb1e30d8ffec5ded20f6f582b03c8c58b2385c95245f158/matplotlib-3.11.2-cp314-cp314t-win_arm64.whl", hash = "sha256:cf41ecd1b0c0b6f7177ed965a54c2afbe888715c7cf6054dc12d53bc1494002c", size = 9234977, upload-time = "2026-09-11T19:04:38.972Z" }, + { url = "https://files.pythonhosted.org/packages/44/a9/ca827c184b87364378964e36e7c0ae23651d146fdbc4000635205490cf82/matplotlib-3.11.2-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:894a9cbbecbe30ae6787d464df2e8fc7a8d475cfc68f87c3029f7c11152899b3", size = 9478997, upload-time = "2026-09-11T19:04:41.914Z" }, + { url = "https://files.pythonhosted.org/packages/48/60/01aaafc9c3159f3fae9a65bbcddaa4a6d4d72b0aeffdd636d7f6d00a5c8d/matplotlib-3.11.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:bbf1062991d826ed27e2144f3afa4461afbb8ff56e8f703043e191a8163b1ee9", size = 9307947, upload-time = "2026-09-11T19:04:44.834Z" }, + { url = "https://files.pythonhosted.org/packages/1e/a0/6aa72c7cd7cf4dfac652744d7a3310007cec3ce8e5ab9be607bec7096471/matplotlib-3.11.2-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:399fef672f7046ef7d6a57572b2a6f9845f3f5afcff04e7b2df7a363a9f42190", size = 10674370, upload-time = "2026-09-11T19:04:47.745Z" }, + { url = "https://files.pythonhosted.org/packages/a1/97/d7e90225ac145046787a2ee0fa4cdc7e4d5cb6772ea232130b10f8a4095a/matplotlib-3.11.2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc82dde2a0d3e3ad472edce04897ad7146b8d8bfd1df8a32992eebb81af18fdc", size = 10954581, upload-time = "2026-09-11T19:04:50.712Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/89cf056a9d2cae01f4b8baf01c7e809d613244fcdfa2a2acf28c1e0d79fa/matplotlib-3.11.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:930efb28f59fda124e39265d177bab302625297bb147d2910de725a2fc2aef54", size = 10812605, upload-time = "2026-09-11T19:04:53.552Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4d/c61b9f4c34af802d4d84e58803e009013d626b5f468bafe1416131863b5b/matplotlib-3.11.2-cp315-cp315-win_amd64.whl", hash = "sha256:3da3bc0cbf7245e7db72cc6d29d12c5abef72cb73059c73b945f14e3545f3eb2", size = 9506068, upload-time = "2026-09-11T19:04:56.519Z" }, + { url = "https://files.pythonhosted.org/packages/03/7b/047f2fa8708d47430d8e7fa45e9fffb0aee5d4e300f978e087be2ee11fbc/matplotlib-3.11.2-cp315-cp315-win_arm64.whl", hash = "sha256:f25446b2981717dca9786bac841cb3fd7efb568e3e3c755dd980481c5cb9228d", size = 9184576, upload-time = "2026-09-11T19:04:59.318Z" }, + { url = "https://files.pythonhosted.org/packages/03/6e/ad9c5989950785a98642667df265a47c6637e924cb69b5dcf68c3299ae7c/matplotlib-3.11.2-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:fea03cf56568cc1cba08b470be6a0559e71c3a5b688d54b7179bb35ba23d0821", size = 9525988, upload-time = "2026-09-11T19:05:02.304Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c3/25c61701fb655dd412428b15eee2591ce554cdd593e39a045a153373f428/matplotlib-3.11.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:254d4ddb2fa8df3b4c689c0c306063aee10521df82cfb438185e499c75fe37c1", size = 9360774, upload-time = "2026-09-11T19:05:05.092Z" }, + { url = "https://files.pythonhosted.org/packages/58/5a/4552878fce8f9d249a5e264c16f5c267c27eac08fb039fa3e207a06feff5/matplotlib-3.11.2-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e60cf3047a51edecdc4535a9196bbd6a732936b8e9f8184aabf4d16165884aaf", size = 10685892, upload-time = "2026-09-11T19:05:07.686Z" }, + { url = "https://files.pythonhosted.org/packages/af/dd/b3b19ec0124fc4aafd8a4b3bae859c562a7ff0fd8ae3b2099947f78bde19/matplotlib-3.11.2-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb3712dc9b464793de0a4e42a7313d50293c751f94bddaf7332a1bc71bccdda9", size = 10964946, upload-time = "2026-09-11T19:05:10.943Z" }, + { url = "https://files.pythonhosted.org/packages/7b/30/687ccce22f66a57fed85942450e88062773bcbf1a42914e70c7148ec71dc/matplotlib-3.11.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:75b6d88402770e181b5d06a67dda4129c31da7d05004d63a21c310ec78d1b83c", size = 10824960, upload-time = "2026-09-11T19:05:13.9Z" }, + { url = "https://files.pythonhosted.org/packages/d3/34/117fe35a8d05054b4b34d2d29287099927c24c3841d36e06d9fa2f20c1cf/matplotlib-3.11.2-cp315-cp315t-win_amd64.whl", hash = "sha256:a6939df7567114b6bac7f4c5e06c84a67f197c1b2f2e4b234d4eecb3bfec9482", size = 9551204, upload-time = "2026-09-11T19:05:16.48Z" }, + { url = "https://files.pythonhosted.org/packages/63/5a/9f440e7bec8b80d0af2a65d1165b2f4e718982dad785531f62255d9ff19b/matplotlib-3.11.2-cp315-cp315t-win_arm64.whl", hash = "sha256:d480038c83691532ed52ff3147db51fa902fc78cb2d8349993a1cdb684435bff", size = 9233946, upload-time = "2026-09-11T19:05:19.063Z" }, + { url = "https://files.pythonhosted.org/packages/0f/d9/a1218a31fa2d8082eb893548990ad09a2005ebda1b2b89dad88a8308e51a/matplotlib-3.11.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:854df8d7dfe9fdffcbaa6f39e44a6c24b409cb4d7561fbc09213b157d833f6a6", size = 9457702, upload-time = "2026-09-11T19:05:22.086Z" }, + { url = "https://files.pythonhosted.org/packages/68/d7/a9fde05d87c3c853f233ec20c5b5c3a1c86035e1ed4bfa397cd54d46ec90/matplotlib-3.11.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eac4b07d4e3743b172451e122ea964f72f152879d4f9adcf3f3d33e518f12ead", size = 9287753, upload-time = "2026-09-11T19:05:24.677Z" }, + { url = "https://files.pythonhosted.org/packages/ec/79/ea2ae4eab84f011c1dc8145864f78e5a63adda8efb95557ef36cc38e6da2/matplotlib-3.11.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ef7a53b66780e5d942923724f08577fbc5be1f7322da0f0f3f9dcaa45dd803d", size = 9848259, upload-time = "2026-09-11T19:05:27.455Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542, upload-time = "2024-09-09T20:27:49.564Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316, upload-time = "2024-09-09T20:27:48.397Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0", size = 56114, upload-time = "2026-05-13T09:03:38.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d", size = 66663, upload-time = "2026-05-13T09:03:37.76Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "numpy" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" }, + { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" }, + { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" }, + { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" }, + { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" }, + { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" }, + { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" }, + { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" }, + { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" }, + { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" }, + { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" }, + { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" }, + { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" }, + { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" }, + { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" }, + { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" }, + { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" }, + { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, + { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, + { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, + { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" }, + { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" }, + { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" }, + { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" }, + { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" }, + { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/95/b0/c7453d0b6e2073c3264468b106ee1563750cecc910965e67357e3698c83e/numpy-2.5.4.tar.gz", hash = "sha256:9a94cf751c9ad8ebaa835bcd3d40dacf8534ad086b88c38029b65123c7999d2a", size = 20866315, upload-time = "2026-10-10T20:05:31.422Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/97/ba2074e92b7befea137e77ea8471e768bbd87c339b7e8c9f5a931949f977/numpy-2.5.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c6342f54c67093cae5c0227eb0eb772fdb79f2a2c37a6eb278b9909ee06aa356", size = 17001609, upload-time = "2026-10-10T20:02:40.843Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a9/bac826765e971d8e16e2064e9ac7525fd69b40ac17c905033a7f5442023f/numpy-2.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b11e8fda06a7d69f15ebf542660b74466c2e51094800c1fb794f47ad4faeef17", size = 12015718, upload-time = "2026-10-10T20:02:43.45Z" }, + { url = "https://files.pythonhosted.org/packages/31/2f/5ea3570fcb8ccd0882bea99436a513b2c85dad8f774a2057849130a8fb99/numpy-2.5.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9cb18a327b49c5c337f972b03682f6a49855525faaf3c0d3e9c96cd0fd8880a8", size = 5451717, upload-time = "2026-10-10T20:02:46.169Z" }, + { url = "https://files.pythonhosted.org/packages/34/f2/b4fc1bafca03868220b5eaf729d2f21ebd7d7b151c0f9e144fe212bbca35/numpy-2.5.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:aec3fc4b32ff82421274f5d205c559c51c840c8df66a78efd7f3612dd005a26a", size = 6789926, upload-time = "2026-10-10T20:02:48.139Z" }, + { url = "https://files.pythonhosted.org/packages/dc/96/8319e2457ae4333c62c815c7006b869a4f60985c1e01024c2f8c6c040fe5/numpy-2.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe4d21ab149f15e4e6043dfb0de87e6e5f34ac176cde83060e9802981fca2ac2", size = 15695312, upload-time = "2026-10-10T20:02:50.115Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/c799c62e19c337e6d3770b08e475887fb30ce8477d3c09efca6b2f0228a6/numpy-2.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbde6962867ee75b48b0ee29b2b9372ec5d617799dbaf38e82dc0596f2f7738a", size = 16727283, upload-time = "2026-10-10T20:02:53.186Z" }, + { url = "https://files.pythonhosted.org/packages/39/6b/3604e53fb00314d0dc1b94ec9125a1484f649c0a17480b1f0f0c7a9d6250/numpy-2.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:381a7a3d2e65e64c0ec302795ab9dc12bb1e73f150904699c153716177eebdaf", size = 17047890, upload-time = "2026-10-10T20:02:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7a/e8b58a5289a0d464c52885de47c35a935cdd70c03a4c3ab94a5126416dd0/numpy-2.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b89d0aaae2fe498c648f4c4795c084db535af5bd98ef942b2a3681fb74ce8645", size = 18485839, upload-time = "2026-10-10T20:02:59.018Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c9/47094f597015009f310b8c900def59065ef1ff5a6fe7b51fc65ec58ec2c6/numpy-2.5.4-cp312-cp312-win32.whl", hash = "sha256:9968ab7e49b93ac6e1c3b2239732183152c9150f16308d30b66a372cffe3483c", size = 6138936, upload-time = "2026-10-10T20:03:01.626Z" }, + { url = "https://files.pythonhosted.org/packages/12/33/fefe62073dc8acfd0f2b9ed7c003af2f50aa61555e113e6db02b8f79f145/numpy-2.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7b1b6353e36a7e50de2973a38d705c88ee93adcf120673cee7f45a4a3fa223a", size = 12573091, upload-time = "2026-10-10T20:03:04.349Z" }, + { url = "https://files.pythonhosted.org/packages/1a/07/161270b0c2eec56e4c905f6d6d22e1b836887b2cb189d3f5820aa588e9dd/numpy-2.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:aa1cce2ff3f8d953de38b76bf44602caeb69f101430208f64a10067f7cb4b1d3", size = 10521630, upload-time = "2026-10-10T20:03:06.767Z" }, + { url = "https://files.pythonhosted.org/packages/67/14/1c3ee0118a8fce08565a5d8482631608426a33af10a01077fada5dc7c119/numpy-2.5.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2377da2dd3ba2c1200956acbab2a358c83b8e1f8531191672d1cd6ad83250d53", size = 16997729, upload-time = "2026-10-10T20:03:09.291Z" }, + { url = "https://files.pythonhosted.org/packages/83/8c/b0ea9477fb1f0d4484bbc5cba21678cc9969704d8d7f3f158d1db35f8e14/numpy-2.5.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7415db95818b39ec475a5eea54d9e3b6bc83e3912158e46da3438cdce399804d", size = 12009826, upload-time = "2026-10-10T20:03:11.946Z" }, + { url = "https://files.pythonhosted.org/packages/e2/84/6a3d75b3ba3dfe84ac0053450753d1e6d250a8bf80f66474cc46d1fb643f/numpy-2.5.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6d6a71b9d9a97c03633aa12565ef2825ffa036cc1d99cfd50dacf0f128af4fe2", size = 5445803, upload-time = "2026-10-10T20:03:14.329Z" }, + { url = "https://files.pythonhosted.org/packages/61/18/bb993f267ca20b376e07092a16793a5b31ed3138751e9ba480011a14d742/numpy-2.5.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d8200f16437b289a5bb927c6e184eccc3e8389bc0070fea4cd5b9e13c1757959", size = 6786220, upload-time = "2026-10-10T20:03:16.602Z" }, + { url = "https://files.pythonhosted.org/packages/db/b6/135bb0953b61dc21c6cafa14b424ae666944e4899cf140e00c2b322a1a45/numpy-2.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2e71b04c6cad90026e544501bbe0ab9290fa8a4d845e7e8c0d124fb429c988", size = 15689178, upload-time = "2026-10-10T20:03:18.721Z" }, + { url = "https://files.pythonhosted.org/packages/da/24/3bd070f3269dc609d8f26b2643f62ef91bb415841c0b294805aaf7fe06da/numpy-2.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ffa07666f8da0eef81d149934a626d0d95fbd6838432a33e66245423a9062c0", size = 16718044, upload-time = "2026-10-10T20:03:21.386Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8e/9d15bd356b0a019c965312b1a3c6a727cac4cae5bc40045fbc12ce4cff9c/numpy-2.5.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2fa3328f784fc8277fc48026f6cad516f5c561c5d8e2e39b3c9e0c8f23223b34", size = 17048364, upload-time = "2026-10-10T20:03:24.468Z" }, + { url = "https://files.pythonhosted.org/packages/dc/fe/9d5b560db964f15871885f2250795d15945f8699e17ef90c0c2ff4c875b2/numpy-2.5.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b86966fbe4ad7de710422175572bcdc75fdedadfb54bc6fab7deabccddd7780b", size = 18474904, upload-time = "2026-10-10T20:03:27.895Z" }, + { url = "https://files.pythonhosted.org/packages/e9/98/d27552990f1bd611ef3e7466adadc78312ea2df63b83aad47fdc3d3ca8df/numpy-2.5.4-cp313-cp313-win32.whl", hash = "sha256:5258bc06526964be5face2fc6f756857a3f24f21ec3e72ca131337a75b165d6c", size = 6134537, upload-time = "2026-10-10T20:03:30.511Z" }, + { url = "https://files.pythonhosted.org/packages/90/8c/140a40398a66b4471211be1affdb6ed24c486d581bd28d07b7f2fcb69540/numpy-2.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:8b4d2fd2d34e5f8c9235ee787de5631a37a28402b15cb80814df973d2be54129", size = 12566113, upload-time = "2026-10-10T20:03:32.612Z" }, + { url = "https://files.pythonhosted.org/packages/34/52/01d205e5e8ccb27b2b0b141e801f22b830198c979111b0fa44771438d9a9/numpy-2.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:bc39ac66a7a9a3fbd6134fda43136b60ffde99c8f4501e64e0d2b24da137babf", size = 10519523, upload-time = "2026-10-10T20:03:35.163Z" }, + { url = "https://files.pythonhosted.org/packages/99/ba/005cb5edd580d2f84d7ca3206b92dc17d4388e56e6f87ffe8f2762f83139/numpy-2.5.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c668b2f0d651605b58892644b0e302c7157f7159544227758c896982ef384b18", size = 17005499, upload-time = "2026-10-10T20:03:37.961Z" }, + { url = "https://files.pythonhosted.org/packages/f3/49/fee7587c33ee35f7977f9051d7f2023d4e7246d62710c80f20c2361ea232/numpy-2.5.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ffa6ce09a1c6a08e9667dd9c97aa0b14184e8d18f2a14b78b2a2328c9147f076", size = 12019666, upload-time = "2026-10-10T20:03:40.606Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b2/c6ce165acffceb15a82c07b9cc77d391f86b3f379ba62911908ae5d34b91/numpy-2.5.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:956555e0603a4d38019ae6925711cb9dc43195c076a928accf7ea5d50bddfe53", size = 5455617, upload-time = "2026-10-10T20:03:43.138Z" }, + { url = "https://files.pythonhosted.org/packages/77/7f/dd85ce260a669a89be06842cf355d7353a33e6cfbc590fb8ebb947d88dc9/numpy-2.5.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2c2c4afffdeb7920e445028dd71eb932cac3e704792e964bc2a232426d4f1255", size = 6791932, upload-time = "2026-10-10T20:03:44.874Z" }, + { url = "https://files.pythonhosted.org/packages/63/d6/34b0a2b0741386a63025a65a2c09caaaaaad6d0ca95b66cd65c30dd7fcb5/numpy-2.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4054173604cd8658796053f1f3bc0befb68ec1c0762c57fdad61e199256a8617", size = 15710899, upload-time = "2026-10-10T20:03:46.839Z" }, + { url = "https://files.pythonhosted.org/packages/16/d5/928078d2b28f26829b138b4a6c3980045022fb409f570657a224ae60ef4e/numpy-2.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d549420b8858885cea8838a727842249218b9c1da24dd517e25c9c7a948310a3", size = 16721710, upload-time = "2026-10-10T20:03:49.489Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cf/673fd1b8f4cd78eb6320e87ec4c90ac19c095644259e3749853a405c70f4/numpy-2.5.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:823874a507a84af050493b622affde94b6f7c3a0dc22cb2801381bc03b871c00", size = 17066182, upload-time = "2026-10-10T20:03:52.25Z" }, + { url = "https://files.pythonhosted.org/packages/f3/92/a77b5061b1b3e2643928c37976d79ee173e1b171ed158b7a3c61056b41bc/numpy-2.5.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4e263278bfb5ee6409db8aedbc4cc32973b1b82bc1e8d3c668551d04d83a7e37", size = 18480315, upload-time = "2026-10-10T20:03:55.39Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1d/1486ef3d3fb2279fd93c4c43c1bbbf1ca389a19816696684409f71babaab/numpy-2.5.4-cp314-cp314-win32.whl", hash = "sha256:cfd73180400042a7c532d30c5e287bdd03c59ff9ee1b4c0316af0539e29dfe23", size = 6185739, upload-time = "2026-10-10T20:03:58.186Z" }, + { url = "https://files.pythonhosted.org/packages/52/9a/e1e512ebc948d5b9dd33b08736760f0ebbed2848fd4eda1f553088a6dcee/numpy-2.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:2ca144f15135b6212a5c47b1e2aeca6e412f102f95a2d5d88d8aec77eb255de3", size = 12703552, upload-time = "2026-10-10T20:04:00.28Z" }, + { url = "https://files.pythonhosted.org/packages/2c/05/de709a982d7bbcd688a3fad71f002e9ff80c2db39e03ee726609b610f1d1/numpy-2.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:468397ba3c64427474706e5c9123fe266395496714dc684294eac75cd4930d1e", size = 10803901, upload-time = "2026-10-10T20:04:02.659Z" }, + { url = "https://files.pythonhosted.org/packages/13/34/083570ada3bb2a30fbe5d77c8c6fef9141144a15d33e6f793a67e9749ab8/numpy-2.5.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1ef3aa6d7e29bb13677323114280b05acc57607fa2300e66432d665d5418a162", size = 12138695, upload-time = "2026-10-10T20:04:05.012Z" }, + { url = "https://files.pythonhosted.org/packages/94/06/1f9c24db48eef0c2d1207e3b11fffb0478e39dfd8c1e1be7476936885eed/numpy-2.5.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:98b053943e5a0474ec0da309d2cb9d3f18ea57f8a2067c2ab7b5f763d1068380", size = 5574615, upload-time = "2026-10-10T20:04:07.316Z" }, + { url = "https://files.pythonhosted.org/packages/da/0f/593fba2e1560e949123bc7d2fc48b5893d56e58cd4bd5a273d2fbf60b220/numpy-2.5.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:b64a85f40e154983960a4167d4c1d57a50c7f109b3d3264a3a984154e90a8454", size = 6889383, upload-time = "2026-10-10T20:04:09.918Z" }, + { url = "https://files.pythonhosted.org/packages/eb/9f/b799dfdce4e05e80ed4bc815c71ff343a11533b2c0ffc221cae8538cda63/numpy-2.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a813ed7719bf45463c51779e6a98d0385fe905e48447526938a4b8337333d551", size = 15753763, upload-time = "2026-10-10T20:04:12.278Z" }, + { url = "https://files.pythonhosted.org/packages/34/88/16c5f12f86f5ad2817c4d103205131fc6c8acb3d1878af05a1a4f23ec859/numpy-2.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9b80cdf5cedba0e90d93fa5f9a333c4d65bd545cd669b71bb97ce2b703c9d73", size = 16757212, upload-time = "2026-10-10T20:04:14.799Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/a1fe40e18a898e6a5089f4f0d891f0a493eb0574d5b34458f0fbe5aa3e5c/numpy-2.5.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2199ed071f460487c8db2c0e5c0b564494190edb4772fe80f9aad88b2604def5", size = 17116471, upload-time = "2026-10-10T20:04:17.58Z" }, + { url = "https://files.pythonhosted.org/packages/aa/46/e923a11c78e65c1722e7aaad817c06bd591324174b9d28ce5d31eee4d432/numpy-2.5.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:64f9c9878c1938476365e11ccfb6b770f3b9e5f045ccddc514235041e6959365", size = 18524063, upload-time = "2026-10-10T20:04:20.365Z" }, + { url = "https://files.pythonhosted.org/packages/5a/fa/84ab064514440c1f64a1b21088f2c82756defdd05e07c75ab233899565b2/numpy-2.5.4-cp314-cp314t-win32.whl", hash = "sha256:64d1c8ac28a4077cf987e0a71a7a0ef7e2df70722f07f0baa42dbb7eb6938647", size = 6340926, upload-time = "2026-10-10T20:04:22.865Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7e/6cd886876f435b10685db9b9f7eeb70356f99e052116f4e5f11c5792c714/numpy-2.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:067374eb538c34c745436365cf7b0112595c1d326f21ce4ff340f61230239fbb", size = 12901584, upload-time = "2026-10-10T20:04:24.99Z" }, + { url = "https://files.pythonhosted.org/packages/38/1b/3c1684f6a06f7307f2335fca6e486cb162847fb97e91d65f8eb5cabad213/numpy-2.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:e94aef2c639da4a960ad0db8e06471208d8589974953d78b61d345b4eb99e394", size = 10891152, upload-time = "2026-10-10T20:04:27.52Z" }, + { url = "https://files.pythonhosted.org/packages/08/f4/3224deff3af2bef6bc0b175369698d8cb348f3d91d9bb0286cd5c9eae9e0/numpy-2.5.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:8dddfbee2e68d26d0d7d7d9cb247b1fd4409241cce32d815a11d97ec2cfde179", size = 17003231, upload-time = "2026-10-10T20:04:30.021Z" }, + { url = "https://files.pythonhosted.org/packages/be/75/fee0b8c6d94b44b2fdfae74f6a4ad5a138739589a8aebaec28ce4e713ed5/numpy-2.5.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:81e3420b27048b65eb14c3acf0c174a8cb0e023277716110347d2dcb26026dad", size = 12018300, upload-time = "2026-10-10T20:04:32.519Z" }, + { url = "https://files.pythonhosted.org/packages/47/c0/d0b335a499a04b65f532c3f034346ef390f81299060f928492dabc1e0272/numpy-2.5.4-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:0b4724a19de67bea8cfc4970798efa78bcbbe2ac2613cfac16721a42d44de2a5", size = 5454250, upload-time = "2026-10-10T20:04:34.943Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0e/461b3783c03d668052e6a21b01b673db6ffcb7831fd32d9aa5368c1cd426/numpy-2.5.4-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:2132418bf8dd124a427ca9e6a1daf9ee1a87185344c95119ceae868b99466da1", size = 6789644, upload-time = "2026-10-10T20:04:37.258Z" }, + { url = "https://files.pythonhosted.org/packages/b3/02/5dad269b02166965a7b4ca14adaddd75dbee0de42435bfecf561b84ba5a6/numpy-2.5.4-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:325518d4245b9e331387702aa58c2ce1dc4cdcbb41dfb4ccd5dcbc7e08db1266", size = 15704353, upload-time = "2026-10-10T20:04:39.616Z" }, + { url = "https://files.pythonhosted.org/packages/93/3a/01360c8036822ed9f7aa32189a77d1476567ec1e8e1383522389e4faac45/numpy-2.5.4-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56733449d2544178beaa4545cee357370440cf056c197f9c7bfb19dbfdd0e86d", size = 16718648, upload-time = "2026-10-10T20:04:42.383Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5c/b863a2c093c4d6f21a597fcaf24ead0835c09ab16a8312d5a5a8868af683/numpy-2.5.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:5ec3753760c1a6d8bb91200666e545c3a9728e6269dfb5d6ce02340996698aa3", size = 17059053, upload-time = "2026-10-10T20:04:44.976Z" }, + { url = "https://files.pythonhosted.org/packages/0a/60/ced4f57f9a1258a0af74f17cb0b0c2700b5c67cd6678823c803b263e4df3/numpy-2.5.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:b1185012870173de7ae33d370bd45b1cf5baee747ea4b97036b65f4e93016877", size = 18477406, upload-time = "2026-10-10T20:04:47.863Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bd/0ef22dafaafcc7d4bb3ca26b8d2afbd55dedad8eaba99a8c864e1997456f/numpy-2.5.4-cp315-cp315-win32.whl", hash = "sha256:298eca75243f2cbbfdb460560b9fb2a1792a33cf2ab4286efd43d92e8d3df508", size = 6185133, upload-time = "2026-10-10T20:04:50.467Z" }, + { url = "https://files.pythonhosted.org/packages/50/bc/d2651b155ecc608a77e6f4d15495c11f14f19bb98f8bf0c5b0d38f86dda1/numpy-2.5.4-cp315-cp315-win_amd64.whl", hash = "sha256:332f3378fe077dd850e677ec01bdcc4f22368fb5d50ef10b2c79230b1bf5a592", size = 12703085, upload-time = "2026-10-10T20:04:52.63Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d2/45e404f8abb26fb9eda12b94012936873e827b1be76f2ee7890be128312e/numpy-2.5.4-cp315-cp315-win_arm64.whl", hash = "sha256:d4cccbbc78717966f764cd3af4fb70276fa01fc7a2688af11c78901fa5c04f05", size = 10801451, upload-time = "2026-10-10T20:04:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c3/2ae14e09cfdb67dc187a342e15308a21c15bf4d2071f8079e6aee5fe56dc/numpy-2.5.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:950ea81d57ef070665581b6e1b5f6a029306423cd1739c5b95fe78aa30db6b9d", size = 17097121, upload-time = "2026-10-10T20:04:58.403Z" }, + { url = "https://files.pythonhosted.org/packages/f5/cf/305ae624ef8a039414317224abe9ec9c2fe7ea3c2e1cf204d43ff6b2ffb9/numpy-2.5.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c05ede731b03fb1b7591faca9389ade3267d2bddf1ad8882bb3f2cc5e101694f", size = 12135439, upload-time = "2026-10-10T20:05:01.65Z" }, + { url = "https://files.pythonhosted.org/packages/a9/a8/f75c63813aef95827bb2c0d13b12803016853056e8792c280058cdbfe783/numpy-2.5.4-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:5fbf7141bbfd63aea22f435c9062a032b9ea0082fe9845dad7f021d3f1234e71", size = 5571451, upload-time = "2026-10-10T20:05:04.135Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0f/f17763f983868b5c49b4101ebd7e00760bd1769478a6bb6a8de6e085bbac/numpy-2.5.4-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:3573cd22564692a5b899ec344e5d5b9cc4576f2985b96f22af3564ed54f2710f", size = 6883356, upload-time = "2026-10-10T20:05:06.249Z" }, + { url = "https://files.pythonhosted.org/packages/67/a7/8af04c5a79e047996cfa38854dcfbececdd0343a7c933a46fdd03ef6f5da/numpy-2.5.4-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c109eac9cd439193678f69d70733c1108487546ca8eafc107b510ae10c1aecd", size = 15750991, upload-time = "2026-10-10T20:05:08.376Z" }, + { url = "https://files.pythonhosted.org/packages/57/7a/648254290d0c504faa8f2d07aa206660c728802c781a6f3fc68ab7cb5d71/numpy-2.5.4-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80d6ef6e8620eb2c2b4c4caad50b5935d6db3cde2d51581b55dcc79e14016d1d", size = 16757675, upload-time = "2026-10-10T20:05:11.393Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fe/4a8c3cdb0c70400cfe4c5bec42d3099a5673802a95064614b33e07b82aa1/numpy-2.5.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:77045a4b175bbf5316ec08003880804336c78f92281a1b72222b274ea85ec5ac", size = 17113846, upload-time = "2026-10-10T20:05:14.49Z" }, + { url = "https://files.pythonhosted.org/packages/1b/7e/619692bb67778702c0e9eb2d468568a7573f4e269386ea61aed01ee4e557/numpy-2.5.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:0f02a46e49cfb6c73bdb7aea1c0d3461dbae9aba613542b65f657cd3d17b9fab", size = 18522915, upload-time = "2026-10-10T20:05:17.33Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b5/4da41c328788f575838f97a098fe8ca691ebc6f6fd73ad4a262ee40b184d/numpy-2.5.4-cp315-cp315t-win32.whl", hash = "sha256:ad62a416ddcf863bf44bba76fbf6b53366ab0692e294f51cae4b5fbe0d246788", size = 6335804, upload-time = "2026-10-10T20:05:19.921Z" }, + { url = "https://files.pythonhosted.org/packages/98/94/6482ddfa3d312490cb9358f375bf2ad56427dbea8769187158e94d653753/numpy-2.5.4-cp315-cp315t-win_amd64.whl", hash = "sha256:38f47be9f74ab870d2633b5456ae519c43758a8d1fd05342f0ce4ecc034396ee", size = 12890095, upload-time = "2026-10-10T20:05:21.875Z" }, + { url = "https://files.pythonhosted.org/packages/48/7f/c2d1b436b6e7cfebac140c2579a298344b85f2991a2ce5c3615cefb29400/numpy-2.5.4-cp315-cp315t-win_arm64.whl", hash = "sha256:7a14a461d9340f1b46b8648578aed9cdb8b3b018a8fac6c1dde2c9192a01a87f", size = 10883718, upload-time = "2026-10-10T20:05:28.547Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/5d/45a3553a253ac8763f3561371432a90bdbe6000fbdcf1397ffe502aa206c/pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860", size = 5316554, upload-time = "2025-07-01T09:13:39.342Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c8/67c12ab069ef586a25a4a79ced553586748fad100c77c0ce59bb4983ac98/pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad", size = 4686548, upload-time = "2025-07-01T09:13:41.835Z" }, + { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742, upload-time = "2025-07-03T13:09:47.439Z" }, + { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087, upload-time = "2025-07-03T13:09:51.796Z" }, + { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350, upload-time = "2025-07-01T09:13:43.865Z" }, + { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840, upload-time = "2025-07-01T09:13:46.161Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005, upload-time = "2025-07-01T09:13:47.829Z" }, + { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372, upload-time = "2025-07-01T09:13:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090, upload-time = "2025-07-01T09:13:53.915Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988, upload-time = "2025-07-01T09:13:55.699Z" }, + { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899, upload-time = "2025-07-01T09:13:57.497Z" }, + { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" }, + { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, + { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, + { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, + { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, + { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, + { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, + { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8e/9c089f01677d1264ab8648352dcb7773f37da6ad002542760c80107da816/pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", size = 5316478, upload-time = "2025-07-01T09:15:52.209Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a9/5749930caf674695867eb56a581e78eb5f524b7583ff10b01b6e5048acb3/pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", size = 4686522, upload-time = "2025-07-01T09:15:54.162Z" }, + { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, + { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, + { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, + { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8b/209bd6b62ce8367f47e68a218bffac88888fdf2c9fcf1ecadc6c3ec1ebc7/pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", size = 5270556, upload-time = "2025-07-01T09:16:09.961Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e6/231a0b76070c2cfd9e260a7a5b504fb72da0a95279410fa7afd99d9751d6/pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", size = 4654625, upload-time = "2025-07-01T09:16:11.913Z" }, + { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, + { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" }, + { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" }, + { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482, upload-time = "2025-07-01T09:16:16.107Z" }, + { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596, upload-time = "2025-07-01T09:16:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, + { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, + { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, + { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, + { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a", size = 5392418, upload-time = "2026-07-01T11:53:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7", size = 4785287, upload-time = "2026-07-01T11:53:29.761Z" }, + { url = "https://files.pythonhosted.org/packages/07/50/b5d688cc9c52d4482f3d5bcab6ce20bc2a74a85d2343841c907444a3be2c/pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f", size = 6253754, upload-time = "2026-07-01T11:53:32.298Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec", size = 6925605, upload-time = "2026-07-01T11:53:34.487Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c0/4de58cf6633b9e3a6061ef4be6fb91fc3c90b812ece886f531e3c523d777/pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468", size = 6327788, upload-time = "2026-07-01T11:53:36.433Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/14d53682a19550dbbaf3b598f807d5457646c510805a44c7d7891cd1cd1a/pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed", size = 7036288, upload-time = "2026-07-01T11:53:38.712Z" }, + { url = "https://files.pythonhosted.org/packages/38/1d/36279e3c77efe034e4cc2b0393ee74ffdb5a62391dacbf9b916154f5f0b8/pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1", size = 6472396, upload-time = "2026-07-01T11:53:40.781Z" }, + { url = "https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb", size = 7226887, upload-time = "2026-07-01T11:53:42.764Z" }, + { url = "https://files.pythonhosted.org/packages/fa/17/e324be141d173c1c919428066c3259f21c1b8982e564e01a4a81e96dbdcf/pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f", size = 2568039, upload-time = "2026-07-01T11:53:45.372Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, + { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.12.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/90/a1/d5f9002a70298c64a789779077d8dd90c10aa1f47fe40c86802df874f2a6/platformdirs-4.12.4.tar.gz", hash = "sha256:63743c02414e755de4e31b8f68125c1407495b86c5a006e203c01ff8b9924250", size = 60010, upload-time = "2026-10-07T23:30:32.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/ba/223e00b885e960edd5d4b4d178c88acce019bd5b83786093681b8c393492/platformdirs-4.12.4-py3-none-any.whl", hash = "sha256:78bfb9db2a8471ed7eebe3c3c932da413911042994e699b384fbb4493fa872d7", size = 32596, upload-time = "2026-10-07T23:30:30.825Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/80/a8/66d45abadff219e36e2a824181b8f6a67e7ed4572934d6252c71c29d5731/platformdirs-4.13.0.tar.gz", hash = "sha256:1aa0b0d3f224c1f07c295121e312a5a24a180d6ae5a8425ea1784b3e3863e9c0", size = 61094, upload-time = "2026-10-11T02:05:24.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/15/1633010b26e88e872c93b67c0b6c5e174fb74cb6fb5c1472b4d51d4a8f22/platformdirs-4.13.0-py3-none-any.whl", hash = "sha256:3dbcf4cd708f21cf876c4eaa90e58412bc4f033d87143f41b1493ff77c25b7e1", size = 32724, upload-time = "2026-10-11T02:05:22.776Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pyevio" +source = { editable = "." } +dependencies = [ + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "click", version = "8.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "lz4" }, + { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "matplotlib", version = "3.11.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "rich" }, + { name = "textual" }, +] + +[package.optional-dependencies] +test = [ + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pyyaml" }, +] + +[package.metadata] +requires-dist = [ + { name = "click", specifier = ">=8.1.0" }, + { name = "lz4", specifier = ">=4.4.0" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pytest", marker = "extra == 'test'" }, + { name = "rich" }, + { name = "textual" }, +] +provides-extras = ["test"] + +[package.metadata.requires-dev] +dev = [ + { name = "pytest" }, + { name = "pyyaml", specifier = ">=6.0.3" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/11/b213bebff182584360cb8d17c72c1677fec5c5c228de439e63bcf8ab1c8f/pyparsing-3.3.3.tar.gz", hash = "sha256:928ae7e20211f3b6f3915a72f06a0cfd29ab9d24279dd6346b6b1a7146397d36", size = 1050487, upload-time = "2026-09-20T20:59:05.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl", hash = "sha256:ece8c00a69cf01b45d0b1dedabb469c90d8caf996d4fda40f147627a122849a4", size = 126420, upload-time = "2026-09-20T20:59:04.025Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup" }, + { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig", version = "2.3.1", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, + { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450, upload-time = "2025-09-25T21:33:00.618Z" }, + { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319, upload-time = "2025-09-25T21:33:02.086Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631, upload-time = "2025-09-25T21:33:03.25Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795, upload-time = "2025-09-25T21:33:05.014Z" }, + { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767, upload-time = "2025-09-25T21:33:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982, upload-time = "2025-09-25T21:33:08.708Z" }, + { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677, upload-time = "2025-09-25T21:33:09.876Z" }, + { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592, upload-time = "2025-09-25T21:33:10.983Z" }, + { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777, upload-time = "2025-09-25T21:33:15.55Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "textual" +version = "8.2.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, extra = ["linkify"], marker = "python_full_version < '3.10'" }, + { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, extra = ["linkify"], marker = "python_full_version >= '3.10'" }, + { name = "mdit-py-plugins", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "mdit-py-plugins", version = "0.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.12.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "platformdirs", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pygments" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/21/39a76b01bd5eea82a04baaca7580e105d8c59450df03998345bb2cfb307b/textual-8.2.8.tar.gz", hash = "sha256:3f106a9fbc73e39dd266c9712432087de78a6d644084c7c241d6a25c3169115b", size = 1860502, upload-time = "2026-06-30T06:51:24.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/be/35261223d9416a0751cdff1c7b4a6f881387218a12d439fe22fefebc8c04/textual-8.2.8-py3-none-any.whl", hash = "sha256:267375fd402dc8d981457212efa71f0e3365fd17bba144ba9bb3ed7563cb374a", size = 731418, upload-time = "2026-06-30T06:51:26.364Z" }, +] + +[[package]] +name = "tomli" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/78/9ad63712633ed3ab5cc1a648d863d7e7da371e9425e209555a0fe711b695/tomli-2.5.0.tar.gz", hash = "sha256:264507556cd8b8c8e7c6ee037cdf443a463f03f4c958e57195e3d369711b8ff6", size = 17662, upload-time = "2026-10-07T12:23:37.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/ab99b60ee52acd949684febabc3005d0045d0f66bebd9cdebd67372d26dd/tomli-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4dc1c1781f2f716de763d1e9a7b34c6a894e167e291c7c5d16c72f7a9538545", size = 163901, upload-time = "2026-10-07T12:22:15.601Z" }, + { url = "https://files.pythonhosted.org/packages/bc/00/ee01b7ed4579180fff07142d290257f25ba786f23f3ec6005f620933c2f5/tomli-2.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eff8babca5a7999bc137acbc7482a8b7e17ffca5075ab41f5d770ab408c7bfef", size = 163756, upload-time = "2026-10-07T12:22:16.957Z" }, + { url = "https://files.pythonhosted.org/packages/72/c2/4efebf65372f6583185f79799312109dddb61102d47e5c33dcfd1a297aca/tomli-2.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86665cee9c4835b7a7f1e8ec2c719b5258d4dc782887aded5a8ae7352a96843b", size = 268038, upload-time = "2026-10-07T12:22:18.135Z" }, + { url = "https://files.pythonhosted.org/packages/53/07/5850468e925d898abb36038666f9c333a94d2a223e802a8ba5b6d319d23f/tomli-2.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e369fd63331746182360977b1892bfc215476a30d61612d732425311639f56", size = 276422, upload-time = "2026-10-07T12:22:19.567Z" }, + { url = "https://files.pythonhosted.org/packages/b4/87/f293984cdcf83c054196d4fd3dad44fc68ae55b4b8c44bc76cef360c3150/tomli-2.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ad1ea345759240d6463efa0ed1c704402752e49aa21476620738d74d72d8aa1", size = 272616, upload-time = "2026-10-07T12:22:20.794Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ce/db582886b3c1219d3fec93ebd669332482e5aee7a91e0f7838d84f2d1759/tomli-2.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:96243987194634bd411066ce40c952e108f86af04db533ecd8ac3ff2a85b1885", size = 276593, upload-time = "2026-10-07T12:22:22.12Z" }, + { url = "https://files.pythonhosted.org/packages/bf/72/7619b87dea4261fc27dd7b54c4461c129c1f7d9bb7ba3aec89c797a431b8/tomli-2.5.0-cp311-cp311-win32.whl", hash = "sha256:610b27d99f28ec5f191c7064a48f3ddb179a1fe6ca73d571483ae859f57b605e", size = 101830, upload-time = "2026-10-07T12:22:23.651Z" }, + { url = "https://files.pythonhosted.org/packages/1e/74/220106da34502304b6751a2a9b8a9fbca6c3fd47e737a2e2e3da7c61c9db/tomli-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:c804ae44fe7b4bab5da295e4f980a1ff04670bca9d23fe0a4e887e08ebd741a8", size = 112742, upload-time = "2026-10-07T12:22:24.972Z" }, + { url = "https://files.pythonhosted.org/packages/27/99/7d9c8b41837a7773613e169504147375c157a290167aa59ad74a085f521f/tomli-2.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:cfac177ebd6236003846ea339981f71457cb6eb748f23381eb257e45092e3980", size = 109332, upload-time = "2026-10-07T12:22:26.117Z" }, + { url = "https://files.pythonhosted.org/packages/52/ed/7baa86f87493646a594de388c7c1c40a39dd0461f7e9c0359cbeefc91fe8/tomli-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f4a40d03fb9f63424f0979855bdeaf44dd7696b8d59501822c10ed30ba532df", size = 164854, upload-time = "2026-10-07T12:22:27.444Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b1/44c0341f2224397855723c7a8a39f718ea6fcbcc3dacc66e5aeca0f334e3/tomli-2.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ebf8d19b17bd0daeb7b7dec81a946a439b753942fd0210d6e96c532249eea6b", size = 164074, upload-time = "2026-10-07T12:22:28.679Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e2d5b7d3fba47adedb23de616c16d428ea076c79a3d8e1d95d649ffe197e/tomli-2.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf0b5e8e0f68ebb494356e577c06c139161efd8d3b9050f93b39b7c26cc54ff0", size = 274274, upload-time = "2026-10-07T12:22:29.804Z" }, + { url = "https://files.pythonhosted.org/packages/43/90/6090e706ff27a6f89f4a40578e3324b95c3cd8c4150868aabf33a8f414c3/tomli-2.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cf74416bdc94ae458b14e37286c1073081850ac8459a00d0c5efef5d44294c6", size = 286435, upload-time = "2026-10-07T12:22:31.297Z" }, + { url = "https://files.pythonhosted.org/packages/0a/9e/a2c40768df16c408f22430afb0a73e9d7e5f79c950884954649d1146b74d/tomli-2.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:61ea1ebe1e55a34ea8199cc8dbff398d35027b82271c8ac4802fd3a1fd5b1bcc", size = 278119, upload-time = "2026-10-07T12:22:32.601Z" }, + { url = "https://files.pythonhosted.org/packages/12/25/3c0cb485b98e9cfac495629b1c93c87ccf0b72fbe9d2689fd8fe62c6d5a3/tomli-2.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed53f7e89bb04f6d9e8e7799112360b0c4d5cbff067de0814c98c37c39b920f7", size = 286177, upload-time = "2026-10-07T12:22:33.745Z" }, + { url = "https://files.pythonhosted.org/packages/77/8b/0144c65f0e37e51c18d04ae15c21b19431c165002d0131fe9aa8b0b8b1e8/tomli-2.5.0-cp312-cp312-win32.whl", hash = "sha256:e7ad033e27a516a233bea839cdb77b80146facb3b4f40bf02cd0cac165cdd5c2", size = 102760, upload-time = "2026-10-07T12:22:34.887Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/5d6d8f42fc9a05fce69354e00ff256484192f5f2fc9a2165718fa0de61ec/tomli-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:bd05de8c1698f8413dd7d869492693a0bf2211543b787ac78cd5e7536af1a6d7", size = 112722, upload-time = "2026-10-07T12:22:36.162Z" }, + { url = "https://files.pythonhosted.org/packages/30/65/df18032218db0fb9b769fb23c8039a051f15c811993995ea04c350273a32/tomli-2.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:069435bd5480429b98c5e5afb02ab21c219b6f0064680671c6dc0d46817346ea", size = 109534, upload-time = "2026-10-07T12:22:37.296Z" }, + { url = "https://files.pythonhosted.org/packages/42/e5/51736d70da209350969e15aca5c5ab6e2ce1ea87a0a892a6c13aec172a86/tomli-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:943276cf269e0071948d9ff697159c1735e623c1151d88abb09b74659ef0cbea", size = 163328, upload-time = "2026-10-07T12:22:38.373Z" }, + { url = "https://files.pythonhosted.org/packages/ec/55/086f80dab4ab497602644274e6dea7ec5dd0b4e262e443a8ad3bb7edee2d/tomli-2.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:463b16086865b97facd8d0b3fb4cb7c544e3f58d2a69dc3113d6db9653fdb043", size = 162246, upload-time = "2026-10-07T12:22:39.673Z" }, + { url = "https://files.pythonhosted.org/packages/aa/eb/3ecc94459f3635c92321f4e7bde571323fdb2267c50e19e3188a281eae3b/tomli-2.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1245a6638fc4bb0a60af38a7d45413db34a13842027c77597c712c998c62fdf0", size = 272655, upload-time = "2026-10-07T12:22:41.08Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d7/494fd1f0c37a621f1ad9975c2efadb523e8101f144ed6edb2e7fe64738f2/tomli-2.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d8bac3d603c97e6854424e5b2b5b741bdbde387e09f162fb0446812b4a8362b", size = 283595, upload-time = "2026-10-07T12:22:42.222Z" }, + { url = "https://files.pythonhosted.org/packages/70/51/bb8d62b1317e6640866f6949b2d5855e5300f2c99d46de1cd245570bba65/tomli-2.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:21e4cae4114aba25aa0d4f85cdf486d290fb35c0954d7bba536248da64d43066", size = 276253, upload-time = "2026-10-07T12:22:43.625Z" }, + { url = "https://files.pythonhosted.org/packages/66/f4/f46bd7f0763cd47de2db697dca9257c6a4adfd1a93b018cc75c8190ed5a8/tomli-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bbaefc84548d754be821bba7c4141c4787dda182f9e77f2f87b71213529efa7b", size = 283582, upload-time = "2026-10-07T12:22:44.983Z" }, + { url = "https://files.pythonhosted.org/packages/ac/03/70f2bcb2923a6db37818d917e124270a7f4cfd38ea576f5aa753a91c0ef5/tomli-2.5.0-cp313-cp313-win32.whl", hash = "sha256:abdbf6313b8d9efe157edeb7ab6eae4de064b1300ad31abf73755154b30abe68", size = 102628, upload-time = "2026-10-07T12:22:46.508Z" }, + { url = "https://files.pythonhosted.org/packages/dc/98/d52024bb5b0ff68b4f0d276d867f634c84a67319a7e9f6b7708a37742333/tomli-2.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd4dc129784e0c5335bd4e61dfcc4487499a013419e655cf2da1d091b7e0efdc", size = 113301, upload-time = "2026-10-07T12:22:47.647Z" }, + { url = "https://files.pythonhosted.org/packages/6f/f2/540db3a70572a8c23a28aba3e9c358ce0ffffbafc990905c1343aa265b31/tomli-2.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:69491c143d2fe063046e0301e62a810bed338fa4d1ce0fd870c27dc1e09b0d84", size = 109744, upload-time = "2026-10-07T12:22:48.925Z" }, + { url = "https://files.pythonhosted.org/packages/e4/49/caf6b307766eb9567664a8707e9d6be5fcc0e8903f18781c6677a60d80c7/tomli-2.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d3182ee2d887e507bd67319a0a61105d1dd33facc111329559a233b772c1a105", size = 162899, upload-time = "2026-10-07T12:22:50.088Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c8/68cfce773a2733a49c74f99d627fb461bd990756860099eac25617889585/tomli-2.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:521345fd1f19d45b8df87657aaa38b6f2ca3800059fadf428e7ebf479a383646", size = 162080, upload-time = "2026-10-07T12:22:51.558Z" }, + { url = "https://files.pythonhosted.org/packages/7e/b2/e5bb8651fdad593f670501a7d718b1a7f73f064d44dea15e04c04dfef45d/tomli-2.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e95c7614e705bfe2b04b27aa124adec59752d15813df37e2156747cab3a006b", size = 273380, upload-time = "2026-10-07T12:22:52.918Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d2/9e2d7f8b1dfe0e2b34c245986ebd55c4c553ea4ce6c47c443b332673253f/tomli-2.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ac2027d37c3afbdf4bdd377f2676f6f1d2122a5be1f1137b49dced590b37e75", size = 283228, upload-time = "2026-10-07T12:22:54.173Z" }, + { url = "https://files.pythonhosted.org/packages/ba/df/ec7b876b7b1a2718bd74a3743c076fff565b04029ba33e8f61fac262739f/tomli-2.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c414be4ed9d3cac80c42e348fa5a956117d1a48227f48026e31f59cb4a7671eb", size = 277189, upload-time = "2026-10-07T12:22:55.342Z" }, + { url = "https://files.pythonhosted.org/packages/7d/7b/e192d9eed0b9cb80da799f4d77052297fb9a2c3cc9b19f571f56ea88add6/tomli-2.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9b03d7dc168353b4132965bde20feceabaa470e570c6f59660dfae59b1f9eeb3", size = 283632, upload-time = "2026-10-07T12:22:56.735Z" }, + { url = "https://files.pythonhosted.org/packages/84/50/ff94454e75461d75623e47401ed323d65c10aab8fe9033242c20cd2fdf32/tomli-2.5.0-cp314-cp314-win32.whl", hash = "sha256:6f041843c4d3a37245c0c056fd955b186bf8b1fb85690cbe40b81230891dc34b", size = 103535, upload-time = "2026-10-07T12:22:58.084Z" }, + { url = "https://files.pythonhosted.org/packages/54/0b/bdacf05f963bd6026ebf6eeb0beda847d1d60e03e440725c64a4e08a0afd/tomli-2.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:f4b653094e18f9031102d3a1da5c729c8f222d85225b18037dac621695e46e1a", size = 114621, upload-time = "2026-10-07T12:22:59.2Z" }, + { url = "https://files.pythonhosted.org/packages/61/99/53f438fa6ae4f9d4ed0ddde3e7242b3bdc34b48c8f9948b72b9e9b127676/tomli-2.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:3f89d10c1ff6a38d992c27fc8a4816af71a909e08a40ec66934240b1e74347c3", size = 111572, upload-time = "2026-10-07T12:23:00.479Z" }, + { url = "https://files.pythonhosted.org/packages/b9/20/1f88f19427d380a40e90a770e087489eaafe4aeee070ae88ed2bbec00acd/tomli-2.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e9e15b4a6c7dd6b85b5fbab29488a73f1f70de516942308daa266bf0e0aeb0d4", size = 171814, upload-time = "2026-10-07T12:23:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/d0/56/cbe5079c9f9a54b9b3e27fc82f08f3cb36edee75561679f53d2380c801d6/tomli-2.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e12bbcd32897272fb05929110362ae9ff4c1b9bb26bd9e971e71dcd3275b4c3d", size = 171324, upload-time = "2026-10-07T12:23:03.18Z" }, + { url = "https://files.pythonhosted.org/packages/2b/30/1d53fd3b0f1cb3ba542e345ec32c26aefdddc4e829e4f3429af8a4f27782/tomli-2.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20aa36de8f2cf87237143bc1fa1aae8d6612c09118f4da21c6a684db5dd1f6f9", size = 297441, upload-time = "2026-10-07T12:23:04.345Z" }, + { url = "https://files.pythonhosted.org/packages/66/d9/0800acb6a111686f764c1b91ef15cc42a20a66a46013bb42220f1d2c61c1/tomli-2.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22185fad8a1e622f064e78008018a0dd3323550dcb479cb7a1d296888d74024f", size = 307476, upload-time = "2026-10-07T12:23:05.671Z" }, + { url = "https://files.pythonhosted.org/packages/e8/63/30a8f3cd51b5bec37f04744bad0b0dc6160df84aad4f27b0e9283d66f221/tomli-2.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:984012f71908165449a951de2050d52f276bfe3aa5d5f570f63ddad814370374", size = 296113, upload-time = "2026-10-07T12:23:07.202Z" }, + { url = "https://files.pythonhosted.org/packages/ab/18/0b9ffc597e69c5a1e20a7823cb60d54b39a9f54e91edcb8574f022186758/tomli-2.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f79203b3965b4000e91808aaa7c040206093f2b8bf86f455982f2274c9ccf442", size = 307725, upload-time = "2026-10-07T12:23:08.508Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c7/18f8baae0b5607a60e8e19b4a7fedee43a8ff6458e3896dcbbadeeac9c22/tomli-2.5.0-cp314-cp314t-win32.whl", hash = "sha256:91294a9fb94a75542f6e46e4a2ae709bd8d9b51134098cae5cf3bea5478b6d03", size = 108546, upload-time = "2026-10-07T12:23:09.956Z" }, + { url = "https://files.pythonhosted.org/packages/72/34/4cca9739254130627bde87500b3f2b512154fe2f278efa7e2a5e10ad4bcb/tomli-2.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f15e3e0b835a6d68b10c86bf80a3149780498d6911c93c3ffd1861d19f9200f1", size = 117814, upload-time = "2026-10-07T12:23:11.486Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fb/afa530d47dd80a78fce43beac6bc6e00f84558eafcffbc6f37b21e80d056/tomli-2.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:6664b7ae7af7294256c53960a6103077f4914cec8ff98479c352f622c6f6b2f0", size = 115188, upload-time = "2026-10-07T12:23:12.728Z" }, + { url = "https://files.pythonhosted.org/packages/66/98/316fdc00f8c0939e6fe50461dd343c162d3ad51d1286eb25b7db54361d50/tomli-2.5.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:a525685c2f97da40762b8695eb7aa0af4c8344ca1905c73e4e29cb04d34607dc", size = 162775, upload-time = "2026-10-07T12:23:13.941Z" }, + { url = "https://files.pythonhosted.org/packages/c5/22/7b10fa5bb01c9539f53f69b619361b19350acc73657772ea7ac70ba309a8/tomli-2.5.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:9dbb18c1cfb2f6517942fc9314437f66aa06d94436ffb1f06102ef3572f35276", size = 161406, upload-time = "2026-10-07T12:23:15.215Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e7/1a069d86dfd20f1f84f71c63faed9f83c1d890bc06c27d82dc7d888fb573/tomli-2.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:752e8b1aa6a4367ef8bf6a1a1e005540f7ed055ba36d7193796812ca5404eb52", size = 273855, upload-time = "2026-10-07T12:23:16.471Z" }, + { url = "https://files.pythonhosted.org/packages/ae/83/d1ef43d1687d092ab9c235455c76e6e709483b346b056f086095c7c263a5/tomli-2.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c47300f9bf791808f77d82747691c4bb09cb14bdf3060cca99b42cdc4361d5a7", size = 284910, upload-time = "2026-10-07T12:23:18.166Z" }, + { url = "https://files.pythonhosted.org/packages/cc/05/f4d9cf7de61822ece0c3873f30d291e324911c71a378b8bfe5ced13fd9f5/tomli-2.5.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:19b0dd8749f4ea2f112c5fcfb3c5248390c899d7e2e173f1d91abee1fa0ff391", size = 277723, upload-time = "2026-10-07T12:23:19.355Z" }, + { url = "https://files.pythonhosted.org/packages/42/28/78262493141fa543151cf005760c3cb01d09fc28a11f993c05109902cb8c/tomli-2.5.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:57b1c3b01fab802e2899bc3d168dca320e14165e2fd9fd584760fb4ca5826859", size = 285115, upload-time = "2026-10-07T12:23:20.698Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b9/e1dab9a30bcb677b5cc5cee810609cfd64f24306a3055767dd3fda00b1e0/tomli-2.5.0-cp315-cp315-win32.whl", hash = "sha256:667e521b37a6c5ccaa044202c235b530f90177ffe2cd4a64ecc213c7dd535feb", size = 103475, upload-time = "2026-10-07T12:23:21.941Z" }, + { url = "https://files.pythonhosted.org/packages/4c/bd/31a3790c11d6ea95fcf5e6022ac0f8d0543c9b61120b730fc481bd43d3b4/tomli-2.5.0-cp315-cp315-win_amd64.whl", hash = "sha256:d747252933c8a65ef6bd8da0fbb7ce28a90eb6119d8cd00772cd528aa07b68d5", size = 114589, upload-time = "2026-10-07T12:23:23.098Z" }, + { url = "https://files.pythonhosted.org/packages/47/a2/4f6310fa699364f0e3af7ee3af88dddd9af066d33e716a0265bbe2b3ea84/tomli-2.5.0-cp315-cp315-win_arm64.whl", hash = "sha256:75dbcde8751b0a960aa3de173aa5e894d590755c6d7758b7e774c06f1dc3cbdd", size = 111493, upload-time = "2026-10-07T12:23:24.233Z" }, + { url = "https://files.pythonhosted.org/packages/68/14/00853f0b396d8971107ae1921bb5b322fdee1650d2f16bf06c20adb532e5/tomli-2.5.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:2419c2a189551987b59d80e63ec355671283336f41c6b9b89462df679c7d0c57", size = 171380, upload-time = "2026-10-07T12:23:25.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/ad/fa6949321dadee46b27363974fb197b94c911c3b0f7a5fd26d7dc18fc2a0/tomli-2.5.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:0dc598040da8d42cf20f0be588ed7004f46db12a0ac6c32e03a59dccedaaadcd", size = 170553, upload-time = "2026-10-07T12:23:26.855Z" }, + { url = "https://files.pythonhosted.org/packages/53/aa/3056c919eb3e084df3752b2cf5f865dcc04af0b27dba2f66d7b28af4633a/tomli-2.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49096930c8d886c9bbdab62d2d0d17ce823ddeea522309a190b36245d5b49e01", size = 294428, upload-time = "2026-10-07T12:23:28.132Z" }, + { url = "https://files.pythonhosted.org/packages/96/b2/faeeb5d8769ea3832021d73e892c8391eae7b4b4f8b55a789127bd8b18a9/tomli-2.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8ade5023067f99fe72b88accd30d0ea05a158e9e32a11f124e731ea9695313f", size = 304909, upload-time = "2026-10-07T12:23:29.381Z" }, + { url = "https://files.pythonhosted.org/packages/f6/52/f094c09e73fb654b621716d019acb5d29bdfd1be01df80c281d552bda48d/tomli-2.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:b69564772b5c8f22ea5f498dff08cfa825045b4d4c4400529000bdf818aa3b2a", size = 293220, upload-time = "2026-10-07T12:23:30.608Z" }, + { url = "https://files.pythonhosted.org/packages/86/f5/0c30541078ca4b505ce3bd76ed931facbfec524dd018535d691d1af0a6d2/tomli-2.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:8ff3a2ca028c7eee0c777f9a092038d0a594a9fa04e215f929a22c329e2cb142", size = 305705, upload-time = "2026-10-07T12:23:32.181Z" }, + { url = "https://files.pythonhosted.org/packages/05/74/590e7d19d6a118fc5cc5704ff358e21d95b8573f6b9443b1519f29ca8825/tomli-2.5.0-cp315-cp315t-win32.whl", hash = "sha256:62fc1bc8eb03e3a9cadfca713d65614ed8e09d974a283295ffe3a831976b4dc5", size = 108432, upload-time = "2026-10-07T12:23:33.496Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b8/63a75cfb27a17c38550e44025d3a6e7be64516fd8608a3b75703bf37d81b/tomli-2.5.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f3fcbc57b1791fa6cbe5d8434179d51de12be1a4811469529f47f6e7487a2571", size = 117281, upload-time = "2026-10-07T12:23:34.648Z" }, + { url = "https://files.pythonhosted.org/packages/72/01/e8c1debb2173973372934c68fc8e46170ab60ef23ed4592dff4dec6e8993/tomli-2.5.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d2ba24db8a9376921b5e87b4762b9adb0f3f1deaea68f2b8b0bb2c11efb9c3e7", size = 115069, upload-time = "2026-10-07T12:23:35.77Z" }, + { url = "https://files.pythonhosted.org/packages/60/3f/3e3f8fd0919249b0200c80fbc4f9a1e70be19f9883da71dfb7f8b9ab8aca/tomli-2.5.0-py3-none-any.whl", hash = "sha256:32a7b79ac57a2e83670ce329ccf675798bc5a2094783a63676866b70503f2e2b", size = 14765, upload-time = "2026-10-07T12:23:36.875Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "uc-micro-py" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043, upload-time = "2024-02-09T16:52:01.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229, upload-time = "2024-02-09T16:52:00.371Z" }, +] + +[[package]] +name = "zipp" +version = "3.23.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/21/093488dfc7cc8964ded15ab726fad40f25fd3d788fd741cc1c5a17d78ee8/zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110", size = 25965, upload-time = "2026-04-13T23:21:46.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/8a/0861bec20485572fbddf3dfba2910e38fe249796cb73ecdeb74e07eeb8d3/zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc", size = 10378, upload-time = "2026-04-13T23:21:45.386Z" }, +] From e1a4fb7fc935368a2e483598cc667e2c46b7bd2b Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:22:09 -0400 Subject: [PATCH 07/65] Add the shared streaming fADC250 decoder F16: one copy of the hit-word layout (bits 0-12 charge, 13-16 channel, 17-30 time, bit 31 flag; t_ns = time * 4) and of the frame walk (event 0xFF60 -> SIB 0xFF31 with TSS 0x32 -> ROC banks -> stream-info 0xFF30 -> payload banks) in pyevio/decoders/fadc250_stream.py, as pure functions over uint32 event words. F13: no caps on ROC or port counts; both streams of a crate merge by ROC id with the stream identity (ROC bank num) kept per hit. F14: empty payload banks (len 1, num 1) and data type 0x00 are valid; empties are counted per port. F19: validation raises ValueError on the raw field, never assert. Bank extents use length + 1 words throughout (F38-safe). Tests prove hit columns and counts on synthetic frames in both byte orders; a bank length past the event end stops the walk with errors counted and no exception; the batch form concatenates with correct first_hit_index per frame; on the corpus (PYEVIO_CORPUS=1) record 0 decodes to the sum of (payload length - 1) per ROC id from an independent struct walk: 499,660 hits, 264 ROC banks, 45 empty banks. Throughput: 592 MB/s on one record, 321 MB/s over 200 records. Co-Authored-By: Claude Fable 5.1 --- pyevio/decoders/fadc250_stream.py | 436 ++++++++++++++++++++++++++++++ tests/test_fadc250_stream.py | 298 ++++++++++++++++++++ 2 files changed, 734 insertions(+) create mode 100644 pyevio/decoders/fadc250_stream.py create mode 100644 tests/test_fadc250_stream.py diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py new file mode 100644 index 0000000..2658ea2 --- /dev/null +++ b/pyevio/decoders/fadc250_stream.py @@ -0,0 +1,436 @@ +"""Decode CODA streaming fADC250 time frames into numpy hit arrays. + +A streaming time frame is one EVIO event. The decoder takes the words of +one event (or of many events) as a numpy ``uint32`` array and returns hit +columns plus per-frame, per-ROC-bank and per-empty-bank tables. File +access stays in pyevio core: :func:`event_words` slices one event out of a +memory map, and the CLI, the examples and the web server call this module. + +Frame layout, measured on /data/evio-lib/corpus/sro_000791.evio.00000.v6 +(record 0) and described in the evio-optim SRO notes:: + + event bank tag 0xFF60, type 0x10 (bank of banks), num 0 + SIB tag 0xFF31, type 0x20 (bank of segments) + TSS segment tag 0x32, len 3: {frame number, timestamp lo, timestamp hi} + AIS segment tag 0x42, len 24: aggregated-stream entries (ignored here) + ROC bank tag = ROC id, type 0x10, num = stream status byte + stream-info tag 0xFF30, type 0x20: TSS 0x31 + payload-port map 0x41 + payload bank tag = payload port, type 0x00, one word per hit + payload bank ... + ROC bank ... + +Each crate sends two streams, so the same ROC id appears as two ROC banks +per frame. The banks differ in the num byte: bits 6—4 hold the stream +count (2) and bits 3—0 the stream mask (1 or 2). The decoder keeps that +mask as the ``stream`` column. The port split between the two streams is +mostly odd/even but not always (ROC 9 stream 2 carries ports 1, 2, 3, 4, +6, 8), so the num byte is the only reliable stream identity. + +An empty payload bank has length 1 and num 1; a data bank has num 0. Both +are valid. The walk trusts no length word: every bank end is checked +against its container, a bad length stops the walk and lands in +``errors`` and ``error_messages`` instead of an exception. + +Hit word layout (one ``uint32`` per hit), the single copy for pyevio. +Evidence: every earlier decoder in this repository and the viewer agree +on the bit positions and on the 4 ns tick, the fADC250 sample period +(250 MSPS). 2^14 ticks × 4 ns = 65,536 ns equals the 65,536-tick timestamp +step per frame in the SRO notes only if the timestamp tick is 1 ns, which +is open (question Q2):: + + bit 31 flag, never set in the SRO data (Jon Zarling's decoder skips such words) + bits 30—17 time in 4 ns ticks from the frame start (14 bits, 0—16383) + bits 16—13 fADC250 channel (4 bits, 0—15) + bits 12—0 charge (13 bits, 8191 = overflow) +""" +from dataclasses import dataclass, field +from typing import Iterable, List, Optional + +import numpy as np + +# ---------------------------------------------------------------- hit word layout +HIT_FLAG_BIT = 31 +HIT_TIME_SHIFT = 17 +HIT_TIME_MASK = 0x3FFF +HIT_TIME_BITS = 14 +HIT_CHANNEL_SHIFT = 13 +HIT_CHANNEL_MASK = 0xF +HIT_CHARGE_MASK = 0x1FFF +HIT_CHARGE_OVERFLOW = 0x1FFF +HIT_TIME_TICK_NS = 4 +HIT_FORMAT = "fadc250-stream-v1: t=bits[30:17]*4ns ch=bits[16:13] q=bits[12:0]" + +# ---------------------------------------------------------------- bank tags +STREAM_EVENT_TAG = 0xFF60 +SIB_TAG = 0xFF31 +SIB_TSS_SEGMENT_TAG = 0x32 +SIB_AIS_SEGMENT_TAG = 0x42 +ROC_STREAM_INFO_TAG = 0xFF30 +ROC_TSS_SEGMENT_TAG = 0x31 +ROC_PAYLOAD_PORT_SEGMENT_TAG = 0x41 +BANK_OF_BANKS_TYPES = (0x10, 0x0E) + +# Only the first error messages of a batch are kept; the count is always exact. +MAX_ERROR_MESSAGES = 50 + +FRAME_DTYPE = np.dtype([ + ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), ("first_hit_index", np.uint64), + ("event_index", np.uint32), ("n_roc_banks", np.uint16), ("n_payload_banks", np.uint16), + ("n_empty_payload_banks", np.uint16), ("errors", np.uint16), +]) +ROC_BANK_DTYPE = np.dtype([ + ("event_index", np.uint32), ("frame", np.uint32), ("roc", np.uint16), ("stream", np.uint8), + ("stream_status", np.uint8), ("n_payload_banks", np.uint16), ("n_empty_payload_banks", np.uint16), + ("n_hits", np.uint32), ("first_hit_index", np.uint64), +]) +EMPTY_BANK_DTYPE = np.dtype([("event_index", np.uint32), ("roc", np.uint16), ("stream", np.uint8), ("port", np.uint16)]) + + +def event_words(mm, offset: int, length: int, endian: str) -> np.ndarray: + """Return the words of one event as a ``uint32`` view of ``mm`` in the file's byte order. + + ``offset`` and ``length`` are in bytes, as ``Record.get_event_offsets`` returns them. + Raises ``ValueError`` when the range runs past the buffer, so a caller never reads + past the file because an index word said so. + """ + if offset < 0 or length < 0 or offset + length > len(mm): + raise ValueError(f"event at byte {offset} with length {length} runs past the buffer end ({len(mm)} bytes)") + return np.frombuffer(mm, dtype=np.dtype(endian + "u4"), count=length // 4, offset=offset) + + +def unpack_hit_words(hit_words: np.ndarray): + """Split hit words into ``(channel, time_raw, charge)`` columns. + + ``time_raw`` is the 14-bit tick field; multiply by ``HIT_TIME_TICK_NS`` for nanoseconds. + The flag bit is masked away; count it with :func:`count_flag_words` or reject it + with :func:`validate_hit_words`. + """ + hit_words = np.asarray(hit_words, dtype=np.uint32) + channel = ((hit_words >> HIT_CHANNEL_SHIFT) & HIT_CHANNEL_MASK).astype(np.uint8) + time_raw = ((hit_words >> HIT_TIME_SHIFT) & HIT_TIME_MASK).astype(np.uint16) + charge = (hit_words & HIT_CHARGE_MASK).astype(np.uint16) + return channel, time_raw, charge + + +def count_flag_words(hit_words: np.ndarray) -> int: + """Count hit words with bit 31 set.""" + return int(np.count_nonzero(np.asarray(hit_words, dtype=np.uint32) >> HIT_FLAG_BIT)) + + +def validate_hit_words(hit_words: np.ndarray) -> None: + """Raise ``ValueError`` when the raw time field does not fit its 14 bits. + + The check reads the field without the mask: ``word >> 17`` exceeds ``2**14 - 1`` + exactly when the flag bit is set. A masked field can never fail, which is why the + check runs on the raw words and before any unit conversion. + """ + raw_time_field = np.asarray(hit_words, dtype=np.uint32) >> HIT_TIME_SHIFT + n_bad = int(np.count_nonzero(raw_time_field > HIT_TIME_MASK)) + if n_bad: + raise ValueError(f"{n_bad} hit words have a time field outside {HIT_TIME_BITS} bits (bit 31 set)") + + +@dataclass +class StreamHits: + """Hits of many decoded events, concatenated in event order. + + Hit columns share one index. ``frames`` has one row per stream frame + (``first_hit_index`` + ``n_hits`` gives the hit range); ``roc_banks`` one row per + ROC bank with its hit range and stream identity; ``empty_banks`` one row per + empty payload bank. Events that are not 0xFF60 stream frames count in + ``n_other_events`` and get no row. + """ + frame: np.ndarray + event_index: np.ndarray + roc: np.ndarray + stream: np.ndarray + port: np.ndarray + channel: np.ndarray + time_raw: np.ndarray + t_ns: np.ndarray + charge: np.ndarray + frames: np.ndarray + roc_banks: np.ndarray + empty_banks: np.ndarray + n_events: int = 0 + n_stream_frames: int = 0 + n_other_events: int = 0 + n_hits: int = 0 + n_payload_banks: int = 0 + n_empty_payload_banks: int = 0 + n_payload_words: int = 0 + n_flag_words: int = 0 + errors: int = 0 + error_messages: List[str] = field(default_factory=list) + + HIT_COLUMNS = ("frame", "event_index", "roc", "stream", "port", "channel", "time_raw", "t_ns", "charge") + + def hit_columns(self) -> dict: + """Return the hit columns as ``{name: array}``.""" + return {name: getattr(self, name) for name in self.HIT_COLUMNS} + + def validate(self) -> None: + """Raise ``ValueError`` on any inconsistency the decode found. + + Detects: walk errors (bad lengths), hit words with bit 31 set, and a hit + count that differs from the payload word count or the per-frame sums. + """ + if self.errors: + first = "; ".join(self.error_messages[:3]) + raise ValueError(f"{self.errors} decode errors, first: {first}") + if self.n_flag_words: + raise ValueError(f"{self.n_flag_words} hit words have a time field outside {HIT_TIME_BITS} bits (bit 31 set)") + if self.n_hits != self.n_payload_words: + raise ValueError(f"hit count {self.n_hits} != sum of payload bank words {self.n_payload_words}") + if int(self.frames["n_hits"].sum()) != self.n_hits: + raise ValueError("per-frame hit counts do not add up to the hit count") + + +@dataclass +class FrameHits: + """Hits of one decoded event, with the frame metadata as scalars.""" + frame_number: int + timestamp: int + is_stream_frame: bool + roc: np.ndarray + stream: np.ndarray + port: np.ndarray + channel: np.ndarray + time_raw: np.ndarray + t_ns: np.ndarray + charge: np.ndarray + roc_banks: np.ndarray + empty_banks: np.ndarray + n_hits: int + n_roc_banks: int + n_payload_banks: int + n_empty_payload_banks: int + n_payload_words: int + n_flag_words: int + errors: int + error_messages: List[str] + + +def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: + """Join the results of several :func:`decode_frames` calls into one, keeping event order. + + Hit indices in ``frames`` and ``roc_banks`` are shifted so they index the joined columns; + ``event_index`` values are kept as the chunks produced them. + """ + chunks = list(chunks) + if not chunks: + return decode_frames([]) + columns = {name: np.concatenate([getattr(c, name) for c in chunks]) for name in StreamHits.HIT_COLUMNS} + frames = np.concatenate([c.frames for c in chunks]) + roc_banks = np.concatenate([c.roc_banks for c in chunks]) + hit_offsets = np.cumsum([0] + [c.n_hits for c in chunks[:-1]], dtype=np.uint64) + frames["first_hit_index"] += np.repeat(hit_offsets, [len(c.frames) for c in chunks]) + roc_banks["first_hit_index"] += np.repeat(hit_offsets, [len(c.roc_banks) for c in chunks]) + messages = [m for c in chunks for m in c.error_messages][:MAX_ERROR_MESSAGES] + return StreamHits( + **columns, frames=frames, roc_banks=roc_banks, + empty_banks=np.concatenate([c.empty_banks for c in chunks]), + n_events=sum(c.n_events for c in chunks), n_stream_frames=sum(c.n_stream_frames for c in chunks), + n_other_events=sum(c.n_other_events for c in chunks), n_hits=sum(c.n_hits for c in chunks), + n_payload_banks=sum(c.n_payload_banks for c in chunks), + n_empty_payload_banks=sum(c.n_empty_payload_banks for c in chunks), + n_payload_words=sum(c.n_payload_words for c in chunks), n_flag_words=sum(c.n_flag_words for c in chunks), + errors=sum(c.errors for c in chunks), error_messages=messages, + ) + + +class _Walk: + """Accumulates what the bank walk finds over one or more events, before any numpy work. + + Hit words are collected as slices of the event arrays and concatenated once at the end, + which keeps the per-event cost at a few hundred Python-level header reads. + """ + + def __init__(self): + self.hit_slices = [] + # One entry per payload bank with data: its event, frame, roc, stream, port and word count. + self.bank_event, self.bank_frame, self.bank_roc, self.bank_stream, self.bank_port, self.bank_n = [], [], [], [], [], [] + self.frame_rows, self.roc_bank_rows, self.empty_rows = [], [], [] + self.n_events = self.n_stream_frames = self.n_other_events = 0 + self.n_hits = self.n_payload_banks = self.n_empty_payload_banks = self.n_payload_words = 0 + self.errors = 0 + self.error_messages = [] + + def error(self, event_index: int, word_i: int, reason: str) -> None: + self.errors += 1 + if len(self.error_messages) < MAX_ERROR_MESSAGES: + self.error_messages.append(f"event {event_index} word {word_i}: {reason}") + + def walk_event(self, words: np.ndarray, event_index: int) -> None: + """Walk one event; a bad length stops the walk and is recorded, never raised.""" + self.n_events += 1 + w = np.ascontiguousarray(words, dtype=np.uint32) # a no-op view when the dtype already matches + n = len(w) + read = w.item # returns Python ints; faster than indexing a numpy scalar + errors_before = self.errors + if n < 2: + self.n_other_events += 1 + self.error(event_index, 0, f"event has {n} words, a bank header needs 2") + return + if (read(1) >> 16) != STREAM_EVENT_TAG: + self.n_other_events += 1 + return + self.n_stream_frames += 1 + event_end = read(0) + 1 + if event_end > n: + self.error(event_index, 0, f"event length {event_end} words runs past the {n} words given") + event_end = n + + frame_number, timestamp, sib_end = self._read_sib(read, event_end, event_index) + hits_before, payload_before, empty_before, roc_banks_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks, len(self.roc_bank_rows) + + roc_bank_i = sib_end + while roc_bank_i < event_end: + if roc_bank_i + 1 >= event_end: + self.error(event_index, roc_bank_i, "ROC bank header runs past the event end") + break + roc_end = roc_bank_i + read(roc_bank_i) + 1 + if roc_end > event_end: + self.error(event_index, roc_bank_i, f"ROC bank length {read(roc_bank_i)} runs past the event end {event_end}") + break + roc_header = read(roc_bank_i + 1) + if ((roc_header >> 8) & 0x3F) not in BANK_OF_BANKS_TYPES: + self.error(event_index, roc_bank_i, f"ROC bank 0x{roc_header:08X} is not a bank of banks") + roc_bank_i = roc_end + continue + self._walk_roc_bank(w, read, roc_bank_i + 2, roc_end, roc_header, event_index, frame_number) + roc_bank_i = roc_end + + self.frame_rows.append(( + frame_number, timestamp, self.n_hits - hits_before, hits_before, event_index, + len(self.roc_bank_rows) - roc_banks_before, self.n_payload_banks - payload_before, + self.n_empty_payload_banks - empty_before, self.errors - errors_before, + )) + + def _read_sib(self, read, event_end: int, event_index: int): + """Return ``(frame_number, timestamp, sib_end)`` from the SIB at word 2; zeros on a bad SIB.""" + if 3 >= event_end: + self.error(event_index, 2, "no room for the stream info bank") + return 0, 0, event_end + sib_end = 2 + read(2) + 1 + if sib_end > event_end: + self.error(event_index, 2, f"SIB length {read(2)} runs past the event end {event_end}") + return 0, 0, event_end + if (read(3) >> 16) != SIB_TAG: + self.error(event_index, 3, f"expected SIB tag 0x{SIB_TAG:04X}, found 0x{read(3) >> 16:04X}") + return 0, 0, sib_end + # The TSS is the first segment of the SIB: header word tag<<24 | type<<16 | length. + if 7 >= sib_end or (read(4) >> 24) != SIB_TSS_SEGMENT_TAG or (read(4) & 0xFFFF) < 3: + self.error(event_index, 4, "SIB does not start with a time slice segment (tag 0x32, length 3)") + return 0, 0, sib_end + return read(5), read(6) | (read(7) << 32), sib_end + + def _walk_roc_bank(self, w, read, child_i: int, roc_end: int, roc_header: int, event_index: int, frame_number: int) -> None: + roc = roc_header >> 16 + stream_status = roc_header & 0xFF + stream = stream_status & 0xF + hits_before, payload_before, empty_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks + # Skip the stream-info bank; the SRO data always places it first. + if child_i + 1 < roc_end and (read(child_i + 1) >> 16) == ROC_STREAM_INFO_TAG: + child_i += read(child_i) + 1 + while child_i < roc_end: + if child_i + 1 >= roc_end: + self.error(event_index, child_i, "payload bank header runs past the ROC bank end") + break + payload_len = read(child_i) + if payload_len == 0 or child_i + payload_len + 1 > roc_end: + self.error(event_index, child_i, f"payload bank length {payload_len} runs past the ROC bank end {roc_end}") + break + port = read(child_i + 1) >> 16 + n_words = payload_len - 1 + self.n_payload_banks += 1 + self.n_payload_words += n_words + if n_words == 0: + self.n_empty_payload_banks += 1 + self.empty_rows.append((event_index, roc, stream, port)) + else: + self.hit_slices.append(w[child_i + 2:child_i + 2 + n_words]) + self.bank_event.append(event_index) + self.bank_frame.append(frame_number) + self.bank_roc.append(roc) + self.bank_stream.append(stream) + self.bank_port.append(port) + self.bank_n.append(n_words) + self.n_hits += n_words + child_i += payload_len + 1 + self.roc_bank_rows.append(( + event_index, frame_number, roc, stream, stream_status, self.n_payload_banks - payload_before, + self.n_empty_payload_banks - empty_before, self.n_hits - hits_before, hits_before, + )) + + def to_stream_hits(self) -> StreamHits: + """Build the numpy columns: one concatenation of hit words, then vectorized unpacking.""" + if self.hit_slices: + hit_words = np.concatenate(self.hit_slices) + else: + hit_words = np.empty(0, dtype=np.uint32) + bank_n = np.asarray(self.bank_n, dtype=np.int64) + channel, time_raw, charge = unpack_hit_words(hit_words) + return StreamHits( + frame=np.repeat(np.asarray(self.bank_frame, dtype=np.uint32), bank_n), + event_index=np.repeat(np.asarray(self.bank_event, dtype=np.uint32), bank_n), + roc=np.repeat(np.asarray(self.bank_roc, dtype=np.uint16), bank_n), + stream=np.repeat(np.asarray(self.bank_stream, dtype=np.uint8), bank_n), + port=np.repeat(np.asarray(self.bank_port, dtype=np.uint16), bank_n), + channel=channel, time_raw=time_raw, + t_ns=(time_raw * np.uint16(HIT_TIME_TICK_NS)).astype(np.uint16), # max 16383 × 4 = 65,532 fits + charge=charge, + frames=np.array(self.frame_rows, dtype=FRAME_DTYPE), + roc_banks=np.array(self.roc_bank_rows, dtype=ROC_BANK_DTYPE), + empty_banks=np.array(self.empty_rows, dtype=EMPTY_BANK_DTYPE), + n_events=self.n_events, n_stream_frames=self.n_stream_frames, n_other_events=self.n_other_events, + n_hits=self.n_hits, n_payload_banks=self.n_payload_banks, + n_empty_payload_banks=self.n_empty_payload_banks, n_payload_words=self.n_payload_words, + n_flag_words=count_flag_words(hit_words), errors=self.errors, error_messages=self.error_messages, + ) + + +def decode_frames(events: Iterable[np.ndarray], first_event_index: int = 0) -> StreamHits: + """Decode many events (each a ``uint32`` word array) into one :class:`StreamHits`. + + Events are numbered from ``first_event_index`` in iteration order; the number is the + ``event_index`` of their hits and table rows. The result holds every hit of the batch + in memory, so a caller streams a large file in chunks (for example one record at a time) + and joins or reduces the chunks itself. + """ + walk = _Walk() + for event_i, words in enumerate(events, start=first_event_index): + walk.walk_event(words, event_i) + return walk.to_stream_hits() + + +def decode_frame(words: np.ndarray, event_index: int = 0) -> FrameHits: + """Decode one event into a :class:`FrameHits`. + + A non-stream event (tag other than 0xFF60) returns ``is_stream_frame=False`` with empty + columns and no error; malformed lengths return the hits found before the bad length + and describe it in ``error_messages``. + """ + stream_hits = decode_frames([words], first_event_index=event_index) + is_stream_frame = stream_hits.n_stream_frames == 1 + frame_row = stream_hits.frames[0] if is_stream_frame else None + return FrameHits( + frame_number=int(frame_row["frame"]) if is_stream_frame else 0, + timestamp=int(frame_row["timestamp"]) if is_stream_frame else 0, + is_stream_frame=is_stream_frame, + roc=stream_hits.roc, stream=stream_hits.stream, port=stream_hits.port, channel=stream_hits.channel, + time_raw=stream_hits.time_raw, t_ns=stream_hits.t_ns, charge=stream_hits.charge, + roc_banks=stream_hits.roc_banks, empty_banks=stream_hits.empty_banks, + n_hits=stream_hits.n_hits, n_roc_banks=len(stream_hits.roc_banks), + n_payload_banks=stream_hits.n_payload_banks, n_empty_payload_banks=stream_hits.n_empty_payload_banks, + n_payload_words=stream_hits.n_payload_words, n_flag_words=stream_hits.n_flag_words, + errors=stream_hits.errors, error_messages=stream_hits.error_messages, + ) + + +def empty_banks_per_port(empty_banks: np.ndarray) -> dict: + """Count empty payload banks per ``(roc, stream, port)`` from an ``empty_banks`` table.""" + if len(empty_banks) == 0: + return {} + keys, counts = np.unique(empty_banks[["roc", "stream", "port"]], return_counts=True) + return {(int(k["roc"]), int(k["stream"]), int(k["port"])): int(c) for k, c in zip(keys, counts)} diff --git a/tests/test_fadc250_stream.py b/tests/test_fadc250_stream.py new file mode 100644 index 0000000..d2ac01a --- /dev/null +++ b/tests/test_fadc250_stream.py @@ -0,0 +1,298 @@ +"""Tests for pyevio.decoders.fadc250_stream. + +Synthetic frames are built word by word by the helpers below, in both byte +orders. The real-data test runs only with PYEVIO_CORPUS=1 and checks the +decoder against an independent struct-based walk of record 0 of the SRO +corpus file. +""" +import os +import struct + +import numpy as np +import pytest + +from pyevio.decoders import fadc250_stream as fs + +CORPUS_FILE = "/data/evio-lib/corpus/sro_000791.evio.00000.v6" + + +# ---------------------------------------------------------------- frame builders +def bank(tag, data_type, num, payload): + """EVIO bank: length word (words after it), header word, payload words.""" + return [len(payload) + 1, (tag << 16) | (data_type << 8) | num] + list(payload) + + +def segment(tag, data_type, payload): + """EVIO segment: one header word tag<<24 | type<<16 | length, then payload words.""" + return [(tag << 24) | (data_type << 16) | len(payload)] + list(payload) + + +def hit_word(channel, time_raw, charge, flag=False): + word = (time_raw << fs.HIT_TIME_SHIFT) | (channel << fs.HIT_CHANNEL_SHIFT) | charge + return word | (1 << fs.HIT_FLAG_BIT) if flag else word + + +def stream_info_bank(frame_number, timestamp, ports): + """ROC-level 0xFF30 bank: TSS 0x31 and a payload-port map 0x41 (one uint16 entry per port).""" + packed_ports = [ports[i] | (ports[i + 1] << 16 if i + 1 < len(ports) else 0) for i in range(0, len(ports), 2)] + return bank(fs.ROC_STREAM_INFO_TAG, 0x20, 0x21, + segment(fs.ROC_TSS_SEGMENT_TAG, 1, [frame_number, timestamp & 0xFFFFFFFF, timestamp >> 32]) + + segment(fs.ROC_PAYLOAD_PORT_SEGMENT_TAG, 5, packed_ports)) + + +def roc_bank(roc, stream_mask, frame_number, timestamp, payload_banks, with_stream_info=True): + """ROC bank with num = stream status (2 streams, the given mask) and payload banks ``[(port, [hit words])]``.""" + children = stream_info_bank(frame_number, timestamp, [port for port, _ in payload_banks]) if with_stream_info else [] + for port, hits in payload_banks: + children += bank(port, 0x00, 0 if hits else 1, hits) # an empty payload bank has num 1 + return bank(roc, 0x10, (2 << 4) | stream_mask, children) + + +def stream_frame(frame_number, timestamp, roc_banks): + sib = bank(fs.SIB_TAG, 0x20, 0, + segment(fs.SIB_TSS_SEGMENT_TAG, 1, [frame_number, timestamp & 0xFFFFFFFF, timestamp >> 32]) + + segment(fs.SIB_AIS_SEGMENT_TAG, 1, [0x00070021] * 24)) + return bank(fs.STREAM_EVENT_TAG, 0x10, 0, sib + [w for rb in roc_banks for w in rb]) + + +def to_words(words, endian): + """Pack to bytes in the given byte order and read back the way EvioFile callers do.""" + raw = struct.pack(f"{endian}{len(words)}I", *words) + return np.frombuffer(raw, dtype=np.dtype(endian + "u4")) + + +FRAME_NUMBER = 1234 +TIMESTAMP = (5 << 32) | 0x8000_0000 +HITS_A = [hit_word(0, 10, 100), hit_word(3, 20, 200), hit_word(15, 16383, 8191)] +HITS_B = [hit_word(7, 4000, 1)] +HITS_C = [hit_word(1, 1, 1), hit_word(2, 2, 2)] + + +def one_crate_frame(): + """One crate (ROC 7) as two streams; stream 1 has an empty port 5, stream 2 ends with an empty port 16.""" + return stream_frame(FRAME_NUMBER, TIMESTAMP, [ + roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A), (3, HITS_B), (5, [])]), + roc_bank(7, 2, FRAME_NUMBER, TIMESTAMP, [(2, HITS_C), (16, [])]), + ]) + + +# ---------------------------------------------------------------- synthetic frames +@pytest.mark.parametrize("endian", ["<", ">"]) +def test_decode_frame_columns(endian): + frame = fs.decode_frame(to_words(one_crate_frame(), endian)) + + assert frame.is_stream_frame + assert frame.frame_number == FRAME_NUMBER + assert frame.timestamp == TIMESTAMP + assert frame.errors == 0 and frame.error_messages == [] + assert frame.n_hits == 6 + assert frame.n_roc_banks == 2 + assert frame.n_payload_banks == 5 + assert frame.n_empty_payload_banks == 2 + assert frame.n_payload_words == 6 + assert frame.n_flag_words == 0 + + assert frame.roc.tolist() == [7] * 6 + assert frame.stream.tolist() == [1, 1, 1, 1, 2, 2] + assert frame.port.tolist() == [1, 1, 1, 3, 2, 2] + assert frame.channel.tolist() == [0, 3, 15, 7, 1, 2] + assert frame.time_raw.tolist() == [10, 20, 16383, 4000, 1, 2] + assert frame.t_ns.tolist() == [40, 80, 65532, 16000, 4, 8] + assert frame.charge.tolist() == [100, 200, 8191, 1, 1, 2] + assert frame.t_ns.dtype == np.uint16 and frame.time_raw.dtype == np.uint16 + + rocs = frame.roc_banks + assert rocs["roc"].tolist() == [7, 7] + assert rocs["stream"].tolist() == [1, 2] + assert rocs["stream_status"].tolist() == [0x21, 0x22] + assert rocs["n_payload_banks"].tolist() == [3, 2] + assert rocs["n_empty_payload_banks"].tolist() == [1, 1] + assert rocs["n_hits"].tolist() == [4, 2] + assert rocs["first_hit_index"].tolist() == [0, 4] + assert fs.empty_banks_per_port(frame.empty_banks) == {(7, 1, 5): 1, (7, 2, 16): 1} + + +def test_non_stream_event_is_not_an_error(): + frame = fs.decode_frame(to_words(bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2, 3])), "<")) + assert not frame.is_stream_frame + assert frame.n_hits == 0 and frame.errors == 0 + + +def test_last_roc_bank_without_children_i17(): + """I17: the Parquet example crashed on a frame whose last ROC bank has no children (length 1).""" + words = stream_frame(FRAME_NUMBER, TIMESTAMP, [ + roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)]), + bank(7, 0x10, 0x22, []), + ]) + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 0 + assert frame.n_hits == 3 + assert frame.roc_banks["n_payload_banks"].tolist() == [1, 0] + assert frame.roc_banks["n_hits"].tolist() == [3, 0] + + +def test_last_roc_bank_with_only_an_empty_payload_bank(): + words = stream_frame(FRAME_NUMBER, TIMESTAMP, [ + roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)]), + roc_bank(7, 2, FRAME_NUMBER, TIMESTAMP, [(2, [])]), + ]) + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 0 + assert frame.n_hits == 3 and frame.n_empty_payload_banks == 1 + assert frame.roc_banks["n_payload_banks"].tolist() == [1, 1] + + +def test_roc_bank_without_stream_info_bank(): + words = stream_frame(FRAME_NUMBER, TIMESTAMP, [roc_bank(9, 2, FRAME_NUMBER, TIMESTAMP, [(4, HITS_C)], with_stream_info=False)]) + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 0 and frame.n_hits == 2 and frame.port.tolist() == [4, 4] + + +# ---------------------------------------------------------------- bounds +def test_payload_bank_length_past_event_end_stops_walk(): + words = one_crate_frame() + # Corrupt the length word of the last payload bank (port 16, empty): make it run past the event. + last_payload_i = len(words) - 2 + assert words[last_payload_i] == 1 and (words[last_payload_i + 1] >> 16) == 16 + words[last_payload_i] = 1000 + + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 1 + assert "payload bank length 1000" in frame.error_messages[0] + assert frame.n_hits == 6 # hits before the bad bank are kept + assert frame.roc_banks["n_payload_banks"].tolist() == [3, 1] + + +def test_roc_bank_length_past_event_end_stops_walk(): + words = one_crate_frame() + sib_end = 2 + words[2] + 1 + words[sib_end] = 100_000 # first ROC bank claims more words than the event holds + + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 1 and frame.n_hits == 0 and frame.n_roc_banks == 0 + assert "ROC bank length 100000" in frame.error_messages[0] + + +def test_event_length_past_given_words_is_an_error(): + words = one_crate_frame() + truncated = words[:-4] # the event length word now exceeds the array + frame = fs.decode_frame(to_words(truncated, "<")) + assert frame.errors >= 1 + assert "runs past" in frame.error_messages[0] + assert frame.is_stream_frame and frame.frame_number == FRAME_NUMBER + + +def test_tiny_arrays_never_raise(): + for words in ([], [0], [5, fs.STREAM_EVENT_TAG << 16], [1, fs.STREAM_EVENT_TAG << 16]): + frame = fs.decode_frame(np.array(words, dtype=np.uint32)) + assert frame.n_hits == 0 + + +# ---------------------------------------------------------------- hit word layout and validation +def test_hit_word_layout_round_trip(): + words = np.array([hit_word(5, 100, 1024)], dtype=np.uint32) + channel, time_raw, charge = fs.unpack_hit_words(words) + assert (channel[0], time_raw[0], charge[0]) == (5, 100, 1024) + assert words[0] == (5 << 13) | (1024 & 0x1FFF) | ((400 // 4) << 17) # layout as tests/test_bank_scanning.py encodes it + assert fs.HIT_TIME_TICK_NS == 4 + + +def test_validate_hit_words_rejects_flag_bit(): + good = np.array([hit_word(1, 16383, 1)], dtype=np.uint32) + fs.validate_hit_words(good) + bad = np.array([hit_word(1, 1, 1, flag=True), hit_word(2, 2, 2)], dtype=np.uint32) + with pytest.raises(ValueError, match="1 hit words"): + fs.validate_hit_words(bad) + assert fs.count_flag_words(bad) == 1 + + +def test_stream_hits_validate_reports_flag_words_and_errors(): + words = stream_frame(FRAME_NUMBER, TIMESTAMP, [roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, [hit_word(1, 1, 1, flag=True)])])]) + hits = fs.decode_frames([to_words(words, "<")]) + assert hits.n_flag_words == 1 + with pytest.raises(ValueError, match="bit 31"): + hits.validate() + + +# ---------------------------------------------------------------- batch form +def test_decode_frames_concatenates_and_indexes(): + frame_a = to_words(one_crate_frame(), "<") + frame_b = to_words(stream_frame(FRAME_NUMBER + 4, TIMESTAMP + 262144, [roc_bank(44, 1, 0, 0, [(3, HITS_B)])]), "<") + other = to_words(bank(0xFF50, 0x10, 0, []), "<") + + hits = fs.decode_frames([frame_a, other, frame_b], first_event_index=10) + hits.validate() + assert hits.n_events == 3 and hits.n_stream_frames == 2 and hits.n_other_events == 1 + assert hits.n_hits == 7 + assert hits.frames["frame"].tolist() == [FRAME_NUMBER, FRAME_NUMBER + 4] + assert hits.frames["event_index"].tolist() == [10, 12] + assert hits.frames["n_hits"].tolist() == [6, 1] + assert hits.frames["first_hit_index"].tolist() == [0, 6] + assert hits.frames["n_empty_payload_banks"].tolist() == [2, 0] + assert hits.frame.tolist() == [FRAME_NUMBER] * 6 + [FRAME_NUMBER + 4] + assert hits.event_index.tolist() == [10] * 6 + [12] + assert hits.roc.tolist() == [7] * 6 + [44] + assert hits.roc_banks["first_hit_index"].tolist() == [0, 4, 6] + + joined = fs.concatenate_stream_hits([hits, fs.decode_frames([frame_b], first_event_index=20)]) + assert joined.n_hits == 8 + assert joined.frames["first_hit_index"].tolist() == [0, 6, 7] + assert joined.roc_banks["first_hit_index"].tolist() == [0, 4, 6, 7] + assert joined.event_index.tolist()[-1] == 20 + joined.validate() + + +def test_decode_frames_empty_input(): + hits = fs.decode_frames([]) + assert hits.n_hits == 0 and len(hits.frames) == 0 and len(hits.roc) == 0 + hits.validate() + + +# ---------------------------------------------------------------- real data +def independent_payload_word_sums(mm, offset, length, endian): + """Plain struct walk of one stream frame: ``{roc id: sum of (payload bank length - 1)}``.""" + def word(i): + return struct.unpack_from(endian + "I", mm, offset + 4 * i)[0] + + n = length // 4 + assert word(0) + 1 == n and (word(1) >> 16) == 0xFF60 + sums = {} + roc_i = 2 + word(2) + 1 + while roc_i < n: + roc_end = roc_i + word(roc_i) + 1 + roc = word(roc_i + 1) >> 16 + child_i = roc_i + 2 + if (word(child_i + 1) >> 16) == 0xFF30: + child_i += word(child_i) + 1 + while child_i < roc_end: + sums[roc] = sums.get(roc, 0) + word(child_i) - 1 + child_i += word(child_i) + 1 + roc_i = roc_end + return sums + + +@pytest.mark.skipif(os.environ.get("PYEVIO_CORPUS") != "1", reason="set PYEVIO_CORPUS=1 to run on the SRO corpus") +def test_corpus_record0_hits_match_payload_word_sums(): + from pyevio import EvioFile + + with EvioFile(CORPUS_FILE) as evio_file: + record = evio_file.get_record(0) # never the last record: it is a trailer with an index + n_events = record.header.event_count + assert n_events == 11 + offsets = record.get_event_offsets()[:n_events] + endian = evio_file.header.endian + + expected = {} + for offset, length in offsets: + for roc, words in independent_payload_word_sums(evio_file.mm, offset, length, endian).items(): + expected[roc] = expected.get(roc, 0) + words + + hits = fs.decode_frames(fs.event_words(evio_file.mm, offset, length, endian) for offset, length in offsets) + hits.validate() + + assert hits.n_stream_frames == 11 and hits.errors == 0 + assert hits.n_hits == sum(expected.values()) == 499_660 + rocs, counts = np.unique(hits.roc, return_counts=True) + assert dict(zip(rocs.tolist(), counts.tolist())) == expected + assert set(np.unique(hits.stream).tolist()) == {1, 2} + assert len(hits.roc_banks) == 24 * 11 From fd47fdb000aea97e859464ecd65e0567472399c7 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:22:09 -0400 Subject: [PATCH 08/65] Point the Parquet example and pyevio debug at the shared decoder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit F16: the example and cli/debug.py call pyevio.decoders.fadc250_stream instead of private copies of the walk and the hit layout. F17: the example survives a last ROC bank without children (the crash shape: IndexError past the event end) — pinned by a test with that frame shape and with an empty payload bank in the last ROC bank. F20: hits sorted by (frame, event index, t_ns), frames by (frame, event index), so hit ranges stay valid with duplicate frame numbers. F18 (partial): the example uses get_event_offsets and keeps no Event objects; EvioFile's Record cache remains core's concern. Parquet schema: new `stream` column, `port` widened to uint16, DECODER_VERSION "2". New finding fixed on the way: cli/debug.py called Record.get_record_and_event, which does not exist (it belongs to EvioFile), so `pyevio debug` printed an error for every event; it now calls Record.get_event. The `length <= 2` gate that skipped decoding of any payload bank with two or more hits is gone; a stream-frame summary table prints for 0xFF60 events. Pinned by test_debug_command_decodes_stream_frame. Co-Authored-By: Claude Fable 5.1 --- examples/fadc250_stream_to_parquet.py | 157 ++++++++++++-------------- pyevio/cli/debug.py | 93 ++++++++------- tests/test_fadc250_stream_example.py | 103 +++++++++++++++++ 3 files changed, 227 insertions(+), 126 deletions(-) create mode 100644 tests/test_fadc250_stream_example.py diff --git a/examples/fadc250_stream_to_parquet.py b/examples/fadc250_stream_to_parquet.py index 3a5173b..0c7cffd 100644 --- a/examples/fadc250_stream_to_parquet.py +++ b/examples/fadc250_stream_to_parquet.py @@ -1,20 +1,19 @@ """Decode CODA streaming fADC250 hits from an EVIO v6 file into Parquet. -Container access goes through pyevio. The hit words are decoded with numpy. -Requires pyarrow (pip install pyarrow). Browse the same files with `pyevio web`. - -Hit word layout (big-endian u32): - bits 30-17 time in 4 ns ticks from frame start - bits 16-13 channel - bits 12-0 charge q +Container access goes through pyevio; the frame walk and the hit word +layout live in pyevio.decoders.fadc250_stream. Requires pyarrow +(pip install pyarrow). Browse the same files with `pyevio web`. Usage: python fadc250_stream_to_parquet.py run.evio # writes out/run.hits.parquet + out/run.frames.parquet python fadc250_stream_to_parquet.py runs/*.evio --out out --force Read the output: - hits = pq.read_table("out/run.hits.parquet") # frame, roc, port, ch, t_ns, q (sorted by frame, t_ns) - frames = pq.read_table("out/run.frames.parquet") # frame, timestamp_ns, n_hits, hit_offset + hits = pq.read_table("out/run.hits.parquet") # frame, roc, stream, port, ch, t_ns, q (sorted by frame, event, t_ns) + frames = pq.read_table("out/run.frames.parquet") # frame, timestamp_ns, n_hits, hit_offset (sorted by frame, event) + +Every hit of a file stays in memory until it is written, so a 15 GB SRO file +needs more RAM than most hosts have; this example is for files up to a few GB. """ import argparse import sys @@ -22,90 +21,82 @@ from pathlib import Path import numpy as np -import pyarrow as pa -import pyarrow.parquet as pq from pyevio import EvioFile +from pyevio.decoders import fadc250_stream as fs -DECODER_VERSION = "1" -HIT_FORMAT = "fadc250-stream-v1: t=bits[30:17]*4ns ch=bits[16:13] q=bits[12:0]" +DECODER_VERSION = "2" +HIT_FORMAT = fs.HIT_FORMAT # ---------------------------------------------------------------- decoding def decode(path): - """Return (hits dict of numpy arrays, frames dict, stats dict).""" - f = EvioFile(str(path)) - mm = f.mm - dt = np.dtype(f.header.endian + "u4") - words, b_frame, b_roc, b_port, b_n = [], [], [], [], [] # raw hit words + one entry per non-empty payload bank - frames, ts_list, nhits, payload_words = [], [], [], 0 - skipped = 0 - for ri in range(f.record_count): - for e in f.get_record(ri).get_events(): - w = np.frombuffer(mm, dtype=dt, count=e.length // 4, offset=e.offset) - if (w[1] >> 16) != 0xFF60 or (w[3] >> 16) != 0xFF31: - skipped += 1 - continue - frame = int(w[5]) - ts = int(w[6]) | (int(w[7]) << 32) - i = 2 + int(w[2]) + 1 # skip stream-info bank - nh = 0 - while i < len(w): - end = i + int(w[i]) + 1 - roc = int(w[i + 1] >> 16) - j = i + 2 - if (w[j + 1] >> 16) == 0xFF30: # skip ROC stream-info bank - j += int(w[j]) + 1 - while j < end: - plen = int(w[j]) - payload_words += plen - 1 - if plen > 1: - words.append(w[j + 2:j + plen + 1]) - b_frame.append(frame); b_roc.append(roc); b_port.append(int(w[j + 1] >> 16)); b_n.append(plen - 1) - nh += plen - 1 - j += plen + 1 - i = end - frames.append(frame) - ts_list.append(ts) - nhits.append(nh) - h = np.concatenate(words).astype(np.uint32) if words else np.empty(0, np.uint32) - del words - b_n = np.asarray(b_n, dtype=np.int64) + """Return (hits dict of numpy arrays, frames dict, stats dict, StreamHits). + + Hits are sorted by (frame, event index, t_ns) and frames by (frame, event index), + so the hit ranges in the frames table stay right when a frame number repeats. + """ + with EvioFile(str(path)) as evio_file: + endian = evio_file.header.endian + chunks = [] + out_of_bounds = 0 + event_index = 0 + for record_i in range(evio_file.record_count): + record = evio_file.get_record(record_i) + events = [] + # A trailer record declares 0 events; its index holds record positions, not event lengths. + for offset, length in record.get_event_offsets()[:record.header.event_count]: + if offset + length > evio_file.file_size: + out_of_bounds += 1 + continue + events.append(fs.event_words(evio_file.mm, offset, length, endian)) + chunks.append(fs.decode_frames(events, first_event_index=event_index)) + event_index += len(events) + stream_hits = fs.concatenate_stream_hits(chunks) + del chunks + record_count = evio_file.record_count + + order = np.lexsort((stream_hits.t_ns, stream_hits.event_index, stream_hits.frame)) hits = { - "frame": np.repeat(np.asarray(b_frame, np.uint32), b_n), - "roc": np.repeat(np.asarray(b_roc, np.uint16), b_n), - "port": np.repeat(np.asarray(b_port, np.uint8), b_n), - "ch": ((h >> 13) & 0xF).astype(np.uint8), - "t_ns": (((h >> 17) & 0x3FFF) * 4).astype(np.uint16), - "q": (h & 0x1FFF).astype(np.uint16), + "frame": stream_hits.frame[order], + "roc": stream_hits.roc[order], + "stream": stream_hits.stream[order], + "port": stream_hits.port[order], + "ch": stream_hits.channel[order], + "t_ns": stream_hits.t_ns[order], + "q": stream_hits.charge[order], } - # sort by frame, then time in frame (the event builder delivers some frames out of order) - order = np.lexsort((hits["t_ns"], hits["frame"])) - hits = {k: v[order] for k, v in hits.items()} - frames, ts_list, nhits = map(np.asarray, (frames, ts_list, nhits)) - out_of_order = int((np.diff(frames) < 0).sum()) - order = np.argsort(frames, kind="stable") - frames, ts_list, nhits = frames[order], ts_list[order], nhits[order] - offsets = np.concatenate([[0], np.cumsum(nhits)[:-1]]) if len(nhits) else np.empty(0) - frame_tab = {"frame": frames.astype(np.uint32), "timestamp_ns": ts_list.astype(np.uint64), - "n_hits": nhits.astype(np.uint32), "hit_offset": offsets.astype(np.uint64)} - stats = {"records": f.record_count, "frames": len(frames), "hits": len(h), "skipped_events": skipped, - "out_of_order": out_of_order, "payload_words": payload_words} - return hits, frame_tab, stats - - -def validate(hits, frames, stats): - """Cheap self-consistency checks; raises AssertionError on failure.""" - assert stats["hits"] == stats["payload_words"], "hit count != sum of (payload bank length - 1)" - assert int(frames["n_hits"].sum()) == stats["hits"], "per-frame hit counts do not add up" - if stats["hits"]: - assert hits["t_ns"].max() < 65536, "hit time outside the 65.5 us frame" - f = frames["frame"] - if len(f): - return {"missing_frames": int(f[-1] - f[0] + 1 - len(np.unique(f))), "duplicate_frames": int(len(f) - len(np.unique(f)))} + frames = stream_hits.frames + out_of_order = int((np.diff(frames["frame"].astype(np.int64)) < 0).sum()) + frame_order = np.lexsort((frames["event_index"], frames["frame"])) + frames = frames[frame_order] + n_hits = frames["n_hits"].astype(np.uint64) + offsets = np.concatenate([[0], np.cumsum(n_hits)[:-1]]) if len(n_hits) else np.empty(0) + frame_tab = {"frame": frames["frame"].astype(np.uint32), "timestamp_ns": frames["timestamp"].astype(np.uint64), + "n_hits": frames["n_hits"].astype(np.uint32), "hit_offset": offsets.astype(np.uint64)} + stats = {"records": record_count, "frames": len(frames), "hits": stream_hits.n_hits, + "skipped_events": stream_hits.n_other_events + out_of_bounds, "out_of_order": out_of_order, + "payload_words": stream_hits.n_payload_words, "empty_payload_banks": stream_hits.n_empty_payload_banks, + "decode_errors": stream_hits.errors} + return hits, frame_tab, stats, stream_hits + + +def validate(stream_hits, frames): + """Self-consistency checks; raises ValueError on failure and returns the frame checks.""" + stream_hits.validate() # decode errors, hit words with bit 31 set, hit count vs payload words + if int(frames["n_hits"].sum()) != stream_hits.n_hits: + raise ValueError("per-frame hit counts do not add up") + frame_numbers = frames["frame"] + if len(frame_numbers): + n_unique = len(np.unique(frame_numbers)) + return {"missing_frames": int(frame_numbers[-1] - frame_numbers[0] + 1 - n_unique), + "duplicate_frames": int(len(frame_numbers) - n_unique)} return {} def convert(path, out_dir, force=False): + import pyarrow as pa + import pyarrow.parquet as pq + path, out_dir = Path(path), Path(out_dir) hits_p = out_dir / f"{path.stem}.hits.parquet" frames_p = out_dir / f"{path.stem}.frames.parquet" @@ -113,8 +104,8 @@ def convert(path, out_dir, force=False): print(f"skip {path.name} (already converted)") return t0 = time.time() - hits, frames, stats = decode(path) - checks = validate(hits, frames, stats) + hits, frames, stats, stream_hits = decode(path) + checks = validate(stream_hits, frames) meta = {"source_file": path.name, "source_bytes": str(path.stat().st_size), "decoder_version": DECODER_VERSION, "hit_format": HIT_FORMAT, **{k: str(v) for k, v in {**stats, **checks}.items()}} out_dir.mkdir(parents=True, exist_ok=True) diff --git a/pyevio/cli/debug.py b/pyevio/cli/debug.py index 36516e9..75c5449 100644 --- a/pyevio/cli/debug.py +++ b/pyevio/cli/debug.py @@ -1,31 +1,17 @@ import click from rich.console import Console -from rich.panel import Panel -from rich.syntax import Syntax from rich import box from rich.table import Table -from rich.tree import Tree -import struct -from datetime import datetime -from pyevio.evio_file import EvioFile -from pyevio.roc_time_slice_bank import RocTimeSliceBank -from pyevio.utils import make_hex_dump, print_offset_hex - -import click -from rich.console import Console -from rich.panel import Panel -from rich.syntax import Syntax -from rich import box -from rich.table import Table -from rich.tree import Tree -import struct -from datetime import datetime +import numpy as np from pyevio.evio_file import EvioFile -from pyevio.bank import Bank +from pyevio.decoders import fadc250_stream from pyevio.roc_time_slice_bank import RocTimeSliceBank -from pyevio.utils import make_hex_dump, print_offset_hex +from pyevio.utils import print_offset_hex + +# Hit words printed per payload bank before the output is cut; SRO payload banks hold thousands. +MAX_HIT_WORDS_SHOWN = 32 def display_record_info(console, record_obj, record_index): @@ -127,9 +113,7 @@ def display_child_banks(console, parent_bank, evio_file, verbose, hexdump, level console.print(f"[dim]Length: {child.length} words, Data Length: {child.data_length} bytes[/dim]") console.print(f"[dim]Offset Range: 0x{child.offset:X} - 0x{child.offset + (child.length * 4):X}[/dim]") - # Check if this is a data bank (length 1 or 2) - if child.length <= 2 and not child.is_container(): - # This is likely a data bank + if not child.is_container(): display_data_bank(console, child, evio_file, hexdump) # Recurse for container banks elif child.is_container() and level < max_level: @@ -158,31 +142,25 @@ def display_data_bank(console, bank, evio_file, hexdump=False): console.print(f"[bold]Data Bank (Length 1, No Data)[/bold]") return - # Get all data words from the bank - data_words = [] - for i in range(bank.data_offset, bank.data_offset + bank.data_length, 4): - if i + 4 <= bank.offset + bank.size: - word = struct.unpack(bank.endian + 'I', evio_file.mm[i:i+4])[0] - data_words.append(word) + # The length word counts the words that follow it, so the payload is (length - 1) words after the 2-word header. + data_offset = bank.offset + 8 + data_end = min(data_offset + 4 * (bank.length - 1), len(evio_file.mm)) + data_words = fadc250_stream.event_words(evio_file.mm, data_offset, max(data_end - data_offset, 0), bank.endian) - if not data_words: + if len(data_words) == 0: console.print(f"[bold]Data Bank (No Valid Data)[/bold]") return - # Display data information console.print(f"[bold]Data Bank (Data Words: {len(data_words)})[/bold]") - # Display raw values - for i, word in enumerate(data_words): - console.print(f" Word {i}: 0x{word:08X}") - - # Try to interpret FADC hit data - chan = (word >> 13) & 0x000F - charge = word & 0x1FFF - time = ((word >> 17) & 0x3FFF) * 4 - - # Display decoded fields - console.print(f" [dim]Channel: {chan}, Charge: {charge}, Time: {time}[/dim]") + # Interpret the words as streaming fADC250 hits; the layout lives in the decoder module. + shown = data_words[:MAX_HIT_WORDS_SHOWN] + channels, times_raw, charges = fadc250_stream.unpack_hit_words(shown) + for word_i, (word, chan, time_raw, charge) in enumerate(zip(shown.tolist(), channels, times_raw, charges)): + console.print(f" Word {word_i}: 0x{word:08X}") + console.print(f" [dim]Channel: {chan}, Charge: {charge}, Time: {int(time_raw) * fadc250_stream.HIT_TIME_TICK_NS}[/dim]") + if len(data_words) > len(shown): + console.print(f" [dim]... {len(data_words) - len(shown)} more words[/dim]") # Show hexdump if requested if hexdump and bank.data_length > 0: @@ -270,12 +248,38 @@ def display_roc_timeslice_info(console, bank, evio_file, payload_filter=None, he console.print(f"[red]Error analyzing waveform data: {str(e)}[/red]") +def display_stream_frame(console, evio_file, event_obj): + """Decode a streaming time frame (0xFF60) and show its hits per ROC bank.""" + words = fadc250_stream.event_words(evio_file.mm, event_obj.offset, event_obj.length, event_obj.endian) + frame = fadc250_stream.decode_frame(words) + console.print(f"[bold]Streaming time frame {frame.frame_number}[/bold], timestamp {frame.timestamp}, " + f"{frame.n_hits} hits in {frame.n_roc_banks} ROC banks, " + f"{frame.n_payload_banks} payload banks ({frame.n_empty_payload_banks} empty)") + for message in frame.error_messages: + console.print(f"[red]Decode error: {message}[/red]") + + roc_table = Table(box=box.SIMPLE) + roc_table.add_column("ROC", style="cyan") + roc_table.add_column("Stream", style="green") + roc_table.add_column("Payload banks", style="blue") + roc_table.add_column("Empty", style="yellow") + roc_table.add_column("Hits", style="magenta") + roc_table.add_column("Ports", style="white") + for roc_bank in frame.roc_banks: + hit_slice = slice(int(roc_bank["first_hit_index"]), int(roc_bank["first_hit_index"] + roc_bank["n_hits"])) + empties = frame.empty_banks[(frame.empty_banks["roc"] == roc_bank["roc"]) & (frame.empty_banks["stream"] == roc_bank["stream"])] + ports = sorted(set(frame.port[hit_slice].tolist()) | set(empties["port"].tolist())) + roc_table.add_row(str(roc_bank["roc"]), str(roc_bank["stream"]), str(roc_bank["n_payload_banks"]), + str(roc_bank["n_empty_payload_banks"]), str(roc_bank["n_hits"]), ", ".join(map(str, ports))) + console.print(roc_table) + + def display_event_info(console, evio_file, record_obj, event_idx, payload_filter, hexdump, verbose): """Display detailed information about an event.""" console.print(f"[bold yellow]Event #{event_idx}[/bold yellow]") try: - event_obj = record_obj.get_record_and_event(event_idx) + event_obj = record_obj.get_event(event_idx) console.print(f"[bold]Offset: [green]0x{event_obj.offset:X}[{event_obj.offset//4}][/green], Size: [green]{event_obj.length}[/green] bytes[/bold]") # Show hexdump if requested @@ -289,6 +293,9 @@ def display_event_info(console, evio_file, record_obj, event_idx, payload_filter if bank_info: console.print(f"[bold]Bank Type: {bank_info.get('bank_type', 'Unknown')} (Tag: 0x{bank_info.get('tag', 0):04X})[/bold]") + if bank_info and bank_info.get("tag") == fadc250_stream.STREAM_EVENT_TAG: + display_stream_frame(console, evio_file, event_obj) + # Try to parse the event as a bank try: diff --git a/tests/test_fadc250_stream_example.py b/tests/test_fadc250_stream_example.py new file mode 100644 index 0000000..d98742b --- /dev/null +++ b/tests/test_fadc250_stream_example.py @@ -0,0 +1,103 @@ +"""The Parquet example and `pyevio debug` on a synthetic streaming file. + +Both callers use pyevio.decoders.fadc250_stream; these tests pin that the +example survives the I17 frame shape (a last ROC bank without children), +sorts hits by (frame, event, t_ns) so duplicate frames keep valid hit +ranges (I20), and that the debug command decodes a stream frame. +""" +import importlib.util +import struct +import sys +from pathlib import Path + +import numpy as np +import pytest +from click.testing import CliRunner + +from test_fadc250_stream import HITS_A, HITS_B, bank, hit_word, roc_bank, stream_frame + +MAGIC = 0xC0DA0100 +EXAMPLE_PATH = Path(__file__).resolve().parents[1] / "examples" / "fadc250_stream_to_parquet.py" + + +def load_example(): + spec = importlib.util.spec_from_file_location("fadc250_stream_to_parquet", EXAMPLE_PATH) + module = importlib.util.module_from_spec(spec) + sys.modules[spec.name] = module + spec.loader.exec_module(module) + return module + + +def pack_words(words): + return struct.pack("<%dI" % len(words), *words) + + +def make_record(number, events): + """EVIO v6 record with an event index, little-endian.""" + index = struct.pack("<%dI" % len(events), *(len(e) for e in events)) + data = b"".join(events) + length_words = 14 + (len(index) + len(data)) // 4 + header = struct.pack("<14I", length_words, number, 14, len(events), len(index), 6, 0, MAGIC, len(data), 0, 0, 0, 0, 0) + return header + index + data + + +def write_stream_file(path): + """Two records: frame 100 (two hits, I17 shape), a non-stream event, then frame 100 again and frame 104.""" + frame_100_a = stream_frame(100, 1000, [ + roc_bank(7, 1, 100, 1000, [(1, [hit_word(2, 50, 10), hit_word(2, 30, 20)])]), + bank(7, 0x10, 0x22, []), # I17: last ROC bank has no children + ]) + other = bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2])) + frame_100_b = stream_frame(100, 1000, [roc_bank(9, 2, 100, 1000, [(2, [hit_word(4, 40, 30)]), (4, [])])]) + frame_104 = stream_frame(104, 1000 + 262144, [roc_bank(7, 1, 104, 1000 + 262144, [(3, HITS_A + HITS_B)])]) + records = [make_record(1, [pack_words(frame_100_a), pack_words(other)]), + make_record(2, [pack_words(frame_100_b), pack_words(frame_104)])] + file_header = struct.pack("<14I", 0x4556494F, 1, 14, len(records), 0, 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) + path.write_bytes(file_header + b"".join(records)) + return str(path) + + +def test_example_decode_handles_i17_and_duplicate_frames(tmp_path): + example = load_example() + hits, frames, stats, stream_hits = example.decode(write_stream_file(tmp_path / "stream.evio")) + checks = example.validate(stream_hits, frames) + + assert stats["hits"] == 7 and stats["frames"] == 3 and stats["skipped_events"] == 1 + assert stats["payload_words"] == 7 and stats["empty_payload_banks"] == 1 and stats["decode_errors"] == 0 + assert stats["out_of_order"] == 0 + assert checks == {"missing_frames": 3, "duplicate_frames": 1} + + # frames sorted by (frame, event index); hit ranges follow the same order + assert frames["frame"].tolist() == [100, 100, 104] + assert frames["n_hits"].tolist() == [2, 1, 4] + assert frames["hit_offset"].tolist() == [0, 2, 3] + assert hits["frame"].tolist() == [100, 100, 100, 104, 104, 104, 104] + assert hits["roc"].tolist() == [7, 7, 9, 7, 7, 7, 7] + assert hits["t_ns"].tolist()[:3] == [120, 200, 160] # within an event, sorted by time + assert hits["stream"].tolist() == [1, 1, 2, 1, 1, 1, 1] + assert hits["port"].dtype == np.uint16 + + +def test_example_convert_writes_parquet(tmp_path): + pytest.importorskip("pyarrow") + import pyarrow.parquet as pq + + example = load_example() + path = write_stream_file(tmp_path / "stream.evio") + example.convert(path, tmp_path / "out") + hits = pq.read_table(tmp_path / "out" / "stream.hits.parquet") + assert hits.num_rows == 7 + assert hits.schema.metadata[b"decoder_version"] == example.DECODER_VERSION.encode() + + +def test_debug_command_decodes_stream_frame(tmp_path): + from pyevio.cli import cli + + path = write_stream_file(tmp_path / "stream.evio") + result = CliRunner().invoke(cli, ["debug", path, "--record", "0", "--event", "0", "--verbose"]) + assert result.exit_code == 0, result.output + assert "Streaming time frame 100" in result.output + assert "2 hits in 2 ROC banks" in result.output + assert "Data Bank (Data Words: 2)" in result.output # both hit words, including the last one of the bank + assert "Channel: 2, Charge: 10, Time: 200" in result.output + assert "Channel: 2, Charge: 20, Time: 120" in result.output From 3673cd12661973a95a3ad262c938ea000be17914 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:36:56 -0400 Subject: [PATCH 09/65] Count bank lengths as the words that follow the length word F38: Bank sized itself as length*4, dropping the last payload word of every leaf; child walks only succeeded through skip-a-word heuristics. Bank.size, data_length and end_offset now use (length + 1) words, get_children advances by that and stops at the first child whose length is 0, has no room for a header or overruns the parent, recording why in Bank.errors. RocTimeSliceBank and StreamInfoBank get the same convention (segment TSS end, payload bank stride, bank end). Tests: test_bank_length_counts_words_that_follow flips XFAIL -> PASS; the six create_mock_bank fixtures migrate to evio_bank(); the three heuristic tests (minimal length, zero length, overrun) now pin stop-and-record. Co-Authored-By: Claude Fable 5.1 --- pyevio/bank.py | 83 ++++------- pyevio/roc_time_slice_bank.py | 8 +- tests/test_bank_scanning.py | 255 ++++++++++------------------------ 3 files changed, 108 insertions(+), 238 deletions(-) diff --git a/pyevio/bank.py b/pyevio/bank.py index d5a5464..57e695b 100644 --- a/pyevio/bank.py +++ b/pyevio/bank.py @@ -82,11 +82,13 @@ def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<'): # Parse bank header self._parse_header() - # Calculate data offset and size + # The length word counts the words that follow it, so a bank with + # length N occupies N + 1 words. Counting the length word itself + # drops the last payload word of every leaf. self.header_size = 8 # 2 words * 4 bytes self.data_offset = self.offset + self.header_size - self.data_length = (self.length * 4) - self.header_size - self.size = self.length * 4 + self.size = (self.length + 1) * 4 + self.data_length = max(0, self.size - self.header_size) # End offset for this bank self.end_offset = self.offset + self.size @@ -94,6 +96,10 @@ def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<'): # Child banks (will be parsed on demand) self._children = None + # Why a child walk stopped early (short strings with offsets); empty when + # every child length fit inside this bank. + self.errors: List[str] = [] + def _parse_header(self): """Parse the bank header from the buffer.""" # Parse 2-word header @@ -155,64 +161,29 @@ def get_children(self) -> List['Bank']: if self._children is not None: return self._children - # Initialize empty children list self._children = [] - # Start from the beginning of the data section + # Walk the children by their length words. Every length is checked + # against this bank's end before it is trusted: a child that has no + # room for its two header words, declares length 0 (no room for its + # second header word) or runs past the parent is corrupt data. The + # walk stops there, keeps the children found so far and records why. current_offset = self.data_offset - end_offset = self.end_offset + while current_offset < self.end_offset: + if current_offset + self.header_size > self.end_offset: + self.errors.append(f"bank header at 0x{current_offset:X} needs 8 bytes, " + f"parent ends at 0x{self.end_offset:X}") + break - while current_offset < end_offset: - # We need at least 4 bytes to read a length - if current_offset + 4 > end_offset: + child_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset + 4])[0] + child_end = current_offset + (child_length + 1) * 4 + if child_length == 0 or child_end > self.end_offset: + self.errors.append(f"bank at 0x{current_offset:X} declares {child_length} words, " + f"ends at 0x{child_end:X}, parent ends at 0x{self.end_offset:X}") break - try: - # Read bank length - bank_length = struct.unpack(self.endian + 'I', - self.mm[current_offset:current_offset+4])[0] - - # Basic sanity check: bank shouldn't exceed parent boundary - if current_offset + (bank_length * 4) > end_offset: - # If we're near the end (just a word or two left), this might be data padding - # Skip to the next word and continue - current_offset += 4 - continue - - # Even a length of 1 is valid for data banks (just the length word itself) - # In this case the bank has no additional data beyond the length word - - # Check if we have enough space for this bank - if bank_length == 0: - # Zero-length banks are invalid - skip this word - current_offset += 4 - continue - - if current_offset + (bank_length * 4) > end_offset: - # Bank goes beyond parent boundary - skip this word - current_offset += 4 - continue - - # Try to create bank object - try: - child = Bank.from_buffer(self.mm, current_offset, self.endian) - - # Add to children - self._children.append(child) - - # Move to next bank by adding this bank's length - current_offset += bank_length * 4 - - except Exception as e: - # Error creating bank - skip ahead - if self._children and hasattr(self, 'verbose') and self.verbose: - print(f"Error parsing bank at 0x{current_offset:X}: {str(e)}") - current_offset += 4 - continue - - except Exception as e: - # Error reading/processing data - skip ahead - current_offset += 4 + self._children.append(Bank.from_buffer(self.mm, current_offset, self.endian)) + current_offset = child_end return self._children @@ -292,7 +263,7 @@ def __str__(self) -> str: """Return string representation of the bank header.""" return f"""Bank (0x{self.tag:04x}, {self.type_name}): Offset: 0x{self.offset:08x} - Length: {self.length} words ({self.length * 4} bytes) + Length: {self.length} words ({self.size} bytes with the length word) Tag: 0x{self.tag:04x} Pad: {self.pad} Data Type: 0x{self.data_type:02x} diff --git a/pyevio/roc_time_slice_bank.py b/pyevio/roc_time_slice_bank.py index fc9d0ad..70319e8 100644 --- a/pyevio/roc_time_slice_bank.py +++ b/pyevio/roc_time_slice_bank.py @@ -65,8 +65,8 @@ def _parse_time_slice_segment(self): # Big endian: high word first, then low word self.timestamp = (timestamp_high << 32) | timestamp_low - # Store TSS end offset for later use - self.tss_end_offset = tss_offset + (self.tss_length * 4) + # A segment's length counts the words after its one header word. + self.tss_end_offset = tss_offset + (self.tss_length + 1) * 4 def _parse_aggregation_info_segment(self): """Parse the Aggregation Info Segment (AIS).""" @@ -311,7 +311,7 @@ def _parse_payload_banks(self): # Start after Stream Info Bank current_offset = self.sib.ais_end_offset - end_offset = self.offset + (self.length * 4) + end_offset = self.end_offset # Match payload banks with payload infos for i, payload_info in enumerate(self.sib.payload_infos): @@ -324,7 +324,7 @@ def _parse_payload_banks(self): self.payload_banks.append(payload_bank) # Move to next bank - current_offset += payload_bank.length * 4 + current_offset += payload_bank.size except Exception as e: # If there's an error parsing a payload bank, log it and continue if self.payload_banks: diff --git a/tests/test_bank_scanning.py b/tests/test_bank_scanning.py index 046219c..3c97c1a 100644 --- a/tests/test_bank_scanning.py +++ b/tests/test_bank_scanning.py @@ -1,8 +1,6 @@ import mmap import struct -import pytest - from pyevio.bank import Bank @@ -29,45 +27,12 @@ def __len__(self): return len(self.data) -def create_mock_bank(length, tag, data_type, num, data=None, endian='<'): - """ - Create a mock bank with the specified parameters. - - Args: - length: Bank length in words (including header) - tag: Bank tag - data_type: Bank data type - num: Bank number - data: Optional data (bytes) to include in the bank - endian: Endianness ('<' for little endian, '>' for big endian) - - Returns: - Bytes object representing the bank - """ - # Create bank header (2 words) - header_word1 = struct.pack(f"{endian}I", length) - header_word2 = struct.pack(f"{endian}I", - ((tag & 0xFFFF) << 16) | - ((data_type & 0xFF) << 8) | - (num & 0xFF)) - - # If data is None, create empty data of appropriate length - if data is None: - # Length includes header, so subtract 2 words for data - data_size = max(0, (length - 2) * 4) - data = bytes(data_size) - - # Combine header and data - return header_word1 + header_word2 + data - - def evio_bank(tag, data_type, num, payload, endian='<'): """Build a bank the EVIO way: the length word counts the words that follow it. - `create_mock_bank` above takes a length that includes the length word - itself, which is the convention `Bank` uses today (see - test_bank_length_counts_words_that_follow). Use this builder for data - that must match what the evio writers produce. + A bank with N payload words gets length N + 1 (the second header word + plus the payload) and occupies N + 2 words. This is what the evio + writers produce and what `Bank` reads. """ assert len(payload) % 4 == 0, "payload is whole 32-bit words" length = len(payload) // 4 + 1 @@ -93,107 +58,75 @@ class TestBankScanning: def test_basic_bank_structure(self): """Test parsing of a simple container bank with child banks.""" - # Create a container bank with two child banks - child1 = create_mock_bank(4, 0x0101, 0x01, 0x01, struct.pack("= 1 - assert children[0].tag == 0x0101 - assert children[0].data_type == 0x01 - - - + assert [(c.offset, c.tag) for c in children] == [(8, 0x0101)] + assert len(bank.errors) == 1 and "needs 8 bytes" in bank.errors[0] # The 22-word stream of a ROC time-slice event as dumped from a DAQ file. # Length words count the words that follow, so the containment is: @@ -333,22 +245,23 @@ def test_real_world_event_structure(self, tmp_path): with open(path, 'rb') as f, mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm: event_bank = Bank(mm, 0, '<') assert (event_bank.length, event_bank.tag, event_bank.data_type) == (21, 0xFF60, 0x10) + assert event_bank.size == 88 and event_bank.end_offset == 88 children = event_bank.get_children() assert [(c.offset, c.tag, c.data_type, c.num, c.length) for c in children] == [ (0x08, 0xFF31, 0x20, 0x01, 7), (0x28, 0x0002, 0x10, 0x11, 11), ] + assert event_bank.errors == [] - # Inside the ROC bank: the 0xFF30 segment, then the truncated header, which is no bank. + # Inside the ROC bank: the 0xFF30 segment, then a zero word, which is no bank. roc_children = children[1].get_children() assert [(c.offset, c.tag, c.data_type, c.length) for c in roc_children] == [ (0x30, 0xFF30, 0x20, 7), ] + assert len(children[1].errors) == 1 and "0x50" in children[1].errors[0] assert all(c.tag != 0x000F for c in children + roc_children) - @pytest.mark.xfail(strict=True, reason="F38: Bank counts the length word as part of its own " - "length; size, end_offset and data_length are one word short") def test_bank_length_counts_words_that_follow(self): """A leaf bank with three uint32 payload words occupies five words and yields all three.""" bank_bytes = evio_bank(0x0101, Bank.TYPE_UINT32, 0x01, struct.pack("> 13) & 0x000F decoded_charge = data_word & 0x1FFF decoded_time = ((data_word >> 17) & 0x3FFF) * 4 - # Verify decoded values match what we encoded assert decoded_channel == channel assert decoded_charge == charge - assert decoded_time == time \ No newline at end of file + assert decoded_time == time From 7f587badf8a1335f9c9a7aa4bcb12ad3c4904ce7 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:36:56 -0400 Subject: [PATCH 10/65] Read trailers, HIPO ids and legacy versions correctly at open F3: RecordHeader gains header_type (bits 28-31 of word 5) and is_trailer; Record.scan_events returns nothing for a trailer, uses min(event_count, index entries), stops at data_end and records an overrun in Record.errors. Per D12, EvioFile.record_count / get_record / iter_records cover data records only; the trailer is EvioFile.trailer (or None). F9: EvioFile._detect_layout reads the byte order from the magic at word 7, takes a file type id in word 0 as a v6 file header and otherwise raises one ValueError naming "version N" and the evio tools (evio2xml, eviocopy). F39: the HIPO id 0x4849504F is accepted, in either byte order, because HIPO writers store the ASCII bytes in order regardless of the file byte order. Also: EvioFile.get_event unpacked a 2-tuple into four names; BufferReader and RecordHeader no longer print hex dumps before raising. Tests: 18 golden rows (F3, F9, F39) and the four uncompressed corpus rows flip XFAIL -> PASS; tests/test_record_scanning.py adds trailer-with/without-index, trailer-only, count-bounding, bare-v4-block and HIPO-id cases. Co-Authored-By: Claude Fable 5.1 --- pyevio/buffer_reader.py | 3 +- pyevio/evio_file.py | 85 ++++++++++++++++++++++-------- pyevio/file_header.py | 97 +++++++++++++++++++++++------------ pyevio/record.py | 74 ++++++++++++++++++-------- pyevio/record_header.py | 87 ++++++++++++++++++++----------- tests/golden/test_corpus.py | 10 ++-- tests/golden/test_golden.py | 36 +++---------- tests/test_record_scanning.py | 77 +++++++++++++++++++++++++++ 8 files changed, 327 insertions(+), 142 deletions(-) diff --git a/pyevio/buffer_reader.py b/pyevio/buffer_reader.py index 81f90d2..4a87610 100644 --- a/pyevio/buffer_reader.py +++ b/pyevio/buffer_reader.py @@ -55,8 +55,7 @@ def _detect_endianness(self) -> str: raise ValueError(f"Buffer too small or invalid at offset {magic_pos}: {e}") # If we get here, neither endianness matched - print(self.hex_dump()) - raise ValueError(f"Invalid magic number: 0x{magic:08X}, expected 0xc0da0100") + raise ValueError(f"Invalid magic number at offset 0x{magic_pos:X}: 0x{magic:08X}, expected 0xc0da0100") def read_uint32(self, offset_words: int = 0) -> int: """ diff --git a/pyevio/evio_file.py b/pyevio/evio_file.py index 2a79d20..a0c4adc 100644 --- a/pyevio/evio_file.py +++ b/pyevio/evio_file.py @@ -4,7 +4,7 @@ from typing import List, Tuple, Optional, Dict, Any, Iterator from datetime import datetime -from pyevio.file_header import FileHeader +from pyevio.file_header import FileHeader, detect_endian, file_type_name, unsupported_version_error from pyevio.record import Record from pyevio.record_header import RecordHeader from pyevio.event import Event @@ -16,6 +16,16 @@ class EvioFile: Manages file resources and provides methods for navigating through the file structure using Records and Events. + + Records: ``record_count``, ``get_record()`` and ``iter_records()`` cover + the data records. The trailer record that closes a file (header species + 3) holds no events and is exposed separately as ``trailer`` (None when + the file ends in a plain record). + + Layouts: ``header_layout`` names how the file starts. ``"v6"`` is a + 14-word file header followed by 14-word record headers. Files without a + file header (EVIO v4 blocks, v1—3 blocks) raise ``ValueError`` naming + the version at open. """ def __init__(self, filename: str, verbose: bool = False): @@ -25,6 +35,9 @@ def __init__(self, filename: str, verbose: bool = False): Args: filename: Path to the EVIO file verbose: Enable verbose output + + Raises: + ValueError: the file is not EVIO, or an EVIO version pyevio does not read """ self.verbose = verbose self.filename = filename @@ -34,8 +47,7 @@ def __init__(self, filename: str, verbose: bool = False): # Memory map the file for efficient access self.mm = mmap.mmap(self.file.fileno(), 0, access=mmap.ACCESS_READ) - # Parse file header - self.header = FileHeader.from_buffer(self.mm, 0) + self.header_layout, self.header = self._detect_layout() # Calculate initial offset after file header self.first_record_offset = self.header.header_length * 4 @@ -50,13 +62,37 @@ def __init__(self, filename: str, verbose: bool = False): # Record objects (will be created on demand) self._records = {} + self._trailer = None # Scan record offsets + self._trailer_offset: Optional[int] = None self._record_offsets = self._scan_record_offsets() # Total event count cache self._total_event_count = None + def _detect_layout(self) -> Tuple[str, FileHeader]: + """Decide how the file starts and parse its header. + + Every EVIO header layout carries the magic word at word 7, so the byte + order comes from there. A file type id in word 0 means a v6 file + header. Anything else is a bare block or record header at offset 0: + its version sits in the low byte of word 5. Only version 6 with a + file header is read here; other versions raise the one unsupported- + version error. + """ + endian = detect_endian(self.mm, 0) + if endian is None: + raise ValueError(f"Not an EVIO file: no magic number 0x{RecordHeader.MAGIC_NUMBER:08x} " + f"at word 7 of {self.filename}") + + first_word = struct.unpack(endian + 'I', self.mm[0:4])[0] + if file_type_name(first_word) is not None: + return "v6", FileHeader.from_buffer(self.mm, 0) + + block_version = struct.unpack(endian + 'I', self.mm[20:24])[0] & 0xFF + raise unsupported_version_error(block_version, f"block header at offset 0, no file header: {self.filename}") + def __del__(self): """Cleanup resources when object is destroyed""" try: @@ -87,29 +123,38 @@ def _scan_record_offsets(self) -> List[int]: offset = self.first_record_offset while offset < self.file_size: - try: - # Store this record's position - record_offsets.append(offset) + record = Record(self.mm, offset, self.header.endian) - # Create a temporary Record object to get its size - record = Record(self.mm, offset, self.header.endian) + # The trailer closes the file: it lists records, holds no events + # and is exposed as `trailer`, never as a data record. + if record.header.is_trailer: + self._trailer_offset = offset + break - # Move to next record - offset += record.size + if record.size < record.header_size: + raise ValueError(f"Record at offset 0x{offset:X} declares {record.header.record_length} words, " + f"less than its {record.header.header_length}-word header") - # Stop if this was the last record. Some CODA writers set the - # last-record bit on every record, so keep going if another - # record header follows. - if record.header.is_last_record and not self._is_record_at(offset): - break + record_offsets.append(offset) + offset += record.size - except Exception as e: - if self.verbose: - print(f"Error scanning record at offset 0x{offset:X}: {e}") - raise + # Stop if this was the last record. Some CODA writers set the + # last-record bit on every record, so keep going if another + # record header follows. + if record.header.is_last_record and not self._is_record_at(offset): + break return record_offsets + @property + def trailer(self) -> Optional[Record]: + """The trailer record that closes the file, or None when the file ends in a plain record.""" + if self._trailer_offset is None: + return None + if self._trailer is None: + self._trailer = Record(self.mm, self._trailer_offset, self.header.endian) + return self._trailer + def _is_record_at(self, offset: int) -> bool: """Check whether a record header (magic word in word 7) starts at offset.""" if offset + RecordHeader.HEADER_SIZE > self.file_size: @@ -223,7 +268,7 @@ def get_event(self, global_index: int) -> Event: Returns: found events """ - _, _, event, _ = self.get_record_and_event(global_index) + _, event = self.get_record_and_event(global_index) return event def iter_events(self) -> Iterator[Tuple[Record, Event]]: diff --git a/pyevio/file_header.py b/pyevio/file_header.py index 36ee7f1..a3d6d4e 100644 --- a/pyevio/file_header.py +++ b/pyevio/file_header.py @@ -1,12 +1,57 @@ import mmap -import os import struct -from typing import List, Tuple, Optional, Dict, Any -from datetime import datetime +from typing import Optional from pyevio.utils import make_hex_dump +# File type ids in word 0 of a v6 file header. The evio writers store the id +# as a 32-bit word in the file's byte order; HIPO-flavored writers store the +# ASCII bytes in order whatever the byte order, so the id must be accepted in +# both orders (see file_type_name). +FILE_TYPE_EVIO = 0x4556494F # "EVIO" +FILE_TYPE_HIPO = 0x4849504F # "HIPO" +FILE_TYPE_NAMES = {FILE_TYPE_EVIO: "EVIO", FILE_TYPE_HIPO: "HIPO"} + +MAGIC_NUMBER = 0xc0da0100 + + +def file_type_name(word: int) -> Optional[str]: + """Name of a file type id ("EVIO", "HIPO") read in either byte order, else None.""" + swapped = int.from_bytes(word.to_bytes(4, "little"), "big") + return FILE_TYPE_NAMES.get(word) or FILE_TYPE_NAMES.get(swapped) + + +def detect_endian(buffer, offset: int = 0) -> Optional[str]: + """Byte order ('<' or '>') of the header at offset, from the magic word 0xc0da0100 at word 7. + + Both the v6 file header and every record or block header (v1—v6) carry + the magic at word 7, so one probe serves all layouts. Returns None when + neither byte order matches or the buffer is shorter than 8 words. + """ + magic_bytes = buffer[offset + 28:offset + 32] + if len(magic_bytes) < 4: + return None + for endian in ("<", ">"): + if struct.unpack(endian + "I", magic_bytes)[0] == MAGIC_NUMBER: + return endian + return None + + +def unsupported_version_error(version: int, detail: str = "") -> ValueError: + """The one error for files pyevio does not read, naming the EVIO version. + + The golden harness pins this message: it names "version N" and points + at the evio tools. + """ + message = (f"EVIO version {version} file is not supported: pyevio reads EVIO version 6 files " + f"and SRO streaming files. Convert the file with the evio tools (evio2xml, eviocopy) " + f"or read it with the evio library.") + if detail: + message += f" ({detail})" + return ValueError(message) + + class FileHeader: """ Parses and represents an EVIO v6 file header. @@ -14,7 +59,7 @@ class FileHeader: # EVIO magic number and bytes MAGIC_BYTES = b'EVIO' - MAGIC_NUMBER = 0xc0da0100 + MAGIC_NUMBER = MAGIC_NUMBER # Size of file header in bytes HEADER_SIZE = 56 # 14 words * 4 bytes @@ -22,6 +67,7 @@ class FileHeader: def __init__(self): """Initialize an empty FileHeader object""" self.file_type_id = None + self.file_type = None self.file_number = None self.header_length = None self.record_count = None @@ -52,28 +98,23 @@ def from_buffer(buffer: mmap.mmap, offset: int = 0) -> 'FileHeader': Returns: FileHeader object + + Raises: + ValueError: no magic word, no file type id, or a version other than 6 """ header = FileHeader() - # Try little endian first - endian = '<' + endian = detect_endian(buffer, offset) + if endian is None: + raise ValueError(f"Not an EVIO file: no magic number 0x{MAGIC_NUMBER:08x} at word 7 of offset 0x{offset:X}") + header.endian = endian - # Read header fields header.file_type_id = struct.unpack(endian + 'I', buffer[offset:offset+4])[0] + header.file_type = file_type_name(header.file_type_id) + if header.file_type is None: + raise ValueError(f"Invalid EVIO file header: file_type_id = 0x{header.file_type_id:08x}, " + f"expected 0x{FILE_TYPE_EVIO:08X} (EVIO) or 0x{FILE_TYPE_HIPO:08X} (HIPO)") - # Check if the file type is EVIO (ASCII for "EVIO" is 0x4556494F) - if header.file_type_id != 0x4556494F: - # Try big endian if little endian didn't work - endian = '>' - header.file_type_id = struct.unpack(endian + 'I', buffer[offset:offset+4])[0] - - # If still not EVIO, raise error - if header.file_type_id != 0x4556494F: - raise ValueError(f"Invalid EVIO file: file_type_id = 0x{header.file_type_id:08x}, expected 0x4556494F") - - header.endian = endian - - # Continue parsing with detected endianness header.file_number = struct.unpack(endian + 'I', buffer[offset+4:offset+8])[0] header.header_length = struct.unpack(endian + 'I', buffer[offset+8:offset+12])[0] header.record_count = struct.unpack(endian + 'I', buffer[offset+12:offset+16])[0] @@ -87,22 +128,14 @@ def from_buffer(buffer: mmap.mmap, offset: int = 0) -> 'FileHeader': header.magic_number = struct.unpack(endian + 'I', buffer[offset+28:offset+32])[0] # 64-bit values - if endian == '<': - header.user_register = struct.unpack('Q', buffer[offset+32:offset+40])[0] - header.trailer_position = struct.unpack('>Q', buffer[offset+40:offset+48])[0] + header.user_register = struct.unpack(endian + 'Q', buffer[offset+32:offset+40])[0] + header.trailer_position = struct.unpack(endian + 'Q', buffer[offset+40:offset+48])[0] header.user_integer1 = struct.unpack(endian + 'I', buffer[offset+48:offset+52])[0] header.user_integer2 = struct.unpack(endian + 'I', buffer[offset+52:offset+56])[0] - # Validate header if header.version != 6: - raise ValueError(f"Unsupported EVIO version: {header.version}, expected 6") - - if header.magic_number != FileHeader.MAGIC_NUMBER: - raise ValueError(f"Invalid magic number: 0x{header.magic_number:08x}, expected 0x{FileHeader.MAGIC_NUMBER:08x}") + raise unsupported_version_error(header.version, "file header") # Parse bit_info fields header.has_dictionary = bool((header.bit_info >> 0) & 1) # Bit 8 @@ -133,7 +166,7 @@ def __str__(self) -> str: Magic Number: 0x{self.magic_number:08x} Version: {self.version} Endianness: {endian_str} - File Type ID: 0x{self.file_type_id:08x} ({"EVIO" if self.file_type_id == 0x4556494F else "Unknown"}) + File Type ID: 0x{self.file_type_id:08x} ({self.file_type or "Unknown"}) File Number: {self.file_number} Header Length: {self.header_length} words ({self.header_length * 4} bytes) Record Count: {self.record_count} diff --git a/pyevio/record.py b/pyevio/record.py index ea4f41e..2b52a85 100644 --- a/pyevio/record.py +++ b/pyevio/record.py @@ -44,14 +44,21 @@ def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<', index=-1): # Cache for events (will be populated on demand) self._events = None - self._event_count = None + self._event_info = None + + # Why an event walk stopped early (short strings with offsets); empty + # when every event length fit inside the record. + self.errors: List[str] = [] @property def event_count(self) -> int: - """Get the number of events in this record.""" - if self._event_count is None: - self._event_count = self.header.event_count - return self._event_count + """Number of events the header declares. A trailer declares 0.""" + return self.header.event_count + + @property + def is_trailer(self) -> bool: + """True for the trailer record that closes a file; it holds no events.""" + return self.header.is_trailer def scan_events(self) -> List[Tuple[int, int]]: """ @@ -60,29 +67,51 @@ def scan_events(self) -> List[Tuple[int, int]]: Returns: List of tuples (offset, length) for all events in the record """ - event_info = [] + if self._event_info is None: + self._event_info = self._scan_events() + return self._event_info - if self.header.index_array_length > 0: - # Parse events from index array - event_count = self.header.index_array_length // 4 - current_offset = self.data_start + def _scan_events(self) -> List[Tuple[int, int]]: + # A trailer's index array lists records, never events: reading it as + # event lengths yields ghost events past the end of the file. + if self.header.is_trailer: + return [] - for i in range(event_count): - length_offset = self.index_array_start + (i * 4) - event_length = struct.unpack(self.endian + 'I', self.mm[length_offset:length_offset+4])[0] + event_info = [] + current_offset = self.data_start - # Store event offset and length + if self.header.index_array_length > 0: + # The index array holds one byte length per event. The header's + # event count and the index size are two claims about the same + # number; trust neither beyond the other. + index_entries = self.header.index_array_length // 4 + event_count = min(self.header.event_count, index_entries) + + for event_i in range(event_count): + length_offset = self.index_array_start + event_i * 4 + event_length = struct.unpack(self.endian + 'I', self.mm[length_offset:length_offset + 4])[0] + if event_length < 8 or current_offset + event_length > self.data_end: + self.errors.append(f"event {event_i} at 0x{current_offset:X} declares {event_length} bytes, " + f"record data ends at 0x{self.data_end:X}") + break event_info.append((current_offset, event_length)) - - # Update cumulative offset for next event current_offset += event_length - elif self.header.event_count > 0: - # No index array: walk events by the length word of each event bank - current_offset = self.data_start - while current_offset + 8 <= self.data_end and len(event_info) < self.header.event_count: - bank_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset+4])[0] + else: + # No index array: walk events by the length word of each event + # bank (length + 1 words, see Bank). Stop at the header's event + # count or at the end of the record data, whichever comes first. + while len(event_info) < self.header.event_count: + if current_offset + 8 > self.data_end: + self.errors.append(f"event {len(event_info)} at 0x{current_offset:X} has no room for a bank header, " + f"record data ends at 0x{self.data_end:X}") + break + bank_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset + 4])[0] event_length = (bank_length + 1) * 4 + if bank_length == 0 or current_offset + event_length > self.data_end: + self.errors.append(f"event {len(event_info)} at 0x{current_offset:X} declares {event_length} bytes, " + f"record data ends at 0x{self.data_end:X}") + break event_info.append((current_offset, event_length)) current_offset += event_length @@ -333,7 +362,8 @@ def get_hex_dump(self, word_count: int = 14, title: Optional[str] = None) -> str def __str__(self) -> str: """Return a string representation of this record.""" - return f"Record at offset 0x{self.offset:X} with {self.event_count} events" + kind = "Trailer" if self.is_trailer else "Record" + return f"{kind} at offset 0x{self.offset:X} with {self.event_count} events" def __repr__(self) -> str: """Return a string representation for debugging.""" diff --git a/pyevio/record_header.py b/pyevio/record_header.py index 272d824..46028b1 100644 --- a/pyevio/record_header.py +++ b/pyevio/record_header.py @@ -2,14 +2,34 @@ class RecordHeader: - """Parses and represents an EVIO v6 record header.""" + """Parses and represents an EVIO v6 record header. + + Word layout (word 5 holds the header species, flags and version): + + 0 record length (words) 7 magic 0xc0da0100 + 1 record number 8 uncompressed data length (bytes, events only) + 2 header length (words) 9 compression type (bits 28—31) | compressed length (words) + 3 event count 10—11 user register 1 + 4 index array length (bytes) 12—13 user register 2 + 5 species (bits 28—31) | bit-info (bits 8—27) | version (bits 0—7) + 6 user header length (bytes) + + A 14-word header carries all of these. An 8-word header (the SRO hardware + block layout, see ``EvioFile``) stops after the magic word; the remaining + fields read as 0. + """ # EVIO record header magic number MAGIC_NUMBER = 0xc0da0100 - # Size of record header in bytes + # Size of a full record header in bytes HEADER_SIZE = 56 # 14 words * 4 bytes + # Header species, bits 28—31 of word 5. + TYPE_RECORD = 0 + TYPE_FILE = 1 + TYPE_TRAILER = 3 + def __init__(self): """ Initialize an empty RecordHeader object @@ -22,73 +42,78 @@ def __init__(self): self.index_array_length = -1 self.version = -1 self.bit_info = -1 + self.header_type = -1 self.user_header_length = -1 self.magic_number = -1 - self.uncompressed_data_length = -1 - self.compression_type = -1 - self.compressed_data_length = -1 - self.user_register1 = -1 - self.user_register2 = -1 - self.version = -1 - self.magic_number = -1 + self.uncompressed_data_length = 0 + self.compression_type = 0 + self.compressed_data_length = 0 + self.user_register1 = 0 + self.user_register2 = 0 self.has_dictionary = False self.is_last_record = False self.has_first_event = False self.event_type = f"NeverInitialized" + @property + def is_trailer(self) -> bool: + """True for the trailer record that closes a file (header species 3). + + A trailer's index array lists (record length, event count) pairs of the + records before it, never events. + """ + return self.header_type == RecordHeader.TYPE_TRAILER + @staticmethod def parse(buffer, offset=0): """ Parse a RecordHeader from a memory-mapped buffer. - + Args: buffer: Memory-mapped buffer containing EVIO data offset: Byte offset where the record header starts - + Returns: RecordHeader object with parsed data """ header = RecordHeader() reader = BufferReader(buffer, offset) - # Basic header fields (already validated in reader initialization) + # The first eight words exist in every header layout. header.record_length = reader.read_uint32(0) header.record_number = reader.read_uint32(1) header.header_length = reader.read_uint32(2) header.endian = reader.endian - - # Read remaining fields header.event_count = reader.read_uint32(3) header.index_array_length = reader.read_uint32(4) bit_info_version = reader.read_uint32(5) header.version = bit_info_version & 0xFF - header.bit_info = (bit_info_version >> 8) & 0xFFFFFF + header.bit_info = (bit_info_version >> 8) & 0xFFFFF + header.header_type = (bit_info_version >> 28) & 0xF header.user_header_length = reader.read_uint32(6) header.magic_number = reader.read_uint32(7) - header.uncompressed_data_length = reader.read_uint32(8) + # Words 8—13 exist only in the 14-word layout; reading them from an + # 8-word header would take the first event's words as header fields. + if header.header_length >= 14: + header.uncompressed_data_length = reader.read_uint32(8) - compression_data = reader.read_uint32(9) - header.compression_type = (compression_data >> 28) & 0xF - header.compressed_data_length = compression_data & 0x0FFFFFFF + compression_data = reader.read_uint32(9) + header.compression_type = (compression_data >> 28) & 0xF + header.compressed_data_length = compression_data & 0x0FFFFFFF - # 64-bit values - header.user_register1 = reader.read_uint64(10) # Words 10-11 - header.user_register2 = reader.read_uint64(12) # Words 12-13 - - # Validate header - if header.version != 6: - print(f"Record version validation failed: got {header.version}, expected 6") - print(f"bit_info_version raw value: 0x{bit_info_version:08X}") - print(reader.hex_dump()) - raise ValueError(f"Unsupported EVIO version in record: {header.version}, expected 6") + header.user_register1 = reader.read_uint64(10) # Words 10-11 + header.user_register2 = reader.read_uint64(12) # Words 12-13 if header.magic_number != RecordHeader.MAGIC_NUMBER: - print(reader.hex_dump()) raise ValueError(f"Invalid record magic number: 0x{header.magic_number:08x}, expected 0x{RecordHeader.MAGIC_NUMBER:08x}") + if header.version != 6: + raise ValueError(f"Unsupported EVIO version in record at offset 0x{offset:X}: " + f"version {header.version}, expected 6") + # Parse bit_info fields header.has_dictionary = bool((header.bit_info >> 0) & 1) # Bit 8 header.is_last_record = bool((header.bit_info >> 1) & 1) # Bit 9 @@ -111,4 +136,4 @@ def parse(buffer, offset=0): header.has_first_event = bool((header.bit_info >> 6) & 1) # Bit 14 - return header \ No newline at end of file + return header diff --git a/tests/golden/test_corpus.py b/tests/golden/test_corpus.py index aa9e71b..ff8d84b 100644 --- a/tests/golden/test_corpus.py +++ b/tests/golden/test_corpus.py @@ -53,13 +53,11 @@ with open(MANIFEST_PATH) as manifest_file: MANIFEST = yaml.safe_load(manifest_file) -# Today every corpus file fails the same way: the trailer -# record is counted as a data record, and its index yields two ghost events -# per data record that reach past EOF (F3). The LZ4 files add F4: the data -# records are walked as uncompressed bytes. +# The LZ4 files fail today: the data records are walked as uncompressed +# bytes (F4). The uncompressed files pass since F3 (trailer counted as a +# record; its index read as events) was fixed in PHASE1. XFAIL_BY_COMPRESSION = { - "none": "F3: trailer counted as a record; trailer index read as events past EOF", - "lz4": "F4 (and F3): LZ4 records walked as uncompressed bytes; trailer ghosts", + "lz4": "F4: LZ4 records walked as uncompressed bytes", } diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py index 4c9e789..fc3c7fc 100644 --- a/tests/golden/test_golden.py +++ b/tests/golden/test_golden.py @@ -79,36 +79,14 @@ } # Today's failures by case name, decided by running every row with pyevio. -# F3: a trailer with an index yields `index_array_length // 4` ghost events -# (two per data record) that reach past EOF. -# F4: compressed records are walked as uncompressed bytes: every event of the -# data record is garbage, plus the F3 ghosts. -# F9: legacy files fail with "Invalid EVIO file: file_type_id = ..." instead -# of a message naming the version. -# F39: the HIPO file type id 0x4849504F is rejected although the -# file is EVIO v6. -TRAILER_GHOSTS = "F3: trailer index read as event index; ghost events past EOF" +# F4: compressed records are walked as uncompressed bytes: the event walk +# stops at the first garbage length, so fewer events are found. +# Fixed in PHASE1 and no longer listed: F3 (trailer index read as events), +# F9 (version message for legacy files), F39 (HIPO file type id). XFAIL_BY_CASE = { - "append_le.evio": TRAILER_GHOSTS, - "basic_be.evio": TRAILER_GHOSTS, - "basic_le.evio": TRAILER_GHOSTS, - "deepnest_le.evio": TRAILER_GHOSTS, - "dict_le.evio": TRAILER_GHOSTS, - "dictfirst_le.evio": TRAILER_GHOSTS, - "first_le.evio": TRAILER_GHOSTS, - "hugeev_le.evio": TRAILER_GHOSTS, - "manyrec_le.evio": TRAILER_GHOSTS, - "writer_traileridx_le.evio": TRAILER_GHOSTS, - "split_le_1.evio.0": TRAILER_GHOSTS, - "split_le_1.evio.1": TRAILER_GHOSTS, - "lz4_le.evio": "F4 (and F3): LZ4 record walked as uncompressed bytes", - "lz4best_le.evio": "F4 (and F3): LZ4_BEST record walked as uncompressed bytes", - "gzip_le.evio": "F4 (and F3): gzip record walked as uncompressed bytes", - "v4_le.evio": "F9: generic file_type_id error instead of a version message", - "v4_be.evio": "F9: generic file_type_id error instead of a version message", - "v4dict_le.evio": "F9: generic file_type_id error instead of a version message", - "v13_legacy.evio": "F9: generic file_type_id error instead of a version message", - "hipo_le.evio": "F39: HIPO file type id 0x4849504F rejected; then F3 (trailer with index)", + "lz4_le.evio": "F4: LZ4 record walked as uncompressed bytes", + "lz4best_le.evio": "F4: LZ4_BEST record walked as uncompressed bytes", + "gzip_le.evio": "F4: gzip record walked as uncompressed bytes", } diff --git a/tests/test_record_scanning.py b/tests/test_record_scanning.py index bc3dd0b..468f235 100644 --- a/tests/test_record_scanning.py +++ b/tests/test_record_scanning.py @@ -24,6 +24,18 @@ def make_record(number, events, last, with_index): return header + index + data +def make_trailer(number, records, with_index): + """A trailer record (header species 3): its index lists (length, event count) per record.""" + index = b"" + if with_index: + for record in records: + length_words, _, _, events = struct.unpack("<4I", record[:16]) + index += struct.pack(" Date: Sun, 11 Oct 2026 00:38:23 -0400 Subject: [PATCH 11/65] Decode fADC250 hits only for ports the 0x41 map names as fADC250 F42 / D14 / F13: the frame walk reads each ROC bank's stream-info 0x41 payload-port map (uint16 entries module<<8 | port, two per word) and keeps module_id per ROC bank, per empty bank and per non-fADC bank. Hits come only from module 0 (fADC250) ports; other modules' payload words (DCRB channel masks on 6 of the 12 crates in run 791) go to non_fadc_words, per ROC bank and per (event, roc, stream, port). A port with no map entry decodes as fADC250 and is counted in n_unmapped_payload_banks. validate() checks hits + non-fADC words = payload words. Tests: a two-module synthetic frame in both byte orders (DCRB words never reach the hit columns), the unmapped-port rule, a malformed 0x41 segment stops at the bank end with an error and the walk continues; on corpus record 0 the map names fADC250 for exactly {7,9,25,27,29,84} and DCRB for {44,45,46,53,54,55}, hits per rocid equal the sum of (payload length - 1) over fADC ports from an independent struct walk: 99,114 hits, 400,546 DCRB words, 499,660 payload words. pyevio debug shows module, hits and other words per ROC bank; the Parquet example records non_fadc_words in its metadata. Co-Authored-By: Claude Fable 5.1 --- examples/fadc250_stream_to_parquet.py | 6 +- pyevio/cli/debug.py | 21 ++- pyevio/decoders/fadc250_stream.py | 189 ++++++++++++++++++++------ tests/test_fadc250_stream.py | 165 +++++++++++++++++----- 4 files changed, 300 insertions(+), 81 deletions(-) diff --git a/examples/fadc250_stream_to_parquet.py b/examples/fadc250_stream_to_parquet.py index 0c7cffd..8e10f88 100644 --- a/examples/fadc250_stream_to_parquet.py +++ b/examples/fadc250_stream_to_parquet.py @@ -75,14 +75,14 @@ def decode(path): "n_hits": frames["n_hits"].astype(np.uint32), "hit_offset": offsets.astype(np.uint64)} stats = {"records": record_count, "frames": len(frames), "hits": stream_hits.n_hits, "skipped_events": stream_hits.n_other_events + out_of_bounds, "out_of_order": out_of_order, - "payload_words": stream_hits.n_payload_words, "empty_payload_banks": stream_hits.n_empty_payload_banks, - "decode_errors": stream_hits.errors} + "payload_words": stream_hits.n_payload_words, "non_fadc_words": stream_hits.non_fadc_words, + "empty_payload_banks": stream_hits.n_empty_payload_banks, "decode_errors": stream_hits.errors} return hits, frame_tab, stats, stream_hits def validate(stream_hits, frames): """Self-consistency checks; raises ValueError on failure and returns the frame checks.""" - stream_hits.validate() # decode errors, hit words with bit 31 set, hit count vs payload words + stream_hits.validate() # decode errors, hit words with bit 31 set, hits + non-fADC words vs payload words if int(frames["n_hits"].sum()) != stream_hits.n_hits: raise ValueError("per-frame hit counts do not add up") frame_numbers = frames["frame"] diff --git a/pyevio/cli/debug.py b/pyevio/cli/debug.py index 75c5449..699c346 100644 --- a/pyevio/cli/debug.py +++ b/pyevio/cli/debug.py @@ -111,7 +111,8 @@ def display_child_banks(console, parent_bank, evio_file, verbose, hexdump, level # Show length details for better debugging console.print(f"[dim]Length: {child.length} words, Data Length: {child.data_length} bytes[/dim]") - console.print(f"[dim]Offset Range: 0x{child.offset:X} - 0x{child.offset + (child.length * 4):X}[/dim]") + # The length word counts the words after it: a bank spans (length + 1) words. + console.print(f"[dim]Offset Range: 0x{child.offset:X} - 0x{child.offset + (child.length + 1) * 4:X}[/dim]") if not child.is_container(): display_data_bank(console, child, evio_file, hexdump) @@ -254,23 +255,31 @@ def display_stream_frame(console, evio_file, event_obj): frame = fadc250_stream.decode_frame(words) console.print(f"[bold]Streaming time frame {frame.frame_number}[/bold], timestamp {frame.timestamp}, " f"{frame.n_hits} hits in {frame.n_roc_banks} ROC banks, " - f"{frame.n_payload_banks} payload banks ({frame.n_empty_payload_banks} empty)") + f"{frame.n_payload_banks} payload banks ({frame.n_empty_payload_banks} empty), " + f"{frame.non_fadc_words} words of other modules") for message in frame.error_messages: console.print(f"[red]Decode error: {message}[/red]") + module_names = {fadc250_stream.MODULE_FADC250: "fADC250", fadc250_stream.MODULE_DCRB: "DCRB", + fadc250_stream.MODULE_UNKNOWN: "unmapped"} roc_table = Table(box=box.SIMPLE) roc_table.add_column("ROC", style="cyan") roc_table.add_column("Stream", style="green") + roc_table.add_column("Module", style="white") roc_table.add_column("Payload banks", style="blue") roc_table.add_column("Empty", style="yellow") roc_table.add_column("Hits", style="magenta") + roc_table.add_column("Other words", style="magenta") roc_table.add_column("Ports", style="white") for roc_bank in frame.roc_banks: + same_bank = lambda table: table[(table["roc"] == roc_bank["roc"]) & (table["stream"] == roc_bank["stream"])] hit_slice = slice(int(roc_bank["first_hit_index"]), int(roc_bank["first_hit_index"] + roc_bank["n_hits"])) - empties = frame.empty_banks[(frame.empty_banks["roc"] == roc_bank["roc"]) & (frame.empty_banks["stream"] == roc_bank["stream"])] - ports = sorted(set(frame.port[hit_slice].tolist()) | set(empties["port"].tolist())) - roc_table.add_row(str(roc_bank["roc"]), str(roc_bank["stream"]), str(roc_bank["n_payload_banks"]), - str(roc_bank["n_empty_payload_banks"]), str(roc_bank["n_hits"]), ", ".join(map(str, ports))) + ports = sorted(set(frame.port[hit_slice].tolist()) | set(same_bank(frame.empty_banks)["port"].tolist()) + | set(same_bank(frame.non_fadc_banks)["port"].tolist())) + module_id = int(roc_bank["module_id"]) + roc_table.add_row(str(roc_bank["roc"]), str(roc_bank["stream"]), module_names.get(module_id, str(module_id)), + str(roc_bank["n_payload_banks"]), str(roc_bank["n_empty_payload_banks"]), str(roc_bank["n_hits"]), + str(roc_bank["non_fadc_words"]), ", ".join(map(str, ports))) console.print(roc_table) diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 2658ea2..fb6cf34 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -7,7 +7,8 @@ memory map, and the CLI, the examples and the web server call this module. Frame layout, measured on /data/evio-lib/corpus/sro_000791.evio.00000.v6 -(record 0) and described in the evio-optim SRO notes:: +(record 0), described in the evio-optim SRO notes and in the PHASE0 SRO +reference report (space/reports/phase0_sro_reference.md):: event bank tag 0xFF60, type 0x10 (bank of banks), num 0 SIB tag 0xFF31, type 0x20 (bank of segments) @@ -26,25 +27,34 @@ mostly odd/even but not always (ROC 9 stream 2 carries ports 1, 2, 3, 4, 6, 8), so the num byte is the only reliable stream identity. +The payload-port map (segment 0x41, uint16 entries ``module << 8 | port``, +two entries per word, odd counts padded) names the module behind each +port: 0 = fADC250, 1 = DCRB. Only fADC250 payload words are hits. DCRB +payload words are two-word channel masks; the decoder counts them per +ROC bank as ``non_fadc_words`` and decodes nothing from them. A +port absent from the map (or a ROC bank without a stream-info bank) is +decoded as fADC250 and counted in ``n_unmapped_payload_banks``. + An empty payload bank has length 1 and num 1; a data bank has num 0. Both are valid. The walk trusts no length word: every bank end is checked against its container, a bad length stops the walk and lands in ``errors`` and ``error_messages`` instead of an exception. Hit word layout (one ``uint32`` per hit), the single copy for pyevio. -Evidence: every earlier decoder in this repository and the viewer agree -on the bit positions and on the 4 ns tick, the fADC250 sample period -(250 MSPS). 2^14 ticks × 4 ns = 65,536 ns equals the 65,536-tick timestamp -step per frame in the SRO notes only if the timestamp tick is 1 ns, which -is open (question Q2):: +Evidence: every earlier decoder in this repository, the viewer and the +independent greenfield SRO parser agree on the bit positions and on the +4 ns tick, the fADC250 sample period (250 MSPS). 2^14 ticks × 4 ns = +65,536 ns equals the 65,536-tick timestamp step per frame in the SRO notes +only if the timestamp tick is 1 ns, which is open (question Q2):: bit 31 flag, never set in the SRO data (Jon Zarling's decoder skips such words) bits 30—17 time in 4 ns ticks from the frame start (14 bits, 0—16383) bits 16—13 fADC250 channel (4 bits, 0—15) bits 12—0 charge (13 bits, 8191 = overflow) """ +import sys from dataclasses import dataclass, field -from typing import Iterable, List, Optional +from typing import Iterable, List import numpy as np @@ -60,7 +70,7 @@ HIT_TIME_TICK_NS = 4 HIT_FORMAT = "fadc250-stream-v1: t=bits[30:17]*4ns ch=bits[16:13] q=bits[12:0]" -# ---------------------------------------------------------------- bank tags +# ---------------------------------------------------------------- bank tags and payload map STREAM_EVENT_TAG = 0xFF60 SIB_TAG = 0xFF31 SIB_TSS_SEGMENT_TAG = 0x32 @@ -70,20 +80,36 @@ ROC_PAYLOAD_PORT_SEGMENT_TAG = 0x41 BANK_OF_BANKS_TYPES = (0x10, 0x0E) +# Payload-port map entry (uint16): bits 11—8 module id, bit 7 bond, bits 6—5 lane, bits 4—0 port. +MAP_MODULE_SHIFT = 8 +MAP_MODULE_MASK = 0xF +MAP_PORT_MASK = 0x1F +MODULE_FADC250 = 0 +MODULE_DCRB = 1 +MODULE_UNKNOWN = 0xFF # port not in the map, or no stream-info bank + # Only the first error messages of a batch are kept; the count is always exact. MAX_ERROR_MESSAGES = 50 FRAME_DTYPE = np.dtype([ ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), ("first_hit_index", np.uint64), ("event_index", np.uint32), ("n_roc_banks", np.uint16), ("n_payload_banks", np.uint16), - ("n_empty_payload_banks", np.uint16), ("errors", np.uint16), + ("n_empty_payload_banks", np.uint16), ("non_fadc_words", np.uint32), ("errors", np.uint16), ]) ROC_BANK_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("roc", np.uint16), ("stream", np.uint8), - ("stream_status", np.uint8), ("n_payload_banks", np.uint16), ("n_empty_payload_banks", np.uint16), - ("n_hits", np.uint32), ("first_hit_index", np.uint64), + ("stream_status", np.uint8), ("module_id", np.uint8), ("n_payload_banks", np.uint16), + ("n_empty_payload_banks", np.uint16), ("n_hits", np.uint32), ("first_hit_index", np.uint64), + ("non_fadc_words", np.uint32), +]) +EMPTY_BANK_DTYPE = np.dtype([ + ("event_index", np.uint32), ("roc", np.uint16), ("stream", np.uint8), ("port", np.uint16), ("module_id", np.uint8), +]) +# One row per payload bank of a module other than fADC250 (DCRB channel masks); its words are never hits. +NON_FADC_BANK_DTYPE = np.dtype([ + ("event_index", np.uint32), ("frame", np.uint32), ("roc", np.uint16), ("stream", np.uint8), ("port", np.uint16), + ("module_id", np.uint8), ("n_words", np.uint32), ]) -EMPTY_BANK_DTYPE = np.dtype([("event_index", np.uint32), ("roc", np.uint16), ("stream", np.uint8), ("port", np.uint16)]) def event_words(mm, offset: int, length: int, endian: str) -> np.ndarray: @@ -130,15 +156,21 @@ def validate_hit_words(hit_words: np.ndarray) -> None: raise ValueError(f"{n_bad} hit words have a time field outside {HIT_TIME_BITS} bits (bit 31 set)") +def _is_big_endian(words: np.ndarray) -> bool: + byteorder = words.dtype.byteorder + return byteorder == ">" or (byteorder == "=" and sys.byteorder == "big") + + @dataclass class StreamHits: """Hits of many decoded events, concatenated in event order. - Hit columns share one index. ``frames`` has one row per stream frame - (``first_hit_index`` + ``n_hits`` gives the hit range); ``roc_banks`` one row per - ROC bank with its hit range and stream identity; ``empty_banks`` one row per - empty payload bank. Events that are not 0xFF60 stream frames count in - ``n_other_events`` and get no row. + Hit columns share one index and hold fADC250 hits only. ``frames`` has one row + per stream frame (``first_hit_index`` + ``n_hits`` gives the hit range); + ``roc_banks`` one row per ROC bank with its hit range, stream identity and + module; ``empty_banks`` one row per empty payload bank; ``non_fadc_banks`` one + row per payload bank of another module with its word count. Events that are + not 0xFF60 stream frames count in ``n_other_events`` and get no row. """ frame: np.ndarray event_index: np.ndarray @@ -152,13 +184,16 @@ class StreamHits: frames: np.ndarray roc_banks: np.ndarray empty_banks: np.ndarray + non_fadc_banks: np.ndarray n_events: int = 0 n_stream_frames: int = 0 n_other_events: int = 0 n_hits: int = 0 n_payload_banks: int = 0 n_empty_payload_banks: int = 0 + n_unmapped_payload_banks: int = 0 n_payload_words: int = 0 + non_fadc_words: int = 0 n_flag_words: int = 0 errors: int = 0 error_messages: List[str] = field(default_factory=list) @@ -173,15 +208,16 @@ def validate(self) -> None: """Raise ``ValueError`` on any inconsistency the decode found. Detects: walk errors (bad lengths), hit words with bit 31 set, and a hit - count that differs from the payload word count or the per-frame sums. + count that differs from the fADC250 payload word count or the per-frame sums. """ if self.errors: first = "; ".join(self.error_messages[:3]) raise ValueError(f"{self.errors} decode errors, first: {first}") if self.n_flag_words: raise ValueError(f"{self.n_flag_words} hit words have a time field outside {HIT_TIME_BITS} bits (bit 31 set)") - if self.n_hits != self.n_payload_words: - raise ValueError(f"hit count {self.n_hits} != sum of payload bank words {self.n_payload_words}") + if self.n_hits + self.non_fadc_words != self.n_payload_words: + raise ValueError(f"hit count {self.n_hits} + other-module words {self.non_fadc_words} " + f"!= sum of payload bank words {self.n_payload_words}") if int(self.frames["n_hits"].sum()) != self.n_hits: raise ValueError("per-frame hit counts do not add up to the hit count") @@ -201,11 +237,14 @@ class FrameHits: charge: np.ndarray roc_banks: np.ndarray empty_banks: np.ndarray + non_fadc_banks: np.ndarray n_hits: int n_roc_banks: int n_payload_banks: int n_empty_payload_banks: int + n_unmapped_payload_banks: int n_payload_words: int + non_fadc_words: int n_flag_words: int errors: int error_messages: List[str] @@ -230,11 +269,15 @@ def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: return StreamHits( **columns, frames=frames, roc_banks=roc_banks, empty_banks=np.concatenate([c.empty_banks for c in chunks]), + non_fadc_banks=np.concatenate([c.non_fadc_banks for c in chunks]), n_events=sum(c.n_events for c in chunks), n_stream_frames=sum(c.n_stream_frames for c in chunks), n_other_events=sum(c.n_other_events for c in chunks), n_hits=sum(c.n_hits for c in chunks), n_payload_banks=sum(c.n_payload_banks for c in chunks), n_empty_payload_banks=sum(c.n_empty_payload_banks for c in chunks), - n_payload_words=sum(c.n_payload_words for c in chunks), n_flag_words=sum(c.n_flag_words for c in chunks), + n_unmapped_payload_banks=sum(c.n_unmapped_payload_banks for c in chunks), + n_payload_words=sum(c.n_payload_words for c in chunks), + non_fadc_words=sum(c.non_fadc_words for c in chunks), + n_flag_words=sum(c.n_flag_words for c in chunks), errors=sum(c.errors for c in chunks), error_messages=messages, ) @@ -248,11 +291,12 @@ class _Walk: def __init__(self): self.hit_slices = [] - # One entry per payload bank with data: its event, frame, roc, stream, port and word count. + # One entry per fADC250 payload bank with data: its event, frame, roc, stream, port and word count. self.bank_event, self.bank_frame, self.bank_roc, self.bank_stream, self.bank_port, self.bank_n = [], [], [], [], [], [] - self.frame_rows, self.roc_bank_rows, self.empty_rows = [], [], [] + self.frame_rows, self.roc_bank_rows, self.empty_rows, self.non_fadc_rows = [], [], [], [] self.n_events = self.n_stream_frames = self.n_other_events = 0 - self.n_hits = self.n_payload_banks = self.n_empty_payload_banks = self.n_payload_words = 0 + self.n_hits = self.n_payload_banks = self.n_empty_payload_banks = self.n_unmapped_payload_banks = 0 + self.n_payload_words = self.non_fadc_words = 0 self.errors = 0 self.error_messages = [] @@ -264,6 +308,7 @@ def error(self, event_index: int, word_i: int, reason: str) -> None: def walk_event(self, words: np.ndarray, event_index: int) -> None: """Walk one event; a bad length stops the walk and is recorded, never raised.""" self.n_events += 1 + big_endian = _is_big_endian(words) w = np.ascontiguousarray(words, dtype=np.uint32) # a no-op view when the dtype already matches n = len(w) read = w.item # returns Python ints; faster than indexing a numpy scalar @@ -282,7 +327,8 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: event_end = n frame_number, timestamp, sib_end = self._read_sib(read, event_end, event_index) - hits_before, payload_before, empty_before, roc_banks_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks, len(self.roc_bank_rows) + hits_before, payload_before, empty_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks + other_before, roc_banks_before = self.non_fadc_words, len(self.roc_bank_rows) roc_bank_i = sib_end while roc_bank_i < event_end: @@ -298,13 +344,13 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: self.error(event_index, roc_bank_i, f"ROC bank 0x{roc_header:08X} is not a bank of banks") roc_bank_i = roc_end continue - self._walk_roc_bank(w, read, roc_bank_i + 2, roc_end, roc_header, event_index, frame_number) + self._walk_roc_bank(w, read, roc_bank_i + 2, roc_end, roc_header, event_index, frame_number, big_endian) roc_bank_i = roc_end self.frame_rows.append(( frame_number, timestamp, self.n_hits - hits_before, hits_before, event_index, len(self.roc_bank_rows) - roc_banks_before, self.n_payload_banks - payload_before, - self.n_empty_payload_banks - empty_before, self.errors - errors_before, + self.n_empty_payload_banks - empty_before, self.non_fadc_words - other_before, self.errors - errors_before, )) def _read_sib(self, read, event_end: int, event_index: int): @@ -319,20 +365,57 @@ def _read_sib(self, read, event_end: int, event_index: int): if (read(3) >> 16) != SIB_TAG: self.error(event_index, 3, f"expected SIB tag 0x{SIB_TAG:04X}, found 0x{read(3) >> 16:04X}") return 0, 0, sib_end - # The TSS is the first segment of the SIB: header word tag<<24 | type<<16 | length. + # The TSS is the first segment of the SIB: header word tag<<24 | pad<<22 | type<<16 | length. if 7 >= sib_end or (read(4) >> 24) != SIB_TSS_SEGMENT_TAG or (read(4) & 0xFFFF) < 3: self.error(event_index, 4, "SIB does not start with a time slice segment (tag 0x32, length 3)") return 0, 0, sib_end return read(5), read(6) | (read(7) << 32), sib_end - def _walk_roc_bank(self, w, read, child_i: int, roc_end: int, roc_header: int, event_index: int, frame_number: int) -> None: + def _read_payload_port_map(self, read, info_i: int, info_end: int, event_index: int, big_endian: bool) -> dict: + """Return ``{port: module id}`` from the 0x41 segment of the stream-info bank at ``info_i``. + + Entries are uint16, two per word: the low half first in a little-endian file, the + high half first in a big-endian one. Pad bits 2 in the segment header mean an odd + entry count. A missing or malformed segment yields an empty map (recorded as an error + only when a segment is malformed). + """ + port_map = {} + segment_i = info_i + 2 + while segment_i < info_end: + header = read(segment_i) + segment_len = header & 0xFFFF + segment_end = segment_i + segment_len + 1 + if segment_end > info_end: + self.error(event_index, segment_i, f"stream-info segment length {segment_len} runs past the bank end {info_end}") + break + if (header >> 24) == ROC_PAYLOAD_PORT_SEGMENT_TAG: + n_entries = 2 * segment_len - (1 if ((header >> 22) & 0x3) == 2 else 0) + for entry_i in range(n_entries): + word = read(segment_i + 1 + entry_i // 2) + first_half = (word >> 16) if big_endian else (word & 0xFFFF) + second_half = (word & 0xFFFF) if big_endian else (word >> 16) + entry = first_half if entry_i % 2 == 0 else second_half + port = entry & MAP_PORT_MASK + if port: + port_map[port] = (entry >> MAP_MODULE_SHIFT) & MAP_MODULE_MASK + break + segment_i = segment_end + return port_map + + def _walk_roc_bank(self, w, read, child_i: int, roc_end: int, roc_header: int, event_index: int, + frame_number: int, big_endian: bool) -> None: roc = roc_header >> 16 stream_status = roc_header & 0xFF stream = stream_status & 0xF hits_before, payload_before, empty_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks - # Skip the stream-info bank; the SRO data always places it first. + other_before = self.non_fadc_words + port_map = {} + # The stream-info bank comes first; its 0x41 segment says which module sits behind each port. if child_i + 1 < roc_end and (read(child_i + 1) >> 16) == ROC_STREAM_INFO_TAG: - child_i += read(child_i) + 1 + info_end = min(child_i + read(child_i) + 1, roc_end) + port_map = self._read_payload_port_map(read, child_i, info_end, event_index, big_endian) + child_i = info_end + roc_module = MODULE_UNKNOWN while child_i < roc_end: if child_i + 1 >= roc_end: self.error(event_index, child_i, "payload bank header runs past the ROC bank end") @@ -342,13 +425,18 @@ def _walk_roc_bank(self, w, read, child_i: int, roc_end: int, roc_header: int, e self.error(event_index, child_i, f"payload bank length {payload_len} runs past the ROC bank end {roc_end}") break port = read(child_i + 1) >> 16 + module = port_map.get(port, MODULE_UNKNOWN) + if module == MODULE_UNKNOWN: + self.n_unmapped_payload_banks += 1 + if roc_module == MODULE_UNKNOWN: + roc_module = module n_words = payload_len - 1 self.n_payload_banks += 1 self.n_payload_words += n_words if n_words == 0: self.n_empty_payload_banks += 1 - self.empty_rows.append((event_index, roc, stream, port)) - else: + self.empty_rows.append((event_index, roc, stream, port, module)) + elif module in (MODULE_FADC250, MODULE_UNKNOWN): self.hit_slices.append(w[child_i + 2:child_i + 2 + n_words]) self.bank_event.append(event_index) self.bank_frame.append(frame_number) @@ -357,10 +445,14 @@ def _walk_roc_bank(self, w, read, child_i: int, roc_end: int, roc_header: int, e self.bank_port.append(port) self.bank_n.append(n_words) self.n_hits += n_words + else: + self.non_fadc_words += n_words + self.non_fadc_rows.append((event_index, frame_number, roc, stream, port, module, n_words)) child_i += payload_len + 1 self.roc_bank_rows.append(( - event_index, frame_number, roc, stream, stream_status, self.n_payload_banks - payload_before, + event_index, frame_number, roc, stream, stream_status, roc_module, self.n_payload_banks - payload_before, self.n_empty_payload_banks - empty_before, self.n_hits - hits_before, hits_before, + self.non_fadc_words - other_before, )) def to_stream_hits(self) -> StreamHits: @@ -383,9 +475,11 @@ def to_stream_hits(self) -> StreamHits: frames=np.array(self.frame_rows, dtype=FRAME_DTYPE), roc_banks=np.array(self.roc_bank_rows, dtype=ROC_BANK_DTYPE), empty_banks=np.array(self.empty_rows, dtype=EMPTY_BANK_DTYPE), + non_fadc_banks=np.array(self.non_fadc_rows, dtype=NON_FADC_BANK_DTYPE), n_events=self.n_events, n_stream_frames=self.n_stream_frames, n_other_events=self.n_other_events, n_hits=self.n_hits, n_payload_banks=self.n_payload_banks, - n_empty_payload_banks=self.n_empty_payload_banks, n_payload_words=self.n_payload_words, + n_empty_payload_banks=self.n_empty_payload_banks, n_unmapped_payload_banks=self.n_unmapped_payload_banks, + n_payload_words=self.n_payload_words, non_fadc_words=self.non_fadc_words, n_flag_words=count_flag_words(hit_words), errors=self.errors, error_messages=self.error_messages, ) @@ -420,11 +514,12 @@ def decode_frame(words: np.ndarray, event_index: int = 0) -> FrameHits: is_stream_frame=is_stream_frame, roc=stream_hits.roc, stream=stream_hits.stream, port=stream_hits.port, channel=stream_hits.channel, time_raw=stream_hits.time_raw, t_ns=stream_hits.t_ns, charge=stream_hits.charge, - roc_banks=stream_hits.roc_banks, empty_banks=stream_hits.empty_banks, + roc_banks=stream_hits.roc_banks, empty_banks=stream_hits.empty_banks, non_fadc_banks=stream_hits.non_fadc_banks, n_hits=stream_hits.n_hits, n_roc_banks=len(stream_hits.roc_banks), n_payload_banks=stream_hits.n_payload_banks, n_empty_payload_banks=stream_hits.n_empty_payload_banks, - n_payload_words=stream_hits.n_payload_words, n_flag_words=stream_hits.n_flag_words, - errors=stream_hits.errors, error_messages=stream_hits.error_messages, + n_unmapped_payload_banks=stream_hits.n_unmapped_payload_banks, + n_payload_words=stream_hits.n_payload_words, non_fadc_words=stream_hits.non_fadc_words, + n_flag_words=stream_hits.n_flag_words, errors=stream_hits.errors, error_messages=stream_hits.error_messages, ) @@ -434,3 +529,21 @@ def empty_banks_per_port(empty_banks: np.ndarray) -> dict: return {} keys, counts = np.unique(empty_banks[["roc", "stream", "port"]], return_counts=True) return {(int(k["roc"]), int(k["stream"]), int(k["port"])): int(c) for k, c in zip(keys, counts)} + + +def words_per_roc(roc_banks: np.ndarray, column: str = "non_fadc_words") -> dict: + """Sum a ``roc_banks`` column per ROC id, for example ``non_fadc_words`` or ``n_hits``.""" + if len(roc_banks) == 0: + return {} + rocs, inverse = np.unique(roc_banks["roc"], return_inverse=True) + sums = np.bincount(inverse, weights=roc_banks[column].astype(np.float64), minlength=len(rocs)) + return {int(roc): int(total) for roc, total in zip(rocs, sums)} + + +def non_fadc_words_per_port(non_fadc_banks: np.ndarray) -> dict: + """Sum the words of non-fADC250 payload banks per ``(roc, port)``.""" + if len(non_fadc_banks) == 0: + return {} + keys, inverse = np.unique(non_fadc_banks[["roc", "port"]], return_inverse=True) + sums = np.bincount(inverse, weights=non_fadc_banks["n_words"].astype(np.float64), minlength=len(keys)) + return {(int(k["roc"]), int(k["port"])): int(total) for k, total in zip(keys, sums)} diff --git a/tests/test_fadc250_stream.py b/tests/test_fadc250_stream.py index d2ac01a..a3328a2 100644 --- a/tests/test_fadc250_stream.py +++ b/tests/test_fadc250_stream.py @@ -22,9 +22,9 @@ def bank(tag, data_type, num, payload): return [len(payload) + 1, (tag << 16) | (data_type << 8) | num] + list(payload) -def segment(tag, data_type, payload): - """EVIO segment: one header word tag<<24 | type<<16 | length, then payload words.""" - return [(tag << 24) | (data_type << 16) | len(payload)] + list(payload) +def segment(tag, data_type, payload, pad=0): + """EVIO segment: one header word tag<<24 | pad<<22 | type<<16 | length, then payload words.""" + return [(tag << 24) | (pad << 22) | (data_type << 16) | len(payload)] + list(payload) def hit_word(channel, time_raw, charge, flag=False): @@ -32,19 +32,30 @@ def hit_word(channel, time_raw, charge, flag=False): return word | (1 << fs.HIT_FLAG_BIT) if flag else word -def stream_info_bank(frame_number, timestamp, ports): - """ROC-level 0xFF30 bank: TSS 0x31 and a payload-port map 0x41 (one uint16 entry per port).""" - packed_ports = [ports[i] | (ports[i + 1] << 16 if i + 1 < len(ports) else 0) for i in range(0, len(ports), 2)] +def stream_info_bank(frame_number, timestamp, ports, module_id, big_endian=False): + """ROC-level 0xFF30 bank: TSS 0x31 and a payload-port map 0x41 (uint16 entries ``module << 8 | port``). + + Two entries per word; the first entry sits in the low half for a little-endian file and in + the high half for a big-endian one. An odd entry count sets pad bits 2 in the segment header. + """ + entries = [(module_id << fs.MAP_MODULE_SHIFT) | port for port in ports] + words = [] + for i in range(0, len(entries), 2): + first, second = entries[i], entries[i + 1] if i + 1 < len(entries) else 0 + words.append((first << 16) | second if big_endian else (second << 16) | first) return bank(fs.ROC_STREAM_INFO_TAG, 0x20, 0x21, segment(fs.ROC_TSS_SEGMENT_TAG, 1, [frame_number, timestamp & 0xFFFFFFFF, timestamp >> 32]) - + segment(fs.ROC_PAYLOAD_PORT_SEGMENT_TAG, 5, packed_ports)) + + segment(fs.ROC_PAYLOAD_PORT_SEGMENT_TAG, 5, words, pad=2 if len(entries) % 2 else 0)) -def roc_bank(roc, stream_mask, frame_number, timestamp, payload_banks, with_stream_info=True): - """ROC bank with num = stream status (2 streams, the given mask) and payload banks ``[(port, [hit words])]``.""" - children = stream_info_bank(frame_number, timestamp, [port for port, _ in payload_banks]) if with_stream_info else [] - for port, hits in payload_banks: - children += bank(port, 0x00, 0 if hits else 1, hits) # an empty payload bank has num 1 +def roc_bank(roc, stream_mask, frame_number, timestamp, payload_banks, with_stream_info=True, + module_id=fs.MODULE_FADC250, big_endian=False): + """ROC bank with num = stream status (2 streams, the given mask) and payload banks ``[(port, [words])]``.""" + children = [] + if with_stream_info: + children = stream_info_bank(frame_number, timestamp, [port for port, _ in payload_banks], module_id, big_endian) + for port, words in payload_banks: + children += bank(port, 0x00, 0 if words else 1, words) # an empty payload bank has num 1 return bank(roc, 0x10, (2 << 4) | stream_mask, children) @@ -66,20 +77,32 @@ def to_words(words, endian): HITS_A = [hit_word(0, 10, 100), hit_word(3, 20, 200), hit_word(15, 16383, 8191)] HITS_B = [hit_word(7, 4000, 1)] HITS_C = [hit_word(1, 1, 1), hit_word(2, 2, 2)] +DCRB_WORDS = [0x2000_0001, 0x0000_0002, 0x4000_0003, 0x0000_0004, 0x0000_0005] -def one_crate_frame(): +def one_crate_frame(endian="<"): """One crate (ROC 7) as two streams; stream 1 has an empty port 5, stream 2 ends with an empty port 16.""" + big = endian == ">" return stream_frame(FRAME_NUMBER, TIMESTAMP, [ - roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A), (3, HITS_B), (5, [])]), - roc_bank(7, 2, FRAME_NUMBER, TIMESTAMP, [(2, HITS_C), (16, [])]), + roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A), (3, HITS_B), (5, [])], big_endian=big), + roc_bank(7, 2, FRAME_NUMBER, TIMESTAMP, [(2, HITS_C), (16, [])], big_endian=big), + ]) + + +def two_module_frame(endian="<"): + """An fADC250 crate (ROC 7) and a DCRB crate (ROC 44) with an odd number of mapped ports.""" + big = endian == ">" + return stream_frame(FRAME_NUMBER, TIMESTAMP, [ + roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)], big_endian=big), + roc_bank(44, 1, FRAME_NUMBER, TIMESTAMP, [(3, DCRB_WORDS), (5, DCRB_WORDS[:2]), (7, [])], + module_id=fs.MODULE_DCRB, big_endian=big), ]) # ---------------------------------------------------------------- synthetic frames @pytest.mark.parametrize("endian", ["<", ">"]) def test_decode_frame_columns(endian): - frame = fs.decode_frame(to_words(one_crate_frame(), endian)) + frame = fs.decode_frame(to_words(one_crate_frame(endian), endian)) assert frame.is_stream_frame assert frame.frame_number == FRAME_NUMBER @@ -89,7 +112,9 @@ def test_decode_frame_columns(endian): assert frame.n_roc_banks == 2 assert frame.n_payload_banks == 5 assert frame.n_empty_payload_banks == 2 + assert frame.n_unmapped_payload_banks == 0 assert frame.n_payload_words == 6 + assert frame.non_fadc_words == 0 assert frame.n_flag_words == 0 assert frame.roc.tolist() == [7] * 6 @@ -105,11 +130,34 @@ def test_decode_frame_columns(endian): assert rocs["roc"].tolist() == [7, 7] assert rocs["stream"].tolist() == [1, 2] assert rocs["stream_status"].tolist() == [0x21, 0x22] + assert rocs["module_id"].tolist() == [fs.MODULE_FADC250, fs.MODULE_FADC250] assert rocs["n_payload_banks"].tolist() == [3, 2] assert rocs["n_empty_payload_banks"].tolist() == [1, 1] assert rocs["n_hits"].tolist() == [4, 2] assert rocs["first_hit_index"].tolist() == [0, 4] assert fs.empty_banks_per_port(frame.empty_banks) == {(7, 1, 5): 1, (7, 2, 16): 1} + assert frame.empty_banks["module_id"].tolist() == [fs.MODULE_FADC250] * 2 + + +@pytest.mark.parametrize("endian", ["<", ">"]) +def test_non_fadc_module_words_are_counted_not_decoded(endian): + """DCRB payload words (module id 1 in the 0x41 map) never reach the hit columns.""" + frame = fs.decode_frame(to_words(two_module_frame(endian), endian)) + + assert frame.errors == 0 and frame.n_unmapped_payload_banks == 0 + assert frame.n_hits == 3 and frame.roc.tolist() == [7, 7, 7] + assert frame.n_payload_words == 3 + 5 + 2 + assert frame.non_fadc_words == 7 + assert frame.roc_banks["module_id"].tolist() == [fs.MODULE_FADC250, fs.MODULE_DCRB] + assert frame.roc_banks["non_fadc_words"].tolist() == [0, 7] + assert frame.roc_banks["n_hits"].tolist() == [3, 0] + assert frame.roc_banks["n_payload_banks"].tolist() == [1, 3] + assert frame.roc_banks["n_empty_payload_banks"].tolist() == [0, 1] + assert fs.non_fadc_words_per_port(frame.non_fadc_banks) == {(44, 3): 5, (44, 5): 2} + assert frame.non_fadc_banks["module_id"].tolist() == [fs.MODULE_DCRB] * 2 + assert frame.empty_banks["module_id"].tolist() == [fs.MODULE_DCRB] + assert fs.words_per_roc(frame.roc_banks) == {7: 0, 44: 7} + assert fs.words_per_roc(frame.roc_banks, "n_hits") == {7: 3, 44: 0} def test_non_stream_event_is_not_an_error(): @@ -129,6 +177,7 @@ def test_last_roc_bank_without_children_i17(): assert frame.n_hits == 3 assert frame.roc_banks["n_payload_banks"].tolist() == [1, 0] assert frame.roc_banks["n_hits"].tolist() == [3, 0] + assert frame.roc_banks["module_id"].tolist() == [fs.MODULE_FADC250, fs.MODULE_UNKNOWN] def test_last_roc_bank_with_only_an_empty_payload_bank(): @@ -142,10 +191,19 @@ def test_last_roc_bank_with_only_an_empty_payload_bank(): assert frame.roc_banks["n_payload_banks"].tolist() == [1, 1] -def test_roc_bank_without_stream_info_bank(): - words = stream_frame(FRAME_NUMBER, TIMESTAMP, [roc_bank(9, 2, FRAME_NUMBER, TIMESTAMP, [(4, HITS_C)], with_stream_info=False)]) - frame = fs.decode_frame(to_words(words, "<")) - assert frame.errors == 0 and frame.n_hits == 2 and frame.port.tolist() == [4, 4] +def test_unmapped_ports_decode_as_fadc_and_are_counted(): + """Without a stream-info bank (or a map entry) the port's module is unknown: decoded, but counted.""" + no_info = roc_bank(9, 2, FRAME_NUMBER, TIMESTAMP, [(4, HITS_C)], with_stream_info=False) + # ROC 7 maps port 1 only; its payload bank for port 2 is unmapped. + port_1_mapped = bank(7, 0x10, 0x21, stream_info_bank(FRAME_NUMBER, TIMESTAMP, [1], fs.MODULE_FADC250) + + bank(1, 0x00, 0, HITS_B) + bank(2, 0x00, 0, HITS_B)) + + frame = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, [no_info, port_1_mapped]), "<")) + assert frame.errors == 0 + assert frame.n_hits == 2 + 1 + 1 + assert frame.port.tolist() == [4, 4, 1, 2] + assert frame.n_unmapped_payload_banks == 2 + assert frame.roc_banks["module_id"].tolist() == [fs.MODULE_UNKNOWN, fs.MODULE_FADC250] # ---------------------------------------------------------------- bounds @@ -173,6 +231,19 @@ def test_roc_bank_length_past_event_end_stops_walk(): assert "ROC bank length 100000" in frame.error_messages[0] +def test_payload_map_segment_length_past_bank_end_is_an_error(): + words = one_crate_frame() + sib_end = 2 + words[2] + 1 + map_header_i = sib_end + 2 + 2 + 4 # ROC bank header, stream-info header, TSS segment (4 words) + assert (words[map_header_i] >> 24) == fs.ROC_PAYLOAD_PORT_SEGMENT_TAG + words[map_header_i] = (words[map_header_i] & 0xFFFF0000) | 500 + + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 1 and "stream-info segment length 500" in frame.error_messages[0] + assert frame.n_hits == 6 # the walk continues after the stream-info bank; its ports count as unmapped + assert frame.n_unmapped_payload_banks == 3 + + def test_event_length_past_given_words_is_an_error(): words = one_crate_frame() truncated = words[:-4] # the event length word now exceeds the array @@ -234,23 +305,25 @@ def test_decode_frames_concatenates_and_indexes(): assert hits.roc.tolist() == [7] * 6 + [44] assert hits.roc_banks["first_hit_index"].tolist() == [0, 4, 6] - joined = fs.concatenate_stream_hits([hits, fs.decode_frames([frame_b], first_event_index=20)]) - assert joined.n_hits == 8 + dcrb = fs.decode_frames([to_words(two_module_frame(), "<")], first_event_index=20) + joined = fs.concatenate_stream_hits([hits, dcrb]) + assert joined.n_hits == 10 and joined.non_fadc_words == 7 assert joined.frames["first_hit_index"].tolist() == [0, 6, 7] - assert joined.roc_banks["first_hit_index"].tolist() == [0, 4, 6, 7] + assert joined.roc_banks["first_hit_index"].tolist() == [0, 4, 6, 7, 10] assert joined.event_index.tolist()[-1] == 20 + assert len(joined.non_fadc_banks) == 2 joined.validate() def test_decode_frames_empty_input(): hits = fs.decode_frames([]) - assert hits.n_hits == 0 and len(hits.frames) == 0 and len(hits.roc) == 0 + assert hits.n_hits == 0 and len(hits.frames) == 0 and len(hits.roc) == 0 and len(hits.non_fadc_banks) == 0 hits.validate() # ---------------------------------------------------------------- real data def independent_payload_word_sums(mm, offset, length, endian): - """Plain struct walk of one stream frame: ``{roc id: sum of (payload bank length - 1)}``.""" + """Plain struct walk of one stream frame: ``{roc id: {port: payload bank length - 1}}``.""" def word(i): return struct.unpack_from(endian + "I", mm, offset + 4 * i)[0] @@ -265,12 +338,19 @@ def word(i): if (word(child_i + 1) >> 16) == 0xFF30: child_i += word(child_i) + 1 while child_i < roc_end: - sums[roc] = sums.get(roc, 0) + word(child_i) - 1 + port = word(child_i + 1) >> 16 + per_port = sums.setdefault(roc, {}) + per_port[port] = per_port.get(port, 0) + word(child_i) - 1 child_i += word(child_i) + 1 roc_i = roc_end return sums +# Module per crate in run 791 as the PHASE0 reference report records it (independent of the decoder's map parsing). +REFERENCE_FADC_ROCIDS = {7, 9, 25, 27, 29, 84} +REFERENCE_DCRB_ROCIDS = {44, 45, 46, 53, 54, 55} + + @pytest.mark.skipif(os.environ.get("PYEVIO_CORPUS") != "1", reason="set PYEVIO_CORPUS=1 to run on the SRO corpus") def test_corpus_record0_hits_match_payload_word_sums(): from pyevio import EvioFile @@ -282,17 +362,34 @@ def test_corpus_record0_hits_match_payload_word_sums(): offsets = record.get_event_offsets()[:n_events] endian = evio_file.header.endian - expected = {} + words_per_roc_port = {} for offset, length in offsets: - for roc, words in independent_payload_word_sums(evio_file.mm, offset, length, endian).items(): - expected[roc] = expected.get(roc, 0) + words + for roc, per_port in independent_payload_word_sums(evio_file.mm, offset, length, endian).items(): + for port, words in per_port.items(): + words_per_roc_port[(roc, port)] = words_per_roc_port.get((roc, port), 0) + words hits = fs.decode_frames(fs.event_words(evio_file.mm, offset, length, endian) for offset, length in offsets) hits.validate() - assert hits.n_stream_frames == 11 and hits.errors == 0 - assert hits.n_hits == sum(expected.values()) == 499_660 - rocs, counts = np.unique(hits.roc, return_counts=True) - assert dict(zip(rocs.tolist(), counts.tolist())) == expected - assert set(np.unique(hits.stream).tolist()) == {1, 2} + assert hits.n_stream_frames == 11 and hits.errors == 0 and hits.n_unmapped_payload_banks == 0 assert len(hits.roc_banks) == 24 * 11 + assert set(np.unique(hits.stream).tolist()) == {1, 2} + + # The 0x41 map must name DCRB for rocid 44 and fADC250 for rocid 29 (and every crate of the reference sets). + module_per_roc = {int(r["roc"]): int(r["module_id"]) for r in hits.roc_banks} + assert {roc for roc, module in module_per_roc.items() if module == fs.MODULE_FADC250} == REFERENCE_FADC_ROCIDS + assert {roc for roc, module in module_per_roc.items() if module == fs.MODULE_DCRB} == REFERENCE_DCRB_ROCIDS + + expected_fadc = {roc: 0 for roc in REFERENCE_FADC_ROCIDS} + expected_dcrb_per_port = {} + for (roc, port), words in words_per_roc_port.items(): + if roc in REFERENCE_FADC_ROCIDS: + expected_fadc[roc] += words + else: + expected_dcrb_per_port[(roc, port)] = words + rocs, counts = np.unique(hits.roc, return_counts=True) + assert dict(zip(rocs.tolist(), counts.tolist())) == expected_fadc + assert hits.n_hits == sum(expected_fadc.values()) == 99_114 + assert fs.non_fadc_words_per_port(hits.non_fadc_banks) == {k: v for k, v in expected_dcrb_per_port.items() if v} + assert hits.non_fadc_words == sum(expected_dcrb_per_port.values()) == 400_546 + assert hits.n_hits + hits.non_fadc_words == hits.n_payload_words == 499_660 From 7bf2e5aac83c190948fb468142cb8c18b1ac4ba1 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:38:23 -0400 Subject: [PATCH 12/65] Add pyarrow to the dev group so the Parquet example test runs in the gate Co-Authored-By: Claude Fable 5.1 --- pyproject.toml | 1 + uv.lock | 171 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 5aaaab9..b5f9eeb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ test = ["pytest"] # uv installs the dev group by default, so `uv run pytest` works without extras. [dependency-groups] dev = [ + "pyarrow>=21.0.0", "pytest", "pyyaml>=6.0.3", ] diff --git a/uv.lock b/uv.lock index 830d6be..e5abb88 100644 --- a/uv.lock +++ b/uv.lock @@ -1830,6 +1830,173 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "pyarrow" +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/d9/110de31880016e2afc52d8580b397dbe47615defbf09ca8cf55f56c62165/pyarrow-21.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e563271e2c5ff4d4a4cbeb2c83d5cf0d4938b891518e676025f7268c6fe5fe26", size = 31196837, upload-time = "2025-07-18T00:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/df/5f/c1c1997613abf24fceb087e79432d24c19bc6f7259cab57c2c8e5e545fab/pyarrow-21.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fee33b0ca46f4c85443d6c450357101e47d53e6c3f008d658c27a2d020d44c79", size = 32659470, upload-time = "2025-07-18T00:54:38.329Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ed/b1589a777816ee33ba123ba1e4f8f02243a844fed0deec97bde9fb21a5cf/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb", size = 41055619, upload-time = "2025-07-18T00:54:42.172Z" }, + { url = "https://files.pythonhosted.org/packages/44/28/b6672962639e85dc0ac36f71ab3a8f5f38e01b51343d7aa372a6b56fa3f3/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51", size = 42733488, upload-time = "2025-07-18T00:54:47.132Z" }, + { url = "https://files.pythonhosted.org/packages/f8/cc/de02c3614874b9089c94eac093f90ca5dfa6d5afe45de3ba847fd950fdf1/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a", size = 43329159, upload-time = "2025-07-18T00:54:51.686Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3e/99473332ac40278f196e105ce30b79ab8affab12f6194802f2593d6b0be2/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594", size = 45050567, upload-time = "2025-07-18T00:54:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f5/c372ef60593d713e8bfbb7e0c743501605f0ad00719146dc075faf11172b/pyarrow-21.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634", size = 26217959, upload-time = "2025-07-18T00:55:00.482Z" }, + { url = "https://files.pythonhosted.org/packages/94/dc/80564a3071a57c20b7c32575e4a0120e8a330ef487c319b122942d665960/pyarrow-21.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c077f48aab61738c237802836fc3844f85409a46015635198761b0d6a688f87b", size = 31243234, upload-time = "2025-07-18T00:55:03.812Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cc/3b51cb2db26fe535d14f74cab4c79b191ed9a8cd4cbba45e2379b5ca2746/pyarrow-21.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:689f448066781856237eca8d1975b98cace19b8dd2ab6145bf49475478bcaa10", size = 32714370, upload-time = "2025-07-18T00:55:07.495Z" }, + { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305, upload-time = "2025-07-18T00:55:35.373Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264, upload-time = "2025-07-18T00:55:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload-time = "2025-07-18T00:55:42.889Z" }, + { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload-time = "2025-07-18T00:55:47.069Z" }, + { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload-time = "2025-07-18T00:55:53.069Z" }, + { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload-time = "2025-07-18T00:55:57.714Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload-time = "2025-07-18T00:56:01.364Z" }, + { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306, upload-time = "2025-07-18T00:56:04.42Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622, upload-time = "2025-07-18T00:56:07.505Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064, upload-time = "2025-07-18T00:56:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837, upload-time = "2025-07-18T00:56:33.935Z" }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cc/ce4939f4b316457a083dc5718b3982801e8c33f921b3c98e7a93b7c7491f/pyarrow-21.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a7f6524e3747e35f80744537c78e7302cd41deee8baa668d56d55f77d9c464b3", size = 31211248, upload-time = "2025-07-18T00:56:59.7Z" }, + { url = "https://files.pythonhosted.org/packages/1f/c2/7a860931420d73985e2f340f06516b21740c15b28d24a0e99a900bb27d2b/pyarrow-21.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:203003786c9fd253ebcafa44b03c06983c9c8d06c3145e37f1b76a1f317aeae1", size = 32676896, upload-time = "2025-07-18T00:57:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/197f989b9a75e59b4ca0db6a13c56f19a0ad8a298c68da9cc28145e0bb97/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b4d97e297741796fead24867a8dabf86c87e4584ccc03167e4a811f50fdf74d", size = 41067862, upload-time = "2025-07-18T00:57:07.587Z" }, + { url = "https://files.pythonhosted.org/packages/fa/82/6ecfa89487b35aa21accb014b64e0a6b814cc860d5e3170287bf5135c7d8/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:898afce396b80fdda05e3086b4256f8677c671f7b1d27a6976fa011d3fd0a86e", size = 42747508, upload-time = "2025-07-18T00:57:13.917Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b7/ba252f399bbf3addc731e8643c05532cf32e74cebb5e32f8f7409bc243cf/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4", size = 43345293, upload-time = "2025-07-18T00:57:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0a/a20819795bd702b9486f536a8eeb70a6aa64046fce32071c19ec8230dbaa/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0c4e75d13eb76295a49e0ea056eb18dbd87d81450bfeb8afa19a7e5a75ae2ad7", size = 45060670, upload-time = "2025-07-18T00:57:24.477Z" }, + { url = "https://files.pythonhosted.org/packages/10/15/6b30e77872012bbfe8265d42a01d5b3c17ef0ac0f2fae531ad91b6a6c02e/pyarrow-21.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdc4c17afda4dab2a9c0b79148a43a7f4e1094916b3e18d8975bfd6d6d52241f", size = 26227521, upload-time = "2025-07-18T00:57:29.119Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/e3/27f57f80141379d60defe6703eb50a707325706f07fedfd1312c7a751995/pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a", size = 1201653, upload-time = "2026-08-10T12:40:53.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/3e/5cd70becb51e1d044c54ba5e627424a6e87df5b98008cbd22cc6abd409ca/pyarrow-25.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0b1edbb2f385a6a65e9711b62ba86ac54a7816a3f8d17bb3e8a5929d65fb2485", size = 35954271, upload-time = "2026-08-10T12:36:33.857Z" }, + { url = "https://files.pythonhosted.org/packages/64/be/17599e086df264ea7dc221d1101e3131e181e00da428a2f9bd0358f0d06b/pyarrow-25.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:a4dd8bf99a8fac133efc0ed6a92f5fddbe2adba0d0f6dd720e39ba9855cea85c", size = 37647543, upload-time = "2026-08-10T12:36:39.486Z" }, + { url = "https://files.pythonhosted.org/packages/42/34/e138b451fd3970a6eda4599f68ae3b2b32b661bc958de3239d54a0bf6575/pyarrow-25.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bddd0c4f7630c2a3ddf6347c1bdaa79d97bcf6bd445f9e60c816b7d77c85a5ae", size = 46837120, upload-time = "2026-08-10T12:36:46.58Z" }, + { url = "https://files.pythonhosted.org/packages/57/5c/f8fc0eb2de03464a557d5a4d0c15e972d73362414696618833b771f7eddd/pyarrow-25.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a4d6d5e9a3d1879a97c08ded0c797579b7965eafd0f0c26c30b45ccc06db939b", size = 50066460, upload-time = "2026-08-10T12:36:53.702Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d1/0dd64fd06de0333b808a02f60981635f067b71aad3a30698a9a104fae778/pyarrow-25.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:514ddb60285631af068875550c90eddc181db3e8e63a032b1559be189e82f056", size = 49937892, upload-time = "2026-08-10T12:37:00.349Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3c/f89d1bd76d5f3284c2a44d7d7ebbd8204535e5ae2b41f4077069b4ff2ec6/pyarrow-25.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cab40b1edfef0262e0e5251aa2c58d75630f24d06dd7794480243acc001a1d7d", size = 53107240, upload-time = "2026-08-10T12:37:07.205Z" }, + { url = "https://files.pythonhosted.org/packages/67/67/b554a8e09f3f3decccf405eb8fbe86696321cbcb5b62d18b4a5057a4c113/pyarrow-25.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:60e89d8f13861a1f7f8d950fa54aebb8023b30734d0ac51ffa80beabe2df4bba", size = 27848683, upload-time = "2026-08-10T12:37:12.058Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8b/0d23b47702fcfe8b3618d5292035099675c5a1c48258932350c08020f7b5/pyarrow-25.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:51093dd9e10325fbdb3c10a2ae7c4806e5c822d94e74ae4938b26524a3323fee", size = 35946180, upload-time = "2026-08-10T12:37:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/d8/17/707d17a5476c55a9541fde0db8213ac30979a792864d72415f176ba50c45/pyarrow-25.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:eb6203482ff3746a5632303a7279ae0b5a304c46985b49ed1378cb350ea6728d", size = 37644787, upload-time = "2026-08-10T12:37:25.795Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b2/cdc98ecf1a6408280bc3a6a07054cdd99a3f4670acc0545d383ce113e87d/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:880523be3d29efcf83d3998835d206118ccf35e3871dbd2fb60408cf6b007a80", size = 46834633, upload-time = "2026-08-10T12:37:33.604Z" }, + { url = "https://files.pythonhosted.org/packages/c8/6e/d3fafc41f378b2c65be43b827798c0fae42049a641c8526633ed3eb573e2/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:25f8720bf6387d5dc2ebd2622112de630760419e4b66134405dd24110d15f37e", size = 50065507, upload-time = "2026-08-10T12:37:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/d5/12/8d0698954b8c3001844a898e0a6900bebe83d7ee40c11195174c5122f324/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4facd65742a024a4a366328a1d2292062d72d6e023c1b7dda8d4c37544933a25", size = 49955690, upload-time = "2026-08-10T12:37:46.644Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/1ecb936ac6409e90a34d58eea1c7cec09a9ae6d2141b9e49ad01a2b1ea47/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aa0559502e1cd6254d6814614085dd9c5a3dd0419362978a936a3f68a9e5c3df", size = 53128198, upload-time = "2026-08-10T12:37:52.531Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/5236033550633c9b7377b2a53660b2bbb06cb06dc09c4356332d67643ca1/pyarrow-25.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:62cd0d785b8aa6675ee355f9fc02252a340f4441257c42674937826fd7594325", size = 27857263, upload-time = "2026-08-10T12:37:56.943Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e2/9ab15b88cbfac28e16419ce5439ec29234c5172cb8259301b4ba639bdec0/pyarrow-25.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:df961f2e7ae9cf496459259d798652c70625f6c080650d6952f8c04053c58ee9", size = 35861559, upload-time = "2026-08-10T12:38:02.567Z" }, + { url = "https://files.pythonhosted.org/packages/58/79/a0036dbe1eabe1f73127427342f1d99982584c4a2cde2651d6c93499c6f6/pyarrow-25.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:cc4aa407fde9fc660be3939e49ea31f50f3e9fec17c0ec63159f7711edd3efc9", size = 37628383, upload-time = "2026-08-10T12:38:09.083Z" }, + { url = "https://files.pythonhosted.org/packages/13/49/d93a57d375f4bf0cf82913dd6bb54acafde83dd993be2282c81ac5616cad/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:4340f0ba6c1d2e13f21658de1d7c662ca2545018568d0030a1e9afca159d87e3", size = 46820190, upload-time = "2026-08-10T12:38:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/60/c9/711ca85d79f1ec98f29a5eae2b051e25b4ecec5de3e3c0e2d5c5dcb15664/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5389cdf79447ed1515c9e31620e6e1e2302249564d603f2ad727d4f6d313e4c3", size = 50102437, upload-time = "2026-08-10T12:38:22.487Z" }, + { url = "https://files.pythonhosted.org/packages/80/53/8fb8359ff17cfb6263a1cf3ebf7caec9fe197de118719e84fcb1d0618026/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d51592cb7561e87877c506113e7adbf1342ab579e6c21f0ef44b8ba41cb74c80", size = 49942424, upload-time = "2026-08-10T12:38:28.755Z" }, + { url = "https://files.pythonhosted.org/packages/e8/83/4e5ae02a9341571b18a6fca380ac7a58ce6ddae7ab3c060208c0a1e79f02/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6109c94d8b9f3b17a041daca16cacb2f651ad8f1ef70a4232c2c0f37a23da2a8", size = 53144206, upload-time = "2026-08-10T12:38:34.862Z" }, + { url = "https://files.pythonhosted.org/packages/65/ee/197cbf47e49f83e6ebeb946a5259a48a638dea27ac774db42fe78022179d/pyarrow-25.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:8858d7bfc22e3f51529aeaa4077225029724623e4595dc9eff8c793935c34140", size = 27953934, upload-time = "2026-08-10T12:38:39.808Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8d/8f271a7a034c834910ec925d56fa4b29733b1380f5289419f5aaa3b02777/pyarrow-25.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85", size = 35855328, upload-time = "2026-08-10T12:38:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/5bac242f4e841b9971d5eb94fdfe2577e2b70be983e27401e72055786037/pyarrow-25.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153", size = 37622415, upload-time = "2026-08-10T12:38:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/96d03b4e1506524f7087adb0fd6b2f69f0c9c7aaff1ec36d8030082e15a5/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9", size = 46813813, upload-time = "2026-08-10T12:38:57.773Z" }, + { url = "https://files.pythonhosted.org/packages/98/d6/33a411115b61dbfc16ad6ad73e71730f6fea654ee3667673bc53ab0e2fe7/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f", size = 50104452, upload-time = "2026-08-10T12:39:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/b1b97c9ca87f9f9ddbb5230c798df94eccce61bd79b9b45458c69a478588/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3", size = 49951343, upload-time = "2026-08-10T12:39:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a112df5cfd5a68cb1d9fc31cfe38c28d5aec9f10865ce37ecef2e4450873/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138", size = 53144784, upload-time = "2026-08-10T12:39:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/31/24/97e8bd98f1e3b07e2ba08bcdff690674fbe16d69a7d2712cc3884665e615/pyarrow-25.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15", size = 27870159, upload-time = "2026-08-10T12:39:26.161Z" }, + { url = "https://files.pythonhosted.org/packages/36/4c/b525824ad3094076919273cd97db61fb3d78252dee76fa3b8dc8f76774aa/pyarrow-25.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bf0b672390cdcb640d7288f96b826d71ff4e9abb254a86c89890baf51a29cee6", size = 35885255, upload-time = "2026-08-10T12:39:32.366Z" }, + { url = "https://files.pythonhosted.org/packages/08/62/448bb0e940de41aec31d1a956e63ad9c54afdf122a103cc3ab20c2a3ce33/pyarrow-25.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:38a9a4b4b9613380e200641891495a56c3d5a98a092db4a870af9975e220471d", size = 37644461, upload-time = "2026-08-10T12:39:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/6e/9a/13587e38bd4806fd218f50fd13b8903fab60588a699ff0c406372e5b4043/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b", size = 46877146, upload-time = "2026-08-10T12:39:43.722Z" }, + { url = "https://files.pythonhosted.org/packages/8d/61/1c5d1229fa21da4cff5365e41e57177aaac57c563c727f35419b8513d1c1/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9171748cdf796972d85a4b60157c279913e242992e350c90c7450182a9838b2a", size = 50131616, upload-time = "2026-08-10T12:39:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/43/20/291e1d65cc0b09aa19f03cf25cf51a2f5fa94b5db315178f2d254ed5cad4/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b7a296aac7a71fa0886c08e155ddb6c636a50013f801f6178daafa0f9e726188", size = 50008879, upload-time = "2026-08-10T12:39:56.891Z" }, + { url = "https://files.pythonhosted.org/packages/8b/7c/1b7c9ec28e76576337e4f97b31141c9a181b89b6d1d6221e9d8205621a58/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0fe7c8b6c03969b49c8c66182e4a18e3819ab92d07cfab5d8370c531b9369ef0", size = 53170864, upload-time = "2026-08-10T12:40:04.918Z" }, + { url = "https://files.pythonhosted.org/packages/b7/75/f3d789dc06011a765d14d86bda799cf72ac1d715b6a6edecaa0d73d95062/pyarrow-25.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:f729cfdbd36fd99d543b67a914d2de044c84ebe45be8b34902b299b608c15c8f", size = 28620729, upload-time = "2026-08-10T12:40:51.41Z" }, + { url = "https://files.pythonhosted.org/packages/fc/05/647a8ee6f7c2662feb6921315617bc04dcd6034763fb61b1199720bf6162/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:59a2de54c0cbd954da861eee4d1d330f8e909c45b53455baef696380f2c55033", size = 36130288, upload-time = "2026-08-10T12:40:11.014Z" }, + { url = "https://files.pythonhosted.org/packages/93/f8/c9ee997554d7bea94520667dd1933f109ac1da3ee3556d2b49381e023484/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:35935cd5de130aa5cf4dea052a63e6bf2e17006c35c3a468194242b9b2bf5956", size = 37762187, upload-time = "2026-08-10T12:40:16.592Z" }, + { url = "https://files.pythonhosted.org/packages/a2/08/a28c01c7fe9e96e8233ce2d13df1d402f4f999f848f51d2daacd6bb4c036/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f3831aaa25c67a99f99dc8b05873cb9d64560390372e2aa197ce9dd4a3f06a44", size = 46888003, upload-time = "2026-08-10T12:40:23.242Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b9/58612e977d28dc58c878448866838369ee8da2f1e7cc8ed2c84b952aafee/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6a1fdfc6659b6b19022f2e50627fb5cf7156a66c46bf4299379955cbe742382a", size = 50079036, upload-time = "2026-08-10T12:40:29.169Z" }, + { url = "https://files.pythonhosted.org/packages/72/13/66e1402dcc860e1dc2760b1e0292c9a569b62b3bccab69def1b3e907d006/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:169d3429d5be7c752125890620f75a60776d38b0035eddae939651640822332e", size = 50040226, upload-time = "2026-08-10T12:40:35.186Z" }, + { url = "https://files.pythonhosted.org/packages/78/10/3f1a5497a7ef732ab0f03ecca3e66d89d9c0f57fdc61b4794c456b781f01/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:119297a6dc197e45d9c6d4415f7814a67ffa36c180d26f68c154c58067ae782d", size = 53149035, upload-time = "2026-08-10T12:40:41.454Z" }, + { url = "https://files.pythonhosted.org/packages/93/c0/37d4a7e8e2f7a6076283673d5298018ca26478b934c6ee369e10505ab32c/pyarrow-25.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4288f27577352d608ca08553b0865e4a9b3aa14820c5d95b53337218d609835b", size = 28753071, upload-time = "2026-08-10T12:40:46.623Z" }, +] + +[[package]] +name = "pyarrow" +version = "26.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/34/17c34cb38e5d940e38f0f0d9fdfa0e8a506676409ea9b85aff7e3079f831/pyarrow-26.0.0.tar.gz", hash = "sha256:0cccd36e00ea3afeb52ded61f2721ce71f604853d70c45365c58324eb773d6ae", size = 1239433, upload-time = "2026-10-09T08:26:25.315Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/68/e0707097cee93be7f693e7e89495fabfeb8bf95ee30619063f8b30fffc29/pyarrow-26.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fcdd1e04982637c6042337d3e24d472f938f01fdc502e2b994844b726d12c3f4", size = 36370896, upload-time = "2026-10-09T08:13:28.874Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f0/591211c00612aef83236daff1620412b24aeb07c646de08c18a8a6c95a39/pyarrow-26.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:f800e9e722c145ccd18012d82a864cb21bfee4ba4ceffde77100d25eced511a9", size = 38709806, upload-time = "2026-10-09T08:13:33.417Z" }, + { url = "https://files.pythonhosted.org/packages/50/ea/9b035a9d1556e06e64ea86169d9a985d0fc092d427ac5edbb3af7183289c/pyarrow-26.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7aa12ab8e236789b1ecd2d6ecaef036b4e63d675ddf1864a43c6799d18f2d028", size = 50885975, upload-time = "2026-10-09T08:13:37.737Z" }, + { url = "https://files.pythonhosted.org/packages/e1/81/8e685683897a6d3d5887c3e2fd24f3c14bc5d6d6bb3a2387484e665c580e/pyarrow-26.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:6e89dee53aaeb50505ed6152ea55bc7ddfd4f4df264f5427ea255288d8f0e580", size = 53904793, upload-time = "2026-10-09T08:13:42.984Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ad/d474a0b1b00110f3a879aa5df654f857c81929a32b2a4222869240de5220/pyarrow-26.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1c1b4263fd13abbc339a16f2bf19f3a5cbf2a620853d812b1256f03c5342cb8", size = 54458010, upload-time = "2026-10-09T08:13:47.778Z" }, + { url = "https://files.pythonhosted.org/packages/d4/86/2c2861e905810c59fed4d98c85b994c21e8613730c5c3b436781d89110f2/pyarrow-26.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff1e816af7abff71f289242e109217036723ce36aca74ad6691e52d964a74afa", size = 57368406, upload-time = "2026-10-09T08:13:52.651Z" }, + { url = "https://files.pythonhosted.org/packages/0e/02/823e606633c15155bb965c7a0f3750c4f20dd47c4ab48213c7693df0e0ba/pyarrow-26.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:13b0972a3dc71b642050d1bc72664a3916e14f59c943d8c1368154d6e4b0c2d5", size = 28522657, upload-time = "2026-10-09T08:13:56.513Z" }, + { url = "https://files.pythonhosted.org/packages/b3/60/6793778f2617cce469383dac0ba08c4f2401cf342df0c7b9ca53939d9b46/pyarrow-26.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:90ddaf7c625307ad52f31a9b25c34fe5e4897c7529ee3481135822b2b6842ff1", size = 36333953, upload-time = "2026-10-09T08:14:00.387Z" }, + { url = "https://files.pythonhosted.org/packages/db/81/f944cc63ce8a753e5fbff25de6d1d475ebd7fffdf9cf98c65130294fc896/pyarrow-26.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee341973f78a0b46e073d065e88e75026a9c584051e97f98a0d05d96c6bac7dd", size = 38688456, upload-time = "2026-10-09T08:14:04.344Z" }, + { url = "https://files.pythonhosted.org/packages/f5/2d/7e5c722fa5d5d9f3b75e62fe11694b34217664d4f05ac88031197166b277/pyarrow-26.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01c863a18bd9c8412453dd0d92de6d0ee7b2b3d6fb079d9734a4b2a3c8bd4453", size = 50867603, upload-time = "2026-10-09T08:14:09.115Z" }, + { url = "https://files.pythonhosted.org/packages/88/e4/9cd356d906e71bd79b0c3fc5c9a54e01a0020dcf14c152ccfbcb503c7298/pyarrow-26.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6a628922ba20705fa964ca73e4ef959c2fb2f14b9bbec5589a6a1e68e6257c85", size = 53931932, upload-time = "2026-10-09T08:14:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e4/5bae3133b7fe04c24907a20f3bc1fba388cbbde659199e7b76445982047a/pyarrow-26.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:954d971b363b16ee41f89389a4053315dc71265f2ce5c2468eb0a910b1166268", size = 54444720, upload-time = "2026-10-09T08:14:31.214Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b4/ee422493bb6dafdbef776cfe2c2a73106a1063a79bf4e78d1e5f51176885/pyarrow-26.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5d5768d03426abe6526d5274adefa00abf00a7f81118c46e98b5a46390f5549e", size = 57388949, upload-time = "2026-10-09T08:14:38.964Z" }, + { url = "https://files.pythonhosted.org/packages/54/3c/1783aab1dac28e175dcf26dfc7123725efc474caecaed91e8a34cb89cad0/pyarrow-26.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cc903e1069e9dd5e9dcf780324c0112e27e051e422ecfaff574fb33ed65d9160", size = 28567581, upload-time = "2026-10-09T08:14:44.279Z" }, + { url = "https://files.pythonhosted.org/packages/4d/35/ca95493712af97c46a312945c8e9d16b21c5fe2f148be5466168d0290505/pyarrow-26.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a6ca849f90cf73fe361f08a5762c783ead9671e4548c1f558cc637b54c9103f2", size = 36336700, upload-time = "2026-10-09T08:14:51.399Z" }, + { url = "https://files.pythonhosted.org/packages/69/ef/b1a675f79c9babfd4fcd99af62141d3c2d1a78a524e311b0c6b80110445a/pyarrow-26.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:c2ba350957076b1b3a22f549261dc3e9c67ca20816d8bd5f79d7b9c69be4c4c2", size = 38698502, upload-time = "2026-10-09T08:14:57.114Z" }, + { url = "https://files.pythonhosted.org/packages/3b/7c/cea852a832a327a8de797b3a68e5c25ce0f5aa1d20503807671bd90ec642/pyarrow-26.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e3b190ba1d3d22a5a8758597f797111b77d433473744352a184a5ee0a42d672e", size = 50865064, upload-time = "2026-10-09T08:20:01.614Z" }, + { url = "https://files.pythonhosted.org/packages/4f/d6/e95834b29360092376fe4da9956ba41bb7b021869efe6ee9d4172d05cb15/pyarrow-26.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:240bd18a7487f8767616a948a69dd4e740a8bc36a1c9da49e4dc9a32c5c2faed", size = 53926722, upload-time = "2026-10-09T08:23:10.829Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7f/98257444e2aea2e1fddceee3af3bd2077236d550428413f80393bd1f888d/pyarrow-26.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2b5fcd69c0e1107b79e55839877db5a6ed04651b73fd6fec581d09e230bed5e4", size = 54443093, upload-time = "2026-10-09T08:23:16.971Z" }, + { url = "https://files.pythonhosted.org/packages/88/ca/dac99cfb25cfa62bf7194600cc99abc14a6bd2af50d7fdb7f15eeaf6e202/pyarrow-26.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f7444ea6975c49a857c68f9bd8fa11acae96dede63d120ffb3bf0a603ea82516", size = 57381937, upload-time = "2026-10-09T08:23:24.95Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ed/138d29fddaf803b90f4527e124bb6aaddc18aaf4a6c50fd0a5f577c94989/pyarrow-26.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:3de30a7432b48b98b9decbd9e25a53bb9251d202c2e6c5a29a50869592ccb117", size = 28478571, upload-time = "2026-10-09T08:23:30.535Z" }, + { url = "https://files.pythonhosted.org/packages/8c/32/01858422a37f083911c2bb4d15cc32c5eeaa9d9b2bf5ddedee995a7146a6/pyarrow-26.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:5780d487ff6c6ed7b42298609680d87fe0036e529a9dc2e1105364bce9697f50", size = 36378402, upload-time = "2026-10-09T08:23:36.537Z" }, + { url = "https://files.pythonhosted.org/packages/00/85/f6b5976c2878b752d0804d371684e0495a71de296b6dc6559e6fbaa4311a/pyarrow-26.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:a0e4e92eeb088f1d7c2c04d6c7de8434c75abb4b4ccf0bbcd045aa7164c68d93", size = 38733074, upload-time = "2026-10-09T08:23:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/81/bc/c90fcbbcf893631e23dab1b0fb3fa29a508a8614326571b03c0894eda00b/pyarrow-26.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:eaf9e7cc7ab59f6c760232bbde18f64d559bbc50544841303bfb32be53533297", size = 50929201, upload-time = "2026-10-09T08:23:50.507Z" }, + { url = "https://files.pythonhosted.org/packages/ec/c1/0c1ff38ab7df1b2cf54cf0ad9f19a516c4e416c6c9b4c966cc2c9d587f77/pyarrow-26.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:ab6914db225d7f399652ae1f08588dfbc9efe617612715701e3d9d5cfa5ca19f", size = 53951865, upload-time = "2026-10-09T08:23:57.692Z" }, + { url = "https://files.pythonhosted.org/packages/9f/70/6a6b170496925472adad45a32528770fc8632db35fc60d4edd1e9ce1be0b/pyarrow-26.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41dd3661ef40790a78870052ad7a58ad827b27c67a4511f06962eb9e9b74d19b", size = 54496388, upload-time = "2026-10-09T08:24:05.23Z" }, + { url = "https://files.pythonhosted.org/packages/a8/32/033ef9dba80976820190e292a10a5a23e9406572b76bbeb4d685d90e5c8d/pyarrow-26.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6e949744dcfc2d379808f7013c5f9cafaf0f817656dff7d46c6931528dd1784b", size = 57411588, upload-time = "2026-10-09T08:24:12.043Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ff/a74892c50aaf1f9f744a84493e08a2f99221e77c39d2d4a926de21a99edf/pyarrow-26.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:4a5fa8dc70dd50808990ff36faf44088e357b353d86c7682dd92d4b78d4c97d5", size = 29237858, upload-time = "2026-10-09T08:24:58.106Z" }, + { url = "https://files.pythonhosted.org/packages/03/10/f0ee0976ef08a851a743c57608917ac9a47623f688b9ee0efe5429975ba1/pyarrow-26.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:e2a1856e9565fe2679863b372478c681806aebbf7d0a6e72f33e77f804e647d6", size = 36495870, upload-time = "2026-10-09T08:24:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/27/ca/0bc431a509bf10b4472dbb94f4184752ecbbddeb7f467152dac0fdaed469/pyarrow-26.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:4bcba83299cb2b8f8e443d36c6ba6269a5034431879015fb0719495df8a14de2", size = 38819754, upload-time = "2026-10-09T08:24:20.875Z" }, + { url = "https://files.pythonhosted.org/packages/61/59/2be41d26af7a07fb71581fb753cae396403ba1a2978355fd553929d44a9a/pyarrow-26.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3a4d235876f14b4136b4d616ec42eb469ea0d6ead336cae631aa1dd29b21c962", size = 50933671, upload-time = "2026-10-09T08:24:27.199Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cb/b6d5048cf3178be9678f5c9c60040199894b2f69c3439c87ced91fd24da9/pyarrow-26.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:210cc9b83888b87cdc8f793eebb264f22b20d0dedbedefc73b9687a7047b4747", size = 53906419, upload-time = "2026-10-09T08:24:33.536Z" }, + { url = "https://files.pythonhosted.org/packages/09/2b/23e30fbd776c81d18d134d2592eb60daca13e8a57ab087d0fa042f9d9f3d/pyarrow-26.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca77c43ca55bfc9a4eeb1f0cd5f093f08731b77c24cdba0829035f084959b0bb", size = 54527960, upload-time = "2026-10-09T08:24:41.292Z" }, + { url = "https://files.pythonhosted.org/packages/e2/23/fce251cd6b0546dfc181b00d5c8ef1c95a8c4cae83266bc3dfd5f719c62c/pyarrow-26.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:290a74c48e9491b436fd5edacfadf357943f82aa45c81110bd83a69aab33d1cf", size = 57388010, upload-time = "2026-10-09T08:24:48.186Z" }, + { url = "https://files.pythonhosted.org/packages/44/a5/0126fb0ef8d59bf257bdd68bb41623b72afc6e81790a0b4ac863a0f58861/pyarrow-26.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:515a10dae2a1d236bc9c9209d0317acb6746ea63cd4f98704904af7156d90ed1", size = 29406123, upload-time = "2026-10-09T08:24:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/ed/66/8ada1b5165359d84b4b9b5384742304d1081da670f77d458fd9c9b8a2161/pyarrow-26.0.0-cp315-cp315-macosx_12_0_arm64.whl", hash = "sha256:e890816e5ee89c74a0f8b9379fe8b5ba83f46132b2a0bbb9b1c21359ec30dfda", size = 36373215, upload-time = "2026-10-09T08:25:03.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/83/74f10c3d803a6834b2acab21847724d4bdbc74d246eb17321432844707f3/pyarrow-26.0.0-cp315-cp315-macosx_12_0_x86_64.whl", hash = "sha256:9db18a9dc0af52135c9eac549d80a7a882696efbe5406cf882b044525d4ecc2e", size = 38730866, upload-time = "2026-10-09T08:25:07.924Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5a/ea2fa2163b1bd8ff73efd39c4060be63fd6ddec03e7887a471acd1e042a4/pyarrow-26.0.0-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:734312d3d99088d9ec28c5b17bad40389bd8373a1afc10acb60b83fd217af087", size = 50924443, upload-time = "2026-10-09T08:25:13.864Z" }, + { url = "https://files.pythonhosted.org/packages/78/80/8c47b6cf8cfd42826df65193eff026c1cc81fa6cb213a3c3f5d203e6f67a/pyarrow-26.0.0-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:24f892fdf1ae1942d69d3f7742e2f49960ec95277cfb1a70b8a1d91f4a96d935", size = 53948540, upload-time = "2026-10-09T08:25:19.305Z" }, + { url = "https://files.pythonhosted.org/packages/69/1f/3a506a76d944ec5c5e4b7f01d8d0446b392a6fb384de627a12e503f616b4/pyarrow-26.0.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:879331ddea2a26479fa18fade71e6facf684a6cf19f67daec3775c871569e8e5", size = 54494863, upload-time = "2026-10-09T08:25:24.517Z" }, + { url = "https://files.pythonhosted.org/packages/3d/50/08c4bb04d651788d2eaca78065743f4f6ded974d4ef96ae3c473993e9d0c/pyarrow-26.0.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:5b827650e874f1f9f9392524ea3e9e3e8a245de5ba64acca1f81ab188090afb9", size = 57409877, upload-time = "2026-10-09T08:25:31.157Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f3/c64781fbd7b6d3c07993b698c14944d0d195f07e800fa931c486ae6ab36a/pyarrow-26.0.0-cp315-cp315-win_amd64.whl", hash = "sha256:8e8e28c464552b5ca03e30d4504168c4425ce383884f8611b00e972f9fd933fc", size = 29236658, upload-time = "2026-10-09T08:26:22.607Z" }, + { url = "https://files.pythonhosted.org/packages/06/55/2ee3729daea999f19f061f03898d4895a242c4cd94f26e1324e5fdfbfe10/pyarrow-26.0.0-cp315-cp315t-macosx_12_0_arm64.whl", hash = "sha256:ce28748cbeb0f29c3ce9603782979c7117580fc76f16aa3ca448b38a22281adb", size = 36489011, upload-time = "2026-10-09T08:25:37.64Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7d/3eb17f601f2bf13eda5f2ed28956379ca628b4dda97619cbb1cb1721622d/pyarrow-26.0.0-cp315-cp315t-macosx_12_0_x86_64.whl", hash = "sha256:106bb9290fc6fd9a84138a9440038ef184bac86463543c5ff099229cb30d996c", size = 38808480, upload-time = "2026-10-09T08:25:43.579Z" }, + { url = "https://files.pythonhosted.org/packages/0e/e3/f0047360b0f4bfc031b256dc0aec3837a61f245b2fb70f8363438e2db665/pyarrow-26.0.0-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:2e4a413046eba9896e632925066c74095182200ba32e19ff0166bf64d2f936ac", size = 50923273, upload-time = "2026-10-09T08:25:51.445Z" }, + { url = "https://files.pythonhosted.org/packages/38/d9/56d9fb91210407df31cbeb9b91138601c88c7c8fb5f6bf773b20d65509bf/pyarrow-26.0.0-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:d58798c4d8d629700058e9afc1e16b9801023f3ce4dc1c92d945e79b5ffe4e98", size = 53900905, upload-time = "2026-10-09T08:25:59.554Z" }, + { url = "https://files.pythonhosted.org/packages/cf/40/8e8a7e9e027c731520c7eb179dd00a153b76ebf0bc11d213c6c8f8502851/pyarrow-26.0.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:645917e976671debabf854abab6e2b75c571ca4f82adc33a2d338697f7c27d93", size = 54518345, upload-time = "2026-10-09T08:26:07.125Z" }, + { url = "https://files.pythonhosted.org/packages/be/89/1e768a3fdb88d34e708ad2dc00dbf8e4e30290784eb84198d59308963bea/pyarrow-26.0.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7c3fda041e7078802589cf257750323ee3d0cd1e56e53a9b20ec845697fb3d28", size = 57379403, upload-time = "2026-10-09T08:26:13.624Z" }, + { url = "https://files.pythonhosted.org/packages/96/be/7b81a44d6a8e70581dcc1d6f01541f9000a973b1e5d75394aec91e7b179a/pyarrow-26.0.0-cp315-cp315t-win_amd64.whl", hash = "sha256:68cd662e9e2b00876a131950cf32336ace2d0865e1f9418763e3d3be8481dfa4", size = 29389953, upload-time = "2026-10-09T08:26:18.277Z" }, +] + [[package]] name = "pyevio" source = { editable = "." } @@ -1856,6 +2023,9 @@ test = [ [package.dev-dependencies] dev = [ + { name = "pyarrow", version = "21.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pyarrow", version = "25.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "pyarrow", version = "26.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pyyaml" }, @@ -1875,6 +2045,7 @@ provides-extras = ["test"] [package.metadata.requires-dev] dev = [ + { name = "pyarrow", specifier = ">=21.0.0" }, { name = "pytest" }, { name = "pyyaml", specifier = ">=6.0.3" }, ] From 6d0b1f5bba45e41315d653186afd748f81c883cf Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:38:23 -0400 Subject: [PATCH 13/65] Add stream_stats: one parallel pass over frames to histograms and checks F11: frame stride = the most common frame delta; missing frames counted against it; duplicates, out-of-order frames and timestamp-delta outliers reported. F12: frame period = median of timestamp delta per frame delta; the tick length is the knob tick_ns (default 1 ns, D2). F13: histogram axes are sized from the ROC and port sets found in the data; worker partials grow and add; the stream identity comes from the decoder. F28 (binning): the rate series is binned by time from the first to the last timestamp and normalized by the frames each bin covers (hits per second of live time). A serial header scan (frame and timestamp per event, 0.3 s for 86,794 events) fixes the time axis and the frame checks; a forkserver pool decodes record ranges, each worker opening the file and returning numpy partials that add. Trailer records are skipped; events past the record end are counted, never read. StreamStats round-trips through .npz with a version field. Tests: a synthetic striped file (stride 4, a duplicate, a gap, a non-stream event, a trailer, one fADC250 and one DCRB crate) proves totals, per-port module ids, occupancy, charge/time bin placement, rate normalization, 1-worker == 2-worker results and the npz round trip; the corpus smoke (200 records) matches decode_frames, stride 4, 0 missing, period 65,536 ticks. Full corpus file sro_000791.evio.00000.v6, 22 workers: 15.55 GB in 30.5 s (509 MB/s); 764,009,774 fADC250 hits = the PHASE0 reference 763,992,122 plus the 17,652 hits of the two salvaged tail events. Co-Authored-By: Claude Fable 5.1 --- pyevio/stream_stats.py | 478 +++++++++++++++++++++++++++++++++++++ tests/test_stream_stats.py | 165 +++++++++++++ 2 files changed, 643 insertions(+) create mode 100644 pyevio/stream_stats.py create mode 100644 tests/test_stream_stats.py diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py new file mode 100644 index 0000000..8a09415 --- /dev/null +++ b/pyevio/stream_stats.py @@ -0,0 +1,478 @@ +"""One pass over the streaming frames of an EVIO file: histograms and file checks. + +Built on :mod:`pyevio.decoders.fadc250_stream`. ``compute_stream_stats`` opens +the file, scans every frame header once (frame number, timestamp) for the +frame checks and the time axis, then decodes all records in parallel by +record ranges, each worker opening the file itself and returning numpy +partials that add. The result, :class:`StreamStats`, is small (counts in +fixed bins, sized by the ROC and port sets found in the data) and round-trips +through ``.npz`` with a version field. + +Bins: + +- ``rate``: hits per time bin from the first to the last frame timestamp, + per (ROC, port, channel). ``rate_hz()`` normalizes by the frames each bin + covers, so a partial bin or a missing stripe reads right. Timestamps are + in ticks; ``tick_ns`` converts them (knob, default 1 ns). +- ``charge``: 13-bit charge in 128 bins of 64; ``time_in_frame``: 14-bit + tick field in 64 bins of 256 ticks (1,024 ns); both per (ROC, port, channel), + with per-ROC views summed on demand. +- ``hits_per_frame``: histogram of hits per frame in 64 linear bins. + +Trailer records (header type 3) are skipped; events whose range runs past +the file are counted, never read. +""" +import json +import multiprocessing +import os +import struct +import time +from dataclasses import dataclass, field, asdict, fields +from typing import List, Optional + +import numpy as np + +from pyevio.evio_file import EvioFile +from pyevio.decoders import fadc250_stream as fs + +STATS_VERSION = "1" +N_CHANNELS = 16 +CHARGE_BIN_SHIFT = 6 # 13-bit charge >> 6 → 128 bins of 64 +N_CHARGE_BINS = (fs.HIT_CHARGE_MASK + 1) >> CHARGE_BIN_SHIFT +TIME_BIN_SHIFT = 8 # 14-bit tick field >> 8 → 64 bins of 256 ticks +N_TIME_BINS = (fs.HIT_TIME_MASK + 1) >> TIME_BIN_SHIFT +N_HITS_PER_FRAME_BINS = 64 +DEFAULT_RATE_BINS = 256 +DEFAULT_TICK_NS = 1.0 +DEFAULT_CHUNK_RECORDS = 8 +RECORD_TYPE_TRAILER = 3 +# A frame whose timestamp step per frame deviates by more than this fraction from the median is an outlier. +DTS_OUTLIER_TOLERANCE = 0.01 +MAX_ERROR_MESSAGES = 50 + +FRAME_SCAN_DTYPE = np.dtype([("record", np.uint32), ("event", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64)]) +FRAME_STATS_DTYPE = np.dtype([ + ("event_index", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), + ("non_fadc_words", np.uint32), ("errors", np.uint16), +]) + + +def record_type(record) -> int: + """Record header type: bits 28—31 of the bit-info/version word (3 = trailer).""" + return (record.header.bit_info >> 20) & 0xF + + +def default_workers() -> int: + return max(1, (os.cpu_count() or 2) - 2) + + +# ---------------------------------------------------------------- frame scan (serial, headers only) +@dataclass +class FrameScan: + """Frame numbers and timestamps of every stream frame, in file order, plus record bookkeeping.""" + frames: np.ndarray # FRAME_SCAN_DTYPE + n_records: int + n_trailer_records: int + n_events: int + n_other_events: int + n_out_of_bounds_events: int + events_before_record: np.ndarray # per record: global index of its first event (trailers hold the running count) + + +def scan_frames(evio_file: EvioFile, max_records: Optional[int] = None) -> FrameScan: + """Read frame number and timestamp from the SIB of every event without decoding hits.""" + endian = evio_file.header.endian + mm = evio_file.mm + rows = [] + n_records = n_trailers = n_events = n_other = n_out_of_bounds = 0 + events_before = [] + record_limit = evio_file.record_count if max_records is None else min(max_records, evio_file.record_count) + for record_i in range(record_limit): + record = evio_file.get_record(record_i) + events_before.append(n_events) + n_records += 1 + if record_type(record) == RECORD_TYPE_TRAILER: + n_trailers += 1 + continue + for event_i, (offset, length) in enumerate(record.get_event_offsets()[:record.header.event_count]): + if offset + length > evio_file.file_size: + n_out_of_bounds += 1 + continue + n_events += 1 + if length < 32: + n_other += 1 + continue + words = struct.unpack_from(endian + "8I", mm, offset) + if (words[1] >> 16) != fs.STREAM_EVENT_TAG or (words[3] >> 16) != fs.SIB_TAG or (words[4] >> 24) != fs.SIB_TSS_SEGMENT_TAG: + n_other += 1 + continue + rows.append((record_i, event_i, words[5], words[6] | (words[7] << 32))) + return FrameScan(np.array(rows, dtype=FRAME_SCAN_DTYPE), n_records, n_trailers, n_events, n_other, n_out_of_bounds, + np.asarray(events_before, dtype=np.int64)) + + +@dataclass +class FrameChecks: + """What the frame sequence says about the file: stride, gaps, duplicates and timestamp steps.""" + n_frames: int = 0 + first_frame: int = 0 + last_frame: int = 0 + first_timestamp: int = 0 + last_timestamp: int = 0 + stride: int = 0 # most common positive frame delta between consecutive frames (4 for a 4-way striped run) + frame_period_ticks: float = 0.0 # median timestamp step per frame number + missing_frames: int = 0 # frames absent between first and last, counted in steps of the stride + duplicate_frames: int = 0 + out_of_order: int = 0 # consecutive frames whose number decreases + dts_outliers: int = 0 # consecutive frames whose timestamp step per frame deviates from the median + + +def frame_checks(frames: np.ndarray) -> FrameChecks: + """Compute :class:`FrameChecks` from a frame scan table in file order.""" + checks = FrameChecks(n_frames=len(frames)) + if len(frames) == 0: + return checks + frame = frames["frame"].astype(np.int64) + timestamp = frames["timestamp"].astype(np.int64) + unique_frames = np.unique(frame) + checks.first_frame, checks.last_frame = int(unique_frames[0]), int(unique_frames[-1]) + checks.first_timestamp, checks.last_timestamp = int(timestamp.min()), int(timestamp.max()) + checks.duplicate_frames = int(len(frame) - len(unique_frames)) + d_frame = np.diff(frame) + d_timestamp = np.diff(timestamp) + checks.out_of_order = int(np.count_nonzero(d_frame < 0)) + forward = d_frame > 0 + if forward.any(): + deltas, counts = np.unique(d_frame[forward], return_counts=True) + checks.stride = int(deltas[np.argmax(counts)]) + step_per_frame = d_timestamp[forward] / d_frame[forward] + checks.frame_period_ticks = float(np.median(step_per_frame)) + if checks.frame_period_ticks > 0: + deviation = np.abs(step_per_frame - checks.frame_period_ticks) / checks.frame_period_ticks + checks.dts_outliers = int(np.count_nonzero(deviation > DTS_OUTLIER_TOLERANCE)) + checks.missing_frames = int((checks.last_frame - checks.first_frame) // checks.stride + 1 - len(unique_frames)) + return checks + + +# ---------------------------------------------------------------- accumulation +class Accumulator: + """Histogram partial over some events; axes (ROC ids, ports) grow with the data and partials add.""" + + ARRAYS_3D = ("rate", "charge", "time") # (roc, port, channel, bins) + ARRAYS_2D = ("empty_banks", "non_fadc_words_per_port") # (roc, port) + + def __init__(self, t_first: int, t_last: int, n_rate_bins: int): + self.t_first, self.t_last, self.n_rate_bins = int(t_first), int(t_last), int(n_rate_bins) + self.rocs = np.empty(0, dtype=np.uint16) + self.ports = np.empty(0, dtype=np.uint16) + self.rate = np.zeros((0, 0, N_CHANNELS, n_rate_bins), dtype=np.int64) + self.charge = np.zeros((0, 0, N_CHANNELS, N_CHARGE_BINS), dtype=np.int64) + self.time = np.zeros((0, 0, N_CHANNELS, N_TIME_BINS), dtype=np.int64) + self.empty_banks = np.zeros((0, 0), dtype=np.int64) + self.non_fadc_words_per_port = np.zeros((0, 0), dtype=np.int64) + self.module_id = np.full((0, 0), fs.MODULE_UNKNOWN, dtype=np.uint8) + self.words_per_module = {} # module id → payload words (fADC250 hits count as words) + self.frame_rows = [] # FRAME_STATS_DTYPE arrays, concatenated at the end + self.totals = {name: 0 for name in ("n_events", "n_frames", "n_other_events", "n_hits", "n_payload_banks", + "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", + "non_fadc_words", "n_flag_words", "errors")} + self.error_messages: List[str] = [] + + def _grow(self, rocs: np.ndarray, ports: np.ndarray) -> None: + """Extend the axes to the union with ``rocs``/``ports``, re-indexing every array.""" + new_rocs = np.union1d(self.rocs, rocs).astype(np.uint16) + new_ports = np.union1d(self.ports, ports).astype(np.uint16) + if len(new_rocs) == len(self.rocs) and len(new_ports) == len(self.ports): + return + roc_pos = np.searchsorted(new_rocs, self.rocs) + port_pos = np.searchsorted(new_ports, self.ports) + for name in self.ARRAYS_3D + self.ARRAYS_2D + ("module_id",): + old = getattr(self, name) + fill = fs.MODULE_UNKNOWN if name == "module_id" else 0 + new = np.full((len(new_rocs), len(new_ports)) + old.shape[2:], fill, dtype=old.dtype) + new[np.ix_(roc_pos, port_pos)] = old + setattr(self, name, new) + self.rocs, self.ports = new_rocs, new_ports + + def _time_bin(self, timestamps: np.ndarray) -> np.ndarray: + span = max(self.t_last - self.t_first, 1) + bins = (timestamps.astype(np.int64) - self.t_first) * self.n_rate_bins // span + return np.clip(bins, 0, self.n_rate_bins - 1) + + def absorb(self, hits: fs.StreamHits) -> None: + """Add the hits and tables of one decoded batch.""" + seen_rocs = np.unique(np.concatenate([hits.roc_banks["roc"], hits.empty_banks["roc"], hits.non_fadc_banks["roc"]])) + seen_ports = np.unique(np.concatenate([hits.port, hits.empty_banks["port"], hits.non_fadc_banks["port"]])) + self._grow(seen_rocs, seen_ports) + n_ports = len(self.ports) + n_cells = len(self.rocs) * n_ports * N_CHANNELS + + if hits.n_hits: + base = int(hits.frames["event_index"].min()) + n_events_span = int(hits.frames["event_index"].max()) - base + 1 + bin_of_event = np.zeros(n_events_span, dtype=np.int64) + bin_of_event[hits.frames["event_index"].astype(np.int64) - base] = self._time_bin(hits.frames["timestamp"]) + hit_bin = bin_of_event[hits.event_index.astype(np.int64) - base] + hit_roc_i = np.searchsorted(self.rocs, hits.roc).astype(np.int64) + hit_port_i = np.searchsorted(self.ports, hits.port).astype(np.int64) + cell = (hit_roc_i * n_ports + hit_port_i) * N_CHANNELS + hits.channel + self.rate += np.bincount(cell * self.n_rate_bins + hit_bin, minlength=n_cells * self.n_rate_bins).reshape(self.rate.shape) + self.charge += np.bincount(cell * N_CHARGE_BINS + (hits.charge >> CHARGE_BIN_SHIFT), + minlength=n_cells * N_CHARGE_BINS).reshape(self.charge.shape) + self.time += np.bincount(cell * N_TIME_BINS + (hits.time_raw >> TIME_BIN_SHIFT), + minlength=n_cells * N_TIME_BINS).reshape(self.time.shape) + self.module_id[hit_roc_i, hit_port_i] = fs.MODULE_FADC250 + + for table, target, weights in ((hits.empty_banks, "empty_banks", None), + (hits.non_fadc_banks, "non_fadc_words_per_port", "n_words")): + if len(table) == 0: + continue + roc_i = np.searchsorted(self.rocs, table["roc"]).astype(np.int64) + port_i = np.searchsorted(self.ports, table["port"]).astype(np.int64) + counts = np.bincount(roc_i * n_ports + port_i, weights=None if weights is None else table[weights].astype(np.float64), + minlength=len(self.rocs) * n_ports) + setattr(self, target, getattr(self, target) + counts.astype(np.int64).reshape(len(self.rocs), n_ports)) + self.module_id[roc_i, port_i] = table["module_id"] + + self.words_per_module[fs.MODULE_FADC250] = self.words_per_module.get(fs.MODULE_FADC250, 0) + hits.n_hits + if len(hits.non_fadc_banks): + modules, inverse = np.unique(hits.non_fadc_banks["module_id"], return_inverse=True) + sums = np.bincount(inverse, weights=hits.non_fadc_banks["n_words"].astype(np.float64), minlength=len(modules)) + for module, words in zip(modules.tolist(), sums.tolist()): + self.words_per_module[int(module)] = self.words_per_module.get(int(module), 0) + int(words) + + frame_rows = np.empty(len(hits.frames), dtype=FRAME_STATS_DTYPE) + for name in FRAME_STATS_DTYPE.names: + frame_rows[name] = hits.frames[name] + self.frame_rows.append(frame_rows) + for name in self.totals: + if name == "n_frames": + self.totals[name] += hits.n_stream_frames + else: + self.totals[name] += getattr(hits, name) + self.error_messages = (self.error_messages + hits.error_messages)[:MAX_ERROR_MESSAGES] + + def merge(self, other: "Accumulator") -> None: + """Add another partial (built with the same time axis) into this one.""" + self._grow(other.rocs, other.ports) + roc_pos = np.searchsorted(self.rocs, other.rocs) + port_pos = np.searchsorted(self.ports, other.ports) + index = np.ix_(roc_pos, port_pos) + for name in self.ARRAYS_3D + self.ARRAYS_2D: + getattr(self, name)[index] += getattr(other, name) + known = other.module_id != fs.MODULE_UNKNOWN + self.module_id[index] = np.where(known, other.module_id, self.module_id[index]) + for module, words in other.words_per_module.items(): + self.words_per_module[module] = self.words_per_module.get(module, 0) + words + self.frame_rows.extend(other.frame_rows) + for name in self.totals: + self.totals[name] += other.totals[name] + self.error_messages = (self.error_messages + other.error_messages)[:MAX_ERROR_MESSAGES] + + +# ---------------------------------------------------------------- workers +_worker_file: Optional[EvioFile] = None + + +def _init_worker(path: str) -> None: + global _worker_file + _worker_file = EvioFile(path) + + +def _decode_records(evio_file: EvioFile, record_range, events_before_record: np.ndarray, t_first: int, t_last: int, + n_rate_bins: int, chunk_records: int) -> Accumulator: + """Decode a range of records in chunks and accumulate histograms; trailers and out-of-bounds events are skipped.""" + accumulator = Accumulator(t_first, t_last, n_rate_bins) + endian = evio_file.header.endian + record_list = list(record_range) + for chunk_start in range(0, len(record_list), chunk_records): + chunk = record_list[chunk_start:chunk_start + chunk_records] + events = [] + first_event_index = int(events_before_record[chunk[0]]) + for record_i in chunk: + record = evio_file.get_record(record_i) + if record_type(record) == RECORD_TYPE_TRAILER: + continue + for offset, length in record.get_event_offsets()[:record.header.event_count]: + if offset + length <= evio_file.file_size: + events.append(fs.event_words(evio_file.mm, offset, length, endian)) + evio_file._records.pop(record_i, None) # free the record cache; a worker visits each record once + accumulator.absorb(fs.decode_frames(events, first_event_index=first_event_index)) + return accumulator + + +def _process_range(args) -> Accumulator: + start, end, events_before_record, t_first, t_last, n_rate_bins, chunk_records = args + return _decode_records(_worker_file, range(start, end), events_before_record, t_first, t_last, n_rate_bins, chunk_records) + + +# ---------------------------------------------------------------- result +@dataclass +class StreamStats: + """Histograms and checks of one file. Arrays are indexed by position in ``rocs``/``ports`` and channel 0—15.""" + version: str + path: str + file_size: int + bytes_processed: int # end of the last record read; equals file_size unless a record limit was given + tick_ns: float + workers: int + wall_seconds: float + n_records: int + n_trailer_records: int + n_events: int + n_frames: int + n_other_events: int + n_out_of_bounds_events: int + n_hits: int + n_payload_banks: int + n_empty_payload_banks: int + n_unmapped_payload_banks: int + n_payload_words: int + non_fadc_words: int + n_flag_words: int + errors: int + error_messages: List[str] + checks: FrameChecks + rocs: np.ndarray + ports: np.ndarray + module_id: np.ndarray # (roc, port); MODULE_UNKNOWN where a port never appeared + module_ids: np.ndarray # module ids with payload words, aligned with module_words + module_words: np.ndarray + frames: np.ndarray # FRAME_STATS_DTYPE, sorted by event index + rate_counts: np.ndarray # (roc, port, channel, rate bin) + rate_edges_ns: np.ndarray # rate bin edges in ns from the first timestamp (len rate bins + 1) + frames_per_rate_bin: np.ndarray + occupancy: np.ndarray # (roc, port, channel) + charge_hist: np.ndarray # (roc, port, channel, 128) + charge_edges: np.ndarray + time_hist: np.ndarray # (roc, port, channel, 64) + time_edges_ns: np.ndarray + hits_per_frame_hist: np.ndarray + hits_per_frame_edges: np.ndarray + empty_banks: np.ndarray # (roc, port) + non_fadc_words_per_port: np.ndarray # (roc, port) + + SCALAR_FIELDS = ("version", "path", "file_size", "bytes_processed", "tick_ns", "workers", "wall_seconds", "n_records", "n_trailer_records", + "n_events", "n_frames", "n_other_events", "n_out_of_bounds_events", "n_hits", "n_payload_banks", + "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", + "n_flag_words", "errors", "error_messages") + + @property + def frame_period_ns(self) -> float: + return self.checks.frame_period_ticks * self.tick_ns + + @property + def duration_s(self) -> float: + """Time span of the frames: first to last timestamp plus one frame period.""" + return ((self.checks.last_timestamp - self.checks.first_timestamp) * self.tick_ns + self.frame_period_ns) * 1e-9 + + @property + def live_time_s(self) -> float: + """Time the frames in this file record: frames × frame period. + + A file holding one stripe of a 4-way striped run records a quarter of ``duration_s``; + rates are hits per second of live time, as ``rate_hz`` computes them. + """ + return self.n_frames * self.frame_period_ns * 1e-9 + + def roc_index(self, roc: int) -> int: + position = int(np.searchsorted(self.rocs, roc)) + if position >= len(self.rocs) or self.rocs[position] != roc: + raise KeyError(f"ROC {roc} not in the file") + return position + + def rate_hz(self, roc: Optional[int] = None, port: Optional[int] = None, channel: Optional[int] = None) -> np.ndarray: + """Hit rate per time bin in Hz, normalized by the frames each bin covers (0 where a bin has no frame).""" + counts = self.rate_counts + if roc is not None: + counts = counts[self.roc_index(roc)] + if port is not None: + counts = counts[int(np.searchsorted(self.ports, port))] + if channel is not None: + counts = counts[channel] + summed = counts.reshape(-1, self.rate_counts.shape[-1]).sum(axis=0) + seconds = self.frames_per_rate_bin * self.frame_period_ns * 1e-9 + return np.divide(summed, seconds, out=np.zeros(len(summed)), where=seconds > 0) + + def hits_per_roc(self) -> dict: + return {int(roc): int(total) for roc, total in zip(self.rocs, self.occupancy.sum(axis=(1, 2)))} + + def per_roc(self, hist: np.ndarray) -> np.ndarray: + """Sum a (roc, port, channel, bins) histogram over ports and channels → (roc, bins).""" + return hist.sum(axis=(1, 2)) + + def save(self, path: str) -> None: + meta = {name: getattr(self, name) for name in self.SCALAR_FIELDS} + meta["checks"] = asdict(self.checks) + arrays = {f.name: getattr(self, f.name) for f in fields(self) if f.name not in self.SCALAR_FIELDS and f.name != "checks"} + np.savez_compressed(path, meta=json.dumps(meta), **arrays) + + @classmethod + def load(cls, path: str) -> "StreamStats": + with np.load(path, allow_pickle=False) as data: + meta = json.loads(str(data["meta"])) + if meta.get("version") != STATS_VERSION: + raise ValueError(f"{path}: stats version {meta.get('version')!r}, this pyevio writes {STATS_VERSION!r}") + checks = FrameChecks(**meta.pop("checks")) + arrays = {name: data[name] for name in data.files if name != "meta"} + return cls(checks=checks, **meta, **arrays) + + +def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: int = DEFAULT_RATE_BINS, + tick_ns: float = DEFAULT_TICK_NS, max_records: Optional[int] = None, + chunk_records: int = DEFAULT_CHUNK_RECORDS) -> StreamStats: + """Scan, decode and histogram a streaming file. ``workers=1`` runs in-process.""" + t_start = time.perf_counter() + workers = default_workers() if workers is None else max(1, int(workers)) + with EvioFile(path) as evio_file: + file_size = evio_file.file_size + scan = scan_frames(evio_file, max_records) + checks = frame_checks(scan.frames) + n_records = scan.n_records + last_record = evio_file.get_record(n_records - 1) if n_records else None + bytes_processed = last_record.offset + last_record.size if last_record else 0 + if workers == 1: + partial = _decode_records(evio_file, range(n_records), scan.events_before_record, + checks.first_timestamp, checks.last_timestamp, rate_bins, chunk_records) + if workers > 1: + n_tasks = min(n_records, workers * 4) or 1 + bounds = np.linspace(0, n_records, n_tasks + 1, dtype=np.int64) + tasks = [(int(bounds[i]), int(bounds[i + 1]), scan.events_before_record, checks.first_timestamp, + checks.last_timestamp, rate_bins, chunk_records) for i in range(n_tasks) if bounds[i] < bounds[i + 1]] + partial = Accumulator(checks.first_timestamp, checks.last_timestamp, rate_bins) + # forkserver: a forked copy of a multi-threaded parent (numpy, pytest) may deadlock; workers re-import pyevio instead. + context = multiprocessing.get_context("forkserver") + with context.Pool(workers, initializer=_init_worker, initargs=(path,)) as pool: + for result in pool.imap_unordered(_process_range, tasks): + partial.merge(result) + + frames = np.concatenate(partial.frame_rows) if partial.frame_rows else np.empty(0, dtype=FRAME_STATS_DTYPE) + frames = frames[np.argsort(frames["event_index"], kind="stable")] + span = max(checks.last_timestamp - checks.first_timestamp, 1) + rate_edges_ns = np.linspace(0, span, rate_bins + 1) * tick_ns + frames_per_rate_bin = np.bincount(partial._time_bin(frames["timestamp"]), minlength=rate_bins) if len(frames) else np.zeros(rate_bins, dtype=np.int64) + max_hits = int(frames["n_hits"].max()) if len(frames) else 0 + hits_per_frame_edges = np.linspace(0, max(max_hits, 1), N_HITS_PER_FRAME_BINS + 1) + hits_per_frame_hist, _ = np.histogram(frames["n_hits"], bins=hits_per_frame_edges) + module_ids = np.array(sorted(partial.words_per_module), dtype=np.uint8) + module_words = np.array([partial.words_per_module[m] for m in module_ids], dtype=np.int64) + + return StreamStats( + version=STATS_VERSION, path=os.path.abspath(path), file_size=file_size, bytes_processed=bytes_processed, + tick_ns=float(tick_ns), workers=workers, + wall_seconds=time.perf_counter() - t_start, + n_records=n_records, n_trailer_records=scan.n_trailer_records, n_events=scan.n_events, + n_frames=partial.totals["n_frames"], n_other_events=partial.totals["n_other_events"], + n_out_of_bounds_events=scan.n_out_of_bounds_events, n_hits=partial.totals["n_hits"], + n_payload_banks=partial.totals["n_payload_banks"], n_empty_payload_banks=partial.totals["n_empty_payload_banks"], + n_unmapped_payload_banks=partial.totals["n_unmapped_payload_banks"], n_payload_words=partial.totals["n_payload_words"], + non_fadc_words=partial.totals["non_fadc_words"], n_flag_words=partial.totals["n_flag_words"], + errors=partial.totals["errors"], error_messages=partial.error_messages, checks=checks, + rocs=partial.rocs, ports=partial.ports, module_id=partial.module_id, module_ids=module_ids, module_words=module_words, + frames=frames, rate_counts=partial.rate, rate_edges_ns=rate_edges_ns, frames_per_rate_bin=frames_per_rate_bin, + occupancy=partial.charge.sum(axis=3), charge_hist=partial.charge, + charge_edges=np.arange(N_CHARGE_BINS + 1) << CHARGE_BIN_SHIFT, + time_hist=partial.time, time_edges_ns=(np.arange(N_TIME_BINS + 1) << TIME_BIN_SHIFT) * fs.HIT_TIME_TICK_NS, + hits_per_frame_hist=hits_per_frame_hist, hits_per_frame_edges=hits_per_frame_edges, + empty_banks=partial.empty_banks, non_fadc_words_per_port=partial.non_fadc_words_per_port, + ) diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py new file mode 100644 index 0000000..e535a4b --- /dev/null +++ b/tests/test_stream_stats.py @@ -0,0 +1,165 @@ +"""Tests for pyevio.stream_stats: synthetic frames through the stats path, and a corpus smoke test.""" +import os + +import numpy as np +import pytest +from click.testing import CliRunner + +from pyevio.decoders import fadc250_stream as fs +from pyevio import stream_stats +from test_fadc250_stream import DCRB_WORDS, bank, hit_word, roc_bank, stream_frame +from test_fadc250_stream_example import make_record, pack_words + +CORPUS_FILE = "/data/evio-lib/corpus/sro_000791.evio.00000.v6" +MAGIC = 0xC0DA0100 +PERIOD = 65536 # timestamp ticks per frame +STRIDE = 4 + + +def make_trailer(number): + """A trailer record (header type 3, last-record bit) with an index that would look like events.""" + import struct + index = struct.pack("<4I", 100, 200, 300, 400) + header = struct.pack("<14I", 14 + 4, number, 14, 0, len(index), (3 << 28) | (1 << 9) | 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) + return header + index + + +def write_synthetic_file(path, n_records=3, frames_per_record=4, with_trailer=True): + """Striped frames (stride 4) with one duplicate and one gap; fADC250 crate 7 and DCRB crate 44.""" + import struct + records = [] + frame = 1000 + expected_hits = 0 + frame_numbers = [] + for record_i in range(n_records): + events = [] + for event_i in range(frames_per_record): + n = record_i * frames_per_record + event_i + if n == 5: + frame_here = frame - STRIDE # duplicate of the previous frame + else: + frame_here = frame + frame += STRIDE * (2 if n == 7 else 1) # leave one frame missing after event 7 + frame_numbers.append(frame_here) + hits_port_1 = [hit_word(ch, 100 * ch + n, 10 + n) for ch in range(16)] + hits_port_3 = [hit_word(3, 16000, 8191)] * (n + 1) + expected_hits += len(hits_port_1) + len(hits_port_3) + events.append(pack_words(stream_frame(frame_here, frame_here * PERIOD, [ + roc_bank(7, 1, frame_here, frame_here * PERIOD, [(1, hits_port_1), (3, hits_port_3), (5, [])]), + roc_bank(44, 2, frame_here, frame_here * PERIOD, [(4, DCRB_WORDS), (6, [])], module_id=fs.MODULE_DCRB), + ]))) + if record_i == 1: + events.append(pack_words(bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2])))) # one non-stream event + records.append(make_record(record_i + 1, events)) + if with_trailer: + records.append(make_trailer(n_records + 1)) + file_header = struct.pack("<14I", 0x4556494F, 1, 14, len(records), 0, 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) + path.write_bytes(file_header + b"".join(records)) + return str(path), expected_hits, frame_numbers + + +@pytest.mark.parametrize("workers", [1, 2]) +def test_synthetic_file_totals_and_checks(tmp_path, workers): + path, expected_hits, frame_numbers = write_synthetic_file(tmp_path / "synthetic.evio") + stats = stream_stats.compute_stream_stats(path, workers=workers, rate_bins=8, chunk_records=1) + + assert stats.n_records == 4 and stats.n_trailer_records == 1 + assert stats.n_events == 13 and stats.n_frames == 12 and stats.n_other_events == 1 + assert stats.n_hits == expected_hits + assert stats.non_fadc_words == 12 * len(DCRB_WORDS) + assert stats.n_empty_payload_banks == 24 and stats.errors == 0 and stats.n_flag_words == 0 + assert stats.rocs.tolist() == [7, 44] and stats.ports.tolist() == [1, 3, 4, 5, 6] + assert dict(zip(stats.module_ids.tolist(), stats.module_words.tolist())) == {fs.MODULE_FADC250: expected_hits, + fs.MODULE_DCRB: 12 * len(DCRB_WORDS)} + # module per (roc, port): 7 → fADC250 on ports 1, 3, 5; 44 → DCRB on ports 4, 6; unknown elsewhere + module_7 = stats.module_id[0].tolist() + assert module_7 == [fs.MODULE_FADC250, fs.MODULE_FADC250, fs.MODULE_UNKNOWN, fs.MODULE_FADC250, fs.MODULE_UNKNOWN] + assert stats.module_id[1].tolist() == [fs.MODULE_UNKNOWN, fs.MODULE_UNKNOWN, fs.MODULE_DCRB, fs.MODULE_UNKNOWN, fs.MODULE_DCRB] + + # occupancy: port 1 has one hit per channel per frame; port 3 all on channel 3 + assert stats.occupancy[0, 0].tolist() == [12] * 16 + assert int(stats.occupancy[0, 1, 3]) == sum(range(1, 13)) and int(stats.occupancy[0, 1].sum()) == sum(range(1, 13)) + assert stats.hits_per_roc() == {7: expected_hits, 44: 0} + assert int(stats.empty_banks[0, 3]) == 12 and int(stats.empty_banks[1, 4]) == 12 + assert int(stats.non_fadc_words_per_port[1, 2]) == 12 * len(DCRB_WORDS) + # charge 8191 lands in the last charge bin; time 16000 ticks in bin 62 + assert int(stats.charge_hist[0, 1, 3, -1]) == sum(range(1, 13)) + assert int(stats.time_hist[0, 1, 3, 16000 >> stream_stats.TIME_BIN_SHIFT]) == sum(range(1, 13)) + assert int(stats.rate_counts.sum()) == expected_hits and int(stats.frames_per_rate_bin.sum()) == 12 + assert int(stats.hits_per_frame_hist.sum()) == 12 + + checks = stats.checks + assert checks.n_frames == 12 and checks.stride == STRIDE + assert checks.duplicate_frames == 1 and checks.missing_frames == 1 and checks.out_of_order == 0 + assert checks.frame_period_ticks == PERIOD and checks.dts_outliers == 0 + assert checks.first_frame == 1000 and checks.last_frame == max(frame_numbers) + assert stats.frames["frame"].tolist() == frame_numbers + assert stats.frames["n_hits"].tolist()[:2] == [17, 18] + + # rate: every bin with frames reports hits / (frames × period); the sum over bins recovers the hits + rate = stats.rate_hz() + covered = stats.frames_per_rate_bin > 0 + assert np.allclose(rate[covered] * stats.frames_per_rate_bin[covered] * stats.frame_period_ns * 1e-9, stats.rate_counts.sum(axis=(0, 1, 2))[covered]) + assert rate[~covered].tolist() == [0.0] * int((~covered).sum()) + channel_rate = stats.rate_hz(roc=7, port=1, channel=0) + assert int(stats.rate_counts[0, 0, 0].sum()) == 12 and len(channel_rate) == 8 and channel_rate.sum() > 0 + + +def test_npz_round_trip_and_version(tmp_path): + path, expected_hits, _ = write_synthetic_file(tmp_path / "synthetic.evio", n_records=1) + stats = stream_stats.compute_stream_stats(path, workers=1, rate_bins=4) + out = tmp_path / "stats.npz" + stats.save(str(out)) + loaded = stream_stats.StreamStats.load(str(out)) + assert loaded.n_hits == expected_hits == stats.n_hits + assert loaded.checks == stats.checks + assert loaded.rocs.tolist() == stats.rocs.tolist() + assert np.array_equal(loaded.rate_counts, stats.rate_counts) and np.array_equal(loaded.frames, stats.frames) + assert loaded.version == stream_stats.STATS_VERSION + + stats.version = "0" + stats.save(str(out)) + with pytest.raises(ValueError, match="stats version"): + stream_stats.StreamStats.load(str(out)) + + +def test_stats_command_prints_summary(tmp_path): + from pyevio.cli import cli + + path, expected_hits, _ = write_synthetic_file(tmp_path / "synthetic.evio") + out = tmp_path / "stats.npz" + result = CliRunner().invoke(cli, ["stats", path, "--workers", "1", "--out", str(out)]) + assert result.exit_code == 0, result.output + assert f"{expected_hits:,}" in result.output and "stride 4" in result.output and "1 missing" in result.output + assert "DCRB" in result.output and out.exists() + + +@pytest.mark.skipif(os.environ.get("PYEVIO_CORPUS") != "1", reason="set PYEVIO_CORPUS=1 to run on the SRO corpus") +def test_corpus_first_200_records_match_decoder(): + from pyevio import EvioFile + + stats = stream_stats.compute_stream_stats(CORPUS_FILE, workers=4, max_records=200) + + with EvioFile(CORPUS_FILE) as evio_file: + endian = evio_file.header.endian + chunks = [] + for record_i in range(200): + record = evio_file.get_record(record_i) + events = [fs.event_words(evio_file.mm, o, l, endian) for o, l in record.get_event_offsets()[:record.header.event_count]] + chunks.append(fs.decode_frames(events)) + decoded = fs.concatenate_stream_hits(chunks) + + assert stats.n_frames == decoded.n_stream_frames == 2200 + assert stats.n_hits == decoded.n_hits + assert stats.non_fadc_words == decoded.non_fadc_words + assert stats.n_empty_payload_banks == decoded.n_empty_payload_banks + rocs, counts = np.unique(decoded.roc, return_counts=True) + assert stats.hits_per_roc() == {**{int(r): 0 for r in stats.rocs}, **dict(zip(rocs.tolist(), counts.tolist()))} + assert stats.checks.stride == 4 and stats.checks.missing_frames == 0 and stats.checks.duplicate_frames == 0 + assert stats.checks.frame_period_ticks == 65536 + assert int(stats.rate_counts.sum()) == decoded.n_hits and int(stats.occupancy.sum()) == decoded.n_hits + assert stats.errors == 0 and stats.n_trailer_records == 0 + # rate_hz is hits per second of live time: its frame-weighted mean equals hits / (frames × period) + rate = stats.rate_hz() + weighted_mean = (rate * stats.frames_per_rate_bin).sum() / stats.frames_per_rate_bin.sum() + assert np.isclose(weighted_mean, stats.n_hits / stats.live_time_s, rtol=1e-9) From 9e8f1bee9586d696b42199a18dab93ead41717d6 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:38:23 -0400 Subject: [PATCH 14/65] Add the pyevio stats command pyevio stats FILE [--out FILE.npz] [--workers N] [--rate-bins N] [--tick-ns X] [--records N] runs stream_stats and prints totals, payload words per module, frame checks, span vs live time, hit rate, wall time with MB/s over the bytes processed, and a per-ROC table. Test: test_stats_command_prints_summary. Co-Authored-By: Claude Fable 5.1 --- pyevio/cli/__init__.py | 2 ++ pyevio/cli/stats.py | 70 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 pyevio/cli/stats.py diff --git a/pyevio/cli/__init__.py b/pyevio/cli/__init__.py index 43a5206..80fc11a 100644 --- a/pyevio/cli/__init__.py +++ b/pyevio/cli/__init__.py @@ -13,6 +13,7 @@ from pyevio.cli.ui import ui_command from pyevio.cli.ana import ana_command from pyevio.cli.web import web_command +from pyevio.cli.stats import stats_command @click.group(invoke_without_command=True) @@ -43,6 +44,7 @@ def cli(ctx, verbose): cli.add_command(ui_command) cli.add_command(ana_command) cli.add_command(web_command) +cli.add_command(stats_command) # Entry point for the CLI diff --git a/pyevio/cli/stats.py b/pyevio/cli/stats.py new file mode 100644 index 0000000..e415755 --- /dev/null +++ b/pyevio/cli/stats.py @@ -0,0 +1,70 @@ +import click +from rich.console import Console +from rich import box +from rich.table import Table + +from pyevio.decoders import fadc250_stream +from pyevio.stream_stats import compute_stream_stats, default_workers, DEFAULT_RATE_BINS, DEFAULT_TICK_NS + +MODULE_NAMES = {fadc250_stream.MODULE_FADC250: "fADC250", fadc250_stream.MODULE_DCRB: "DCRB", + fadc250_stream.MODULE_UNKNOWN: "unmapped"} + + +def print_stats_summary(console, stats): + """Print totals, frame checks and a per-ROC table.""" + checks = stats.checks + totals = Table(box=box.SIMPLE, show_header=False) + totals.add_column("", style="bold") + totals.add_column("") + totals.add_row("File", f"{stats.path} ({stats.file_size / 1e9:.2f} GB)") + totals.add_row("Records", f"{stats.n_records:,} ({stats.n_trailer_records} trailer)") + totals.add_row("Events", f"{stats.n_events:,} ({stats.n_frames:,} stream frames, {stats.n_other_events:,} other, " + f"{stats.n_out_of_bounds_events:,} out of bounds)") + totals.add_row("fADC250 hits", f"{stats.n_hits:,}") + totals.add_row("Payload words", ", ".join(f"{MODULE_NAMES.get(int(m), str(m))}: {int(w):,}" + for m, w in zip(stats.module_ids, stats.module_words)) or "none") + totals.add_row("Payload banks", f"{stats.n_payload_banks:,} ({stats.n_empty_payload_banks:,} empty, " + f"{stats.n_unmapped_payload_banks:,} unmapped)") + totals.add_row("Frames", f"{checks.first_frame:,} — {checks.last_frame:,}, stride {checks.stride}, " + f"{checks.missing_frames:,} missing, {checks.duplicate_frames:,} duplicated, " + f"{checks.out_of_order:,} out of order, {checks.dts_outliers:,} timestamp-step outliers") + totals.add_row("Frame period", f"{checks.frame_period_ticks:,.0f} ticks = {stats.frame_period_ns / 1000:,.3f} µs " + f"at {stats.tick_ns} ns per tick") + totals.add_row("Time", f"span {stats.duration_s:,.3f} s, live {stats.live_time_s:,.3f} s " + f"(stride {checks.stride}: this file holds 1 frame in {max(checks.stride, 1)})") + if stats.live_time_s > 0: + totals.add_row("Hit rate", f"{stats.n_hits / stats.live_time_s / 1e6:,.2f} MHz of live time (fADC250)") + totals.add_row("Decode errors", f"{stats.errors:,}" + (f" — first: {stats.error_messages[0]}" if stats.error_messages else "")) + totals.add_row("Wall time", f"{stats.wall_seconds:.1f} s with {stats.workers} workers for " + f"{stats.bytes_processed / 1e6:,.1f} MB ({stats.bytes_processed / max(stats.wall_seconds, 1e-9) / 1e6:,.0f} MB/s)") + console.print(totals) + + per_roc = Table(box=box.SIMPLE, title="Per ROC") + for column in ("ROC", "Module", "Ports", "Hits", "Other words", "Empty banks"): + per_roc.add_column(column, justify="right" if column not in ("Module",) else "left") + hits_per_roc = stats.hits_per_roc() + for roc_i, roc in enumerate(stats.rocs): + modules = {int(m) for m in stats.module_id[roc_i] if m != fadc250_stream.MODULE_UNKNOWN} + ports = [int(p) for p, m in zip(stats.ports, stats.module_id[roc_i]) if m != fadc250_stream.MODULE_UNKNOWN] + per_roc.add_row(str(roc), ", ".join(MODULE_NAMES.get(m, str(m)) for m in sorted(modules)) or "unmapped", + str(len(ports)), f"{hits_per_roc[int(roc)]:,}", f"{int(stats.non_fadc_words_per_port[roc_i].sum()):,}", + f"{int(stats.empty_banks[roc_i].sum()):,}") + console.print(per_roc) + + +@click.command(name="stats") +@click.argument("filename", type=click.Path(exists=True)) +@click.option("--out", "-o", "out_path", type=click.Path(), help="Save the statistics as .npz") +@click.option("--workers", "-w", type=int, default=None, help=f"Worker processes (default: cores minus two = {default_workers()})") +@click.option("--rate-bins", type=int, default=DEFAULT_RATE_BINS, show_default=True, help="Time bins of the rate series") +@click.option("--tick-ns", type=float, default=DEFAULT_TICK_NS, show_default=True, help="Timestamp tick length in ns") +@click.option("--records", "-n", type=int, default=None, help="Stop after this many records") +@click.pass_context +def stats_command(ctx, filename, out_path, workers, rate_bins, tick_ns, records): + """Histogram the streaming fADC250 hits of a file and check its frame sequence.""" + console = Console() + stats = compute_stream_stats(filename, workers=workers, rate_bins=rate_bins, tick_ns=tick_ns, max_records=records) + print_stats_summary(console, stats) + if out_path: + stats.save(out_path) + console.print(f"Saved {out_path}") From 0403c245b2ce8394a503051e1d7f968a605c33fd Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:39:37 -0400 Subject: [PATCH 15/65] Count the trailer from EvioFile.trailer in stream_stats After PHASE1 batch 1 (D12) EvioFile.record_count and get_record cover data records only, so the frame scan never visits the trailer. n_records now means data records and the trailer counts once the scan covers the whole file. Test expectation updated: 3 data records, 1 trailer. Co-Authored-By: Claude Fable 5.1 --- pyevio/stream_stats.py | 4 ++++ tests/test_stream_stats.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index 8a09415..8b19385 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -107,6 +107,10 @@ def scan_frames(evio_file: EvioFile, max_records: Optional[int] = None) -> Frame n_other += 1 continue rows.append((record_i, event_i, words[5], words[6] | (words[7] << 32))) + # EvioFile.record_count covers data records only (D12); the trailer is a separate + # attribute and counts as seen once the scan has covered the whole file. + if record_limit == evio_file.record_count and evio_file.trailer is not None: + n_trailers += 1 return FrameScan(np.array(rows, dtype=FRAME_SCAN_DTYPE), n_records, n_trailers, n_events, n_other, n_out_of_bounds, np.asarray(events_before, dtype=np.int64)) diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index e535a4b..8e17e13 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -63,7 +63,8 @@ def test_synthetic_file_totals_and_checks(tmp_path, workers): path, expected_hits, frame_numbers = write_synthetic_file(tmp_path / "synthetic.evio") stats = stream_stats.compute_stream_stats(path, workers=workers, rate_bins=8, chunk_records=1) - assert stats.n_records == 4 and stats.n_trailer_records == 1 + # n_records counts data records (EvioFile.record_count, D12); the trailer is reported apart. + assert stats.n_records == 3 and stats.n_trailer_records == 1 assert stats.n_events == 13 and stats.n_frames == 12 and stats.n_other_events == 1 assert stats.n_hits == expected_hits assert stats.non_fadc_words == 12 * len(DCRB_WORDS) From fd8ba1596cb1ab2d22bd7d7ef207795e40011d76 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 00:51:51 -0400 Subject: [PATCH 16/65] Type container children by the parent and bound every bank to its limit F45: a bank of segments (0xd/0x20) or tagsegments (0xc) holds 1-word-header children; Bank.get_children read them as 2-word banks, taking a segment's first payload word as a header. Segment and TagSegment (Bank subclasses) parse their own header word; Bank.child_class() picks the class from the parent's data type and the walk reads each child's length through it. F5: Bank takes a limit (parent end, event end or buffer end) and a length past it is recorded in Bank.errors and clamped, so no read runs past it; Event.get_bank passes the event end; a buffer too short for the header is refused with ValueError before any struct read. Tests: test_sro_event_segments_are_one_word_structures (the SIB and stream-info banks of a synthetic SRO frame), test_tagsegment_container_children, test_segment_walk_stops_at_overrun, test_bank_clamped_to_limit. Co-Authored-By: Claude Fable 5.1 --- pyevio/bank.py | 154 ++++++++++++++++++++++++++-------- pyevio/event.py | 7 +- pyevio/roc_time_slice_bank.py | 5 +- tests/test_bank_scanning.py | 103 ++++++++++++++++++++++- 4 files changed, 230 insertions(+), 39 deletions(-) diff --git a/pyevio/bank.py b/pyevio/bank.py index 57e695b..26b943b 100644 --- a/pyevio/bank.py +++ b/pyevio/bank.py @@ -28,6 +28,14 @@ class Bank(BankHeader): - Word 2: tag (16 bits) | pad (2 bits) | type (6 bits) | num (8 bits) Banks can contain data or other banks, depending on the data_type. + + Every length word counts the words that follow it, so a structure with + length N occupies N + 1 words. Children are typed by the parent's data + type: a bank of banks (0xe/0x10) holds ``Bank`` children, a bank of + segments (0xd/0x20) holds ``Segment`` children (1-word header) and a bank + of tagsegments (0xc) holds ``TagSegment`` children (1-word header). + Reading a segment with the 2-word bank header takes its first payload + word as a bank header. """ # Data type constants @@ -65,44 +73,60 @@ class Bank(BankHeader): TYPE_INT32: np.int32 } - def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<'): + # Header words of this structure kind; subclasses with a 1-word header override it. + HEADER_WORDS = 2 + STRUCTURE_NAME = "Bank" + + def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<', limit: Optional[int] = None): """ Initialize a Bank object. Args: - mm: Memory-mapped file containing the bank - offset: Byte offset in the file where the bank starts + mm: Memory-mapped file (or bytes buffer) containing the bank + offset: Byte offset in the buffer where the bank starts endian: Endianness ('<' for little endian, '>' for big endian) + limit: Byte offset this bank must not reach past (the end of its + parent, event or buffer). Default: the end of the buffer. + A declared length past the limit is recorded in ``errors`` and + the bank is clamped to the limit, so no read runs past it. """ super().__init__() self.mm = mm self.offset = offset self.endian = endian - # Parse bank header + # Why a child walk stopped early or this bank was clamped (short + # strings with offsets); empty when every length fit. + self.errors: List[str] = [] + + self.header_size = self.HEADER_WORDS * 4 + if offset < 0 or offset + self.header_size > len(mm): + raise ValueError(f"{self.STRUCTURE_NAME} header at 0x{offset:X} needs {self.header_size} bytes, " + f"buffer ends at 0x{len(mm):X}") self._parse_header() - # The length word counts the words that follow it, so a bank with - # length N occupies N + 1 words. Counting the length word itself - # drops the last payload word of every leaf. - self.header_size = 8 # 2 words * 4 bytes + # The length word counts the words that follow it, so a structure with + # length N occupies N + 1 words. Counting the length word itself drops + # the last payload word of every leaf. self.data_offset = self.offset + self.header_size self.size = (self.length + 1) * 4 - self.data_length = max(0, self.size - self.header_size) - - # End offset for this bank self.end_offset = self.offset + self.size + if limit is None: + limit = len(mm) + if self.end_offset > limit: + self.errors.append(f"{self.STRUCTURE_NAME} at 0x{self.offset:X} declares {self.length} words, " + f"ends at 0x{self.end_offset:X} past its limit 0x{limit:X}") + self.end_offset = limit + self.size = max(0, limit - self.offset) + + self.data_length = max(0, self.end_offset - self.data_offset) + # Child banks (will be parsed on demand) self._children = None - # Why a child walk stopped early (short strings with offsets); empty when - # every child length fit inside this bank. - self.errors: List[str] = [] - def _parse_header(self): - """Parse the bank header from the buffer.""" - # Parse 2-word header + """Parse the 2-word bank header from the buffer.""" self.length = struct.unpack(self.endian + 'I', self.mm[self.offset:self.offset+4])[0] bank_info = struct.unpack(self.endian + 'I', self.mm[self.offset+4:self.offset+8])[0] @@ -123,7 +147,12 @@ def _parse_header(self): self.type_name = "PhysicsEvent" @classmethod - def from_buffer(cls, buffer: mmap.mmap, offset: int, endian: str = '<') -> 'Bank': + def read_length(cls, mm, offset: int, endian: str) -> int: + """The length field (words that follow the length word) of the structure at offset.""" + return struct.unpack(endian + 'I', mm[offset:offset + 4])[0] + + @classmethod + def from_buffer(cls, buffer: mmap.mmap, offset: int, endian: str = '<', limit: Optional[int] = None) -> 'Bank': """ Create a Bank object from a memory-mapped buffer. @@ -131,11 +160,12 @@ def from_buffer(cls, buffer: mmap.mmap, offset: int, endian: str = '<') -> 'Bank buffer: Memory-mapped buffer containing the bank offset: Byte offset in the buffer where the bank starts endian: Endianness ('<' for little endian, '>' for big endian) + limit: Byte offset the bank must not reach past (see ``__init__``) Returns: Bank object """ - return cls(buffer, offset, endian) + return cls(buffer, offset, endian, limit) def is_container(self) -> bool: """ @@ -144,7 +174,18 @@ def is_container(self) -> bool: Returns: True if this bank contains other banks, False otherwise """ - return self.data_type in (self.TYPE_BANK, self.TYPE_BANK2, self.TYPE_SEGMENT, self.TYPE_SEGMENT2) + return self.data_type in (self.TYPE_BANK, self.TYPE_BANK2, self.TYPE_SEGMENT, self.TYPE_SEGMENT2, + self.TYPE_TAGSEGMENT) + + def child_class(self) -> Optional[type]: + """The structure class of this container's children, or None for a leaf.""" + if self.data_type in (self.TYPE_BANK, self.TYPE_BANK2): + return Bank + if self.data_type in (self.TYPE_SEGMENT, self.TYPE_SEGMENT2): + return Segment + if self.data_type == self.TYPE_TAGSEGMENT: + return TagSegment + return None def get_children(self) -> List['Bank']: """ @@ -162,27 +203,29 @@ def get_children(self) -> List['Bank']: return self._children self._children = [] + child_class = self.child_class() # Walk the children by their length words. Every length is checked # against this bank's end before it is trusted: a child that has no - # room for its two header words, declares length 0 (no room for its - # second header word) or runs past the parent is corrupt data. The - # walk stops there, keeps the children found so far and records why. + # room for its header words, declares length 0 with a 2-word header + # (no room for the second header word) or runs past the parent is + # corrupt data. The walk stops there, keeps the children found so far + # and records why. current_offset = self.data_offset while current_offset < self.end_offset: - if current_offset + self.header_size > self.end_offset: - self.errors.append(f"bank header at 0x{current_offset:X} needs 8 bytes, " - f"parent ends at 0x{self.end_offset:X}") + if current_offset + child_class.HEADER_WORDS * 4 > self.end_offset: + self.errors.append(f"{child_class.STRUCTURE_NAME} header at 0x{current_offset:X} needs " + f"{child_class.HEADER_WORDS * 4} bytes, parent ends at 0x{self.end_offset:X}") break - child_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset + 4])[0] + child_length = child_class.read_length(self.mm, current_offset, self.endian) child_end = current_offset + (child_length + 1) * 4 - if child_length == 0 or child_end > self.end_offset: - self.errors.append(f"bank at 0x{current_offset:X} declares {child_length} words, " + if child_length + 1 < child_class.HEADER_WORDS or child_end > self.end_offset: + self.errors.append(f"{child_class.STRUCTURE_NAME} at 0x{current_offset:X} declares {child_length} words, " f"ends at 0x{child_end:X}, parent ends at 0x{self.end_offset:X}") break - self._children.append(Bank.from_buffer(self.mm, current_offset, self.endian)) + self._children.append(child_class(self.mm, current_offset, self.endian, self.end_offset)) current_offset = child_end return self._children @@ -217,7 +260,7 @@ def to_numpy(self) -> Optional[np.ndarray]: # Create NumPy array from buffer return np.frombuffer( self.mm[self.data_offset:self.data_offset + (num_elements * element_size)], - dtype=dtype + dtype=np.dtype(dtype).newbyteorder(self.endian) ) def to_string(self) -> Optional[str]: @@ -261,7 +304,7 @@ def get_hex_dump(self, max_bytes: int = 64, title: Optional[str] = None) -> str: def __str__(self) -> str: """Return string representation of the bank header.""" - return f"""Bank (0x{self.tag:04x}, {self.type_name}): + return f"""{self.STRUCTURE_NAME} (0x{self.tag:04x}, {self.type_name}): Offset: 0x{self.offset:08x} Length: {self.length} words ({self.size} bytes with the length word) Tag: 0x{self.tag:04x} @@ -271,4 +314,49 @@ def __str__(self) -> str: def __repr__(self) -> str: """Return a string representation for debugging.""" - return f"Bank(offset=0x{self.offset:X}, tag=0x{self.tag:04X}, type=0x{self.data_type:02X})" \ No newline at end of file + return f"{self.STRUCTURE_NAME}(offset=0x{self.offset:X}, tag=0x{self.tag:04X}, type=0x{self.data_type:02X})" + + +class Segment(Bank): + """A segment: one header word ``tag (8) | pad (2) | type (6) | length (16)``, no num. + + Children of a bank of segments (data type 0xd/0x20). Shares every + accessor with ``Bank``; ``num`` is None. + """ + + HEADER_WORDS = 1 + STRUCTURE_NAME = "Segment" + + def _parse_header(self): + header = struct.unpack(self.endian + 'I', self.mm[self.offset:self.offset + 4])[0] + self.tag = (header >> 24) & 0xFF + self.pad = (header >> 22) & 0x3 + self.data_type = (header >> 16) & 0x3F + self.length = header & 0xFFFF + self.num = None + + @classmethod + def read_length(cls, mm, offset: int, endian: str) -> int: + return struct.unpack(endian + 'I', mm[offset:offset + 4])[0] & 0xFFFF + + +class TagSegment(Bank): + """A tagsegment: one header word ``tag (12) | type (4) | length (16)``, no pad, no num. + + Children of a bank of tagsegments (data type 0xc). + """ + + HEADER_WORDS = 1 + STRUCTURE_NAME = "TagSegment" + + def _parse_header(self): + header = struct.unpack(self.endian + 'I', self.mm[self.offset:self.offset + 4])[0] + self.tag = (header >> 20) & 0xFFF + self.pad = 0 + self.data_type = (header >> 16) & 0xF + self.length = header & 0xFFFF + self.num = None + + @classmethod + def read_length(cls, mm, offset: int, endian: str) -> int: + return struct.unpack(endian + 'I', mm[offset:offset + 4])[0] & 0xFFFF diff --git a/pyevio/event.py b/pyevio/event.py index a7dc170..4df279a 100644 --- a/pyevio/event.py +++ b/pyevio/event.py @@ -95,8 +95,9 @@ def get_bank(self)->Bank: Bank object for this event's root bank """ if self._root_bank is None: - # Parse the root bank - self._root_bank = Bank.from_buffer(self.mm, self.offset, self.endian) + # The root bank may not reach past the event's bytes (its length + # word is file data); the event end is the limit. + self._root_bank = Bank.from_buffer(self.mm, self.offset, self.endian, self.end_offset) # For special bank types, return appropriate subclass bank_info = self.get_bank_info() @@ -104,7 +105,7 @@ def get_bank(self)->Bank: if bank_info.get("bank_type") == "ROC Time Slice Bank": from pyevio.roc_time_slice_bank import RocTimeSliceBank try: - self._root_bank = RocTimeSliceBank(self.mm, self.offset, self.endian) + self._root_bank = RocTimeSliceBank(self.mm, self.offset, self.endian, self.end_offset) except Exception as e: # If parsing as specialized bank fails, fall back to generic Bank pass diff --git a/pyevio/roc_time_slice_bank.py b/pyevio/roc_time_slice_bank.py index 70319e8..a297f0d 100644 --- a/pyevio/roc_time_slice_bank.py +++ b/pyevio/roc_time_slice_bank.py @@ -279,7 +279,7 @@ class RocTimeSliceBank(Bank): # Tag value for ROC Time Slice Banks TAG = 0xFF30 - def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<'): + def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<', limit: Optional[int] = None): """ Initialize a RocTimeSliceBank parser. @@ -287,8 +287,9 @@ def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<'): mm: Memory-mapped buffer offset: Byte offset where the bank starts endian: Endianness ('<' for little endian, '>' for big endian) + limit: Byte offset the bank must not reach past (see Bank) """ - super().__init__(mm, offset, endian) + super().__init__(mm, offset, endian, limit) # Validate ROC Time Slice Bank if self.data_type != 0x10: diff --git a/tests/test_bank_scanning.py b/tests/test_bank_scanning.py index 3c97c1a..93e37d3 100644 --- a/tests/test_bank_scanning.py +++ b/tests/test_bank_scanning.py @@ -1,7 +1,9 @@ import mmap import struct -from pyevio.bank import Bank +import pytest + +from pyevio.bank import Bank, Segment, TagSegment class MockMemoryMap: @@ -41,6 +43,18 @@ def evio_bank(tag, data_type, num, payload, endian='<'): return header + payload +def evio_segment(tag, data_type, payload, endian='<'): + """Build a segment: one header word tag (8) | pad (2) | type (6) | length (16), then the payload.""" + assert len(payload) % 4 == 0 + return struct.pack(f"{endian}I", ((tag & 0xFF) << 24) | ((data_type & 0x3F) << 16) | (len(payload) // 4)) + payload + + +def evio_tagsegment(tag, data_type, payload, endian='<'): + """Build a tagsegment: one header word tag (12) | type (4) | length (16), then the payload.""" + assert len(payload) % 4 == 0 + return struct.pack(f"{endian}I", ((tag & 0xFFF) << 20) | ((data_type & 0xF) << 16) | (len(payload) // 4)) + payload + + def print_hex_dump(data, title=None): """Helper function to print a hex dump of data for debugging.""" if title: @@ -262,6 +276,93 @@ def test_real_world_event_structure(self, tmp_path): assert len(children[1].errors) == 1 and "0x50" in children[1].errors[0] assert all(c.tag != 0x000F for c in children + roc_children) + def test_sro_event_segments_are_one_word_structures(self): + """The SIB of an SRO stream frame holds segments (1-word headers), typed by the parent (F45). + + Layout as the hardware writes it: event 0xFF60 (bank of banks) -> + SIB 0xFF31 (bank of segments: TSS 0x32 with frame, ts_lo, ts_hi; AIS + 0x42 with 24 identical words) + ROC bank (bank of banks: stream-info + bank 0xFF30 of segments 0x31 and 0x41 (ushort16 port map), then + payload banks of type 0x00, an empty one with num 1). + """ + tss = evio_segment(0x32, Bank.TYPE_UINT32, struct.pack(" Date: Sun, 11 Oct 2026 00:51:51 -0400 Subject: [PATCH 17/65] Decompress records, pad user headers, bound records to the file, close cleanly F4: Record.buffer is the mmap for a plain record and, for LZ4 / LZ4_BEST / gzip (word 10 bits 28-31), the decompressed bytes built on first access: LZ4 block format fed compressed_length_words*4 - pad3 bytes with the output size index + padded user header + word 9 (word 9 counts the events only); gzip through zlib (wbits 47). Index, user header and events are parsed from that buffer, so event offsets of a compressed record are buffer offsets. EvioFile caches one Record (the last accessed) so a compressed file never sits in memory whole; Record.release() drops the buffer. F8: user header lengths are padded to whole words in first_record_offset and Record.data_start. F5: a final record whose declared length passes EOF is kept, its complete events are walked and ("truncated_tail", declared, present, salvaged) goes to EvioFile.checks; get_total_event_count counts the salvaged events for such a record; bytes that are no record header, or a header the scan cannot step over, end the scan with ("bad_record_header", offset, reason). RecordHeader checks the buffer holds its 8 or 14 words and exposes pad1/pad2/pad3. F7: EvioFile.close() closes the mmap and the file in separate try/finally; a BufferError from a live numpy view is re-raised naming the cause after the file is closed; __exit__ propagates it, __del__ stays silent. Also: pyevio event -r looked the event up with a global index and searched get_records() by identity; it now uses record.get_event. Tests: all 5 F4 golden rows and 4 LZ4 corpus rows flip XFAIL -> PASS; the golden rows also assert record.errors == [] and checks == []; tests/test_record_scanning.py adds synthetic lz4/lz4best/gzip records with pad3, odd user headers at file and record level, a truncated tail with salvage, garbage after a record, a zero-length header, a root bank past its event, and the two close() cases. Co-Authored-By: Claude Fable 5.1 --- pyevio/cli/event.py | 3 +- pyevio/evio_file.py | 121 +++++++++++----- pyevio/record.py | 257 +++++++++++++++++++--------------- pyevio/record_header.py | 14 ++ tests/golden/test_corpus.py | 18 +-- tests/golden/test_golden.py | 30 ++-- tests/test_record_scanning.py | 161 ++++++++++++++++++++- 7 files changed, 426 insertions(+), 178 deletions(-) diff --git a/pyevio/cli/event.py b/pyevio/cli/event.py index b7710b6..907a397 100644 --- a/pyevio/cli/event.py +++ b/pyevio/cli/event.py @@ -87,8 +87,7 @@ def event_command(ctx, filename, event_index, record_index, hexdump, verbose): else: # Record-specific event indexing record = evio_file.get_record(record_index) - event = evio_file.get_event(event_index) - record_index = evio_file.get_records().index(record) + event = record.get_event(event_index) # Display the event information display_event( diff --git a/pyevio/evio_file.py b/pyevio/evio_file.py index a0c4adc..085d17f 100644 --- a/pyevio/evio_file.py +++ b/pyevio/evio_file.py @@ -5,7 +5,7 @@ from datetime import datetime from pyevio.file_header import FileHeader, detect_endian, file_type_name, unsupported_version_error -from pyevio.record import Record +from pyevio.record import Record, padded_to_words from pyevio.record_header import RecordHeader from pyevio.event import Event @@ -26,6 +26,18 @@ class EvioFile: 14-word file header followed by 14-word record headers. Files without a file header (EVIO v4 blocks, v1—3 blocks) raise ``ValueError`` naming the version at open. + + Checks: ``checks`` lists what the record scan found wrong with the file + as tuples whose first item names the check: ``("truncated_tail", + declared_bytes, present_bytes, events_salvaged)`` for a final record + that runs past the end of the file (its complete events are kept), + ``("bad_record_header", offset, message)`` where the scan stopped on + bytes that are no record header. + + Resources: ``close()`` (or the ``with`` block) releases the mmap and the + file. A numpy array or memoryview that still refers to the mmap makes + ``close()`` raise ``BufferError`` after closing the file; drop the views + and call ``close()`` again. """ def __init__(self, filename: str, verbose: bool = False): @@ -49,23 +61,22 @@ def __init__(self, filename: str, verbose: bool = False): self.header_layout, self.header = self._detect_layout() - # Calculate initial offset after file header - self.first_record_offset = self.header.header_length * 4 - - # Skip index array if present - if self.header.index_array_length > 0: - self.first_record_offset += self.header.index_array_length - - # Skip user header if present - if self.header.user_header_length > 0: - self.first_record_offset += self.header.user_header_length - - # Record objects (will be created on demand) - self._records = {} + # The first record follows the file header, its index array and its + # user header (dictionary, first event), which is stored padded to + # whole words although the header gives the unpadded byte count. + self.first_record_offset = (self.header.header_length * 4 + + self.header.index_array_length + + padded_to_words(self.header.user_header_length)) + + # One Record is cached: the one accessed last. A Record owns its + # decompressed buffer and Event objects, so caching every record + # would hold a whole compressed file in memory. + self._cached_record: Optional[Record] = None self._trailer = None # Scan record offsets self._trailer_offset: Optional[int] = None + self.checks: List[tuple] = [] self._record_offsets = self._scan_record_offsets() # Total event count cache @@ -93,15 +104,32 @@ def _detect_layout(self) -> Tuple[str, FileHeader]: block_version = struct.unpack(endian + 'I', self.mm[20:24])[0] & 0xFF raise unsupported_version_error(block_version, f"block header at offset 0, no file header: {self.filename}") + def close(self) -> None: + """Release the mmap and the file. + + The file is closed whatever happens to the mmap. ``mmap.close()`` + raises ``BufferError`` while a numpy array or memoryview exported + from it is alive; that error is re-raised with the cause named, and + the mmap stays open until those views are dropped and ``close()`` is + called again. + """ + mm = getattr(self, 'mm', None) + file = getattr(self, 'file', None) + try: + if mm is not None and not mm.closed: + mm.close() + except BufferError as error: + raise BufferError(f"cannot close the mmap of {self.filename}: a numpy array or memoryview " + f"still refers to it; drop those views, then call close() again") from error + finally: + if file is not None and not file.closed: + file.close() + def __del__(self): - """Cleanup resources when object is destroyed""" + """Release resources at garbage collection; errors are silent here.""" try: - if hasattr(self, 'mm') and self.mm and not getattr(self.mm, 'closed', True): - self.mm.close() - if hasattr(self, 'file') and self.file and not self.file.closed: - self.file.close() - except (ValueError, AttributeError, BufferError): - # Ignore errors during cleanup + self.close() + except Exception: pass def __enter__(self): @@ -109,8 +137,8 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - """Cleanup when exiting context""" - self.__del__() + """Release resources; a BufferError from a live view propagates (see close).""" + self.close() def _scan_record_offsets(self) -> List[int]: """ @@ -123,7 +151,12 @@ def _scan_record_offsets(self) -> List[int]: offset = self.first_record_offset while offset < self.file_size: - record = Record(self.mm, offset, self.header.endian) + try: + record = Record(self.mm, offset, self.header.endian) + except ValueError as error: + # Bytes that are no record header end the scan (F6 tightens this). + self.checks.append(("bad_record_header", offset, str(error))) + break # The trailer closes the file: it lists records, holds no events # and is exposed as `trailer`, never as a data record. @@ -131,11 +164,24 @@ def _scan_record_offsets(self) -> List[int]: self._trailer_offset = offset break - if record.size < record.header_size: - raise ValueError(f"Record at offset 0x{offset:X} declares {record.header.record_length} words, " - f"less than its {record.header.header_length}-word header") + # A record shorter than its header (or an 8-word-short header) + # cannot be stepped over: the scan would stand still. + if record.header.header_length < 8 or record.size < record.header_size: + self.checks.append(("bad_record_header", offset, + f"record declares {record.header.record_length} words " + f"with a {record.header.header_length}-word header")) + break record_offsets.append(offset) + + # A final record cut by the end of the file: keep it, walk its + # complete events and report the byte counts. + if record.is_truncated: + record.index = len(record_offsets) - 1 + salvaged = len(record.scan_events()) + self.checks.append(("truncated_tail", record.declared_end - offset, self.file_size - offset, salvaged)) + break + offset += record.size # Stop if this was the last record. Some CODA writers set the @@ -183,12 +229,10 @@ def get_record(self, index: int) -> Record: if index < 0 or index >= len(self._record_offsets): raise IndexError(f"Record index {index} out of range (0-{len(self._record_offsets)-1})") - # Check if record is already cached - if index not in self._records: - offset = self._record_offsets[index] - self._records[index] = Record(self.mm, offset, self.header.endian, index=index) + if self._cached_record is None or self._cached_record.index != index: + self._cached_record = Record(self.mm, self._record_offsets[index], self.header.endian, index=index) - return self._records[index] + return self._cached_record def get_records(self) -> List[Record]: """ @@ -217,12 +261,17 @@ def get_total_event_count(self) -> int: Total event count """ if self._total_event_count is None: - self._total_event_count = 0 - for record in self.iter_records(): - self._total_event_count += record.event_count + self._total_event_count = sum(self.record_event_count(record) for record in self.iter_records()) return self._total_event_count + @staticmethod + def record_event_count(record: Record) -> int: + """Events a record contributes: the header count, or the complete events present in a truncated tail.""" + if record.is_truncated: + return len(record.scan_events()) + return record.event_count + def get_record_and_event(self, global_index: int) -> Tuple[Record, Event]: """ Get an event by global index across all records. @@ -244,7 +293,7 @@ def get_record_and_event(self, global_index: int) -> Tuple[Record, Event]: for record_idx in range(len(self._record_offsets)): record = self.get_record(record_idx) - event_count = record.event_count + event_count = self.record_event_count(record) # Check if this event is in the current record if current_index + event_count > global_index: diff --git a/pyevio/record.py b/pyevio/record.py index 2b52a85..8825e73 100644 --- a/pyevio/record.py +++ b/pyevio/record.py @@ -1,11 +1,18 @@ import mmap import struct -from typing import List, Tuple, Optional, Dict, Any -from datetime import datetime -from typing import Optional, List, Tuple, Dict, Any +import zlib +from typing import List, Tuple, Optional, Union + +import lz4.block +import numpy as np + from pyevio.record_header import RecordHeader from pyevio.utils import make_hex_dump -import numpy as np + + +def padded_to_words(length_bytes: int) -> int: + """A byte length rounded up to whole 32-bit words, as user headers are stored.""" + return (length_bytes + 3) & ~3 class Record: @@ -15,8 +22,21 @@ class Record: A record contains a header followed by an event index array, optional user header, and multiple events. This class provides methods to access and parse the record structure efficiently. + + Buffers: ``mm`` is the file; ``buffer`` is where the index array, user + header and events live. For an uncompressed record ``buffer`` is ``mm`` + and all offsets are file offsets. For a compressed record (LZ4, LZ4_BEST + or gzip, header word 10) ``buffer`` is the decompressed bytes, built on + first access, and ``index_array_start``, ``data_start``, ``data_end`` and + every event offset are offsets into that buffer. Read event bytes through + ``buffer``, never through ``mm``. """ + COMPRESSION_NONE = 0 + COMPRESSION_LZ4 = 1 + COMPRESSION_LZ4_BEST = 2 + COMPRESSION_GZIP = 3 + def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<', index=-1): """ Initialize a Record object. @@ -25,31 +45,103 @@ def __init__(self, mm: mmap.mmap, offset: int, endian: str = '<', index=-1): mm: Memory-mapped file containing the record offset: Byte offset in the file where the record starts endian: Endianness ('<' for little endian, '>' for big endian) + index: Record index within the file (for reference) """ self.mm = mm self.offset = offset self.endian = endian + self.index = index # Parse the record header self.header = RecordHeader.parse(mm, offset) - # Calculate key positions in the record self.header_size = self.header.header_length * 4 - self.index_array_start = self.offset + self.header_size - self.index_array_end = self.index_array_start + self.header.index_array_length - self.data_start = self.index_array_end + self.header.user_header_length - self.data_end = self.offset + (self.header.record_length * 4) self.size = self.header.record_length * 4 - self.index = index + self.compression_type = self.header.compression_type - # Cache for events (will be populated on demand) - self._events = None - self._event_info = None + # Declared record end against the file: a record that runs past the + # end of the file is truncated, and reads stop at the present bytes. + self.declared_end = self.offset + self.size + self.file_end = min(self.declared_end, len(mm)) + self.is_truncated = self.declared_end > len(mm) # Why an event walk stopped early (short strings with offsets); empty # when every event length fit inside the record. self.errors: List[str] = [] + # The user header is stored padded to whole words; the unpadded length + # in the header word shifts every event by the padding otherwise. + user_header_padded = padded_to_words(self.header.user_header_length) + + self._buffer = None + if self.compression_type == self.COMPRESSION_NONE: + self._buffer = mm + self.index_array_start = self.offset + self.header_size + self.index_array_end = self.index_array_start + self.header.index_array_length + self.data_start = self.index_array_end + user_header_padded + self.data_end = self.file_end + else: + # Layout of the decompressed buffer: index array, user header, events. + self.index_array_start = 0 + self.index_array_end = self.header.index_array_length + self.data_start = self.index_array_end + user_header_padded + self.data_end = self.data_start + self.header.uncompressed_data_length + + # Cache for events (will be populated on demand) + self._events = None + self._event_info = None + + @property + def buffer(self) -> Union[mmap.mmap, bytes]: + """The buffer that holds the index array, user header and events (see class docstring).""" + if self._buffer is None: + self._buffer = self._decompress() + return self._buffer + + def release(self) -> None: + """Drop the decompressed buffer and the Event cache; the next access rebuilds them.""" + if self.compression_type != self.COMPRESSION_NONE: + self._buffer = None + self._events = None + + def _decompress(self) -> bytes: + """Decompress index array + user header + events into one bytes buffer. + + Header facts (verified on the evio C++ and Java writers): the + compressed region starts right after the header; word 10 holds the + compression type in bits 28—31 and the compressed length in words + below; the last word carries pad3 (bits 24—25 of word 5) filler bytes + that are not part of the stream. LZ4 and LZ4_BEST are the LZ4 block + format (no frame) and need the decompressed size up front: word 9 + counts the events only, so the index array and padded user header are + added to it. + """ + compressed_words = self.header.compressed_data_length + compressed_start = self.offset + self.header_size + compressed_end = compressed_start + compressed_words * 4 - self.header.pad3 + if compressed_end > self.file_end: + self.errors.append(f"compressed data declares {compressed_words} words at 0x{compressed_start:X}, " + f"record ends at 0x{self.file_end:X}") + compressed_end = self.file_end + compressed = self.mm[compressed_start:compressed_end] + + try: + if self.compression_type in (self.COMPRESSION_LZ4, self.COMPRESSION_LZ4_BEST): + decompressed = lz4.block.decompress(compressed, uncompressed_size=self.data_end) + elif self.compression_type == self.COMPRESSION_GZIP: + decompressed = zlib.decompress(compressed, wbits=47) # gzip or zlib wrapper + else: + self.errors.append(f"unknown compression type {self.compression_type}") + decompressed = b"" + except (lz4.block.LZ4BlockError, zlib.error, ValueError) as error: + self.errors.append(f"decompression failed (type {self.compression_type}): {error}") + decompressed = b"" + + if len(decompressed) < self.data_end: + self.errors.append(f"decompressed {len(decompressed)} bytes, header declares {self.data_end}") + self.data_end = len(decompressed) + return decompressed + @property def event_count(self) -> int: """Number of events the header declares. A trailer declares 0.""" @@ -65,7 +157,8 @@ def scan_events(self) -> List[Tuple[int, int]]: Scan and parse all events in this record. Returns: - List of tuples (offset, length) for all events in the record + List of tuples (offset, length) for all events in the record; + offsets are into ``buffer`` (file offsets for uncompressed records) """ if self._event_info is None: self._event_info = self._scan_events() @@ -77,19 +170,22 @@ def _scan_events(self) -> List[Tuple[int, int]]: if self.header.is_trailer: return [] + buffer = self.buffer event_info = [] current_offset = self.data_start if self.header.index_array_length > 0: # The index array holds one byte length per event. The header's # event count and the index size are two claims about the same - # number; trust neither beyond the other. + # number; trust neither beyond the other, nor beyond the bytes + # present (a truncated record may cut the index array itself). index_entries = self.header.index_array_length // 4 - event_count = min(self.header.event_count, index_entries) + index_present = max(0, min(self.index_array_end, len(buffer)) - self.index_array_start) // 4 + event_count = min(self.header.event_count, index_entries, index_present) for event_i in range(event_count): length_offset = self.index_array_start + event_i * 4 - event_length = struct.unpack(self.endian + 'I', self.mm[length_offset:length_offset + 4])[0] + event_length = struct.unpack(self.endian + 'I', buffer[length_offset:length_offset + 4])[0] if event_length < 8 or current_offset + event_length > self.data_end: self.errors.append(f"event {event_i} at 0x{current_offset:X} declares {event_length} bytes, " f"record data ends at 0x{self.data_end:X}") @@ -106,7 +202,7 @@ def _scan_events(self) -> List[Tuple[int, int]]: self.errors.append(f"event {len(event_info)} at 0x{current_offset:X} has no room for a bank header, " f"record data ends at 0x{self.data_end:X}") break - bank_length = struct.unpack(self.endian + 'I', self.mm[current_offset:current_offset + 4])[0] + bank_length = struct.unpack(self.endian + 'I', buffer[current_offset:current_offset + 4])[0] event_length = (bank_length + 1) * 4 if bank_length == 0 or current_offset + event_length > self.data_end: self.errors.append(f"event {len(event_info)} at 0x{current_offset:X} declares {event_length} bytes, " @@ -131,10 +227,9 @@ def get_events(self, start_event: Optional[int] = None, end_event: Optional[int] # Scan events only if needed if self._events is None: from pyevio.event import Event # Import here to avoid circular import - event_info = self.scan_events() self._events = [ - Event(self.mm, offset, length, self.endian, i) - for i, (offset, length) in enumerate(event_info) + Event(self.buffer, offset, length, self.endian, i) + for i, (offset, length) in enumerate(self.scan_events()) ] # Apply range filter @@ -159,7 +254,7 @@ def get_event_offsets(self, start_event: Optional[int] = None, end_event: Option end_event: Ending event index, exclusive (default: all events) Returns: - List of tuples (offset, length) for each event + List of tuples (offset, length) for each event; offsets are into ``buffer`` """ event_info = self.scan_events() @@ -176,6 +271,9 @@ def get_event_offsets(self, start_event: Optional[int] = None, end_event: Option return event_info[start_event:end_event] + def _second_word(self, offset: int) -> int: + return struct.unpack(self.endian + 'I', self.buffer[offset + 4:offset + 8])[0] + def events_to_numpy_direct(self, start_event: Optional[int] = None, end_event: Optional[int] = None, signature: Optional[int] = None, event_size_words: Optional[int] = None) -> np.ndarray: """ @@ -195,51 +293,32 @@ def events_to_numpy_direct(self, start_event: Optional[int] = None, end_event: O # Get event offsets and lengths event_info = self.get_event_offsets(start_event, end_event) - if not event_info: - return np.array([], dtype=np.uint32) - if signature is not None: - # Filter events by signature - filtered_info = [] - signature_mask = signature & 0xFFFF # Use only top 16 bits - - for offset, length in event_info: - if length >= 8: # Need at least 2 words - # Get the second word - second_word = struct.unpack(self.endian + 'I', self.mm[offset + 4:offset + 8])[0] - if (second_word >> 16) == signature_mask: - filtered_info.append((offset, length)) - - event_info = filtered_info + # Filter events by the tag in the second word (every event has 8+ bytes) + signature_mask = signature & 0xFFFF + event_info = [(offset, length) for offset, length in event_info + if (self._second_word(offset) >> 16) == signature_mask] if not event_info: return np.array([], dtype=np.uint32) + dtype = np.dtype(np.uint32).newbyteorder(self.endian) + buffer = self.buffer + if event_size_words is not None: # All events have the same size, we can create a regular 2D array - num_events = len(event_info) - result = np.zeros((num_events, event_size_words), dtype=np.uint32) + result = np.zeros((len(event_info), event_size_words), dtype=np.uint32) - for i, (offset, _) in enumerate(event_info): - # Read event data directly into result array with correct endianness - event_data = np.frombuffer( - self.mm[offset:offset + (event_size_words * 4)], - dtype=np.dtype(np.uint32).newbyteorder('>' if self.endian == '>' else '<') - ) - result[i, :len(event_data)] = event_data + for i, (offset, length) in enumerate(event_info): + # Never read past the event: a shorter event leaves zeros. + word_count = min(event_size_words, length // 4) + result[i, :word_count] = np.frombuffer(buffer, dtype=dtype, count=word_count, offset=offset) return result else: # Variable-sized events, create a list of arrays - event_arrays = [] - - for offset, length in event_info: - word_count = length // 4 - event_data = np.frombuffer( - self.mm[offset:offset + length], - dtype=np.uint32 - ) - event_arrays.append(event_data) + event_arrays = [np.frombuffer(buffer, dtype=dtype, count=length // 4, offset=offset) + for offset, length in event_info] # Try to determine if all events are the same size after filtering if all(len(arr) == len(event_arrays[0]) for arr in event_arrays): @@ -269,15 +348,9 @@ def get_event(self, index: int): return events[index] - import numpy as np - def events_to_numpy(self, signature: int = 0xFF60, start_event: Optional[int] = None, end_event: Optional[int] = None, dtype=np.uint32) -> np.ndarray: """ - Convert events with a specific signature to a NumPy array. - - This method efficiently converts events where the second word matches the given signature - to a NumPy array. It avoids slow event-by-event Python loops by taking a vectorized approach - where possible. + Concatenate the words of every event whose tag matches the signature into one NumPy array. Args: signature: Integer signature to match in the second word of events (default: 0xFF60) @@ -288,64 +361,26 @@ def events_to_numpy(self, signature: int = 0xFF60, start_event: Optional[int] = Returns: NumPy array containing all event data matching the signature """ - # Get all events or subset based on start/end parameters - events = self.get_events(start_event, end_event) + signature_mask = signature & 0xFFFF + matching = [(offset, length) for offset, length in self.get_event_offsets(start_event, end_event) + if (self._second_word(offset) >> 16) == signature_mask] - if not events: + if not matching: return np.array([], dtype=dtype) - # Extract offsets and lengths for all events - offsets = np.array([event.offset for event in events], dtype=np.int64) - lengths = np.array([event.length for event in events], dtype=np.int64) - - # Filter out events that are too small - valid_indices = lengths >= 8 - offsets = offsets[valid_indices] - lengths = lengths[valid_indices] - - if len(offsets) == 0: - return np.array([], dtype=dtype) - - # Check which events match the signature - signatures = np.zeros(len(offsets), dtype=np.uint32) - - for i in range(len(offsets)): - # Extract the second word (bytes 4-8) - second_word = int.from_bytes( - self.mm[offsets[i] + 4:offsets[i] + 8], - byteorder='little' if self.endian == '<' else 'big' - ) - signatures[i] = second_word >> 16 - - # Create a mask for events that match our signature - mask = signatures == (signature & 0xFFFF) - matching_offsets = offsets[mask] - matching_lengths = lengths[mask] - - if len(matching_offsets) == 0: - return np.array([], dtype=dtype) - - # Calculate the total size and preallocate array - total_words = np.sum(matching_lengths) // 4 + total_words = sum(length // 4 for _, length in matching) result = np.zeros(total_words, dtype=dtype) + buffer = self.buffer + source_dtype = np.dtype(np.uint32).newbyteorder(self.endian) - # Copy each matching event's data into the result array current_idx = 0 - for i in range(len(matching_offsets)): - offset = matching_offsets[i] - length = matching_lengths[i] + for offset, length in matching: words = length // 4 - - # Use np.frombuffer for efficient memory-to-array conversion - event_data = np.frombuffer( - self.mm[offset:offset + length], - dtype=dtype - ) - - result[current_idx:current_idx + words] = event_data + result[current_idx:current_idx + words] = np.frombuffer(buffer, dtype=source_dtype, count=words, offset=offset) current_idx += words return result + def get_hex_dump(self, word_count: int = 14, title: Optional[str] = None) -> str: """ Generate a hex dump of the record header. @@ -367,4 +402,4 @@ def __str__(self) -> str: def __repr__(self) -> str: """Return a string representation for debugging.""" - return f"Record(offset=0x{self.offset:X}, size={self.size}, events={self.event_count})" \ No newline at end of file + return f"Record(offset=0x{self.offset:X}, size={self.size}, events={self.event_count})" diff --git a/pyevio/record_header.py b/pyevio/record_header.py index 46028b1..1a78dda 100644 --- a/pyevio/record_header.py +++ b/pyevio/record_header.py @@ -43,6 +43,9 @@ def __init__(self): self.version = -1 self.bit_info = -1 self.header_type = -1 + self.pad1 = 0 + self.pad2 = 0 + self.pad3 = 0 self.user_header_length = -1 self.magic_number = -1 self.uncompressed_data_length = 0 @@ -77,6 +80,9 @@ def parse(buffer, offset=0): RecordHeader object with parsed data """ header = RecordHeader() + if offset + 8 * 4 > len(buffer): + raise ValueError(f"Record header at offset 0x{offset:X} needs 8 words, " + f"buffer ends at 0x{len(buffer):X}") reader = BufferReader(buffer, offset) # The first eight words exist in every header layout. @@ -91,6 +97,11 @@ def parse(buffer, offset=0): header.version = bit_info_version & 0xFF header.bit_info = (bit_info_version >> 8) & 0xFFFFF header.header_type = (bit_info_version >> 28) & 0xF + # Padding byte counts: pad1 after the user header, pad2 after the + # events, pad3 after the compressed data (bits 20—25 of word 5). + header.pad1 = (bit_info_version >> 20) & 0x3 + header.pad2 = (bit_info_version >> 22) & 0x3 + header.pad3 = (bit_info_version >> 24) & 0x3 header.user_header_length = reader.read_uint32(6) header.magic_number = reader.read_uint32(7) @@ -98,6 +109,9 @@ def parse(buffer, offset=0): # Words 8—13 exist only in the 14-word layout; reading them from an # 8-word header would take the first event's words as header fields. if header.header_length >= 14: + if offset + 14 * 4 > len(buffer): + raise ValueError(f"Record header at offset 0x{offset:X} declares 14 words, " + f"buffer ends at 0x{len(buffer):X}") header.uncompressed_data_length = reader.read_uint32(8) compression_data = reader.read_uint32(9) diff --git a/tests/golden/test_corpus.py b/tests/golden/test_corpus.py index ff8d84b..7d8d8b4 100644 --- a/tests/golden/test_corpus.py +++ b/tests/golden/test_corpus.py @@ -53,12 +53,10 @@ with open(MANIFEST_PATH) as manifest_file: MANIFEST = yaml.safe_load(manifest_file) -# The LZ4 files fail today: the data records are walked as uncompressed -# bytes (F4). The uncompressed files pass since F3 (trailer counted as a -# record; its index read as events) was fixed in PHASE1. -XFAIL_BY_COMPRESSION = { - "lz4": "F4: LZ4 records walked as uncompressed bytes", -} +# Failures by compression kind. Empty since PHASE1 fixed F3 (trailer counted +# as a record; its index read as events) and F4 (LZ4 records walked as +# uncompressed bytes). A new entry carries the finding number. +XFAIL_BY_COMPRESSION = {} def corpus_params(): @@ -83,9 +81,13 @@ def test_corpus_file(row): scanned_events = 0 past_eof = 0 for record_i in range(record_count): - for offset, length in evio_file.get_record(record_i).scan_events(): + record = evio_file.get_record(record_i) + # Event offsets are into record.buffer: the file for a plain + # record, the decompressed bytes for a compressed one. + buffer_end = file_size if record.buffer is evio_file.mm else len(record.buffer) + for offset, length in record.scan_events(): scanned_events += 1 - if offset + length > file_size: + if offset + length > buffer_end: past_eof += 1 # The counts are the report numbers: print them so `-s` or the log shows them. diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py index fc3c7fc..8c6deaa 100644 --- a/tests/golden/test_golden.py +++ b/tests/golden/test_golden.py @@ -78,16 +78,11 @@ "v13_legacy.evio": 3, } -# Today's failures by case name, decided by running every row with pyevio. -# F4: compressed records are walked as uncompressed bytes: the event walk -# stops at the first garbage length, so fewer events are found. -# Fixed in PHASE1 and no longer listed: F3 (trailer index read as events), -# F9 (version message for legacy files), F39 (HIPO file type id). -XFAIL_BY_CASE = { - "lz4_le.evio": "F4: LZ4 record walked as uncompressed bytes", - "lz4best_le.evio": "F4: LZ4_BEST record walked as uncompressed bytes", - "gzip_le.evio": "F4: gzip record walked as uncompressed bytes", -} +# Failures by case name, decided by running every row with pyevio. Empty +# since PHASE1 fixed F3 (trailer index read as events), F4 (compressed +# records), F9 (version message for legacy files) and F39 (HIPO file type +# id). A new entry carries the finding number. +XFAIL_BY_CASE = {} def manifest_params(): @@ -142,14 +137,21 @@ def test_golden_file(row): with EvioFile(path) as evio_file: header_events = evio_file.get_total_event_count() scanned_events = 0 - past_eof = [] + past_end = [] + errors = [] for record_i in range(evio_file.record_count): record = evio_file.get_record(record_i) + # Event offsets are into record.buffer: the file for a plain + # record, the decompressed bytes for a compressed one. + buffer_end = file_size if record.buffer is evio_file.mm else len(record.buffer) for offset, length in record.scan_events(): scanned_events += 1 - if offset + length > file_size: - past_eof.append((record_i, offset, length)) + if offset + length > buffer_end: + past_end.append((record_i, offset, length)) + errors += record.errors assert header_events == row["event_count"], "record header event counts" assert scanned_events == row["event_count"], "events found by scan_events" - assert past_eof == [], f"events past EOF ({file_size} bytes): {past_eof[:5]}" + assert past_end == [], f"events past their buffer end: {past_end[:5]}" + assert errors == [], f"record errors: {errors[:5]}" + assert evio_file.checks == [], f"file checks: {evio_file.checks}" diff --git a/tests/test_record_scanning.py b/tests/test_record_scanning.py index 468f235..105c28f 100644 --- a/tests/test_record_scanning.py +++ b/tests/test_record_scanning.py @@ -1,5 +1,8 @@ import struct +import zlib +import lz4.block +import numpy as np import pytest from pyevio.evio_file import EvioFile @@ -14,14 +17,37 @@ def make_event(n_payload_words, tag=0xFF60): return struct.pack("<%dI" % len(words), *words) -def make_record(number, events, last, with_index): +def padded(data): + """Pad bytes to whole words, as writers store user headers.""" + return data + bytes(-len(data) % 4) + + +def make_record(number, events, last, with_index, user_header=b"", compression=0): + """A 14-word-header record; ``user_header`` may have an odd length (its padding is implicit). + + ``compression`` 1 (LZ4), 2 (LZ4_BEST) or 3 (gzip) compresses index + padded + user header + events the way the evio writers do: the compressed length in + word 10 counts whole words and pad3 (bits 24—25 of word 5) counts the + filler bytes in the last word. + """ index = struct.pack("<%dI" % len(events), *(len(e) for e in events)) if with_index else b"" data = b"".join(events) bit_info = LAST_RECORD_BIT if last else 0 - length_words = 14 + (len(index) + len(data)) // 4 + body = index + padded(user_header) + data + compression_word = 0 + if compression in (1, 2): + body = lz4.block.compress(body, store_size=False) + elif compression == 3: + body = zlib.compress(body, wbits=31) + if compression: + pad3 = -len(body) % 4 + body += bytes(pad3) + bit_info |= pad3 << 24 + compression_word = (compression << 28) | (len(body) // 4) + length_words = 14 + len(body) // 4 header = struct.pack("<14I", length_words, number, 14, len(events), len(index), - bit_info | 6, 0, MAGIC, len(data), 0, 0, 0, 0, 0) - return header + index + data + bit_info | 6, len(user_header), MAGIC, len(data), compression_word, 0, 0, 0, 0) + return header + body def make_trailer(number, records, with_index): @@ -36,9 +62,10 @@ def make_trailer(number, records, with_index): return header + index -def write_file(path, records, trailer=b""): - header = struct.pack("<14I", 0x4556494F, 1, 14, len(records), 0, 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) - path.write_bytes(header + b"".join(records) + trailer) +def write_file(path, records, trailer=b"", user_header=b""): + """A v6 file: 14-word header, optional (odd-length) user header, records, trailer bytes.""" + header = struct.pack("<14I", 0x4556494F, 1, 14, len(records), 0, 6, len(user_header), MAGIC, 0, 0, 0, 0, 0, 0) + path.write_bytes(header + padded(user_header) + b"".join(records) + trailer) return str(path) @@ -132,6 +159,126 @@ def test_hipo_file_type_id_in_ascii_byte_order(tmp_path): assert event_lengths(f) == [[12]] +def test_user_header_lengths_are_padded_to_words(tmp_path): + """Odd user header lengths at file level (7) and record level (5) shift nothing (F8).""" + records = [make_record(1, [make_event(2), make_event(3)], last=True, with_index=True, user_header=b"abcde")] + with EvioFile(write_file(tmp_path / "padded.evio", records, user_header=b"1234567"), ) as f: + assert f.first_record_offset == 56 + 8 + record = f.get_record(0) + assert record.header.user_header_length == 5 + assert record.data_start == record.index_array_end + 8 + assert [e.length for e in record.get_events()] == [16, 20] + assert [e.get_bank().length for e in record.get_events()] == [3, 4] + assert record.errors == [] + + +@pytest.mark.parametrize("compression", [1, 2, 3], ids=["lz4", "lz4best", "gzip"]) +def test_compressed_record_events_are_read_from_the_decompressed_buffer(tmp_path, compression): + """Events of an LZ4, LZ4_BEST or gzip record come from Record.buffer; offsets are into it (F4).""" + events = [make_event(2), make_event(3), make_event(1)] + records = [make_record(1, events, last=False, with_index=True, user_header=b"xyz", compression=compression), + make_record(2, [make_event(4)], last=True, with_index=True)] + with EvioFile(write_file(tmp_path / "compressed.evio", records)) as f: + compressed = f.get_record(0) + assert compressed.compression_type == compression + assert compressed.buffer is not f.mm + assert len(compressed.buffer) == 12 + 4 + sum(len(e) for e in events) + assert compressed.scan_events() == [(16, 16), (32, 20), (52, 12)] + assert [e.get_bank().get_data() for e in compressed.get_events()] == [ + struct.pack(" Date: Sun, 11 Oct 2026 00:58:43 -0400 Subject: [PATCH 18/65] Read event bytes from Record.buffer and drop views before close MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After PHASE1 batch 2, event offsets of a compressed record index Record.buffer (the decompressed bytes), and EvioFile.close() raises BufferError while a numpy view of the mmap is alive (F7). stream_stats, the Parquet example, pyevio debug and the corpus test read event and bank words from the owning object's buffer (Record.buffer, Bank.mm, Event.mm) instead of the file mmap, bound against that buffer, release each record after use, and delete their last views before the `with` block ends. stream_stats no longer reaches into the removed EvioFile._records cache. F48: the example kept mmap views past the `with` block — the leak F7 is meant to expose. F4 follow-up: callers that read from evio_file.mm would decode garbage on LZ4/gzip files. Co-Authored-By: Claude Fable 5.1 --- examples/fadc250_stream_to_parquet.py | 12 ++++++++---- pyevio/cli/debug.py | 16 ++++++++-------- pyevio/decoders/fadc250_stream.py | 4 +++- pyevio/stream_stats.py | 15 +++++++++------ tests/test_stream_stats.py | 3 ++- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/examples/fadc250_stream_to_parquet.py b/examples/fadc250_stream_to_parquet.py index 8e10f88..24e919d 100644 --- a/examples/fadc250_stream_to_parquet.py +++ b/examples/fadc250_stream_to_parquet.py @@ -43,16 +43,20 @@ def decode(path): for record_i in range(evio_file.record_count): record = evio_file.get_record(record_i) events = [] - # A trailer record declares 0 events; its index holds record positions, not event lengths. + # Event offsets point into record.buffer (the decompressed bytes for LZ4/gzip + # records), never into the file mmap. + buffer = record.buffer for offset, length in record.get_event_offsets()[:record.header.event_count]: - if offset + length > evio_file.file_size: + if offset + length > len(buffer): out_of_bounds += 1 continue - events.append(fs.event_words(evio_file.mm, offset, length, endian)) + events.append(fs.event_words(buffer, offset, length, endian)) chunks.append(fs.decode_frames(events, first_event_index=event_index)) event_index += len(events) stream_hits = fs.concatenate_stream_hits(chunks) - del chunks + # Drop every view of the mmap before the `with` block closes it (EvioFile.close + # raises BufferError while a numpy view is alive). + del chunks, events, buffer record_count = evio_file.record_count order = np.lexsort((stream_hits.t_ns, stream_hits.event_index, stream_hits.frame)) diff --git a/pyevio/cli/debug.py b/pyevio/cli/debug.py index 699c346..3d475ac 100644 --- a/pyevio/cli/debug.py +++ b/pyevio/cli/debug.py @@ -106,7 +106,7 @@ def display_child_banks(console, parent_bank, evio_file, verbose, hexdump, level # Use print_offset_hex for displaying hex data if hexdump: - print_offset_hex(evio_file.mm, child.offset, min(16, child.length), + print_offset_hex(child.mm, child.offset, min(16, child.length), f"Child #{i} at offset 0x{child.offset:X}[{child.offset//4}]") # Show length details for better debugging @@ -145,8 +145,8 @@ def display_data_bank(console, bank, evio_file, hexdump=False): # The length word counts the words that follow it, so the payload is (length - 1) words after the 2-word header. data_offset = bank.offset + 8 - data_end = min(data_offset + 4 * (bank.length - 1), len(evio_file.mm)) - data_words = fadc250_stream.event_words(evio_file.mm, data_offset, max(data_end - data_offset, 0), bank.endian) + data_end = min(data_offset + 4 * (bank.length - 1), len(bank.mm)) + data_words = fadc250_stream.event_words(bank.mm, data_offset, max(data_end - data_offset, 0), bank.endian) if len(data_words) == 0: console.print(f"[bold]Data Bank (No Valid Data)[/bold]") @@ -165,7 +165,7 @@ def display_data_bank(console, bank, evio_file, hexdump=False): # Show hexdump if requested if hexdump and bank.data_length > 0: - print_offset_hex(evio_file.mm, bank.data_offset, min(bank.data_length // 4, 16), + print_offset_hex(bank.mm, bank.data_offset, min(bank.data_length // 4, 16), f"Data Bank at 0x{bank.offset:X}[{bank.offset//4}]") def display_roc_timeslice_info(console, bank, evio_file, payload_filter=None, hexdump=False): @@ -243,7 +243,7 @@ def display_roc_timeslice_info(console, bank, evio_file, payload_filter=None, he # Show hexdump of waveform data if hexdump: - print_offset_hex(evio_file.mm, payload_bank.data_offset, min(16, payload_bank.data_length//4), + print_offset_hex(payload_bank.mm, payload_bank.data_offset, min(16, payload_bank.data_length//4), f"Payload {p_idx} Data at 0x{payload_bank.data_offset:X}[{payload_bank.data_offset//4}]") except Exception as e: console.print(f"[red]Error analyzing waveform data: {str(e)}[/red]") @@ -251,7 +251,7 @@ def display_roc_timeslice_info(console, bank, evio_file, payload_filter=None, he def display_stream_frame(console, evio_file, event_obj): """Decode a streaming time frame (0xFF60) and show its hits per ROC bank.""" - words = fadc250_stream.event_words(evio_file.mm, event_obj.offset, event_obj.length, event_obj.endian) + words = fadc250_stream.event_words(event_obj.mm, event_obj.offset, event_obj.length, event_obj.endian) frame = fadc250_stream.decode_frame(words) console.print(f"[bold]Streaming time frame {frame.frame_number}[/bold], timestamp {frame.timestamp}, " f"{frame.n_hits} hits in {frame.n_roc_banks} ROC banks, " @@ -294,7 +294,7 @@ def display_event_info(console, evio_file, record_obj, event_idx, payload_filter # Show hexdump if requested if hexdump: console.print() - print_offset_hex(evio_file.mm, event_obj.offset, min(30, event_obj.length//4), f"Event #{event_idx} at 0x{event_obj.offset:X}[{event_obj.offset//4}]") + print_offset_hex(event_obj.mm, event_obj.offset, min(30, event_obj.length//4), f"Event #{event_idx} at 0x{event_obj.offset:X}[{event_obj.offset//4}]") # Get bank information @@ -332,7 +332,7 @@ def display_event_info(console, evio_file, record_obj, event_idx, payload_filter # Show hexdump of bank data if requested if hexdump: - print_offset_hex(evio_file.mm, bank.data_offset, min(16, bank.data_length//4), + print_offset_hex(bank.mm, bank.data_offset, min(16, bank.data_length//4), f"Bank Data at 0x{bank.data_offset:X}[{bank.data_offset//4}]") except Exception as e: diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index fb6cf34..40880b1 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -115,7 +115,9 @@ def event_words(mm, offset: int, length: int, endian: str) -> np.ndarray: """Return the words of one event as a ``uint32`` view of ``mm`` in the file's byte order. - ``offset`` and ``length`` are in bytes, as ``Record.get_event_offsets`` returns them. + ``offset`` and ``length`` are in bytes, as ``Record.get_event_offsets`` returns them; + they index ``Record.buffer`` (the file mmap for a plain record, the decompressed bytes + for an LZ4 or gzip record), so pass that buffer, never the file mmap. Raises ``ValueError`` when the range runs past the buffer, so a caller never reads past the file because an index word said so. """ diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index 8b19385..77fb465 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -82,7 +82,6 @@ class FrameScan: def scan_frames(evio_file: EvioFile, max_records: Optional[int] = None) -> FrameScan: """Read frame number and timestamp from the SIB of every event without decoding hits.""" endian = evio_file.header.endian - mm = evio_file.mm rows = [] n_records = n_trailers = n_events = n_other = n_out_of_bounds = 0 events_before = [] @@ -94,15 +93,16 @@ def scan_frames(evio_file: EvioFile, max_records: Optional[int] = None) -> Frame if record_type(record) == RECORD_TYPE_TRAILER: n_trailers += 1 continue + buffer = record.buffer # event offsets are buffer offsets (decompressed bytes for LZ4/gzip records) for event_i, (offset, length) in enumerate(record.get_event_offsets()[:record.header.event_count]): - if offset + length > evio_file.file_size: + if offset + length > len(buffer): n_out_of_bounds += 1 continue n_events += 1 if length < 32: n_other += 1 continue - words = struct.unpack_from(endian + "8I", mm, offset) + words = struct.unpack_from(endian + "8I", buffer, offset) if (words[1] >> 16) != fs.STREAM_EVENT_TAG or (words[3] >> 16) != fs.SIB_TAG or (words[4] >> 24) != fs.SIB_TSS_SEGMENT_TAG: n_other += 1 continue @@ -297,10 +297,13 @@ def _decode_records(evio_file: EvioFile, record_range, events_before_record: np. record = evio_file.get_record(record_i) if record_type(record) == RECORD_TYPE_TRAILER: continue + # Event offsets point into record.buffer: the mmap for a plain record, the + # decompressed bytes for an LZ4/gzip record (F4). Never read them from the mmap. + buffer = record.buffer for offset, length in record.get_event_offsets()[:record.header.event_count]: - if offset + length <= evio_file.file_size: - events.append(fs.event_words(evio_file.mm, offset, length, endian)) - evio_file._records.pop(record_i, None) # free the record cache; a worker visits each record once + if offset + length <= len(buffer): + events.append(fs.event_words(buffer, offset, length, endian)) + record.release() # drop a decompressed buffer early; the views above keep it alive while needed accumulator.absorb(fs.decode_frames(events, first_event_index=first_event_index)) return accumulator diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index 8e17e13..351913e 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -146,9 +146,10 @@ def test_corpus_first_200_records_match_decoder(): chunks = [] for record_i in range(200): record = evio_file.get_record(record_i) - events = [fs.event_words(evio_file.mm, o, l, endian) for o, l in record.get_event_offsets()[:record.header.event_count]] + events = [fs.event_words(record.buffer, o, l, endian) for o, l in record.get_event_offsets()[:record.header.event_count]] chunks.append(fs.decode_frames(events)) decoded = fs.concatenate_stream_hits(chunks) + del events, chunks # views of the mmap must be gone before EvioFile.close() assert stats.n_frames == decoded.n_stream_frames == 2200 assert stats.n_hits == decoded.n_hits From e7a4eaca2124c2f09eb5bbe988131e82b9d2db3a Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:04:49 -0400 Subject: [PATCH 19/65] Read SRO hardware streams as 8-word block chains and salvage the cut tail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit F2: a file with no file type id is read as the JLab SRO stream when every 8-word block header in the chain has version word exactly 4 (no bit-info bits) and the magic at word 7 (D17: the first block of an evio-library v4 file is identical, so the whole chain is walked and any bit-info bit — last-block 0x200, dictionary 0x100 — or another version raises the F9 error; a 14-word v6 record stream without a file header gets its own message). EvioFile.header_layout and FileHeader.layout are "sro-8word", EvioFile.header is FileHeader.for_sro_stream(endian) (version 6 content in a version-4 container, record_count filled from the scan), the record headers carry header_length 8 and RecordHeader.parse accepts that shape, trailer is None, first_record_offset is 0. F6: EvioFile._record_header_problem validates a header before a Record is built: 32 bytes present, no file type id in word 0 (a concatenated file), magic at word 7 (a byte-swapped header is named), header length 8 or 14 with its words present, record length at least the header. A problem ends the scan with ("bad_record_header", offset, reason) in checks; _is_record_at also requires the record to fit the file. D4: a final record whose declared length passes the end of the file stays the last record (is_truncated), its complete events are walked and ("truncated_tail", declared, present, salvaged) goes to checks. Tests: tests/test_sro_layout.py builds SRO-shape files (two blocks of nested stream frames, a third cut mid-event: record count, event count, salvage, checks, bank tree through Segment children), refuses the v4 chains with the last-block or dictionary bit, v3 and v2 chains and a v6 buffer dump, names byte-swapped and garbage blocks and a second file header, and reads the raw files sro_000791.evio.00000/00001 when present: 7892 + 1 records, 86,794 / 86,805 events, the reference tail byte counts, open in under a second, and stream_stats over 20 records (220 frames, stride 4). pyevio stats on the raw file 00000: 764,009,774 fADC250 hits = the PHASE0 reference plus the two salvaged tail events; 25.6 s, 20 workers. Co-Authored-By: Claude Fable 5.1 --- pyevio/evio_file.py | 127 +++++++++++++++++----- pyevio/file_header.py | 45 +++++++- pyevio/record_header.py | 18 +++- tests/test_sro_layout.py | 221 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 382 insertions(+), 29 deletions(-) create mode 100644 tests/test_sro_layout.py diff --git a/pyevio/evio_file.py b/pyevio/evio_file.py index 085d17f..594f087 100644 --- a/pyevio/evio_file.py +++ b/pyevio/evio_file.py @@ -23,9 +23,15 @@ class EvioFile: the file ends in a plain record). Layouts: ``header_layout`` names how the file starts. ``"v6"`` is a - 14-word file header followed by 14-word record headers. Files without a - file header (EVIO v4 blocks, v1—3 blocks) raise ``ValueError`` naming - the version at open. + 14-word file header followed by 14-word record headers. ``"sro-8word"`` + is the JLab SRO hardware stream: no file header, 8-word block headers + with version word exactly 4 (see ``FileHeader``); ``header`` is then a + stand-in ``FileHeader`` with ``layout == "sro-8word"``, each record + header has ``header_length == 8``, ``trailer`` is None, and a final + block cut by the end of the file is the last record with its complete + events (``checks`` reports the byte counts). Any other file without a + file header (EVIO v4 blocks with bit-info bits set, v1—3 blocks) raises + ``ValueError`` naming the version at open. Checks: ``checks`` lists what the record scan found wrong with the file as tuples whose first item names the check: ``("truncated_tail", @@ -78,6 +84,8 @@ def __init__(self, filename: str, verbose: bool = False): self._trailer_offset: Optional[int] = None self.checks: List[tuple] = [] self._record_offsets = self._scan_record_offsets() + if self.header_layout == FileHeader.LAYOUT_SRO: + self.header.record_count = len(self._record_offsets) # Total event count cache self._total_event_count = None @@ -87,10 +95,10 @@ def _detect_layout(self) -> Tuple[str, FileHeader]: Every EVIO header layout carries the magic word at word 7, so the byte order comes from there. A file type id in word 0 means a v6 file - header. Anything else is a bare block or record header at offset 0: - its version sits in the low byte of word 5. Only version 6 with a - file header is read here; other versions raise the one unsupported- - version error. + header. Anything else is a bare block header chain at offset 0: the + SRO hardware stream (every block header version 4 with no bit-info + bits) is read; any other version, or a v4 chain with bit-info bits + set, raises the one unsupported-version error. """ endian = detect_endian(self.mm, 0) if endian is None: @@ -99,10 +107,50 @@ def _detect_layout(self) -> Tuple[str, FileHeader]: first_word = struct.unpack(endian + 'I', self.mm[0:4])[0] if file_type_name(first_word) is not None: - return "v6", FileHeader.from_buffer(self.mm, 0) + return FileHeader.LAYOUT_V6, FileHeader.from_buffer(self.mm, 0) - block_version = struct.unpack(endian + 'I', self.mm[20:24])[0] & 0xFF - raise unsupported_version_error(block_version, f"block header at offset 0, no file header: {self.filename}") + self._require_sro_block_chain(endian) + return FileHeader.LAYOUT_SRO, FileHeader.for_sro_stream(endian) + + def _require_sro_block_chain(self, endian: str) -> None: + """Raise the unsupported-version error unless every block header has the SRO shape. + + The first block of a v4 file written by the evio library is identical + to an SRO block (version 4, bit-info 0, header length 8), so the + whole chain is walked: a v4 file sets the last-block bit (0x200) on + its final block or the dictionary bit (0x100) on its first. The walk + reads 8 words per block and stops at the end of the file, at a block + cut by it, or at bytes that are no block header (the record scan + reports those). + """ + offset = 0 + header_count = 0 + while offset + 32 <= self.file_size: + words = struct.unpack(endian + '8I', self.mm[offset:offset + 32]) + length_words, _, header_length, _, _, bit_info_version, _, magic = words + if magic != RecordHeader.MAGIC_NUMBER: + break + version = bit_info_version & 0xFF + if header_length == 14 and version == 6: + # A v6 record stream with no file header (a buffer dump): not an SRO block. + raise ValueError(f"EVIO version 6 record stream without a file header is not supported " + f"(14-word record header at offset 0x{offset:X} of {self.filename}); pyevio reads " + f"EVIO version 6 files with a file header and SRO streaming files. Convert the " + f"buffer with the evio tools (evio2xml, eviocopy) or read it with the evio library.") + if header_length != 8: + break + if version != 4: + raise unsupported_version_error(version, f"block header at offset 0x{offset:X}, no file header: {self.filename}") + if not RecordHeader.is_sro_block_word(bit_info_version): + raise unsupported_version_error(4, f"block header at offset 0x{offset:X} has bit-info 0x{bit_info_version >> 8:X}, " + f"an evio-library v4 file rather than an SRO stream: {self.filename}") + header_count += 1 + if length_words < 8: + break + offset += length_words * 4 + if header_count == 0: + block_version = struct.unpack(endian + 'I', self.mm[20:24])[0] & 0xFF + raise unsupported_version_error(block_version, f"block header at offset 0, no file header: {self.filename}") def close(self) -> None: """Release the mmap and the file. @@ -151,11 +199,17 @@ def _scan_record_offsets(self) -> List[int]: offset = self.first_record_offset while offset < self.file_size: - try: - record = Record(self.mm, offset, self.header.endian) - except ValueError as error: - # Bytes that are no record header end the scan (F6 tightens this). - self.checks.append(("bad_record_header", offset, str(error))) + # Bytes that are no record header (garbage, a second file header + # of a concatenated file, a header the scan cannot step over) end + # the scan with a check instead of a record. + problem = self._record_header_problem(offset) + if problem is None: + try: + record = Record(self.mm, offset, self.header.endian) + except ValueError as error: + problem = str(error) + if problem is not None: + self.checks.append(("bad_record_header", offset, problem)) break # The trailer closes the file: it lists records, holds no events @@ -164,14 +218,6 @@ def _scan_record_offsets(self) -> List[int]: self._trailer_offset = offset break - # A record shorter than its header (or an 8-word-short header) - # cannot be stepped over: the scan would stand still. - if record.header.header_length < 8 or record.size < record.header_size: - self.checks.append(("bad_record_header", offset, - f"record declares {record.header.record_length} words " - f"with a {record.header.header_length}-word header")) - break - record_offsets.append(offset) # A final record cut by the end of the file: keep it, walk its @@ -201,12 +247,39 @@ def trailer(self) -> Optional[Record]: self._trailer = Record(self.mm, self._trailer_offset, self.header.endian) return self._trailer + def _record_header_problem(self, offset: int) -> Optional[str]: + """Why no record header can start at offset, or None when one can. + + A record header is 8 or 14 words with the magic at word 7, a record + length of at least the header, and no file type id in word 0 (that + is a file header, as in two files concatenated). The record length + may run past the end of the file: that is a truncated tail, which + the scan keeps as the last record. + """ + if offset + 32 > self.file_size: + return f"{self.file_size - offset} bytes left, a record header needs 32" + words = struct.unpack(self.header.endian + '8I', self.mm[offset:offset + 32]) + length_words, _, header_length, _, _, _, _, magic = words + if file_type_name(words[0]) is not None: + return f"file header ({file_type_name(words[0])}) where a record header should start" + if magic != RecordHeader.MAGIC_NUMBER: + swapped = int.from_bytes(magic.to_bytes(4, "little"), "big") + hint = " (byte-swapped record header)" if swapped == RecordHeader.MAGIC_NUMBER else "" + return f"no magic number at word 7 (0x{magic:08X}){hint}" + if header_length not in (8, 14): + return f"header length {header_length}, expected 8 or 14" + if offset + header_length * 4 > self.file_size: + return f"{self.file_size - offset} bytes left, the {header_length}-word header needs {header_length * 4}" + if length_words < header_length: + return f"record length {length_words} words is shorter than its {header_length}-word header" + return None + def _is_record_at(self, offset: int) -> bool: - """Check whether a record header (magic word in word 7) starts at offset.""" - if offset + RecordHeader.HEADER_SIZE > self.file_size: + """Whether a whole record (valid header, length inside the file) starts at offset.""" + if self._record_header_problem(offset) is not None: return False - magic = struct.unpack(self.header.endian + 'I', self.mm[offset + 28:offset + 32])[0] - return magic == RecordHeader.MAGIC_NUMBER + length_words = struct.unpack(self.header.endian + 'I', self.mm[offset:offset + 4])[0] + return offset + length_words * 4 <= self.file_size @property def record_count(self) -> int: diff --git a/pyevio/file_header.py b/pyevio/file_header.py index a3d6d4e..3d3bb8e 100644 --- a/pyevio/file_header.py +++ b/pyevio/file_header.py @@ -55,6 +55,19 @@ def unsupported_version_error(version: int, detail: str = "") -> ValueError: class FileHeader: """ Parses and represents an EVIO v6 file header. + + ``layout`` names the container the header describes: + + - ``"v6"`` — the 14-word file header read from the file, followed by + 14-word record headers. + - ``"sro-8word"`` — the JLab SRO hardware stream: no file header at all, + 8-word block headers ``{length, block number, 8, event count, 0, 4, + 0, magic}`` whose version word says 4 with no bit-info bits. The + events are EVIO v6 streaming content (tag 0xFF60 frames), so + ``version`` reports 6 and ``container_version`` keeps the 4 the block + headers carry. Every field that only a file header could supply + (file number, user register, trailer position) is 0; + ``record_count`` is filled from the record scan. """ # EVIO magic number and bytes @@ -64,8 +77,13 @@ class FileHeader: # Size of file header in bytes HEADER_SIZE = 56 # 14 words * 4 bytes + LAYOUT_V6 = "v6" + LAYOUT_SRO = "sro-8word" + def __init__(self): """Initialize an empty FileHeader object""" + self.layout = self.LAYOUT_V6 + self.container_version = None self.file_type_id = None self.file_type = None self.file_number = None @@ -136,6 +154,7 @@ def from_buffer(buffer: mmap.mmap, offset: int = 0) -> 'FileHeader': if header.version != 6: raise unsupported_version_error(header.version, "file header") + header.container_version = header.version # Parse bit_info fields header.has_dictionary = bool((header.bit_info >> 0) & 1) # Bit 8 @@ -144,6 +163,29 @@ def from_buffer(buffer: mmap.mmap, offset: int = 0) -> 'FileHeader': return header + @staticmethod + def for_sro_stream(endian: str) -> 'FileHeader': + """The stand-in header of an SRO hardware stream (layout ``"sro-8word"``, see the class docstring).""" + header = FileHeader() + header.layout = FileHeader.LAYOUT_SRO + header.endian = endian + header.file_type_id = 0 + header.file_type = "SRO" + header.file_number = 0 + header.header_length = 0 + header.record_count = 0 + header.index_array_length = 0 + header.bit_info = 0 + header.version = 6 + header.container_version = 4 + header.user_header_length = 0 + header.magic_number = MAGIC_NUMBER + header.user_register = 0 + header.trailer_position = 0 + header.user_integer1 = 0 + header.user_integer2 = 0 + return header + def get_hex_dump(self, buffer: mmap.mmap, offset: int = 0) -> str: """ Generate a hex dump of the raw header bytes. @@ -163,8 +205,9 @@ def __str__(self) -> str: endian_str = "Little Endian" if self.endian == '<' else "Big Endian" return f"""EVIO File Header: + Layout: {self.layout} Magic Number: 0x{self.magic_number:08x} - Version: {self.version} + Version: {self.version} (container {self.container_version}) Endianness: {endian_str} File Type ID: 0x{self.file_type_id:08x} ({self.file_type or "Unknown"}) File Number: {self.file_number} diff --git a/pyevio/record_header.py b/pyevio/record_header.py index 1a78dda..438c12d 100644 --- a/pyevio/record_header.py +++ b/pyevio/record_header.py @@ -58,6 +58,17 @@ def __init__(self): self.has_first_event = False self.event_type = f"NeverInitialized" + # Word 5 of an SRO hardware block header: version 4 and nothing else. A + # v4 file written by the evio library sets bit-info bits somewhere in its + # chain (last-block 0x200, dictionary 0x100), which is how the two are + # told apart (EvioFile._detect_layout). + SRO_BLOCK_WORD = 0x00000004 + + @staticmethod + def is_sro_block_word(bit_info_version: int) -> bool: + """True when word 5 is exactly version 4 with no bit-info bits.""" + return bit_info_version == RecordHeader.SRO_BLOCK_WORD + @property def is_trailer(self) -> bool: """True for the trailer record that closes a file (header species 3). @@ -124,7 +135,12 @@ def parse(buffer, offset=0): if header.magic_number != RecordHeader.MAGIC_NUMBER: raise ValueError(f"Invalid record magic number: 0x{header.magic_number:08x}, expected 0x{RecordHeader.MAGIC_NUMBER:08x}") - if header.version != 6: + # Version 6 is the record header; the SRO hardware block header is + # the one other shape read: exactly 8 words, version 4, no bit-info + # bits (see RecordHeader.is_sro_block_word). Any other version is a + # legacy block that EvioFile refuses at open. + if header.version != 6 and not (header.header_length == 8 + and RecordHeader.is_sro_block_word(bit_info_version)): raise ValueError(f"Unsupported EVIO version in record at offset 0x{offset:X}: " f"version {header.version}, expected 6") diff --git a/tests/test_sro_layout.py b/tests/test_sro_layout.py new file mode 100644 index 0000000..165b9e4 --- /dev/null +++ b/tests/test_sro_layout.py @@ -0,0 +1,221 @@ +"""SRO hardware stream layout: 8-word block headers, no file header, truncated tail (F2, F6, D4). + +The JLab SRO writers produce EVIO v6 streaming content in EVIO4-style block +containers: block header ``{length, block number, 8, event count, 0, 4, 0, +0xc0da0100}`` with the version word exactly 4, no index array, no last-block +bit, and (on three of four files of run 791) a final block cut by the end of +the file. ``write_sro_file`` builds such files; the last tests read the real +file when it is present. +""" + +import os +import struct +import time + +import pytest + +from pyevio.evio_file import EvioFile + +MAGIC = 0xc0da0100 +RAW_SRO_DIR = "/data/sro_boyarinov_data_2026" + + +def bank(tag, data_type, num, payload_words): + """An EVIO bank as words: length (words after it), header word, payload.""" + return [len(payload_words) + 1, (tag << 16) | (data_type << 8) | num] + list(payload_words) + + +def segment(tag, data_type, payload_words): + return [(tag << 24) | (data_type << 16) | len(payload_words)] + list(payload_words) + + +def stream_frame(frame_number, hits_per_port): + """One 0xFF60 frame: SIB (TSS + AIS segments) and one ROC bank with payload banks.""" + sib = bank(0xFF31, 0x20, 0, segment(0x32, 1, [frame_number, frame_number * 65536, 0]) + segment(0x42, 1, [0x00070021] * 4)) + info = bank(0xFF30, 0x20, 0x21, segment(0x31, 1, [frame_number, frame_number * 65536, 0]) + segment(0x41, 5, [1 | (3 << 16)])) + payloads = [] + for port, n_hits in hits_per_port: + payloads += bank(port, 0x00, 0 if n_hits else 1, [0x1000 + i for i in range(n_hits)]) + roc = bank(7, 0x10, 0x21, info + payloads) + return bank(0xFF60, 0x10, 0, sib + roc) + + +def sro_block(number, events, version_word=4): + body = [w for event in events for w in event] + header = [8 + len(body), number, 8, len(events), 0, version_word, 0, MAGIC] + return struct.pack("<%dI" % (8 + len(body)), *(header + body)) + + +def write_sro_file(path, blocks, drop_tail_bytes=0): + """Blocks back to back, no file header; ``drop_tail_bytes`` cuts the last block short.""" + data = b"".join(blocks) + if drop_tail_bytes: + data = data[:len(data) - drop_tail_bytes] + path.write_bytes(data) + return str(path) + + +EVENTS_A = [stream_frame(0, [(1, 3), (3, 0)]), stream_frame(4, [(1, 1), (3, 2)])] +EVENTS_B = [stream_frame(8, [(1, 0), (3, 0)]), stream_frame(12, [(1, 5), (3, 1)]), stream_frame(16, [(1, 2), (3, 2)])] +EVENTS_C = [stream_frame(20, [(1, 4), (3, 4)]), stream_frame(24, [(1, 1), (3, 1)]), stream_frame(28, [(1, 2), (3, 0)])] + + +def test_sro_file_reads_as_8word_records(tmp_path): + blocks = [sro_block(1, EVENTS_A), sro_block(2, EVENTS_B)] + with EvioFile(write_sro_file(tmp_path / "sro.evio", blocks)) as f: + assert f.header_layout == "sro-8word" + assert f.header.layout == "sro-8word" + assert f.header.endian == "<" + assert (f.header.version, f.header.container_version, f.header.file_type) == (6, 4, "SRO") + assert f.header.record_count == 2 + assert f.first_record_offset == 0 + assert f.trailer is None + assert f.checks == [] + assert f.record_count == 2 + assert [f.get_record(i).header.header_length for i in range(2)] == [8, 8] + assert [f.get_record(i).header.record_number for i in range(2)] == [1, 2] + assert [f.get_record(i).event_count for i in range(2)] == [2, 3] + assert f.get_total_event_count() == 5 + + record = f.get_record(1) + assert record.buffer is f.mm + assert record.data_start == len(blocks[0]) + 32 + assert record.get_event_offsets() == [(record.data_start + sum(len(e) * 4 for e in EVENTS_B[:i]), len(EVENTS_B[i]) * 4) + for i in range(3)] + assert record.errors == [] + for event, words in zip(record.get_events(), EVENTS_B): + root = event.get_bank() + assert (root.tag, root.length) == (0xFF60, words[0]) + sib, roc = root.get_children() + assert [s.tag for s in sib.get_children()] == [0x32, 0x42] + assert [c.tag for c in roc.get_children()] == [0xFF30, 1, 3] + assert root.errors == [] and sib.errors == [] and roc.errors == [] + + +def test_sro_truncated_tail_keeps_complete_events(tmp_path): + """A final block cut mid-event keeps its complete events; checks reports the bytes (D4).""" + blocks = [sro_block(1, EVENTS_A), sro_block(2, EVENTS_B), sro_block(3, EVENTS_C)] + cut = len(EVENTS_C[2]) * 4 - 8 # the third event loses all but its first two words + with EvioFile(write_sro_file(tmp_path / "sro_tail.evio", blocks, drop_tail_bytes=cut)) as f: + assert f.record_count == 3 + tail = f.get_record(2) + assert tail.is_truncated + assert tail.event_count == 3 # the header's claim + assert len(tail.get_event_offsets()) == 2 + assert [e.get_bank().tag for e in tail.get_events()] == [0xFF60, 0xFF60] + assert len(tail.errors) == 1 and "record data ends" in tail.errors[0] + assert f.checks == [("truncated_tail", len(blocks[2]), len(blocks[2]) - cut, 2)] + assert f.get_total_event_count() == 2 + 3 + 2 + assert f.get_record_and_event(6)[1].get_bank().get_children()[0].get_children()[0].to_numpy()[0] == 24 + with pytest.raises(IndexError): + f.get_record_and_event(7) + + +def test_sro_tail_cut_inside_the_header(tmp_path): + """Fewer than 8 words left after the last complete block: no record, one check.""" + blocks = [sro_block(1, EVENTS_A), sro_block(2, EVENTS_B)] + data = b"".join(blocks) + struct.pack("<3I", 500, 3, 8) + path = tmp_path / "sro_short.evio" + path.write_bytes(data) + with EvioFile(str(path)) as f: + assert f.record_count == 2 + assert f.checks == [("bad_record_header", len(data) - 12, "12 bytes left, a record header needs 32")] + + +def test_byte_swapped_block_is_named_in_the_check(tmp_path): + """A block in the other byte order is no record for this file; the check says so.""" + swapped = sro_block(2, EVENTS_B) + swapped = b"".join(swapped[i:i + 4][::-1] for i in range(0, len(swapped), 4)) + with EvioFile(write_sro_file(tmp_path / "sro_swapped.evio", [sro_block(1, EVENTS_A), swapped])) as f: + assert f.record_count == 1 + assert "byte-swapped record header" in f.checks[0][2] + + +def test_v6_record_stream_without_file_header_is_refused(tmp_path): + """A buffer dump (14-word v6 record headers, no file header) is not an SRO block chain.""" + event = struct.pack("<4I", 3, 0xFF601000, 1, 2) + record = struct.pack("<14I", 14 + 1 + 4, 1, 14, 1, 4, 6, 0, MAGIC, 16, 0, 0, 0, 0, 0) + struct.pack(" Date: Sun, 11 Oct 2026 01:14:13 -0400 Subject: [PATCH 20/65] Read bare v6 record streams, publish record_header_problem, show checks in info A bare stream of 14-word version-6 records with no file header (an evio writer buffer, the golden .dump rows) opens as layout "v6-records" with first_record_offset 0 and the stand-in FileHeader.for_record_stream(endian) (record_count filled from the scan); the dictionary in the record user header is skipped by the padded user header length, as for any record. EvioFile.record_header_problem(offset) is public, for a record table's "header quirks" column: the same wording the scan stores in checks. pyevio info prints the layout, the content and container versions when they differ, and a File Checks section (truncated tail with byte counts and events kept, bad record header with offset and reason) via describe_check(). Tests: the four .dump golden rows flip from skip to pass with their manifest event counts and assert layout "v6-records"; test_sro_layout.py adds a synthetic two-record buffer dump and a CliRunner test of pyevio info on the truncated synthetic SRO file. Co-Authored-By: Claude Fable 5.1 --- pyevio/cli/info.py | 27 ++++++++++++++++++++++-- pyevio/evio_file.py | 42 +++++++++++++++++++++---------------- pyevio/file_header.py | 27 ++++++++++++++++++------ tests/golden/test_golden.py | 10 +++++---- tests/test_sro_layout.py | 38 ++++++++++++++++++++++++++++----- 5 files changed, 109 insertions(+), 35 deletions(-) diff --git a/pyevio/cli/info.py b/pyevio/cli/info.py index 69a6ccb..291748a 100644 --- a/pyevio/cli/info.py +++ b/pyevio/cli/info.py @@ -38,8 +38,12 @@ def info_command(ctx, filename, verbose, hexdump, full): console.print() # Add header fields to the table + table.add_row("Layout", header.layout) table.add_row("Magic Number", f"EVIO (0x{header.magic_number:08X})") - table.add_row("Format Version", str(header.version)) + version = str(header.version) + if header.container_version != header.version: + version += f" (content; block headers say {header.container_version})" + table.add_row("Format Version", version) table.add_row("Endianness", "Little" if header.endian == '<' else "Big") table.add_row("Record Count", str(evio_file.record_count)) table.add_row("Index Array Size", f"{header.index_array_length // 8} entries") @@ -97,4 +101,23 @@ def info_command(ctx, filename, verbose, hexdump, full): console.print(f"Total Records: {evio_file.record_count}") total_events = evio_file.get_total_event_count() console.print(f"Total Events: {total_events}") - console.print(f"File Size: {evio_file.file_size / (1024*1024):.2f} MB") \ No newline at end of file + console.print(f"File Size: {evio_file.file_size / (1024*1024):.2f} MB") + + console.print("\n[bold]File Checks:[/bold]") + if not evio_file.checks: + console.print("none") + for check in evio_file.checks: + console.print(describe_check(check)) + + +def describe_check(check: tuple) -> str: + """One line for an EvioFile.checks entry (see EvioFile for the tuple shapes).""" + name = check[0] + if name == "truncated_tail": + _, declared, present, salvaged = check + return (f"truncated_tail: the last record is cut by the end of the file — " + f"declared {declared} bytes, {present} present, {salvaged} complete events kept") + if name == "bad_record_header": + _, offset, reason = check + return f"bad_record_header: record scan stopped at offset 0x{offset:X} — {reason}" + return f"{name}: {check[1:]}" \ No newline at end of file diff --git a/pyevio/evio_file.py b/pyevio/evio_file.py index 594f087..3b85a51 100644 --- a/pyevio/evio_file.py +++ b/pyevio/evio_file.py @@ -23,7 +23,9 @@ class EvioFile: the file ends in a plain record). Layouts: ``header_layout`` names how the file starts. ``"v6"`` is a - 14-word file header followed by 14-word record headers. ``"sro-8word"`` + 14-word file header followed by 14-word record headers. ``"v6-records"`` + is the same record stream with no file header (a buffer written by the + evio writers); ``header`` is then a stand-in ``FileHeader``. ``"sro-8word"`` is the JLab SRO hardware stream: no file header, 8-word block headers with version word exactly 4 (see ``FileHeader``); ``header`` is then a stand-in ``FileHeader`` with ``layout == "sro-8word"``, each record @@ -84,7 +86,7 @@ def __init__(self, filename: str, verbose: bool = False): self._trailer_offset: Optional[int] = None self.checks: List[tuple] = [] self._record_offsets = self._scan_record_offsets() - if self.header_layout == FileHeader.LAYOUT_SRO: + if self.header_layout != FileHeader.LAYOUT_V6: self.header.record_count = len(self._record_offsets) # Total event count cache @@ -95,10 +97,11 @@ def _detect_layout(self) -> Tuple[str, FileHeader]: Every EVIO header layout carries the magic word at word 7, so the byte order comes from there. A file type id in word 0 means a v6 file - header. Anything else is a bare block header chain at offset 0: the - SRO hardware stream (every block header version 4 with no bit-info - bits) is read; any other version, or a v4 chain with bit-info bits - set, raises the one unsupported-version error. + header. Anything else is a bare header chain at offset 0: a 14-word + version-6 header starts a bare v6 record stream; the SRO hardware + stream (every block header version 4 with no bit-info bits) is read + as 8-word blocks; any other version, or a v4 chain with bit-info + bits set, raises the one unsupported-version error. """ endian = detect_endian(self.mm, 0) if endian is None: @@ -109,6 +112,11 @@ def _detect_layout(self) -> Tuple[str, FileHeader]: if file_type_name(first_word) is not None: return FileHeader.LAYOUT_V6, FileHeader.from_buffer(self.mm, 0) + header_length = struct.unpack(endian + 'I', self.mm[8:12])[0] + version = struct.unpack(endian + 'I', self.mm[20:24])[0] & 0xFF + if header_length == 14 and version == 6: + return FileHeader.LAYOUT_V6_RECORDS, FileHeader.for_record_stream(endian) + self._require_sro_block_chain(endian) return FileHeader.LAYOUT_SRO, FileHeader.for_sro_stream(endian) @@ -128,17 +136,9 @@ def _require_sro_block_chain(self, endian: str) -> None: while offset + 32 <= self.file_size: words = struct.unpack(endian + '8I', self.mm[offset:offset + 32]) length_words, _, header_length, _, _, bit_info_version, _, magic = words - if magic != RecordHeader.MAGIC_NUMBER: + if magic != RecordHeader.MAGIC_NUMBER or header_length != 8: break version = bit_info_version & 0xFF - if header_length == 14 and version == 6: - # A v6 record stream with no file header (a buffer dump): not an SRO block. - raise ValueError(f"EVIO version 6 record stream without a file header is not supported " - f"(14-word record header at offset 0x{offset:X} of {self.filename}); pyevio reads " - f"EVIO version 6 files with a file header and SRO streaming files. Convert the " - f"buffer with the evio tools (evio2xml, eviocopy) or read it with the evio library.") - if header_length != 8: - break if version != 4: raise unsupported_version_error(version, f"block header at offset 0x{offset:X}, no file header: {self.filename}") if not RecordHeader.is_sro_block_word(bit_info_version): @@ -202,7 +202,7 @@ def _scan_record_offsets(self) -> List[int]: # Bytes that are no record header (garbage, a second file header # of a concatenated file, a header the scan cannot step over) end # the scan with a check instead of a record. - problem = self._record_header_problem(offset) + problem = self.record_header_problem(offset) if problem is None: try: record = Record(self.mm, offset, self.header.endian) @@ -247,7 +247,7 @@ def trailer(self) -> Optional[Record]: self._trailer = Record(self.mm, self._trailer_offset, self.header.endian) return self._trailer - def _record_header_problem(self, offset: int) -> Optional[str]: + def record_header_problem(self, offset: int) -> Optional[str]: """Why no record header can start at offset, or None when one can. A record header is 8 or 14 words with the magic at word 7, a record @@ -255,6 +255,12 @@ def _record_header_problem(self, offset: int) -> Optional[str]: is a file header, as in two files concatenated). The record length may run past the end of the file: that is a truncated tail, which the scan keeps as the last record. + + The record scan calls this before building each ``Record``; the + reason of the header that ended the scan is in ``checks`` as + ``("bad_record_header", offset, reason)``. Call it on any offset + (a record table's "header quirks" column, a hex view) to get the + same wording for that position. """ if offset + 32 > self.file_size: return f"{self.file_size - offset} bytes left, a record header needs 32" @@ -276,7 +282,7 @@ def _record_header_problem(self, offset: int) -> Optional[str]: def _is_record_at(self, offset: int) -> bool: """Whether a whole record (valid header, length inside the file) starts at offset.""" - if self._record_header_problem(offset) is not None: + if self.record_header_problem(offset) is not None: return False length_words = struct.unpack(self.header.endian + 'I', self.mm[offset:offset + 4])[0] return offset + length_words * 4 <= self.file_size diff --git a/pyevio/file_header.py b/pyevio/file_header.py index 3d3bb8e..366df85 100644 --- a/pyevio/file_header.py +++ b/pyevio/file_header.py @@ -60,14 +60,19 @@ class FileHeader: - ``"v6"`` — the 14-word file header read from the file, followed by 14-word record headers. + - ``"v6-records"`` — a bare stream of 14-word v6 records with no file + header, as the evio writers produce into a buffer (``.dump`` files). - ``"sro-8word"`` — the JLab SRO hardware stream: no file header at all, 8-word block headers ``{length, block number, 8, event count, 0, 4, 0, magic}`` whose version word says 4 with no bit-info bits. The events are EVIO v6 streaming content (tag 0xFF60 frames), so ``version`` reports 6 and ``container_version`` keeps the 4 the block - headers carry. Every field that only a file header could supply - (file number, user register, trailer position) is 0; - ``record_count`` is filled from the record scan. + headers carry. + + For the two layouts without a file header the header is a stand-in: + every field only a file header could supply (file number, user + register, trailer position) is 0 and ``record_count`` is filled from + the record scan. """ # EVIO magic number and bytes @@ -78,6 +83,7 @@ class FileHeader: HEADER_SIZE = 56 # 14 words * 4 bytes LAYOUT_V6 = "v6" + LAYOUT_V6_RECORDS = "v6-records" LAYOUT_SRO = "sro-8word" def __init__(self): @@ -166,18 +172,27 @@ def from_buffer(buffer: mmap.mmap, offset: int = 0) -> 'FileHeader': @staticmethod def for_sro_stream(endian: str) -> 'FileHeader': """The stand-in header of an SRO hardware stream (layout ``"sro-8word"``, see the class docstring).""" + return FileHeader._stand_in(FileHeader.LAYOUT_SRO, endian, container_version=4, file_type="SRO") + + @staticmethod + def for_record_stream(endian: str) -> 'FileHeader': + """The stand-in header of a bare v6 record stream (layout ``"v6-records"``, see the class docstring).""" + return FileHeader._stand_in(FileHeader.LAYOUT_V6_RECORDS, endian, container_version=6, file_type="EVIO records") + + @staticmethod + def _stand_in(layout: str, endian: str, container_version: int, file_type: str) -> 'FileHeader': header = FileHeader() - header.layout = FileHeader.LAYOUT_SRO + header.layout = layout header.endian = endian header.file_type_id = 0 - header.file_type = "SRO" + header.file_type = file_type header.file_number = 0 header.header_length = 0 header.record_count = 0 header.index_array_length = 0 header.bit_info = 0 header.version = 6 - header.container_version = 4 + header.container_version = container_version header.user_header_length = 0 header.magic_number = MAGIC_NUMBER header.user_register = 0 diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py index 8c6deaa..0f94eca 100644 --- a/tests/golden/test_golden.py +++ b/tests/golden/test_golden.py @@ -30,7 +30,9 @@ -------------------- 1. The file is present and its sha256 matches the manifest (a mismatch is a broken reference: stop and ask, never regenerate over it). -2. ``.dump`` rows are record streams without a file header: skipped. +2. ``.dump`` rows are record streams without a file header: read as layout + ``"v6-records"`` and checked like the v6 rows (the dictionary in the + record user header of ``buffer_evw_dict_le.dump`` is skipped, not read). 3. v4 and v1—3 rows: ``EvioFile`` raises ``ValueError`` whose message names the detected version and points at the evio tools (the I9 contract, see ``assert_unsupported_version_message``). @@ -90,9 +92,7 @@ def manifest_params(): for row in MANIFEST["files"]: test_id = row["path"].split("cases/", 1)[-1] marks = [] - if row["path"].endswith(".dump"): - marks.append(pytest.mark.skip(reason="buffer dump, no file header")) - elif row["case"] in XFAIL_BY_CASE: + if row["case"] in XFAIL_BY_CASE: marks.append(pytest.mark.xfail(strict=True, reason=XFAIL_BY_CASE[row["case"]])) params.append(pytest.param(row, id=test_id, marks=marks)) return params @@ -135,6 +135,8 @@ def test_golden_file(row): file_size = os.path.getsize(path) with EvioFile(path) as evio_file: + expected_layout = "v6-records" if path.endswith(".dump") else "v6" + assert evio_file.header_layout == expected_layout header_events = evio_file.get_total_event_count() scanned_events = 0 past_end = [] diff --git a/tests/test_sro_layout.py b/tests/test_sro_layout.py index 165b9e4..018f261 100644 --- a/tests/test_sro_layout.py +++ b/tests/test_sro_layout.py @@ -131,14 +131,42 @@ def test_byte_swapped_block_is_named_in_the_check(tmp_path): assert "byte-swapped record header" in f.checks[0][2] -def test_v6_record_stream_without_file_header_is_refused(tmp_path): - """A buffer dump (14-word v6 record headers, no file header) is not an SRO block chain.""" +def test_v6_record_stream_without_file_header(tmp_path): + """A buffer dump (14-word v6 record headers, no file header) reads as layout "v6-records".""" event = struct.pack("<4I", 3, 0xFF601000, 1, 2) record = struct.pack("<14I", 14 + 1 + 4, 1, 14, 1, 4, 6, 0, MAGIC, 16, 0, 0, 0, 0, 0) + struct.pack(" Date: Sun, 11 Oct 2026 01:22:48 -0400 Subject: [PATCH 21/65] Rewrite the README for the current library What pyevio reads (v6 and HIPO-id files, LZ4/LZ4_BEST/gzip records, trailers, SRO hardware streams with cut tails, the version error for v4/v1-3 and for bare v6 record streams), the API in short (EvioFile -> Record -> Event -> Bank/Segment/TagSegment; checks, errors, close() and the BufferError rule, Record.buffer for compressed records, truncated-tail semantics, the trailer excluded from record_count), the fADC250 streaming decoder and stream_stats with short examples, every CLI command including pyevio stats, installation with the pyevio[web] extra named, and the development setup (uv sync, uv run pytest, GOLDEN_MANIFEST, PYEVIO_CORPUS=1). Removed as false against the code: the dump options --depth/--preview/ --hexdump, the hex offset 0x100 (click INT), the RocTimeSliceBank API example (F41/F46), the 0xFF30/0xFF31 bank roles, "info is the default command", the dependency list without textual. Co-Authored-By: Claude Fable 5.1 --- README.md | 265 +++++++++++++++++++++++++++--------------------------- 1 file changed, 133 insertions(+), 132 deletions(-) diff --git a/README.md b/README.md index b23b4e0..823bdc7 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,30 @@ # pyevio -A Python library and command-line tool for reading and introspecting EVIO (Event Input/Output) files from Jefferson Lab. +A Python library and command-line tool for reading and inspecting EVIO (Event Input/Output) files from Jefferson Lab. ## Overview -`pyevio` provides both a Python API and a command-line interface for: +`pyevio` provides a Python API and a command-line interface for: -- Reading and parsing EVIO v6 files efficiently -- Handling both compressed and uncompressed records -- Inspecting file structure, records, and events -- Navigating hierarchical bank structures -- Converting data to NumPy arrays for analysis -- Specialized handling of ROC Time Slice Banks with fADC250 data +- Reading EVIO v6 files, record by record and event by event, through a memory map +- Reading the raw streaming files the JLab SRO hardware writes (8-word block headers, no file header) +- Decompressing LZ4, LZ4_BEST and gzip records on access +- Walking the bank tree of an event (banks, segments, tagsegments) with every length checked against its container +- Converting bank data to NumPy arrays +- Decoding CODA streaming fADC250 time frames into hit arrays and computing histograms and file checks over a whole file in one parallel pass + +## What pyevio reads + +| file | how it is read | +|---|---| +| EVIO v6 file (file type id `EVIO` or `HIPO` in word 0, 14-word headers) | native; dictionary and first event in the user header are skipped with their padding | +| Records compressed with LZ4, LZ4_BEST or gzip | decompressed on first access into a per-record buffer | +| A trailer record with or without an index | exposed as `EvioFile.trailer`; it yields no events | +| JLab SRO hardware stream: no file header, 8-word block headers with version word 4 and no bit-info bits | native, as `header_layout == "sro-8word"`; a final block cut by the end of the file keeps its complete events and is reported in `checks` | +| EVIO v4 or v1—3 file written by the evio library | `ValueError` naming the version and pointing at the evio tools (`evio2xml`, `eviocopy`) | +| EVIO v6 record stream without a file header (a buffer dump) | `ValueError` naming the shape and pointing at the evio tools | + +The SRO detection walks the whole chain of 8-word headers at open: a chain in which some header carries a bit-info bit (last-record, dictionary) or a 14-word header is an evio-library v4 file and raises the version error. The format details are in [docs/evio6_file_structure.md](docs/evio6_file_structure.md) (container format) and [docs/stream_decoding.md](docs/stream_decoding.md) (streaming fADC250 payload). ## Installation @@ -19,178 +32,166 @@ A Python library and command-line tool for reading and introspecting EVIO (Event pip install pyevio ``` -## Requirements - -- Python 3.9+ -- Dependencies (automatically installed): - - click - - lz4 - - rich - - numpy - - matplotlib +The browser viewer installs as an extra: `pip install 'pyevio[web]'`. See [docs/web_viewer.md](docs/web_viewer.md). -## Command-Line Usage +Requirements: Python 3.9 or later. Dependencies installed with the package: click, lz4, rich, numpy, matplotlib, textual. -The `pyevio` command provides several subcommands for file analysis: +## Python API -### Basic File Information +Objects nest the way the file does: `EvioFile` → `Record` → `Event` → `Bank`, `Segment`, `TagSegment`. -```bash -# Display file metadata -pyevio info sample.evio +```python +from pyevio import EvioFile -# Or simply (default command is info) -pyevio sample.evio +with EvioFile("run.evio") as evio_file: + print(evio_file.header_layout) # "v6" or "sro-8word" + print(evio_file.record_count) # data records; the trailer is evio_file.trailer + print(evio_file.get_total_event_count()) + print(evio_file.checks) # [] for a clean file + + record = evio_file.get_record(0) + for event in record.get_events(): + root = event.get_bank() # the event's top-level bank + for child in root.get_children(): # Bank, Segment or TagSegment, typed by the parent + print(hex(child.tag), child.data_type, child.length) + data = root.to_numpy() # None for a container bank ``` -This shows general file information including: -- Magic number and format version -- Endianness -- Record count -- User header details -- Record summary +### Records and events -### Examining Records +- `record_count`, `get_record(i)`, `iter_records()` cover the data records. The trailer record (header type 3) is `evio_file.trailer`, or `None` when the file ends in a plain record. `Record.is_trailer` tells the two apart. +- `Record.get_events()` builds `Event` objects; `Record.get_event_offsets()` returns `(offset, length)` pairs without building objects, which is the way to walk a large file. +- For an uncompressed record, offsets are file offsets and `Record.buffer` is the file mmap. For an LZ4, LZ4_BEST or gzip record, `Record.buffer` is the decompressed bytes and every offset indexes that buffer. Read event bytes through `record.buffer`; `Record.release()` drops the decompressed buffer and the Event cache. +- `EvioFile` caches one `Record` (the last accessed), so a compressed file never sits in memory whole. +- A final record whose declared length runs past the end of the file stays the last record: `Record.is_truncated` is true, `record.header.event_count` is the header's claim and `len(record.get_event_offsets())` is the number of complete events present. `record_count` counts that record. -```bash -# Detailed view of record #5 -pyevio record sample.evio 5 +### Checks and errors -# Show all records without truncation -pyevio info sample.evio --full +- `EvioFile.checks` lists what the record scan found wrong with the file: `("truncated_tail", declared_bytes, present_bytes, events_salvaged)` and `("bad_record_header", offset, message)` where the scan stopped on bytes that are no record header (garbage, a byte-swapped header, a second file header of two concatenated files). +- `Record.errors` and `Bank.errors` list why an event or child walk stopped early: a length that runs past its container, a decompression failure. A bank whose declared length passes its parent is clamped to the parent; no read runs past a container because a length word said so. -# Show hexdump of file header -pyevio info sample.evio --hexdump -``` - -### Inspecting Record Structure +### Closing -```bash -# Dump structure of record #3 -pyevio dump sample.evio 3 +`close()` or the end of the `with` block releases the mmap and the file. A numpy array or memoryview that still refers to the mmap makes `close()` raise `BufferError` after the file is closed; drop the views (`del`) and call `close()` again. Such views come from `np.frombuffer` on the mmap, for example `fadc250_stream.event_words()` on an uncompressed record; `Bank.to_numpy()` and `Bank.get_data()` return copies. -# Limit tree display depth -pyevio dump sample.evio 3 --depth=3 +### Bank lengths -# Show data preview (first 5 elements) -pyevio dump sample.evio 3 --preview=5 +A length word counts the words that follow it: a structure with length N occupies N + 1 words. `Bank.size`, `data_length` and `end_offset` follow that rule, and `Bank.get_children()` types the children by the parent's data type (banks of banks hold `Bank`, banks of segments hold `Segment`, banks of tagsegments hold `TagSegment`). -# Include hex dumps of data -pyevio dump sample.evio 3 --hexdump -``` +## Streaming fADC250 decoder and statistics -### Examining Individual Events +`pyevio.decoders.fadc250_stream` holds the one copy of the frame walk and the hit-word layout. It works on `uint32` event words and returns numpy columns (`frame`, `roc`, `stream`, `port`, `channel`, `time_raw`, `t_ns`, `charge`) plus per-frame, per-ROC-bank and per-empty-bank tables. Only ports the payload map names as fADC250 are decoded as hits; other modules (DCRB) are counted as words. -```bash -# Display event #2 from record #3 -pyevio event sample.evio 2 --record=3 +```python +from pyevio import EvioFile +from pyevio.decoders import fadc250_stream as fs + +with EvioFile("sro_000791.evio.00000") as evio_file: + record = evio_file.get_record(0) + buffer = record.buffer + events = [fs.event_words(buffer, offset, length, evio_file.header.endian) + for offset, length in record.get_event_offsets()] + hits = fs.decode_frames(events) + print(hits.n_stream_frames, hits.n_hits, hits.frames["frame"][:4]) + del events # mmap views; close() refuses while they live +``` -# Alternatively, access by global event index -pyevio event sample.evio 25 +`pyevio.stream_stats` runs the decoder over a whole file in parallel (one worker per record range) and returns `StreamStats`: rate, charge and time-in-frame histograms per (ROC, port, channel), occupancy, hits per frame, empty banks per port, and frame checks (stride, missing and duplicate frames, out-of-order frames, timestamp-step outliers). The result round-trips through `.npz`. -# Show event data as hex dump -pyevio event sample.evio 2 --record=3 --hexdump +```python +from pyevio.stream_stats import compute_stream_stats, StreamStats + +stats = compute_stream_stats("sro_000791.evio.00000", workers=8) +print(stats.n_frames, stats.n_hits, stats.checks.stride, stats.checks.missing_frames) +print(stats.rocs, stats.ports) # axes of every histogram +rate = stats.rate_hz(roc=7) # Hz per time bin, summed over ports and channels +charge = stats.per_roc(stats.charge_hist) # (roc, 128) counts; edges in stats.charge_edges +stats.save("run791.npz") +stats = StreamStats.load("run791.npz") # rejects a file written by another stats version ``` -### Advanced Debugging +The frame layout, the hit word, the time units and the checks are described in [docs/stream_decoding.md](docs/stream_decoding.md). `examples/fadc250_stream_to_parquet.py` writes the hits of a file to Parquet with the same decoder. -```bash -# Debug record #1 -pyevio debug sample.evio --record=1 +## Command-line usage -# Focus on a specific event within the record -pyevio debug sample.evio --record=1 --event=0 +`pyevio --help` lists the commands; `pyevio COMMAND --help` lists the options of one command. -# Focus on a specific payload (for ROC Time Slice Banks) -pyevio debug sample.evio --record=1 --payload=0 +### File information -# Show hex dumps -pyevio debug sample.evio --record=1 --hexdump +```bash +pyevio info run.evio # header fields and a record table +pyevio info run.evio --full # every record row +pyevio info run.evio --hexdump ``` -### Raw Hexadecimal View +### Records and events ```bash -# Display 30 words (default) from byte offset 0x100 -pyevio hex sample.evio 0x100 --bytes +pyevio record run.evio 5 # record 5: header, events, tag statistics +pyevio record run.evio 5 --analyze # event size distribution +pyevio event run.evio 25 # event 25 by global index +pyevio event run.evio 2 --record 3 # event 2 of record 3 +pyevio event run.evio 25 --hexdump +``` -# Display 50 words starting at word 200 -pyevio hex sample.evio 200 --size=50 +### Event word dumps -# Specify endianness -pyevio hex sample.evio 0x100 --bytes --endian='>' +```bash +pyevio dump run.evio # words of event 2 (the default start) as hex +pyevio dump run.evio 100 --start 200 # 100 events from global index 200 +pyevio dump run.evio 100 --record 5 # 100 events of record 5 +pyevio dump run.evio --as dec --only 0,1,2 ``` -### Experimental UI +### Streaming statistics ```bash -# Launch textual UI (requires textual package) -pyevio ui sample.evio +pyevio stats run.evio # totals, frame checks, per-ROC table +pyevio stats run.evio --out run.npz # save the histograms +pyevio stats run.evio --workers 8 --records 200 --tick-ns 1 --rate-bins 256 ``` -### Web Viewer +### Debugging a streaming record ```bash -# Serve the viewer at http://localhost:8765, file browser starts in /path/to/runs -pyevio web /path/to/runs +pyevio debug run.evio --record 1 # frame summary per event +pyevio debug run.evio --record 1 --event 0 # one event, every ROC bank +pyevio debug run.evio --record 1 --payload 0 --hexdump ``` -Browse a file in the browser: file checks, channel occupancy, rate, charge and timing plots for CODA streaming fADC250 data, and a structure tree down to single hit words. Decoding runs in the browser. See [docs/web_viewer.md](docs/web_viewer.md). +### Raw words -![Web viewer overview](docs/images/web_viewer_overview.png) +```bash +pyevio hex run.evio 256 --bytes # 30 words from byte offset 256 (decimal offsets only) +pyevio hex run.evio 200 --size 50 # 50 words from word 200 +pyevio hex run.evio 256 --bytes --endian '<' # the default is big-endian +``` -## Understanding EVIO File Structure +### Other commands -EVIO files are organized hierarchically: +```bash +pyevio ana run.evio --per-record # event tag statistics over the file +pyevio ui run.evio # console UI (textual) +pyevio web /path/to/runs # browser viewer, see docs/web_viewer.md +``` -1. **File Header**: Contains metadata about the file -2. **Records**: Containers for events (may be compressed in v6) -3. **Events**: Contains banks of data -4. **Banks**: Hierarchical containers that can hold other banks or data - - **Container Banks**: Hold other banks - - **Data Banks**: Hold actual data (integers, floats, etc.) +## Development -Special bank types include: -- **ROC Time Slice Banks** (tag 0xFF30): Contain fADC250 data with timestamps -- **Physics Events** (tag 0xFF31): Contain physics data -- **ROC Raw Data Records** (tag & 0xFF10): Contains raw detector data +```bash +git clone https://github.com/JeffersonLab/pyevio +cd pyevio +uv sync # installs the package and the dev group (pytest, pyyaml, pyarrow) +uv run pytest -q +``` -## Python API Usage +Two test sets need data outside the repository and skip when it is absent: -For more advanced use cases, you can use the Python API: +- The golden-set harness (`tests/golden/test_golden.py`) reads the evio golden manifest from the path in `GOLDEN_MANIFEST` and the files from the `golden_root` the manifest names. One test runs per manifest row: event counts, no event past the end of the file, and the version error for v4 and v1—3 files. +- The SRO corpus tests (`tests/golden/test_corpus.py`) scan 15 GB files and run only with `PYEVIO_CORPUS=1`: -```python -from pyevio import EvioFile -import numpy as np - -# Open an EVIO file -with EvioFile("sample.evio") as evio_file: - # Get file info - print(f"Records: {evio_file.record_count}") - print(f"Events: {evio_file.get_total_event_count()}") - - # Get a specific record - record = evio_file.get_record(3) - - # Get events from the record - events = record.get_events() - - # Process an event - event = events[0] - bank = event.get_bank() - - # For ROC Time Slice Banks - if event.is_roc_time_slice_bank(): - ts_bank = event.get_bank() - timestamp = ts_bank.get_formatted_timestamp() - print(f"Timestamp: {timestamp}") - - # Get waveform data - waveform_data = ts_bank.get_payload_data(0) - - # Convert to NumPy - np_data = np.array(waveform_data) -``` + ```bash + PYEVIO_CORPUS=1 uv run pytest tests/golden/test_corpus.py -v + ``` ## License @@ -198,4 +199,4 @@ with EvioFile("sample.evio") as evio_file: ## Contributors -[Contributor information] \ No newline at end of file +[Contributor information] From 021f8a71bbe8c5fb1c815ee045969ec4b5d93e63 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:22:48 -0400 Subject: [PATCH 22/65] Document the streaming fADC250 format as pyevio reads it Frame layout (0xFF60 -> SIB 0xFF31 with TSS 0x32 and AIS 0x42 -> ROC banks tag rocid, num stream mask 0x21/0x22 -> stream-info 0xFF30 with TSS 0x31 and payload map 0x41 -> payload banks tag port, type 0x00, len 1/num 1 empty), the hit-word table with the evidence note (independent parser agrees per rocid x port; per-channel split unconfirmed by the DAQ group), module types from the map (fADC250 decoded, DCRB counted), the two tick lengths (4 ns hit ticks, tick_ns knob for timestamps, 65,536 ticks per frame), striping and the stride check, the stream_stats fields, .npz layout and version field, and the file quirks with the check each one produces. Numbers from reports/phase0_sro_reference.md, phase1_findings.md and phase2_findings.md. Co-Authored-By: Claude Fable 5.1 --- docs/stream_decoding.md | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 docs/stream_decoding.md diff --git a/docs/stream_decoding.md b/docs/stream_decoding.md new file mode 100644 index 0000000..0d5d379 --- /dev/null +++ b/docs/stream_decoding.md @@ -0,0 +1,125 @@ +# Streaming fADC250 decoding + +How pyevio reads CODA streaming fADC250 files: the frame layout, the hit word, the time units, the striping of a run across files, the outputs of `stream_stats` and the quirks of the files the JLab SRO hardware writes. The decoder is `pyevio/decoders/fadc250_stream.py`, the statistics module is `pyevio/stream_stats.py`, and `pyevio stats FILE` runs the latter from the command line. + +Every number quoted here was measured on run 791 (`sro_000791.evio.00000` and `.00001`, 15.5 GB each) and on the same data converted to clean EVIO v6, with readers that share no code with pyevio: a standalone walker, the evio C++ library, and the jana4ml4fpga `evio_sro_parser`. + +## Frame layout + +A streaming time frame is one EVIO event. The event is a bank of banks with tag 0xFF60; its first child is the stream info bank (SIB), the rest are ROC banks, one per stream of each crate. + +``` +event bank tag 0xFF60, type 0x10 (bank of banks), num 0 + SIB tag 0xFF31, type 0x20 (bank of segments) + TSS segment tag 0x32, length 3: {frame number, timestamp low, timestamp high} + AIS segment tag 0x42, length 24: aggregated-stream entries + ROC bank tag = ROC id, type 0x10, num = stream status byte + stream-info tag 0xFF30, type 0x20 (bank of segments) + TSS segment tag 0x31, length 3: the same frame number and timestamp as the SIB + payload map tag 0x41: uint16 entries, one per payload port + payload bank tag = payload port, type 0x00, num 0, one word per hit + payload bank tag = payload port, length 1, num 1: an empty port + ... + ROC bank ... +``` + +Facts the decoder relies on, each measured on both raw files with no exception: + +- Every event has tag 0xFF60, type 0x10, num 0 (173,587 events). +- The SIB starts with the TSS segment: header word `0x32010003`, then frame number, timestamp low word, timestamp high word. The decoder reads the frame number and the 64-bit timestamp from here; `stream_stats.scan_frames` reads only these words when it scans a file for its time axis. +- Every ROC bank's stream-info TSS (tag 0x31) carries the same frame number and timestamp as the SIB (0 mismatches). +- Each crate sends two streams, so each ROC id appears as two ROC banks per frame. The `num` byte of the ROC bank is the stream status: bits 6—4 hold the stream count (2) and bits 3—0 the stream mask (1 or 2), so the two banks carry num 0x21 (33) and 0x22 (34). The mask is the stream identity. The port split between the two streams is odd/even in 8 of the 12 crates of run 791 and 5, 7, 9, 11, 13, 15 against 1, 2, 3, 4, 6, 8 in ROC ids 9, 27, 29 and 84, so port parity identifies nothing. The decoder keeps the mask as the `stream` column; `stream_stats` merges both streams of a crate by ROC id. +- Run 791 has 12 crates, so every frame holds 24 ROC banks. +- The payload map (segment 0x41) holds uint16 entries, two per word, read in memory order (low half first in a little-endian file); pad value 2 in the segment header means an odd entry count. An entry is `module << 8 | port`: bits 11—8 module id, bit 7 bond, bits 6—5 lane, bits 4—0 port. Module 0 is fADC250, module 1 is DCRB. Every payload bank's tag appears in its stream's map (0 exceptions in 14.2 million payload banks per file). +- Every payload bank declares data type 0x00. A bank with data has num 0; an empty bank has length 1 and num 1. Both are valid. File 00000 holds 357,735 empty banks among 14,233,888 payload banks (2.51%), all on ROC ids 7, 9, 25 and 27; ports 14 and 16 of ROC ids 7 and 25 are mapped and never carry a hit. + +The decoder walks this tree by length words and trusts none of them: every bank end is checked against its container, and a bad length stops the walk of that event with a counted error (`errors`, `error_messages`, the first 50 messages kept) instead of an exception. A ROC bank without a stream-info bank, or a port absent from the map, is decoded as fADC250 and counted in `n_unmapped_payload_banks`. The decoder does not read the AIS segment: ROC banks come from the walk. + +## Hit word + +One `uint32` per hit in an fADC250 payload bank: + +| bits | field | range | +|---|---|---| +| 31 | flag | never set in the SRO data (0 words in either raw file); `n_flag_words` counts it | +| 30—17 | time from the frame start, in 4 ns ticks | 0—16,383 ticks = 0—65,532 ns | +| 16—13 | fADC250 channel | 0—15 | +| 12—0 | charge | 0—8,191; 8,191 means overflow | + +`unpack_hit_words` splits the columns; `t_ns = time_raw × 4`. `validate_hit_words` rejects words whose raw time field exceeds 14 bits, which happens exactly when bit 31 is set. + +Evidence for the layout: the jana4ml4fpga `evio_sro_parser`, written independently of pyevio, decodes the same bit positions, and its hit counts per (ROC id, port) agree with pyevio for all 76 instrumented pairs in both raw files (763,992,122 hits in the complete blocks of file 00000, 764,052,526 in file 00001). The port totals are also fixed by the bank structure: hits = Σ(payload length − 1) over fADC250 ports. The per-channel split rests on the bit layout alone, and the DAQ group has not confirmed it. + +## Module types + +The module id of a port comes from the payload map of its ROC bank. In run 791 the map says fADC250 (module 0) on ROC ids 7, 9, 25, 27, 29 and 84, and DCRB (module 1) on ROC ids 44, 45, 46, 53, 54 and 55. ROC ids 7, 9, 25 and 27 map 16 ports, 29 and 84 map 12 (ports 10, 12, 14 and 16 absent), and the DCRB crates map ports 3—16. + +Only fADC250 payload words become hits. Payload words of any other module are counted: per ROC bank in `roc_banks["non_fadc_words"]`, per bank in the `non_fadc_banks` table, and in the total `non_fadc_words`. DCRB payload words are two-word channel masks (the independent parser reads word 0 as a 3-bit channel group and a 29-bit mask, word 1 as a 19-bit mask continuation and an 11-bit time); pyevio decodes nothing from them. `StreamHits.validate()` checks `n_hits + non_fadc_words == n_payload_words` and that the per-frame hit counts add up. + +Record 0 of the converted file 00000 decodes to 499,660 payload words in 264 ROC banks and 1,804 payload banks (45 empty). + +## Time + +Two tick lengths are in play: + +- The hit time inside a frame is a 14-bit field in 4 ns ticks, the fADC250 sample period (`HIT_TIME_TICK_NS = 4`, fixed). The largest value is 16,383 × 4 ns = 65,532 ns. +- The frame timestamp (TSS) counts ticks whose length is the knob `tick_ns` of `stream_stats` (`compute_stream_stats(..., tick_ns=1.0)`, `pyevio stats --tick-ns 1`), default 1 ns. The timestamp step per frame number, measured as median = min = max on all four files, is 65,536 ticks, which equals 2^14 hit ticks × 4 ns at a 1 ns timestamp tick. The DAQ group has not confirmed the tick length; a different length goes into the knob. + +With the default, one frame lasts 65.536 µs. `stream_stats` derives the frame period as the median timestamp step per frame number (`checks.frame_period_ticks`), so a wrong knob scales every time quantity by one factor: + +- `duration_s`: first to last timestamp plus one frame period — the span of the run the file covers. +- `live_time_s`: frames in the file × frame period — the time the file records. +- `rate_hz(...)`: hits per time bin divided by the frames the bin covers × frame period, so a partial bin, a gap and a stripe of a striped run all read right. + +On file 00000 the span is 22.752 s and the live time 5.688 s: the file holds one frame in four. + +## Striping across files + +A run is written round-robin by frame over its files: `.evio.0000N` holds frames N, N + 4, N + 8, … for a four-way split. Measured on stripes 0 and 1 of run 791: first frames 0 and 1, every frame delta 4, 0 missing, 0 duplicate, 0 out of order, 0 timestamp steps other than 65,536 per frame; frame 0 with timestamp 0 is a real frame. + +`stream_stats` reads the stride from the data as the most common positive frame delta between consecutive frames (`checks.stride`) and counts missing frames against it: `(last − first) / stride + 1 − distinct frames`, so a stripe of a split run reports 0 missing frames instead of three in four. The other frame checks: `duplicate_frames` (frame numbers seen more than once), `out_of_order` (consecutive frames whose number decreases) and `dts_outliers` (consecutive frames whose timestamp step per frame deviates from the median by more than 1%). + +Statistics are per file. For a whole run, the charge, time-in-frame, occupancy and empty-bank histograms of its stripes add, once their ROC and port axes are aligned. Each file's rate axis runs from its own first to its last timestamp, so rate series of different stripes are compared bin by bin only when the files cover the same span. + +## `stream_stats` outputs + +`compute_stream_stats(path, workers=None, rate_bins=256, tick_ns=1.0, max_records=None, chunk_records=8)` makes two passes: a serial scan of every event's SIB for frame numbers and timestamps, which fixes the time axis and the frame checks, then a parallel decode by record ranges (`workers` processes, default cores minus two; `workers=1` runs in-process). Each worker opens the file itself and returns partial histograms whose axes grow with the ROC and port sets it meets; the partials add. + +`StreamStats` fields: + +| field | shape | content | +|---|---|---| +| `rocs`, `ports` | (R,), (P,) | sorted axes of every histogram; `roc_index(roc)` maps an id to its row | +| `module_id` | (R, P) | module behind each port, 0xFF where the port never appeared | +| `module_ids`, `module_words` | (M,), (M,) | payload words per module id; fADC250 hits count as words | +| `rate_counts`, `rate_edges_ns`, `frames_per_rate_bin` | (R, P, 16, B), (B + 1,), (B,) | hits per time bin from the first to the last timestamp, B = `rate_bins`; `rate_hz()` normalizes | +| `occupancy` | (R, P, 16) | hits per channel | +| `charge_hist`, `charge_edges` | (R, P, 16, 128), (129,) | 13-bit charge in 128 bins of 64 | +| `time_hist`, `time_edges_ns` | (R, P, 16, 64), (65,) | 14-bit tick field in 64 bins of 256 ticks = 1,024 ns | +| `hits_per_frame_hist`, `hits_per_frame_edges` | (64,), (65,) | hits per frame in 64 linear bins from 0 to the largest count | +| `empty_banks` | (R, P) | empty payload banks per port | +| `non_fadc_words_per_port` | (R, P) | words of other modules per port | +| `frames` | (F,) structured | per frame: event index, frame number, timestamp, hits, other-module words, errors; sorted by event index | +| `checks` | `FrameChecks` | frame count, first and last frame and timestamp, stride, frame period, missing, duplicate, out-of-order frames, timestamp-step outliers | + +Scalars: `n_records` (data records), `n_trailer_records`, `n_events`, `n_frames`, `n_other_events` (events that are no 0xFF60 frame), `n_out_of_bounds_events` (events whose range runs past their record; counted and skipped), `n_hits`, `n_payload_banks`, `n_empty_payload_banks`, `n_unmapped_payload_banks`, `n_payload_words`, `non_fadc_words`, `n_flag_words`, `errors`, `error_messages` (first 50), plus `path`, `file_size`, `bytes_processed`, `tick_ns`, `workers`, `wall_seconds`. `per_roc(hist)` sums a (R, P, 16, bins) histogram to (R, bins); `hits_per_roc()` returns `{roc: hits}`. + +`save(path)` writes a compressed `.npz`: one entry `meta`, a JSON string with the scalar fields, `version` and the `checks` dictionary, and one array entry per array field. `StreamStats.load(path)` opens it with `allow_pickle=False` and raises `ValueError` unless `version` equals the `STATS_VERSION` of the running pyevio (`"1"`). The full run-791 file produces a 1.6 MB `.npz`. + +`pyevio stats` prints the totals, the payload words per module, the frame checks, span against live time, the fADC250 hit rate of live time, the wall time with MB/s, and a per-ROC table (module, ports, hits, other words, empty banks); `--out FILE.npz` saves the result, `--records N` stops after N records. + +Measured on run 791: the converted file 00000 (15.55 GB) through `pyevio stats` with 22 workers in 30.5 s (509 MB/s), the raw file with 20 workers in 25.6 s (607 MB/s); 86,794 frames; 764,009,774 fADC250 hits = the independent reference for the complete blocks (763,992,122) + the 17,652 hits of the two frames salvaged from the cut tail, exact per ROC id; 3,065,574,754 DCRB words; 357,743 empty banks. The decoder alone runs at 966 MB/s on record 0 and 686 MB/s over 200 records on one core. + +## Known file quirks and how pyevio reports them + +The raw files of the SRO hardware deviate from the evio-library output in five ways. Each is read as the hardware writes it. + +| quirk | what the data shows | what pyevio does | +|---|---|---| +| 8-word block headers, no file header | every block header is `{length, block number, 8, event count, 0, 4, 0, 0xc0da0100}`: version word 4 with no bit-info bits | `EvioFile.header_layout == "sro-8word"`; `header` is a stand-in `FileHeader` with `version` 6 and `container_version` 4; record headers have `header_length == 8`; `first_record_offset` is 0 | +| no last-record bit, no trailer | the bit is set on no block; the file ends after its last block | the record scan continues while a record header follows and ends at the end of the file; `EvioFile.trailer` is `None` | +| truncated tail | 3 of the 4 files end in a block cut mid-event: file 00000 declares 1,967,400 bytes and holds 531,760 (2 complete events); file 00001 declares 1,960,136 and holds 1,939,708 (10 complete events) | the block stays the last record with `is_truncated` set; its complete events are read; `EvioFile.checks` holds `("truncated_tail", declared, present, salvaged)` — `(1967400, 531760, 2)` and `(1960136, 1939708, 10)`; `record_count` counts the tail, `get_total_event_count()` counts its salvaged events (86,794 and 86,805) | +| AIS repeated entry | the AIS segment (tag 0x42) repeats one entry 24 times in every event instead of listing 24 streams (4 distinct values per file) | the decoder ignores the AIS; ROC banks come from the walk. No check reports the repetition. | +| empty payload banks | length 1, num 1 on ports with no hit in the frame | counted per (ROC, stream, port) in `empty_banks`; `stream_stats.empty_banks` sums them per (ROC, port) | + +Two more checks exist for any file: `("bad_record_header", offset, message)` in `EvioFile.checks` when the scan meets bytes that are no record header (a byte-swapped header and a second file header are named), and `Record.errors` when an event length runs past its record. `stream_stats` counts events past their record in `n_out_of_bounds_events` and decode errors in `errors`. From bd8381021c95700c19fc894c0a18d2f3ff78389d Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:22:48 -0400 Subject: [PATCH 23/65] Add a changelog for the gui-fix changes Keep-a-Changelog format, one Unreleased section: Added (SRO streams, compression, tail salvage, checks/errors, Segment/TagSegment, the shared decoder, stream_stats, pyevio stats, the web viewer and Parquet example, the golden harness), Changed (trailer out of record_count, bank length semantics, buffer offsets for compressed records, Parquet schema, packaging), Fixed (one line per finding with its symptom in user terms: F38, F3, F4, F5, F6, F7, F8, F9, F39, F43, F45, F49, F2, F10, F37, F40, F44, F16, F17, F19, F20, F42, F13, F14, F11, F12, F28, F48, plus the pre-ledger last-record-bit fix 88b188d without a number). Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..058ceff --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,65 @@ +# Changelog + +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F50) refer to the project's defect ledger. + +## [Unreleased] + +### Added + +- Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. +- Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. +- Salvage of a truncated final record: a record whose declared length runs past the end of the file stays the last record, its complete events are read, and `EvioFile.checks` reports `("truncated_tail", declared_bytes, present_bytes, events_salvaged)`. `Record.is_truncated`, `Record.declared_end`, `EvioFile.record_event_count(record)`. +- File checks and walk errors: `EvioFile.checks` (`truncated_tail`, `bad_record_header`), `Record.errors` and `Bank.errors` record why a scan or a child walk stopped, with offsets. +- `EvioFile.close()`; `EvioFile.trailer` and `Record.is_trailer`; `RecordHeader.header_type`, `RecordHeader.is_trailer`, `RecordHeader.pad1`/`pad2`/`pad3`; `FileHeader.file_type`. +- `Segment` and `TagSegment` (one-word headers) as children of banks of segments and tagsegments; `Bank.child_class()`; `Bank(..., limit=)` bounds a bank to its parent, event or buffer. +- `pyevio.decoders.fadc250_stream`: the one copy of the streaming fADC250 frame walk and hit-word layout, as pure functions over `uint32` event words (`decode_frames`, `decode_frame`, `event_words`, `unpack_hit_words`, `validate_hit_words`, `concatenate_stream_hits`). Returns hit columns (`frame`, `event_index`, `roc`, `stream`, `port`, `channel`, `time_raw`, `t_ns`, `charge`) and per-frame, per-ROC-bank, per-empty-bank and per-non-fADC-bank tables. The module behind each port comes from the 0x41 payload map: fADC250 ports are decoded, other modules (DCRB) are counted as words. +- `pyevio.stream_stats`: one parallel pass over a streaming file to rate, charge, time-in-frame, occupancy and hits-per-frame histograms, empty banks and other-module words per port, and frame checks (stride, missing and duplicate frames, out-of-order frames, timestamp-step outliers). `StreamStats` round-trips through `.npz` with a version field; the timestamp tick length is the knob `tick_ns`. +- `pyevio stats FILE [--out FILE.npz] [--workers N] [--rate-bins N] [--tick-ns X] [--records N]`. +- `pyevio debug` prints a stream-frame summary for 0xFF60 events and the module, hits and other-module words per ROC bank. +- `pyevio web`: a browser viewer for CODA streaming fADC250 files (`docs/web_viewer.md`), and `examples/fadc250_stream_to_parquet.py`, which writes the hits of a file to Parquet. +- Golden-set harness `tests/golden/test_golden.py` (one test per row of the evio golden manifest, path in `GOLDEN_MANIFEST`) and the SRO corpus tests `tests/golden/test_corpus.py` (`PYEVIO_CORPUS=1`). +- Documentation: `docs/stream_decoding.md` (frame layout, hit word, time units, striping, `stream_stats` outputs, file quirks); `docs/evio6_file_structure.md` gains an SRO hardware layout section. + +### Changed + +- `EvioFile.record_count`, `get_record()`, `get_records()` and `iter_records()` cover data records only. The trailer record is `EvioFile.trailer` (or `None`) and yields no events. `stream_stats.n_records` counts data records, `n_trailer_records` the trailer. +- `Bank.size`, `Bank.data_length` and `Bank.end_offset` count the length word plus the words that follow it (see F38 under Fixed); `Bank.to_numpy()` returns one more element per leaf bank than before and uses the file byte order. +- Event offsets of a compressed record (`Record.get_event_offsets()`, `Record.scan_events()`) index `Record.buffer`. Code that read event bytes from `evio_file.mm` must read from `record.buffer`. +- `EvioFile` caches one `Record` (the last accessed) instead of every record. +- `EvioFile.__exit__` propagates the `BufferError` that `close()` raises while a numpy view of the mmap is alive; `__del__` stays silent. +- The error for files pyevio does not read names the detected EVIO version and points at the evio tools (`evio2xml`, `eviocopy`). HIPO files (file type id `HIPO`) open as v6 files. +- `examples/fadc250_stream_to_parquet.py`: a `stream` column, `port` widened to `uint16`, hits sorted by (frame, event index, t_ns) and frames by (frame, event index), `DECODER_VERSION` "2"; event bytes come from `record.buffer` and no `Event` objects are kept. +- `RecordHeader.parse()` and `BufferReader` raise without printing hex dumps first. +- Packaging: pytest, pyyaml and pyarrow sit in the default `dev` dependency group, so `uv run pytest` works without extras; setuptools package discovery is restricted to `pyevio*`. + +### Fixed + +- F38 — leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. +- F3 — trailer records produced phantom events past the end of the file: the trailer's record index was read as event lengths. +- F4 — LZ4, LZ4_BEST and gzip records were read as uncompressed bytes and produced garbage events. +- F5 — an event or bank length that ran past its record or the file was trusted; corrupt data raised deep inside numpy or struct calls. Every length is checked against its container and an overrun ends the walk with a recorded error. +- F6 — a truncated final record, garbage after the last record, or a second file header (two files concatenated) was accepted as a record. Record headers are validated before use and a problem ends the scan with a `bad_record_header` check. +- F7 — `with EvioFile(...)` leaked the mmap and the file descriptor silently while a numpy view was alive. +- F8 — a dictionary or first event of odd length shifted every event: the user header length is stored padded to whole words. +- F9 — v4 and v1—3 files failed with a generic "Unsupported EVIO version" error. +- F39 — HIPO files (file type id `HIPO`) were rejected. +- F43 — `EvioFile.get_event()` raised on every call (a 2-tuple unpacked into four names); `pyevio event` by global index failed with it. +- F45 — children of a bank of segments or tagsegments were read as two-word banks: the first segment word of a streaming frame's stream info bank was taken for a length, and the walk stopped with an entry in `Bank.errors` and no children. +- F49 — `pyevio event N --record R` looked the event up by global index instead of its index within the record. +- F2 — SRO hardware files (8-word block headers, version word 4, no file header) could not be opened. +- F10 — two bank-scanning tests failed on `main` because their fixtures declared lengths that disagreed with their byte sizes; corrected to EVIO length semantics. +- F37 — `uv run` and `pip install` could not build the package: setuptools auto-discovery picked up a second top-level directory as a package. +- F40 — `pyevio debug` printed "Error accessing event" for every event (it called a method `Record` does not have) and skipped every payload bank with two or more hits. +- F44 — `pyevio debug` displayed bank extents one word short. +- F16 — the hit-word layout and the frame walk existed in five copies (viewer, Parquet example, `pyevio debug`, two analysis examples) that had drifted apart; the Parquet example and `pyevio debug` call the shared decoder. The viewer's copy and `examples/analyze_evio_data.py` / `examples/analyze_roc_data2.py` remain. +- F17 — the Parquet example crashed (`IndexError`) when the last ROC bank of a frame had no children or ended in an empty payload bank. +- F19 — the example's `validate()` checked a `uint16` column against 65,536, which could never fail, with `assert`, which `python -O` removes; the raw 14-bit time field is checked and `ValueError` raised. +- F20 — duplicate frame numbers interleaved the hits of both copies in the Parquet output, so the per-frame hit ranges pointed at the wrong rows. +- F42 — every crate was decoded as fADC250, so DCRB channel masks became bogus hits; the module type comes from the payload map. +- F13 (decoder and statistics side) — fixed caps of 8 ROCs and 64 boards dropped crates silently; each crate sends two ROC banks per frame, so 12 crates make 24. The decoder and `stream_stats` have no caps: histogram axes grow with the data, both streams of a crate merge by ROC id, and the stream identity (ROC bank num mask) is kept per hit. The viewer's own caps remain. +- F14 — empty payload banks (length 1, num 1) and payload data type 0x00 were treated as anomalies. +- F11 — a file of a 4-way striped run reported 3 of every 4 frames missing, and time was computed from frame numbers; the stride is read from the data and time from timestamps. +- F12 — the frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. +- F28 (binning) — rate histograms binned from frame 0 to the last frame, so a later stripe squeezed into the right edge and partial last bins read low; `stream_stats` bins from the first to the last timestamp and normalizes by the frames each bin covers. +- F48 — the Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. +- Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. (Fixed before the defect ledger existed; no finding number.) From 420690472b92e48e51605ce724b53eef19666892 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:22:48 -0400 Subject: [PATCH 24/65] Correct the EVIO v6 format notes against the reader and add the SRO layout Fixed: the last-record bit is bit 9 (the prose said 10, which is the file header's trailer-index flag); word 8 counts the event bytes alone, index array and user header excluded (verified on the C++ and Java writers, phase0 reference); pad 3 counts filler bytes of the compressed data; the event index is written by the evio library but absent in some streams and pyevio walks by event length words then; 0xcoda0100 -> 0xc0da0100; header length 8 exists in hardware output. Added how pyevio scans (header validation, bad_record_header and truncated_tail checks, last-record bit tolerance), the trailer's 0x30000206 word and its exposure as EvioFile.trailer, and an "SRO hardware layout" section (no file header, 8-word block headers {len, block#, 8, evcount, 0, 4, 0, magic}, no index, no trailer, cut tail, the whole-chain detection rule). Co-Authored-By: Claude Fable 5.1 --- docs/evio6_file_structure.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/evio6_file_structure.md b/docs/evio6_file_structure.md index 4d0f071..8620e17 100644 --- a/docs/evio6_file_structure.md +++ b/docs/evio6_file_structure.md @@ -5,7 +5,7 @@ A big factor for introducing yet another evio version was the desire to compress **FILE FORMAT** -Below is a diagram of how an HIPO/evio6 file is laid out. Each file has its own file header which appears once, at the very beginning of the file. It is always uncompressed. That is followed by an optional, uncompressed index array which contains pairs of 4-byte integers. Each pair, one pair per record, is the length of a record in bytes followed by the event count in that record. Generally, the index array is not used with evio files. +Below is a diagram of how an HIPO/evio6 file is laid out. Each file written by the evio library has its own file header which appears once, at the very beginning of the file. It is always uncompressed. The raw files the JLab SRO hardware writes have no file header; see "SRO hardware layout" below. That is followed by an optional, uncompressed index array which contains pairs of 4-byte integers. Each pair, one pair per record, is the length of a record in bytes followed by the event count in that record. Generally, the index array is not used with evio files. That, in turn, is followed by an optional, uncompressed user header which is just an array of data to be defined by the user. This array is padded to a 4-byte boundary. To be more specific, it holds user data in HIPO files, but in evio files the user header will only store any dictionary or first event provided to the file writer. The dictionary and first event are placed into a record and written out as the user header. More on records later. Finally, any index array and user header is followed by any number of records including the last record which may be a trailer. More on the trailer later. @@ -70,7 +70,7 @@ After the file header, index array, and user header, the file is divided into ** **![](data:image/jpeg;base64...)** -Each record has a header. The header is followed by an index of events lengths – one word per length in the unit of bytes. This index is **not** optional. +Each record has a header. The header is followed by an index of event lengths – one word per length in the unit of bytes. The evio library always writes this index. Some writers omit it (index array length 0, as the SRO hardware does); pyevio then walks the events by the length word of each event bank, bounded by the record's event count and data end. It is followed by an optional user header which functions in the same manner as the one in the file layout. It is an array of data defined by the user. This array is padded to a 4-byte boundary. For the evio format, if writing to a file, any dictionary and/or first event are exclusively placed in the file’s user header and nothing is ever placed in a record’s user header. If writing to a buffer, any dictionary and/or first event are exclusively placed in the user header in the format of a record (in other words, a record within a record). The EventWriter class, when writing to a buffer only writes one record and so that will contain the dictionary/first event. If using the Writer class, it’s data format agnostic and any user data may be written with any record as part of the user header. @@ -104,14 +104,14 @@ MSB(31)                           LSB(0) 1. The record length is number of 32 bit words in the record (including itself). In general, this will vary from record to record. 2. The record number is an id # used by the event writer. Can be used by reader to ensure data is received in the proper order. -3. The header length is the number of 32 bit words in this header - set to 14 by default. This can be made larger but not smaller. Even though, theoretically, it can be changed, there are no means to do this or take advantage of the extra memory through the evio libraries. +3. The header length is the number of 32 bit words in this header - set to 14 by default. The evio library never writes another value. The SRO hardware writes 8-word headers that stop after the magic number (see "SRO hardware layout"); pyevio reads both and treats words 8—13 of an 8-word header as 0. 4. The event count is the number of events in this record - always integral. 5. The index array length is the length, in bytes, of the following index of event lengths. 6. The version is the current evio format version number (6) and takes up the lowest 8 bits. The bit info word is used to store the various useful data listed in the table below. 7. The user “header” is just a user-defined array which may contain anything. This record header entry is the length of the user header in bytes. If writing to a buffer and if there is a dictionary / first event, they will be stored in the user header and the length of that data will be stored here. If writing to a file, there is no user header data in a record so this entry will be 0. 8. The magic number is the value 0xc0da0100 and is used to check endianness. -9. The uncompressed data length is the padded length, in bytes, of the entire uncompressed record. -10. The highest 4 bits signify the type of compression used in the record (see table below). The other bits contain the padded length of the compressed data in 32-bit words. +9. The uncompressed data length is the length, in bytes, of the events alone. The index array and the user header are not included: the evio C++ and Java writers store the event bytes here in every record, and pyevio sizes the decompressed buffer as index array length + padded user header length + this word. +10. The highest 4 bits signify the type of compression used in the record (see table below). The other bits contain the padded length of the compressed data in 32-bit words; pad 3 (bits 24—25 of the bit info word) counts the filler bytes in the last word that are not part of the compressed stream. The compressed data starts right after the header; LZ4 and LZ4_BEST use the LZ4 block format (no frame header). 11. User register #1, 64 bits. 12. User register #2, 64 bits. @@ -156,7 +156,9 @@ In an evio file, the ending record can, but does not have to be, a regular recor **TRAILER’S HEADER** -In either case, bit #10 of the bit info word in the record header needs to be set – indicating that this is the last record. In the case of the trailer, bits 28-31 (seen in the table above) will indicate that this is a trailer. For an evio trailer, the value in those bits is 3. Also, the version number is placed in that same word. Everything after the magic number is 0. +In either case, bit #9 of the bit info word in the record header needs to be set – indicating that this is the last record (bit #10 is the file header's "trailer has an index" flag). In the case of the trailer, bits 28-31 (seen in the table above) will indicate that this is a trailer. For an evio trailer, the value in those bits is 3. Also, the version number is placed in that same word, which makes the word 0x30000206 for a plain evio trailer. The event count is 0. Everything after the magic number is 0. + +pyevio exposes the trailer as `EvioFile.trailer` and excludes it from `record_count` and `iter_records()`; `Record.scan_events()` returns no events for it, because its index array lists records. MSB(31)                           LSB(0) <-------------------- 32 bits ------------------> @@ -170,7 +172,7 @@ MSB(31)                           LSB(0) | **Index Array Length** | | **0x 30 00 02 06** | | **0** | -| **0xcoda0100** | +| **0xc0da0100** | | **0** | | **0** | | **0** | @@ -184,7 +186,18 @@ If the file header’s index array is non-existent, the trailer position can be If no record length information is available in either the file header or the trailer, the reader will scan the whole file from beginning to end to obtain it. -**Chapter 11** +pyevio always scans: it ignores the file header's index array and trailer position and steps from record header to record header by the record length word. Before a header is used it must hold the magic number at word 7, a header length of 8 or 14 with those words present, a record length of at least the header length, and no file type id in word 0 (which marks a second file header, as in two files concatenated). Bytes that fail this end the scan with a `("bad_record_header", offset, message)` entry in `EvioFile.checks`. A record whose length runs past the end of the file is kept as the last record, its complete events are read, and `("truncated_tail", declared_bytes, present_bytes, events_salvaged)` goes to `checks`. The scan continues past a record with the last-record bit set while another record header follows, because some writers set the bit on every record. + +**SRO HARDWARE LAYOUT** + +The raw files written by the JLab SRO hardware (for example `sro_000791.evio.00000`) carry EVIO v6 streaming events in a container that predates the v6 file layout: + +* No file header. The first block header starts at byte 0. +* Every block header is 8 words: `{block length (words), block number, 8, event count, 0, 4, 0, 0xc0da0100}`. Word 5 is exactly 4: version 4 with no bit-info bits. Words 8—13 of the v6 record header (uncompressed length, compression, user registers) do not exist, so the blocks are uncompressed and hold no user header. +* No index array: the events follow the header directly and are walked by their length words. +* The last-record bit is never set and there is no trailer. The file ends after its last block, and the last block may be cut by the end of the file (3 of the 4 files of run 791 end this way). + +The first block of an evio-library v4 file has the same shape, so a file without a file type id is identified by its whole header chain: every 8-word header must have word 5 equal to 4. A header with the last-block bit (0x200) or the dictionary bit (0x100) set, a version other than 4, or a 14-word header marks an evio-library file, and pyevio raises the version error for it. pyevio reports the layout as `EvioFile.header_layout == "sro-8word"`, with a stand-in `FileHeader` whose `version` is 6 (the content) and `container_version` 4 (the block headers); `trailer` is `None` and `record_count` comes from the scan, the cut tail included. # EVIO Data Format From c605b848cb089ef615af3d741e5b4ab36b2a5773 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:23:28 -0400 Subject: [PATCH 25/65] Document bare v6 record stream reading in the README and changelog The docs were written against 4b066a7; e7ea65c added the v6-records layout and pyevio info checks afterwards. Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 1 + README.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 058ceff..12130a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Added - Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. +- Reading of bare EVIO v6 record streams (an evio writer buffer dump, 14-word record headers with no file header) as `EvioFile.header_layout == "v6-records"`; `EvioFile.record_header_problem(offset)` names what is wrong with a record header; `pyevio info` prints the layout and the file checks. - Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. - Salvage of a truncated final record: a record whose declared length runs past the end of the file stays the last record, its complete events are read, and `EvioFile.checks` reports `("truncated_tail", declared_bytes, present_bytes, events_salvaged)`. `Record.is_truncated`, `Record.declared_end`, `EvioFile.record_event_count(record)`. - File checks and walk errors: `EvioFile.checks` (`truncated_tail`, `bad_record_header`), `Record.errors` and `Bank.errors` record why a scan or a child walk stopped, with offsets. diff --git a/README.md b/README.md index 823bdc7..ec850d0 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,9 @@ A Python library and command-line tool for reading and inspecting EVIO (Event In | A trailer record with or without an index | exposed as `EvioFile.trailer`; it yields no events | | JLab SRO hardware stream: no file header, 8-word block headers with version word 4 and no bit-info bits | native, as `header_layout == "sro-8word"`; a final block cut by the end of the file keeps its complete events and is reported in `checks` | | EVIO v4 or v1—3 file written by the evio library | `ValueError` naming the version and pointing at the evio tools (`evio2xml`, `eviocopy`) | -| EVIO v6 record stream without a file header (a buffer dump) | `ValueError` naming the shape and pointing at the evio tools | +| EVIO v6 record stream without a file header (an evio writer buffer dump) | native, as `header_layout == "v6-records"`; records start at offset 0 and `EvioFile.header` is a stand-in | -The SRO detection walks the whole chain of 8-word headers at open: a chain in which some header carries a bit-info bit (last-record, dictionary) or a 14-word header is an evio-library v4 file and raises the version error. The format details are in [docs/evio6_file_structure.md](docs/evio6_file_structure.md) (container format) and [docs/stream_decoding.md](docs/stream_decoding.md) (streaming fADC250 payload). +The SRO detection walks the whole chain of 8-word headers at open: a chain in which some header carries a bit-info bit (last-record, dictionary) is an evio-library v4 file and raises the version error. The format details are in [docs/evio6_file_structure.md](docs/evio6_file_structure.md) (container format) and [docs/stream_decoding.md](docs/stream_decoding.md) (streaming fADC250 payload). ## Installation From 72916ace47e870fd429e406726aac735da586fee Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:24:38 -0400 Subject: [PATCH 26/65] Add progress and cancel hooks to compute_stream_stats compute_stream_stats(progress=, cancel=) reports (records_done, total) after the header scan and after every chunk or pool task, polls cancel() between them and raises StatsCancelled; _process_range returns its record range because imap_unordered results arrive out of order. MODULE_NAMES moves into the decoder so the CLI and the server share one table. Groundwork for F23. tests/web/test_web_api.py (cancel-on-reopen, progress to done) and the unchanged tests/test_stream_stats.py prove the hooks keep the numbers. Co-Authored-By: Claude Fable 5.1 --- pyevio/cli/stats.py | 3 +- pyevio/decoders/fadc250_stream.py | 1 + pyevio/stream_stats.py | 55 ++++++++++++++++++++++++++----- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/pyevio/cli/stats.py b/pyevio/cli/stats.py index e415755..23c6163 100644 --- a/pyevio/cli/stats.py +++ b/pyevio/cli/stats.py @@ -6,8 +6,7 @@ from pyevio.decoders import fadc250_stream from pyevio.stream_stats import compute_stream_stats, default_workers, DEFAULT_RATE_BINS, DEFAULT_TICK_NS -MODULE_NAMES = {fadc250_stream.MODULE_FADC250: "fADC250", fadc250_stream.MODULE_DCRB: "DCRB", - fadc250_stream.MODULE_UNKNOWN: "unmapped"} +MODULE_NAMES = fadc250_stream.MODULE_NAMES def print_stats_summary(console, stats): diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 40880b1..60d9272 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -87,6 +87,7 @@ MODULE_FADC250 = 0 MODULE_DCRB = 1 MODULE_UNKNOWN = 0xFF # port not in the map, or no stream-info bank +MODULE_NAMES = {MODULE_FADC250: "fADC250", MODULE_DCRB: "DCRB", MODULE_UNKNOWN: "unmapped"} # Only the first error messages of a batch are kept; the count is always exact. MAX_ERROR_MESSAGES = 50 diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index 77fb465..c997d1d 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -28,7 +28,7 @@ import struct import time from dataclasses import dataclass, field, asdict, fields -from typing import List, Optional +from typing import Callable, List, Optional import numpy as np @@ -50,6 +50,16 @@ DTS_OUTLIER_TOLERANCE = 0.01 MAX_ERROR_MESSAGES = 50 +# Hooks of compute_stream_stats: progress(records_done, records_total) is called after the +# header scan and after every decoded task; cancel() is polled between chunks and tasks. +ProgressCallback = Callable[[int, int], None] +CancelCheck = Callable[[], bool] + + +class StatsCancelled(Exception): + """Raised by compute_stream_stats when its cancel check returns True.""" + + FRAME_SCAN_DTYPE = np.dtype([("record", np.uint32), ("event", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64)]) FRAME_STATS_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), @@ -284,12 +294,19 @@ def _init_worker(path: str) -> None: def _decode_records(evio_file: EvioFile, record_range, events_before_record: np.ndarray, t_first: int, t_last: int, - n_rate_bins: int, chunk_records: int) -> Accumulator: - """Decode a range of records in chunks and accumulate histograms; trailers and out-of-bounds events are skipped.""" + n_rate_bins: int, chunk_records: int, progress: Optional[ProgressCallback] = None, + cancel: Optional[CancelCheck] = None) -> Accumulator: + """Decode a range of records in chunks and accumulate histograms; trailers and out-of-bounds events are skipped. + + ``progress`` receives (records done in this range, records in this range) after each chunk; + ``cancel`` is polled before each chunk and raises :class:`StatsCancelled`. + """ accumulator = Accumulator(t_first, t_last, n_rate_bins) endian = evio_file.header.endian record_list = list(record_range) for chunk_start in range(0, len(record_list), chunk_records): + if cancel is not None and cancel(): + raise StatsCancelled(f"cancelled after {chunk_start} of {len(record_list)} records") chunk = record_list[chunk_start:chunk_start + chunk_records] events = [] first_event_index = int(events_before_record[chunk[0]]) @@ -305,12 +322,16 @@ def _decode_records(evio_file: EvioFile, record_range, events_before_record: np. events.append(fs.event_words(buffer, offset, length, endian)) record.release() # drop a decompressed buffer early; the views above keep it alive while needed accumulator.absorb(fs.decode_frames(events, first_event_index=first_event_index)) + if progress is not None: + progress(chunk_start + len(chunk), len(record_list)) return accumulator -def _process_range(args) -> Accumulator: +def _process_range(args): + """Worker entry: decode one record range; returns the range too because results arrive unordered.""" start, end, events_before_record, t_first, t_last, n_rate_bins, chunk_records = args - return _decode_records(_worker_file, range(start, end), events_before_record, t_first, t_last, n_rate_bins, chunk_records) + partial = _decode_records(_worker_file, range(start, end), events_before_record, t_first, t_last, n_rate_bins, chunk_records) + return start, end, partial # ---------------------------------------------------------------- result @@ -427,8 +448,14 @@ def load(cls, path: str) -> "StreamStats": def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: int = DEFAULT_RATE_BINS, tick_ns: float = DEFAULT_TICK_NS, max_records: Optional[int] = None, - chunk_records: int = DEFAULT_CHUNK_RECORDS) -> StreamStats: - """Scan, decode and histogram a streaming file. ``workers=1`` runs in-process.""" + chunk_records: int = DEFAULT_CHUNK_RECORDS, progress: Optional[ProgressCallback] = None, + cancel: Optional[CancelCheck] = None) -> StreamStats: + """Scan, decode and histogram a streaming file. ``workers=1`` runs in-process. + + ``progress(records_done, records_total)`` is called after the header scan (0 done) and after + every decoded chunk or task. ``cancel()`` is polled between chunks and tasks; True raises + :class:`StatsCancelled` and, with a worker pool, terminates the workers. + """ t_start = time.perf_counter() workers = default_workers() if workers is None else max(1, int(workers)) with EvioFile(path) as evio_file: @@ -436,22 +463,32 @@ def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: in scan = scan_frames(evio_file, max_records) checks = frame_checks(scan.frames) n_records = scan.n_records + if progress is not None: + progress(0, n_records) last_record = evio_file.get_record(n_records - 1) if n_records else None bytes_processed = last_record.offset + last_record.size if last_record else 0 if workers == 1: partial = _decode_records(evio_file, range(n_records), scan.events_before_record, - checks.first_timestamp, checks.last_timestamp, rate_bins, chunk_records) + checks.first_timestamp, checks.last_timestamp, rate_bins, chunk_records, + progress=progress, cancel=cancel) if workers > 1: n_tasks = min(n_records, workers * 4) or 1 bounds = np.linspace(0, n_records, n_tasks + 1, dtype=np.int64) tasks = [(int(bounds[i]), int(bounds[i + 1]), scan.events_before_record, checks.first_timestamp, checks.last_timestamp, rate_bins, chunk_records) for i in range(n_tasks) if bounds[i] < bounds[i + 1]] partial = Accumulator(checks.first_timestamp, checks.last_timestamp, rate_bins) + records_done = 0 # forkserver: a forked copy of a multi-threaded parent (numpy, pytest) may deadlock; workers re-import pyevio instead. context = multiprocessing.get_context("forkserver") + # Leaving the `with` block (also by StatsCancelled) terminates the workers. with context.Pool(workers, initializer=_init_worker, initargs=(path,)) as pool: - for result in pool.imap_unordered(_process_range, tasks): + for start, end, result in pool.imap_unordered(_process_range, tasks): partial.merge(result) + records_done += end - start + if progress is not None: + progress(records_done, n_records) + if cancel is not None and cancel(): + raise StatsCancelled(f"cancelled after {records_done} of {n_records} records") frames = np.concatenate(partial.frame_rows) if partial.frame_rows else np.empty(0, dtype=FRAME_STATS_DTYPE) frames = frames[np.argsort(frames["event_index"], kind="stable")] From 475bfb6d7e1b1f5a3f89fd4f1c3e1c1d1de9423f Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:24:38 -0400 Subject: [PATCH 27/65] Replace the stdlib viewer server with pyevio.web on FastAPI The server runs pyevio: /api/ls, /api/open (background analysis job per file, cached .npz keyed by sha256(path, size, mtime, STATS_VERSION)), /progress, /summary, /records, /structure, /words, /hist/{name}. Binds 127.0.0.1, requires a random token on /api, rejects Host other than localhost/127.0.0.1, confines every path to the served root after symlink resolution; /api/file is gone. fastapi and uvicorn are the `web` extra; `pyevio web` prints the pip hint when they are missing. Fixes F1 (tests/web/test_web_auth.py: 401 without or with a wrong token, 403 for bad Host, ../, absolute paths and symlinks out of the root; ls lists only under the root), F21 (test_web_api: summary totals and every histogram sum equal compute_stream_stats on the same file; corpus and raw SRO smoke tests under PYEVIO_CORPUS=1/PYEVIO_SRO=1), F22 (open fails with 400/404 before any status: garbage.evio, missing file), F23 (progress reaches done; second open is a cache hit with one compute call; opening another file cancels the running job), F24 (Python logging with status and path; uvicorn access log only with --verbose). F35 server cases landed. Open-to-done: corpus 00000.v6 27.6 s, raw SRO 00000 33.4 s (22 workers); second open immediate from cache. Co-Authored-By: Claude Fable 5.1 --- pyevio/cli/web.py | 28 +- pyevio/web/__init__.py | 121 ++----- pyevio/web/app.py | 99 ++++++ pyevio/web/auth.py | 71 ++++ pyevio/web/cache.py | 58 ++++ pyevio/web/jobs.py | 174 ++++++++++ pyevio/web/report.py | 199 +++++++++++ pyevio/web/routes.py | 123 +++++++ pyevio/web/structure.py | 260 +++++++++++++++ pyproject.toml | 7 + tests/web/conftest.py | 80 +++++ tests/web/test_web_api.py | 305 +++++++++++++++++ tests/web/test_web_auth.py | 61 ++++ tests/web/test_web_corpus.py | 62 ++++ tests/web/test_web_sro.py | 60 ++++ uv.lock | 623 ++++++++++++++++++++++++++++++++++- 16 files changed, 2231 insertions(+), 100 deletions(-) create mode 100644 pyevio/web/app.py create mode 100644 pyevio/web/auth.py create mode 100644 pyevio/web/cache.py create mode 100644 pyevio/web/jobs.py create mode 100644 pyevio/web/report.py create mode 100644 pyevio/web/routes.py create mode 100644 pyevio/web/structure.py create mode 100644 tests/web/conftest.py create mode 100644 tests/web/test_web_api.py create mode 100644 tests/web/test_web_auth.py create mode 100644 tests/web/test_web_corpus.py create mode 100644 tests/web/test_web_sro.py diff --git a/pyevio/cli/web.py b/pyevio/cli/web.py index 83257ca..9f80aaf 100644 --- a/pyevio/cli/web.py +++ b/pyevio/cli/web.py @@ -1,14 +1,26 @@ +import sys + import click @click.command(name="web") -@click.argument("start_dir", type=click.Path(exists=True, file_okay=False), default=".") -@click.option('--port', '-p', default=8765, show_default=True, help="Port to serve on (localhost only)") -@click.option('--no-browser', is_flag=True, help="Do not open a browser tab") -def web_command(start_dir, port, no_browser): - """Browse EVIO files in a web page: checks, plots and structure tree. +@click.argument("root", type=click.Path(exists=True, file_okay=False), default=".") +@click.option("--port", "-p", default=8765, show_default=True, help="Port on 127.0.0.1") +@click.option("--no-browser", is_flag=True, help="Do not open a browser tab") +@click.option("--cache-dir", type=click.Path(file_okay=False), default=None, + help="Where analysis results (.npz) are cached (default: ~/.cache/pyevio/stats)") +@click.option("--workers", "-w", type=int, default=None, help="Worker processes for the analysis (default: cores minus two)") +@click.option("--verbose", "-v", is_flag=True, help="Log every request") +def web_command(root, port, no_browser, cache_dir, workers, verbose): + """Browse EVIO files under ROOT in a web page: checks, plots, records and structure. - START_DIR is the folder the file browser opens in (default: current directory). + The server listens on 127.0.0.1 and prints a URL with a one-time token; only + files under ROOT (default: the current folder) can be opened. """ - from pyevio.web import serve - serve(start_dir, port, open_browser=not no_browser) + try: + from pyevio.web.app import serve + except ImportError: + from pyevio.web import INSTALL_HINT + click.echo(INSTALL_HINT, err=True) + sys.exit(1) + serve(root, port, open_browser=not no_browser, cache_dir=cache_dir, workers=workers, verbose=verbose) diff --git a/pyevio/web/__init__.py b/pyevio/web/__init__.py index f06b547..dc49805 100644 --- a/pyevio/web/__init__.py +++ b/pyevio/web/__init__.py @@ -1,98 +1,37 @@ -"""Local web server for the EVIO stream viewer (index.html), with a folder browser. - -The viewer decodes files in the browser. The server only lists folders and -streams file bytes, and listens on 127.0.0.1. To view files on a remote machine, -run `pyevio web --no-browser` there and connect with -`ssh -L 8765:localhost:8765 user@host`. +"""Web server for the EVIO viewer: the browser renders what pyevio computes. + +``pyevio web ROOT`` serves the viewer page and a JSON API on 127.0.0.1. The API +lists files under ROOT, runs :func:`pyevio.stream_stats.compute_stream_stats` +as a background job per opened file, caches the result as ``.npz`` and serves +the file structure, record headers, raw words and histograms on demand. The +browser never receives the file. + +Modules, one job each: + +- ``app``: the FastAPI factory, logging and ``serve()``. +- ``auth``: Host check, token check and path confinement to ROOT. +- ``jobs``: opened files, the analysis job thread and its progress. +- ``cache``: ``.npz`` result cache keyed by path, size, mtime and stats version. +- ``structure``: tree nodes, record pages and raw words from pyevio core. +- ``report``: summary and histogram JSON from ``StreamStats``. +- ``routes``: the ``/api`` endpoints. + +FastAPI and uvicorn are the optional extra ``pyevio[web]``; this package +imports them only inside ``app`` and ``routes`` so the core library stays free +of web dependencies. """ -import functools -import http.server -import json -import os -import shutil -import webbrowser from pathlib import Path -from urllib.parse import parse_qs, urlparse - -HERE = Path(__file__).resolve().parent -EVIO_SUFFIXES = {".evio", ".dat"} - - -class Handler(http.server.SimpleHTTPRequestHandler): - start_dir = str(Path.cwd()) - - def do_GET(self): - url = urlparse(self.path) - q = {k: v[0] for k, v in parse_qs(url.query).items()} - if url.path == "/api/start": - return self._json({"dir": self.start_dir}) - if url.path == "/api/ls": - return self._ls(q.get("dir", self.start_dir), q.get("all") == "1") - if url.path == "/api/file": - return self._file(q.get("path", "")) - if url.path not in ("/", "/index.html"): - return self.send_error(404) - return super().do_GET() - - def _json(self, obj, code=200): - body = json.dumps(obj).encode() - self.send_response(code) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(body))) - self.send_header("Cache-Control", "no-store") - self.end_headers() - self.wfile.write(body) - def _ls(self, d, show_all): - p = Path(os.path.expanduser(d)).resolve() - if p.is_file(): - p = p.parent - if not p.is_dir(): - return self._json({"error": f"Folder not found: {p}"}, 404) - dirs, files = [], [] - try: - for e in sorted(os.scandir(p), key=lambda e: e.name.lower()): - if e.name.startswith("."): - continue - try: - if e.is_dir(): - dirs.append(e.name) - elif e.is_file() and (show_all or Path(e.name).suffix.lower() in EVIO_SUFFIXES): - files.append({"name": e.name, "size": e.stat().st_size}) - except OSError: - continue - except PermissionError: - return self._json({"error": f"No permission to read {p}"}, 403) - parent = str(p.parent) if p.parent != p else None - return self._json({"dir": str(p), "parent": parent, "dirs": dirs, "files": files}) - def _file(self, path): - p = Path(os.path.expanduser(path)).resolve() - if not p.is_file(): - return self._json({"error": f"File not found: {p}"}, 404) - size = p.stat().st_size - self.send_response(200) - self.send_header("Content-Type", "application/octet-stream") - self.send_header("Content-Length", str(size)) - self.end_headers() - with open(p, "rb") as f: - shutil.copyfileobj(f, self.wfile, 1 << 20) +class ApiError(Exception): + """A request the API rejects; ``status`` is the HTTP status, ``message`` the JSON ``error`` text.""" - def log_message(self, fmt, *args): # keep the terminal quiet except for errors - if args and str(args[1]).startswith(("4", "5")): - super().log_message(fmt, *args) + def __init__(self, status: int, message: str): + super().__init__(message) + self.status = status + self.message = message -def serve(start_dir=".", port=8765, open_browser=True): - """Serve the viewer at http://localhost: until Ctrl+C.""" - Handler.start_dir = str(Path(os.path.expanduser(start_dir)).resolve()) - handler = functools.partial(Handler, directory=str(HERE)) - with http.server.ThreadingHTTPServer(("127.0.0.1", port), handler) as httpd: - url = f"http://localhost:{port}/index.html" - print(f"Viewer: {url} (Ctrl+C to stop)\nFile browser starts in: {Handler.start_dir}") - if open_browser: - webbrowser.open(url) - try: - httpd.serve_forever() - except KeyboardInterrupt: - pass +WEB_DIR = Path(__file__).resolve().parent +INDEX_HTML = WEB_DIR / "index.html" +INSTALL_HINT = "The web viewer needs FastAPI and uvicorn: pip install 'pyevio[web]'" diff --git a/pyevio/web/app.py b/pyevio/web/app.py new file mode 100644 index 0000000..0ca7e47 --- /dev/null +++ b/pyevio/web/app.py @@ -0,0 +1,99 @@ +"""FastAPI application factory and ``serve()``. + +``create_app`` takes everything a test needs to inject: the served root, the +token, the cache directory and the worker count for the statistics pool. The +uvicorn process count is always 1 because the job registry lives in memory. +""" +import logging +import webbrowser +from pathlib import Path +from typing import Optional + +from fastapi import FastAPI, Request +from fastapi.exceptions import RequestValidationError +from fastapi.responses import FileResponse, JSONResponse + +from pyevio.web import INDEX_HTML, WEB_DIR, ApiError +from pyevio.web.auth import TOKEN_HEADER, TOKEN_QUERY_PARAM, check_request, new_token, resolve_under_root +from pyevio.web.cache import StatsCache +from pyevio.web.jobs import FileRegistry +from pyevio.web.routes import router + +log = logging.getLogger("pyevio.web") + +STATIC_SUFFIXES = (".html", ".js", ".css", ".svg", ".png", ".ico") + + +def create_app(root: Path, token: str, cache_dir: Optional[Path] = None, stats_workers: Optional[int] = None) -> FastAPI: + root = Path(root).expanduser().resolve() + if not root.is_dir(): + raise ValueError(f"served root is not a folder: {root}") + app = FastAPI(title="pyevio web", docs_url=None, redoc_url=None, openapi_url=None) + app.state.root = root + app.state.token = token + app.state.registry = FileRegistry(root, StatsCache(cache_dir), stats_workers) + + @app.middleware("http") + async def guard(request: Request, call_next): + token_given = request.query_params.get(TOKEN_QUERY_PARAM) or request.headers.get(TOKEN_HEADER) + try: + check_request(request.headers.get("host"), request.url.path, token_given, token) + except ApiError as error: + log.warning("%d %s %s: %s", error.status, request.method, request.url.path, error.message) + return JSONResponse({"error": error.message}, status_code=error.status) + return await call_next(request) + + @app.exception_handler(ApiError) + async def api_error(request: Request, error: ApiError): + log.warning("%d %s %s: %s", error.status, request.method, request.url.path, error.message) + return JSONResponse({"error": error.message}, status_code=error.status) + + @app.exception_handler(RequestValidationError) + async def bad_parameters(request: Request, error: RequestValidationError): + # One error shape for every failure: {"error": "..."}; FastAPI's default is {"detail": [...]}. + message = "; ".join(f"{'.'.join(str(part) for part in item['loc'])}: {item['msg']}" for item in error.errors()) + log.warning("422 %s %s: %s", request.method, request.url.path, message) + return JSONResponse({"error": message}, status_code=422) + + @app.exception_handler(ValueError) + async def not_readable(request: Request, error: ValueError): + # EvioFile raises ValueError for files it does not read (wrong version, no magic word). + log.warning("400 %s %s: %s", request.method, request.url.path, error) + return JSONResponse({"error": str(error)}, status_code=400) + + @app.exception_handler(OSError) + async def not_accessible(request: Request, error: OSError): + log.warning("404 %s %s: %s", request.method, request.url.path, error) + return JSONResponse({"error": str(error)}, status_code=404) + + @app.get("/", include_in_schema=False) + @app.get("/index.html", include_in_schema=False) + def index(): + return FileResponse(INDEX_HTML) + + @app.get("/{asset_name}", include_in_schema=False) + def asset(asset_name: str): + """Files beside index.html (scripts, styles); nothing outside the package folder.""" + path = resolve_under_root(WEB_DIR, asset_name) + if path.suffix not in STATIC_SUFFIXES or not path.is_file(): + raise ApiError(404, f"no such page: {asset_name}") + return FileResponse(path) + + app.include_router(router) + return app + + +def serve(root: str = ".", port: int = 8765, open_browser: bool = True, cache_dir: Optional[str] = None, + workers: Optional[int] = None, verbose: bool = False) -> None: + """Serve the viewer on 127.0.0.1 until Ctrl+C; prints the URL that carries the token.""" + import uvicorn + + logging.basicConfig(level=logging.DEBUG if verbose else logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s") + token = new_token() + app = create_app(Path(root), token, Path(cache_dir) if cache_dir else None, workers) + url = f"http://127.0.0.1:{port}/?{TOKEN_QUERY_PARAM}={token}" + # flush: with stdout redirected to a file (ssh session logs), the URL must appear before uvicorn blocks. + print(f"pyevio web: {url}\nFiles under: {app.state.root}\nCache: {app.state.registry.cache.directory}\n(Ctrl+C to stop)", flush=True) + if open_browser: + webbrowser.open(url) + uvicorn.run(app, host="127.0.0.1", port=port, workers=1, access_log=verbose, log_level="info" if verbose else "warning") diff --git a/pyevio/web/auth.py b/pyevio/web/auth.py new file mode 100644 index 0000000..340798a --- /dev/null +++ b/pyevio/web/auth.py @@ -0,0 +1,71 @@ +"""Request guards: Host check, token check and path confinement to the served root. + +The server binds 127.0.0.1, which keeps other machines out but not other +local users or web pages. Three checks close those holes: + +- A random token, printed once in the start URL and required on every + ``/api`` request, so another local user cannot read the owner's files by + guessing the port. +- A ``Host`` header limited to ``localhost``/``127.0.0.1``: a web page can + reach a local server through DNS rebinding (its hostname resolves to + 127.0.0.1 after the page loaded), and such requests carry the page's host + name. The check rejects them. +- Every path parameter is resolved (symlinks included) and must stay inside + the resolved root, so ``../`` and a symlink to ``~/.ssh`` are rejected. +""" +import secrets +from pathlib import Path +from typing import Optional + +from pyevio.web import ApiError + +ALLOWED_HOSTS = frozenset({"localhost", "127.0.0.1"}) +TOKEN_QUERY_PARAM = "token" +TOKEN_HEADER = "x-token" + + +def new_token() -> str: + return secrets.token_urlsafe(32) + + +def host_allowed(host_header: Optional[str]) -> bool: + """True for ``localhost`` or ``127.0.0.1`` with an optional ``:port``.""" + if not host_header: + return False + host = host_header.rsplit(":", 1)[0] if host_header.count(":") == 1 else host_header + return host.lower() in ALLOWED_HOSTS + + +def check_request(host_header: Optional[str], path: str, token_given: Optional[str], token_expected: str) -> None: + """Raise :class:`ApiError` for a bad Host (403) or, on ``/api`` paths, a missing or wrong token (401). + + The token travels in the URL (``?token=``) because the viewer page is opened + from a printed link; a header (``X-Token``) serves scripted clients. + """ + if not host_allowed(host_header): + raise ApiError(403, f"Host {host_header!r} is not localhost; the viewer serves local pages only") + if path.startswith("/api/"): + if not token_given or not secrets.compare_digest(token_given, token_expected): + raise ApiError(401, "missing or wrong token; use the URL printed by `pyevio web`") + + +def resolve_under_root(root: Path, relative: str) -> Path: + """Resolve ``relative`` against ``root`` and return it; raise :class:`ApiError` (403) when it leaves the root. + + ``root`` must already be resolved. Resolution follows symlinks, so a link that + points outside the root is rejected the same way as ``../``. An absolute + ``relative`` replaces the root in the join and is rejected unless it lies inside. + """ + candidate = (root / relative).resolve() + if candidate != root and root not in candidate.parents: + raise ApiError(403, f"path {relative!r} is outside the served root") + return candidate + + +def inside_root(root: Path, path: Path) -> bool: + """True when ``path`` (resolved) is the root or below it.""" + try: + resolved = path.resolve() + except OSError: + return False + return resolved == root or root in resolved.parents diff --git a/pyevio/web/cache.py b/pyevio/web/cache.py new file mode 100644 index 0000000..4a396cc --- /dev/null +++ b/pyevio/web/cache.py @@ -0,0 +1,58 @@ +"""Result cache: one ``.npz`` per analyzed file under the cache directory. + +The key is sha256 over the resolved path, the file size, its mtime (ns) and +``STATS_VERSION``, so a rewritten file or a changed statistics layout misses +the cache instead of serving stale numbers. The key doubles as the viewer's +``file_id``: opening the same unchanged file twice yields the same id and the +cached result. +""" +import hashlib +import logging +import os +from pathlib import Path +from typing import Optional + +from pyevio.stream_stats import STATS_VERSION, StreamStats + +log = logging.getLogger("pyevio.web") + +DEFAULT_CACHE_DIR = Path("~/.cache/pyevio/stats") + + +def cache_key(path: Path) -> str: + """sha256 of (resolved path, size, mtime_ns, STATS_VERSION) as hex.""" + stat = path.stat() + digest = hashlib.sha256() + for part in (str(path), stat.st_size, stat.st_mtime_ns, STATS_VERSION): + digest.update(str(part).encode()) + digest.update(b"\0") + return digest.hexdigest() + + +class StatsCache: + """Load and save :class:`StreamStats` by key; every failure to load counts as a miss.""" + + def __init__(self, directory: Optional[Path] = None): + self.directory = (directory or DEFAULT_CACHE_DIR).expanduser().resolve() + + def path_for(self, key: str) -> Path: + return self.directory / f"{key}.npz" + + def load(self, key: str) -> Optional[StreamStats]: + path = self.path_for(key) + if not path.is_file(): + return None + try: + return StreamStats.load(str(path)) + except (OSError, ValueError, KeyError) as error: + log.warning("cache entry %s unreadable (%s); recomputing", path, error) + return None + + def save(self, key: str, stats: StreamStats) -> Path: + """Write atomically: numpy appends ``.npz`` to any other suffix, so the temporary name ends in ``.npz`` too.""" + self.directory.mkdir(parents=True, exist_ok=True) + final = self.path_for(key) + partial = self.directory / f"{key}.partial.npz" + stats.save(str(partial)) + os.replace(partial, final) + return final diff --git a/pyevio/web/jobs.py b/pyevio/web/jobs.py new file mode 100644 index 0000000..d24cd2c --- /dev/null +++ b/pyevio/web/jobs.py @@ -0,0 +1,174 @@ +"""Opened files and their analysis jobs. + +``FileRegistry.open`` validates a path (it must open as an EVIO file before any +status is sent), derives the ``file_id`` from the cache key and either returns +the cached statistics or starts one :class:`AnalysisJob`. One job runs at a +time: opening another file cancels the running job, since the viewer shows one +file and a 15 GB analysis would otherwise keep every core busy for nothing. + +A job is a daemon thread around ``compute_stream_stats`` (which runs its own +worker pool). Progress comes from the callback the stats module calls after +every decoded task; cancellation is a flag the stats module polls between +tasks and chunks. +""" +import logging +import threading +import time +from dataclasses import dataclass, field +from pathlib import Path +from typing import Dict, Optional + +from pyevio.evio_file import EvioFile +from pyevio.stream_stats import StatsCancelled, StreamStats, compute_stream_stats +from pyevio.web import ApiError +from pyevio.web.auth import resolve_under_root +from pyevio.web.cache import StatsCache, cache_key + +log = logging.getLogger("pyevio.web") + +STATE_QUEUED, STATE_RUNNING, STATE_DONE, STATE_ERROR, STATE_CANCELLED = "queued", "running", "done", "error", "cancelled" + + +class AnalysisJob: + """Runs ``compute_stream_stats`` for one file in a thread and tracks its progress.""" + + def __init__(self, file_id: str, path: Path, key: str, cache: StatsCache, workers: Optional[int]): + self.file_id, self.path, self.key, self.cache, self.workers = file_id, path, key, cache, workers + self.state = STATE_QUEUED + self.records_done = 0 + self.records_total = 0 + self.error: Optional[str] = None + self.stats: Optional[StreamStats] = None + self.started_at: Optional[float] = None + self.finished_at: Optional[float] = None + self._cancel = threading.Event() + self._thread = threading.Thread(target=self._run, name=f"pyevio-stats-{file_id[:8]}", daemon=True) + + def start(self) -> None: + self._thread.start() + + def cancel(self) -> None: + self._cancel.set() + + @property + def is_active(self) -> bool: + return self.state in (STATE_QUEUED, STATE_RUNNING) + + def _progress(self, records_done: int, records_total: int) -> None: + self.records_done, self.records_total = records_done, records_total + + def _run(self) -> None: + self.state = STATE_RUNNING + self.started_at = time.monotonic() + try: + # The module-level name is looked up at run time so tests can substitute it. + stats = compute_stream_stats(str(self.path), workers=self.workers, progress=self._progress, + cancel=self._cancel.is_set) + if self._cancel.is_set(): + raise StatsCancelled("cancelled after the last task") + try: + self.cache.save(self.key, stats) + except OSError as error: # an unwritable cache dir must not turn a finished analysis into an error + log.warning("cannot cache the result of %s: %s", self.path, error) + self.stats = stats + self.state = STATE_DONE + log.info("analyzed %s in %.1f s (%d records)", self.path, stats.wall_seconds, stats.n_records) + except StatsCancelled: + self.state = STATE_CANCELLED + log.info("cancelled analysis of %s", self.path) + except Exception as error: # the job must record every failure; the thread has no other outlet + self.state = STATE_ERROR + self.error = f"{type(error).__name__}: {error}" + log.exception("analysis of %s failed", self.path) + finally: + self.finished_at = time.monotonic() + + def snapshot(self) -> dict: + """Progress as the ``/progress`` endpoint reports it.""" + now = self.finished_at or time.monotonic() + elapsed = (now - self.started_at) if self.started_at else 0.0 + fraction = self.records_done / self.records_total if self.records_total else (1.0 if self.state == STATE_DONE else 0.0) + eta = (elapsed / fraction - elapsed) if (self.state == STATE_RUNNING and 0 < fraction < 1) else None + return {"state": self.state, "fraction": fraction, "records_done": self.records_done, + "records_total": self.records_total, "elapsed_s": elapsed, "eta_s": eta, "error": self.error} + + +@dataclass +class OpenFile: + """One file the viewer opened: identity, its job (if any) and its statistics once known.""" + file_id: str + path: Path # resolved, inside the root + relative: str + key: str + job: Optional[AnalysisJob] = None + stats: Optional[StreamStats] = None + from_cache: bool = False + opened_at: float = field(default_factory=time.monotonic) + + def progress(self) -> dict: + """Progress as ``/progress`` reports it; a file without a job came from the cache.""" + if self.job is None: + n_records = self.stats.n_records if self.stats is not None else 0 + return {"state": STATE_DONE, "fraction": 1.0, "records_done": n_records, "records_total": n_records, + "elapsed_s": 0.0, "eta_s": None, "error": None, "cached": True} + snapshot = self.job.snapshot() + snapshot["cached"] = False + return snapshot + + +class FileRegistry: + """Files opened through the API, by ``file_id``; starts and cancels their jobs.""" + + def __init__(self, root: Path, cache: StatsCache, workers: Optional[int] = None): + self.root = root + self.cache = cache + self.workers = workers + self.files: Dict[str, OpenFile] = {} + self.active_job: Optional[AnalysisJob] = None + self._lock = threading.Lock() + + def open(self, relative: str) -> OpenFile: + """Open ``relative`` (under the root), return its entry and start its job unless the result is cached.""" + path = resolve_under_root(self.root, relative) + if not path.is_file(): + raise ApiError(404, f"no such file under the served root: {relative!r}") + # Open before answering: an unreadable or non-EVIO file fails here with its reason. + with EvioFile(str(path)): + pass + key = cache_key(path) + file_id = key[:16] + with self._lock: + entry = self.files.get(file_id) + if entry is None: + entry = OpenFile(file_id=file_id, path=path, relative=relative, key=key) + self.files[file_id] = entry + if entry.stats is None: + entry.stats = self.cache.load(key) + entry.from_cache = entry.stats is not None + if entry.stats is None and (entry.job is None or not entry.job.is_active): + self._start_job(entry) + return entry + + def _start_job(self, entry: OpenFile) -> None: + if self.active_job is not None and self.active_job.is_active and self.active_job.file_id != entry.file_id: + log.info("cancelling analysis of %s: %s opened", self.active_job.path, entry.path) + self.active_job.cancel() + entry.job = AnalysisJob(entry.file_id, entry.path, entry.key, self.cache, self.workers) + self.active_job = entry.job + entry.job.start() + + def get(self, file_id: str) -> OpenFile: + entry = self.files.get(file_id) + if entry is None: + raise ApiError(404, f"unknown file id {file_id!r}; open the file first") + return entry + + def stats_of(self, file_id: str) -> StreamStats: + """The statistics of a finished job; 409 while the analysis is not done.""" + entry = self.get(file_id) + if entry.stats is None and entry.job is not None and entry.job.state == STATE_DONE: + entry.stats = entry.job.stats + if entry.stats is None: + state = entry.job.state if entry.job else STATE_QUEUED + raise ApiError(409, f"analysis of {entry.relative!r} is {state}; poll /progress until done") + return entry.stats diff --git a/pyevio/web/report.py b/pyevio/web/report.py new file mode 100644 index 0000000..9087d87 --- /dev/null +++ b/pyevio/web/report.py @@ -0,0 +1,199 @@ +"""Summary and histogram JSON from a :class:`StreamStats` and the file's record headers. + +Ratios whose denominator is zero are the string ``"n/a"``: a file with frames +but no hits has no hit rate, and the viewer prints the string as given instead +of ``NaN``. +""" +from dataclasses import asdict +from typing import Optional + +import numpy as np + +from pyevio.decoders import fadc250_stream as fs +from pyevio.evio_file import EvioFile +from pyevio.stream_stats import N_CHANNELS, StreamStats +from pyevio.web import ApiError + +HISTOGRAM_NAMES = ("hits_per_frame", "rate", "occupancy", "charge", "time_in_frame") +NOT_AVAILABLE = "n/a" + + +def ratio(numerator: float, denominator: float): + return numerator / denominator if denominator else NOT_AVAILABLE + + +# ---------------------------------------------------------------- summary +def record_table_summary(evio_file: EvioFile) -> dict: + """One pass over the record headers: counts the viewer's record table shows at the top.""" + sizes, events, events_found, with_errors, last_bit, compressed, without_index, truncated = [], 0, 0, 0, 0, 0, 0, 0 + for record_i in range(evio_file.record_count): + record = evio_file.get_record(record_i) + found = record.scan_events() # decompresses a compressed record; released below + sizes.append(record.size) + events += record.header.event_count + events_found += len(found) + with_errors += bool(record.errors) + last_bit += record.header.is_last_record + compressed += record.compression_type != record.COMPRESSION_NONE + without_index += record.header.index_array_length == 0 + truncated += record.is_truncated + record.release() + return {"count": evio_file.record_count, "has_trailer": evio_file.trailer is not None, "events": events, + "events_found": events_found, "with_errors": with_errors, "last_record_bit": last_bit, "compressed": compressed, + "without_index": without_index, "truncated": truncated, "min_size": min(sizes) if sizes else 0, + "max_size": max(sizes) if sizes else 0, "mean_size": ratio(sum(sizes), len(sizes))} + + +def file_scan_checks(evio_file: EvioFile) -> list: + """``EvioFile.checks`` tuples as check rows: a truncated tail and record headers the scan could not read.""" + rows = [] + for check in evio_file.checks: + if check[0] == "truncated_tail": + _, declared, present, salvaged = check + rows.append({"name": "truncated tail", "status": "error", "value": declared - present, + "detail": f"last record declares {declared} bytes, {present} present; {salvaged} complete events kept"}) + elif check[0] == "bad_record_header": + _, offset, message = check + rows.append({"name": "bad record header", "status": "error", "value": offset, "detail": f"scan stopped at 0x{offset:X}: {message}"}) + else: + rows.append({"name": check[0], "status": "warn", "value": None, "detail": repr(check[1:])}) + return rows + + +def file_checks(evio_file: EvioFile, records: dict, stats: StreamStats) -> list: + """Checks as ``{name, status, value, detail}`` rows; status is ok, info, warn or error.""" + checks = stats.checks + + def row(name, status, value, detail=""): + return {"name": name, "status": status, "value": value, "detail": detail} + + rows = [ + row("header layout", "info", evio_file.header_layout, f"{evio_file.header.file_type}, version {evio_file.header.version}"), + row("trailer", "ok" if records["has_trailer"] else "warn", records["has_trailer"], "" if records["has_trailer"] else "file ends without a trailer record"), + *file_scan_checks(evio_file), + row("record errors", "error" if records["with_errors"] else "ok", records["with_errors"], "records whose event walk stopped early"), + row("events found", "ok" if records["events_found"] == records["events"] else "error", records["events_found"], + f"headers declare {records['events']}"), + row("last-record bit", "info", records["last_record_bit"], "records with the last-record bit set"), + row("compressed records", "info", records["compressed"], ""), + row("records without index", "info", records["without_index"], ""), + row("out-of-bounds events", "error" if stats.n_out_of_bounds_events else "ok", stats.n_out_of_bounds_events, "events whose range runs past the file"), + row("stream frames", "info", stats.n_frames, f"of {stats.n_events} events; {stats.n_other_events} other"), + row("frame stride", "info", checks.stride, "most common frame-number step (4 = one stripe of a 4-way run)"), + row("missing frames", "warn" if checks.missing_frames else "ok", checks.missing_frames, "counted in steps of the stride"), + row("duplicate frames", "warn" if checks.duplicate_frames else "ok", checks.duplicate_frames, ""), + row("out-of-order frames", "warn" if checks.out_of_order else "ok", checks.out_of_order, ""), + row("timestamp-step outliers", "warn" if checks.dts_outliers else "ok", checks.dts_outliers, + f"median step {checks.frame_period_ticks:.0f} ticks"), + row("decode errors", "error" if stats.errors else "ok", stats.errors, stats.error_messages[0] if stats.error_messages else ""), + row("flag words", "warn" if stats.n_flag_words else "ok", stats.n_flag_words, "hit words with bit 31 set"), + row("unmapped payload banks", "warn" if stats.n_unmapped_payload_banks else "ok", stats.n_unmapped_payload_banks, + "ports absent from the 0x41 payload map, decoded as fADC250"), + ] + return rows + + +def per_roc_rows(stats: StreamStats) -> list: + hits = stats.hits_per_roc() + rows = [] + for roc_i, roc in enumerate(stats.rocs.tolist()): + modules = sorted({int(m) for m in stats.module_id[roc_i] if m != fs.MODULE_UNKNOWN}) + ports = [int(p) for p, m in zip(stats.ports, stats.module_id[roc_i]) if m != fs.MODULE_UNKNOWN] + rows.append({"roc": roc, "modules": [fs.MODULE_NAMES.get(m, str(m)) for m in modules], "ports": ports, + "hits": hits[roc], "non_fadc_words": int(stats.non_fadc_words_per_port[roc_i].sum()), + "empty_banks": int(stats.empty_banks[roc_i].sum())}) + return rows + + +def build_summary(evio_file: EvioFile, stats: StreamStats, relative_path: str, from_cache: bool) -> dict: + header = evio_file.header + records = record_table_summary(evio_file) + totals = {name: getattr(stats, name) for name in StreamStats.SCALAR_FIELDS if name not in ("version", "path", "tick_ns", "workers", "wall_seconds")} + totals.update({ + "duration_s": stats.duration_s, "live_time_s": stats.live_time_s, "frame_period_ns": stats.frame_period_ns, + "hit_rate_hz": ratio(stats.n_hits, stats.live_time_s), "hits_per_frame": ratio(stats.n_hits, stats.n_frames), + "stream_fraction": ratio(stats.n_frames, stats.n_events), + "modules": [{"id": int(m), "name": fs.MODULE_NAMES.get(int(m), str(m)), "words": int(w)} + for m, w in zip(stats.module_ids, stats.module_words)], + }) + return { + "file": {"path": relative_path, "size": evio_file.file_size, "header_layout": evio_file.header_layout, + "endian": header.endian, "file_type": header.file_type, "version": header.version, + "record_count": evio_file.record_count, "has_trailer": evio_file.trailer is not None, + "header_record_count": header.record_count, "trailer_position": header.trailer_position, + "first_record_offset": evio_file.first_record_offset, "index_array_length": header.index_array_length, + "user_header_length": header.user_header_length}, + "records": records, + "scan_checks": [list(check) for check in evio_file.checks], + "totals": totals, + "frames": {**asdict(stats.checks), "frame_period_ns": stats.frame_period_ns}, + "rocs": per_roc_rows(stats), + "checks": file_checks(evio_file, records, stats), + "stats": {"version": stats.version, "workers": stats.workers, "wall_seconds": stats.wall_seconds, "tick_ns": stats.tick_ns, + "bytes_processed": stats.bytes_processed, "cached": from_cache}, + } + + +# ---------------------------------------------------------------- histograms +def _axis_index(values: np.ndarray, value: int, what: str) -> int: + position = int(np.searchsorted(values, value)) + if position >= len(values) or int(values[position]) != value: + raise ApiError(404, f"{what} {value} not in the file (have {values.tolist()})") + return position + + +def _select(stats: StreamStats, hist: np.ndarray, roc: Optional[int], port: Optional[int], channel: Optional[int]) -> np.ndarray: + """Reduce a (roc, port, channel, …) array to the selection, summing the axes left open.""" + if roc is None and (port is not None or channel is not None): + raise ApiError(400, "port and ch need a roc") + if port is None and channel is not None: + raise ApiError(400, "ch needs a port") + if channel is not None and not 0 <= channel < N_CHANNELS: + raise ApiError(404, f"channel {channel} outside 0—{N_CHANNELS - 1}") + if roc is not None: + hist = hist[_axis_index(stats.rocs, roc, "ROC")] + if port is not None: + hist = hist[_axis_index(stats.ports, port, "port")] + if channel is not None: + hist = hist[channel] + return hist + return hist.sum(axis=0) + return hist.sum(axis=(0, 1)) + return hist.sum(axis=(0, 1, 2)) + + +def histogram(stats: StreamStats, name: str, roc: Optional[int] = None, port: Optional[int] = None, + channel: Optional[int] = None) -> dict: + """One histogram as JSON lists; counts sum to the file totals (hits, or frames for ``hits_per_frame``).""" + selection = {"roc": roc, "port": port, "ch": channel} + if name == "hits_per_frame": + return {"name": name, "counts": stats.hits_per_frame_hist.tolist(), "edges": stats.hits_per_frame_edges.tolist(), + "x_unit": "hits per frame", "y_unit": "frames", "selection": selection} + if name == "rate": + counts = _select(stats, stats.rate_counts, roc, port, channel) + seconds = stats.frames_per_rate_bin * stats.frame_period_ns * 1e-9 + rate_hz = np.divide(counts, seconds, out=np.zeros(len(counts)), where=seconds > 0) + return {"name": name, "counts": counts.tolist(), "rate_hz": rate_hz.tolist(), "edges_ns": stats.rate_edges_ns.tolist(), + "frames_per_bin": stats.frames_per_rate_bin.tolist(), "x_unit": "ns from the first frame", "y_unit": "Hz", + "selection": selection} + if name == "occupancy": + counts = stats.occupancy + if roc is not None: + counts = counts[_axis_index(stats.rocs, roc, "ROC")] + if port is not None: + counts = counts[_axis_index(stats.ports, port, "port")] + if channel is not None: + if not 0 <= channel < N_CHANNELS: + raise ApiError(404, f"channel {channel} outside 0—{N_CHANNELS - 1}") + counts = counts[channel:channel + 1] + elif port is not None or channel is not None: + raise ApiError(400, "port and ch need a roc") + return {"name": name, "rocs": stats.rocs.tolist(), "ports": stats.ports.tolist(), "channels": N_CHANNELS, + "module_id": stats.module_id.tolist(), "counts": counts.tolist(), "y_unit": "hits", "selection": selection} + if name == "charge": + return {"name": name, "counts": _select(stats, stats.charge_hist, roc, port, channel).tolist(), + "edges": stats.charge_edges.tolist(), "x_unit": "charge (13-bit ADC units)", "y_unit": "hits", "selection": selection} + if name == "time_in_frame": + return {"name": name, "counts": _select(stats, stats.time_hist, roc, port, channel).tolist(), + "edges_ns": stats.time_edges_ns.tolist(), "x_unit": "ns from the frame start", "y_unit": "hits", "selection": selection} + raise ApiError(404, f"unknown histogram {name!r}; names: {', '.join(HISTOGRAM_NAMES)}") diff --git a/pyevio/web/routes.py b/pyevio/web/routes.py new file mode 100644 index 0000000..f61228d --- /dev/null +++ b/pyevio/web/routes.py @@ -0,0 +1,123 @@ +"""The ``/api`` endpoints. Every handler is thin: resolve, open the file, call core or stats, return JSON. + +File endpoints open the ``EvioFile`` first, so a file that vanished or cannot be +read fails with a status instead of a broken response. Opening is cheap (a +header scan, ~50 ms on a 15 GB file) and a fresh handle per request keeps the +record cache from growing across requests. +""" +import os +from pathlib import Path +from typing import Optional + +from fastapi import APIRouter, Query, Request +from pydantic import BaseModel + +from pyevio.evio_file import EvioFile +from pyevio.web import ApiError +from pyevio.web.auth import inside_root, resolve_under_root +from pyevio.web.jobs import FileRegistry +from pyevio.web.report import build_summary, histogram +from pyevio.web.structure import DEFAULT_CHILDREN, MAX_CHILDREN, MAX_WORDS, children_of, record_rows, words_at + +router = APIRouter(prefix="/api") + +# Files the folder browser lists by default; the corpus names end in ".evio.00000.v6", so match the stem too. +EVIO_NAME_MARKERS = (".evio", ".dat", ".ev") + + +def is_evio_name(name: str) -> bool: + lower = name.lower() + return any(marker in lower for marker in EVIO_NAME_MARKERS) + + +def registry_of(request: Request) -> FileRegistry: + return request.app.state.registry + + +class OpenRequest(BaseModel): + path: str + + +@router.get("/ls") +def list_directory(request: Request, dir: str = "", all: bool = False) -> dict: + """Folders and EVIO files of one directory under the root; paths are relative to the root.""" + root: Path = request.app.state.root + directory = resolve_under_root(root, dir) + if not directory.is_dir(): + raise ApiError(404, f"no such folder under the served root: {dir!r}") + dirs, files = [], [] + try: + entries = sorted(os.scandir(directory), key=lambda entry: entry.name.lower()) + except PermissionError: + raise ApiError(403, f"no permission to read {dir!r}") + for entry in entries: + if entry.name.startswith(".") or not inside_root(root, Path(entry.path)): + continue # hidden, or a symlink that leaves the root: it could not be opened anyway + try: + if entry.is_dir(): + dirs.append(entry.name) + elif entry.is_file() and (all or is_evio_name(entry.name)): + stat = entry.stat() + files.append({"name": entry.name, "size": stat.st_size, "mtime": stat.st_mtime}) + except OSError: + continue + relative = directory.relative_to(root).as_posix() if directory != root else "" + parent = None if directory == root else (directory.parent.relative_to(root).as_posix() if directory.parent != root else "") + return {"dir": relative, "parent": parent, "dirs": dirs, "files": files} + + +@router.post("/open") +def open_file(request: Request, body: OpenRequest) -> dict: + """Open a file under the root; starts its analysis unless cached. Returns the file id and the job state.""" + entry = registry_of(request).open(body.path) + return {"file_id": entry.file_id, "path": entry.relative, "size": entry.path.stat().st_size, **entry.progress()} + + +@router.get("/files/{file_id}/progress") +def progress(request: Request, file_id: str) -> dict: + return {"file_id": file_id, **registry_of(request).get(file_id).progress()} + + +@router.get("/files/{file_id}/summary") +def summary(request: Request, file_id: str) -> dict: + registry = registry_of(request) + entry = registry.get(file_id) + stats = registry.stats_of(file_id) + with EvioFile(str(entry.path)) as evio_file: + return {"file_id": file_id, **build_summary(evio_file, stats, entry.relative, entry.from_cache)} + + +@router.get("/files/{file_id}/records") +def records(request: Request, file_id: str, start: int = Query(0, alias="from", ge=0), + count: int = Query(DEFAULT_CHILDREN, ge=0, le=MAX_CHILDREN)) -> dict: + entry = registry_of(request).get(file_id) + with EvioFile(str(entry.path)) as evio_file: + return {"file_id": file_id, **record_rows(evio_file, start, count)} + + +@router.get("/files/{file_id}/structure") +def structure(request: Request, file_id: str, node: str = "", start: int = Query(0, alias="from", ge=0), + count: int = Query(DEFAULT_CHILDREN, ge=0, le=MAX_CHILDREN)) -> dict: + entry = registry_of(request).get(file_id) + with EvioFile(str(entry.path)) as evio_file: + return {"file_id": file_id, **children_of(evio_file, node, start, count)} + + +@router.get("/files/{file_id}/words") +def words(request: Request, file_id: str, offset: int = Query(..., ge=0), count: int = Query(64, ge=0), + record: Optional[int] = Query(None, ge=0)) -> dict: + """Raw 32-bit words as hex strings; ``count`` is capped at MAX_WORDS. + + ``offset`` is a file offset, or with ``record=N`` an offset into that record's + buffer (the decompressed bytes of an LZ4/gzip record), as the structure tree reports them. + """ + entry = registry_of(request).get(file_id) + with EvioFile(str(entry.path)) as evio_file: + return {"file_id": file_id, **words_at(evio_file, offset, min(count, MAX_WORDS), record)} + + +@router.get("/files/{file_id}/hist/{name}") +def hist(request: Request, file_id: str, name: str, roc: Optional[int] = None, port: Optional[int] = None, + ch: Optional[int] = None) -> dict: + stats = registry_of(request).stats_of(file_id) + return {"file_id": file_id, **histogram(stats, name, roc, port, ch)} diff --git a/pyevio/web/structure.py b/pyevio/web/structure.py new file mode 100644 index 0000000..e46e1f3 --- /dev/null +++ b/pyevio/web/structure.py @@ -0,0 +1,260 @@ +"""Tree nodes, record pages and raw words, read through pyevio core. + +Node ids are strings the viewer passes back unchanged: + +- ``""`` — the file; children are the data records ``r0, r1, …`` and the trailer ``t``. +- ``r12`` — record 12; children are its events ``r12/e0, …``. +- ``r12/e3`` — event 3 of record 12, the top-level bank; children are its banks. +- ``r12/e3/b1a0/b1b8`` — a bank by byte offset (hex) below its parent; children are + its banks, or its hit words when it is an fADC250 payload bank of a stream frame. + +Every offset in an id is checked against the children pyevio found for the +parent, so an id cannot make the server read an arbitrary byte range. Children +lists are paged (``start``, ``count``) because a record can hold thousands of +events and a file thousands of records. + +Offsets of events and banks index the record's buffer (``Record.buffer``): the +file itself for a plain record, the decompressed bytes for an LZ4 or gzip +record. Record offsets are file offsets. ``words_at`` reads either, by record. + +Format knowledge stays in core and the decoder: this module only names what +``Bank`` and ``fadc250_stream`` return. +""" +import re +from typing import List, Optional + +import numpy as np + +from pyevio.bank import Bank +from pyevio.decoders import fadc250_stream as fs +from pyevio.evio_file import EvioFile +from pyevio.record import Record +from pyevio.web import ApiError + +MAX_WORDS = 4096 +MAX_HITS = 1024 +DEFAULT_CHILDREN = 500 +MAX_CHILDREN = 5000 +MAX_NODE_DEPTH = 32 +NODE_PART = re.compile(r"^(r\d+|e\d+|b[0-9a-f]+|t)$") + + +def page(items: list, start: int, count: int) -> dict: + count = max(0, min(count, MAX_CHILDREN)) + start = max(0, start) + return {"total": len(items), "start": start, "children": items[start:start + count]} + + +# ---------------------------------------------------------------- records +def describe_record(record: Record, index: int, evio_file: Optional[EvioFile] = None) -> dict: + """Record header fields plus the events found and the walk errors; ``index`` is the viewer's row number. + + ``header_quirk`` is what core knows about a malformed header at this offset + (``EvioFile.record_header_problem``, when the installed core has it), else None. + """ + header = record.header + record.scan_events() # fills record.errors + header_problem = getattr(evio_file, "record_header_problem", None) + return { + "header_quirk": header_problem(record.offset) if header_problem else None, + "id": "t" if record.is_trailer else f"r{index}", "kind": "trailer" if record.is_trailer else "record", + "index": index, "offset": record.offset, "size": record.size, "record_number": header.record_number, + "header_length": header.header_length, "header_type": header.header_type, "is_trailer": record.is_trailer, + "event_count": header.event_count, "events_found": len(record.scan_events()), + "index_array_length": header.index_array_length, "user_header_length": header.user_header_length, + "compression_type": header.compression_type, "compressed_length": header.compressed_data_length, + "uncompressed_length": header.uncompressed_data_length, "version": header.version, + "is_truncated": record.is_truncated, "declared_end": record.declared_end, + "bit_info": {"raw": header.bit_info, "has_dictionary": header.has_dictionary, "is_last_record": header.is_last_record, + "has_first_event": header.has_first_event, "event_type": header.event_type, + "pad": [header.pad1, header.pad2, header.pad3]}, + "errors": list(record.errors), "has_children": header.event_count > 0 and not record.is_trailer, + } + + +def record_rows(evio_file: EvioFile, start: int, count: int) -> dict: + """Rows ``start … start+count`` of the record table; the trailer is the last row.""" + total = evio_file.record_count + (1 if evio_file.trailer is not None else 0) + start = max(0, start) + count = max(0, min(count, MAX_CHILDREN)) + rows = [] + for index in range(start, min(start + count, total)): + if index < evio_file.record_count: + record = evio_file.get_record(index) + rows.append(describe_record(record, index, evio_file)) + record.release() # a compressed record's buffer is not needed once its header row is built + else: + rows.append(describe_record(evio_file.trailer, index, evio_file)) + return {"total": total, "start": start, "rows": rows} + + +# ---------------------------------------------------------------- banks +def describe_bank(bank: Bank, node_id: str, role: Optional[str] = None) -> dict: + data = { + "id": node_id, "kind": "bank", "structure": bank.STRUCTURE_NAME, "tag": bank.tag, "data_type": bank.data_type, + "num": bank.num, "pad": bank.pad, "length": bank.length, "offset": bank.offset, "size": bank.size, "type_name": bank.type_name, + "is_container": bank.is_container(), "has_children": bank.is_container() and bank.data_length > 0, + } + if role: + data["role"] = role + return data + + +def _event_bank(evio_file: EvioFile, record_index: int, event_index: int) -> Bank: + record = evio_file.get_record(record_index) + offsets = record.get_event_offsets() + if event_index >= len(offsets): + raise ApiError(404, f"record {record_index} has {len(offsets)} events, no event {event_index}") + offset, length = offsets[event_index] + return Bank(record.buffer, offset, evio_file.header.endian, limit=offset + length) + + +def _child_at(parent: Bank, offset: int) -> Bank: + for child in parent.get_children(): + if child.offset == offset: + return child + raise ApiError(404, f"no bank at offset 0x{offset:X} inside the bank at 0x{parent.offset:X}") + + +def _payload_labels(evio_file: EvioFile, event: Bank) -> dict: + """``{(roc, stream, port): (role, module id)}`` for the payload banks of one stream frame, from the decoder.""" + words = fs.event_words(event.mm, event.offset, event.size, evio_file.header.endian) + frame = fs.decode_frame(words) + del words # a view of the buffer; dropped before EvioFile.close() + labels = {} + for row in frame.empty_banks: + labels[(int(row["roc"]), int(row["stream"]), int(row["port"]))] = ("payload_empty", int(row["module_id"])) + for row in frame.non_fadc_banks: + labels[(int(row["roc"]), int(row["stream"]), int(row["port"]))] = ("payload_words", int(row["module_id"])) + if frame.n_hits: + keys = np.unique(np.stack([frame.roc, frame.stream, frame.port], axis=1).astype(np.int64), axis=0) + for roc, stream, port in keys.tolist(): + labels[(roc, stream, port)] = ("payload_hits", fs.MODULE_FADC250) + return labels + + +def _bank_children(evio_file: EvioFile, chain: List[Bank], node_id: str) -> List[dict]: + """Children of the last bank in ``chain`` with their roles inside a stream frame (if the event is one).""" + event, bank = chain[0], chain[-1] + children = [] + in_stream_frame = event.tag == fs.STREAM_EVENT_TAG + labels = _payload_labels(evio_file, event) if (in_stream_frame and len(chain) == 2 and bank.tag != fs.SIB_TAG) else None + for child in bank.get_children(): + role = None + if in_stream_frame and len(chain) == 1: + role = "stream_info" if child.tag == fs.SIB_TAG else "roc_bank" + elif labels is not None: + role = "roc_stream_info" if child.tag == fs.ROC_STREAM_INFO_TAG else "payload" + described = describe_bank(child, f"{node_id}/b{child.offset:x}", role) + if role == "roc_bank": + described.update({"roc": child.tag, "stream": (child.num or 0) & 0xF}) + if role == "payload": + label, module = labels.get((bank.tag, (bank.num or 0) & 0xF, child.tag), ("payload_unmapped", fs.MODULE_UNKNOWN)) + n_words = child.data_length // 4 + described.update({"port": child.tag, "n_words": n_words, "module": fs.MODULE_NAMES.get(module, str(module)), + "role": label, "has_children": label == "payload_hits" and n_words > 0}) + children.append(described) + return children + + +def _hit_children(evio_file: EvioFile, bank: Bank, node_id: str) -> List[dict]: + """Decoded hit words of an fADC250 payload bank, capped at MAX_HITS.""" + words = fs.event_words(bank.mm, bank.data_offset, bank.data_length, evio_file.header.endian).tolist() # a copy, no live view + channel, time_raw, charge = (column.tolist() for column in fs.unpack_hit_words(np.asarray(words, dtype=np.uint32))) + return [{"id": f"{node_id}/h{i}", "kind": "hit", "index": i, "word": f"{word:08x}", "channel": channel[i], + "time_raw": time_raw[i], "t_ns": time_raw[i] * fs.HIT_TIME_TICK_NS, "charge": charge[i], + "flag": bool(word >> fs.HIT_FLAG_BIT), "has_children": False} + for i, word in enumerate(words)] + + +# ---------------------------------------------------------------- nodes +def _parse_node(node: str) -> List[str]: + parts = [part for part in node.strip("/").split("/") if part] if node else [] + if len(parts) > MAX_NODE_DEPTH or any(not NODE_PART.match(part) for part in parts): + raise ApiError(400, f"malformed node id {node!r}") + return parts + + +def children_of(evio_file: EvioFile, node: str, start: int = 0, count: int = DEFAULT_CHILDREN) -> dict: + """The node's own description and a page of its children (see the module docstring for the id scheme).""" + parts = _parse_node(node) + if not parts: + header = evio_file.header + node_info = {"id": "", "kind": "file", "size": evio_file.file_size, "header_layout": evio_file.header_layout, + "record_count": evio_file.record_count, "has_trailer": evio_file.trailer is not None, + "endian": header.endian, "version": header.version, "file_type": header.file_type} + rows = record_rows(evio_file, start, count) + return {"total": rows["total"], "start": rows["start"], "children": rows["rows"], "node": node_info, "errors": []} + + if parts[0] == "t": + if evio_file.trailer is None or len(parts) > 1: + raise ApiError(404, "the file has no trailer" if evio_file.trailer is None else "a trailer has no children") + result = page([], start, count) + result.update({"node": describe_record(evio_file.trailer, evio_file.record_count, evio_file), "errors": []}) + return result + + record_index = int(parts[0][1:]) + if record_index >= evio_file.record_count: + raise ApiError(404, f"record {record_index} does not exist ({evio_file.record_count} records)") + record = evio_file.get_record(record_index) + if len(parts) == 1: + events = [] + buffer = record.buffer + for event_i, (offset, length) in enumerate(record.get_event_offsets()): + bank = Bank(buffer, offset, evio_file.header.endian, limit=offset + length) + described = describe_bank(bank, f"r{record_index}/e{event_i}") + described.update({"kind": "event", "index": event_i, "length_bytes": length, "has_children": bank.is_container(), + "compressed": record.compression_type != record.COMPRESSION_NONE}) + events.append(described) + result = page(events, start, count) + result.update({"node": describe_record(record, record_index, evio_file), "errors": list(record.errors)}) + return result + + if not parts[1].startswith("e"): + raise ApiError(400, f"expected an event id after {parts[0]!r}") + chain = [_event_bank(evio_file, record_index, int(parts[1][1:]))] + for part in parts[2:]: + if not part.startswith("b"): + raise ApiError(400, f"expected a bank id, found {part!r}") + chain.append(_child_at(chain[-1], int(part[1:], 16))) + bank = chain[-1] + node_id = "/".join(parts) + if bank.is_container(): + children = _bank_children(evio_file, chain, node_id) + elif len(chain) == 3 and chain[0].tag == fs.STREAM_EVENT_TAG and chain[1].tag != fs.SIB_TAG and bank.data_type == 0: + labels = _payload_labels(evio_file, chain[0]) + label, _ = labels.get((chain[1].tag, (chain[1].num or 0) & 0xF, bank.tag), ("payload_unmapped", fs.MODULE_UNKNOWN)) + children = _hit_children(evio_file, bank, node_id) if label == "payload_hits" else [] + else: + children = [] + node_info = describe_bank(bank, node_id) + if len(chain) == 1: + node_info.update({"kind": "event", "index": int(parts[1][1:])}) + result = page(children, start, count) + result.update({"node": node_info, "errors": list(bank.errors)}) + return result + + +# ---------------------------------------------------------------- raw words +def words_at(evio_file: EvioFile, offset: int, count: int, record_index: Optional[int] = None) -> dict: + """``count`` 32-bit words from byte ``offset`` as hex strings in the file's byte order, clipped to the buffer. + + Without ``record_index`` the offset is a file offset (record headers, events of + plain records). With it, the offset indexes that record's buffer, which is the + only way to see the events of an LZ4 or gzip record; for a plain record both + views agree. + """ + if offset < 0 or offset % 4: + raise ApiError(400, f"offset must be a non-negative multiple of 4, got {offset}") + if record_index is None: + buffer, source = evio_file.mm, "file" + else: + if record_index >= evio_file.record_count: + raise ApiError(404, f"record {record_index} does not exist ({evio_file.record_count} records)") + buffer, source = evio_file.get_record(record_index).buffer, f"record {record_index}" + if offset >= len(buffer): + raise ApiError(404, f"offset {offset} is past the end of the {source} buffer ({len(buffer)} bytes)") + count = max(0, min(count, MAX_WORDS, (len(buffer) - offset) // 4)) + words = np.frombuffer(buffer, dtype=np.dtype(evio_file.header.endian + "u4"), count=count, offset=offset).tolist() + return {"offset": offset, "count": count, "record": record_index, "endian": evio_file.header.endian, + "max_count": MAX_WORDS, "words": [f"{word:08x}" for word in words]} diff --git a/pyproject.toml b/pyproject.toml index b5f9eeb..c442da6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,13 +18,20 @@ dependencies = [ [project.optional-dependencies] test = ["pytest"] +web = [ + "fastapi>=0.110", + "uvicorn>=0.27", +] # uv installs the dev group by default, so `uv run pytest` works without extras. [dependency-groups] dev = [ + "fastapi>=0.128.8", + "httpx>=0.28.1", "pyarrow>=21.0.0", "pytest", "pyyaml>=6.0.3", + "uvicorn>=0.39.0", ] diff --git a/tests/web/conftest.py b/tests/web/conftest.py new file mode 100644 index 0000000..7df0ce0 --- /dev/null +++ b/tests/web/conftest.py @@ -0,0 +1,80 @@ +"""Fixtures for the web server tests: a served root with a synthetic stream file, a golden file and traps. + +``tests/`` is added to ``sys.path`` so the synthetic-file builder of +``test_stream_stats.py`` can be reused; pytest puts only this folder on the path. +""" +import os +import shutil +import sys +import time +from pathlib import Path + +import pytest + +TESTS_DIR = Path(__file__).resolve().parents[1] +if str(TESTS_DIR) not in sys.path: + sys.path.insert(0, str(TESTS_DIR)) + +from test_stream_stats import write_synthetic_file # noqa: E402 + +fastapi = pytest.importorskip("fastapi") +from fastapi.testclient import TestClient # noqa: E402 + +from pyevio.web.app import create_app # noqa: E402 + +GOLDEN_FILE = Path("/data/evio-lib/golden/cases/cpp/basic_le.evio") +GOLDEN_LZ4_FILE = GOLDEN_FILE.with_name("lz4_le.evio") +CORPUS_FILE = Path("/data/evio-lib/corpus/sro_000791.evio.00000.v6") +TOKEN = "test-token-0123456789" +POLL_TIMEOUT_S = 60 + + +@pytest.fixture +def served_root(tmp_path): + """ROOT with ``runs/synthetic.evio`` (12 stream frames), a copy of a golden file, a secret outside and a symlink to it.""" + root = tmp_path / "root" + (root / "runs").mkdir(parents=True) + path, expected_hits, frame_numbers = write_synthetic_file(root / "runs" / "synthetic.evio") + if GOLDEN_FILE.is_file(): + shutil.copy(GOLDEN_FILE, root / "basic_le.evio") + if GOLDEN_LZ4_FILE.is_file(): + shutil.copy(GOLDEN_LZ4_FILE, root / "lz4_le.evio") + outside = tmp_path / "outside" + outside.mkdir() + (outside / "secret.evio").write_bytes(b"not for you") + os.symlink(outside / "secret.evio", root / "link_outside.evio") + os.symlink(outside, root / "dir_outside") + return {"root": root, "synthetic": "runs/synthetic.evio", "expected_hits": expected_hits, "frame_numbers": frame_numbers, + "golden": "basic_le.evio" if GOLDEN_FILE.is_file() else None, + "golden_lz4": "lz4_le.evio" if GOLDEN_LZ4_FILE.is_file() else None, "cache_dir": tmp_path / "cache"} + + +@pytest.fixture +def app(served_root): + return create_app(served_root["root"], TOKEN, served_root["cache_dir"], stats_workers=1) + + +@pytest.fixture +def client(app): + # TestClient's default Host is "testserver", which the Host check rejects by design. + return TestClient(app, base_url="http://localhost", headers={"X-Token": TOKEN}) + + +def wait_done(client, file_id, timeout_s=POLL_TIMEOUT_S): + """Poll /progress until the job leaves queued/running; return the last progress.""" + deadline = time.monotonic() + timeout_s + while True: + progress = client.get(f"/api/files/{file_id}/progress").json() + if progress["state"] not in ("queued", "running"): + return progress + assert time.monotonic() < deadline, f"analysis did not finish in {timeout_s} s: {progress}" + time.sleep(0.02) + + +def open_and_wait(client, path): + response = client.post("/api/open", json={"path": path}) + assert response.status_code == 200, response.text + file_id = response.json()["file_id"] + progress = wait_done(client, file_id) + assert progress["state"] == "done", progress + return file_id, progress diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py new file mode 100644 index 0000000..70811ca --- /dev/null +++ b/tests/web/test_web_api.py @@ -0,0 +1,305 @@ +"""The file API on the synthetic stream file and a golden file: numbers equal stream_stats called directly (F21—F23).""" +import threading +import time + +import numpy as np +import pytest + +from conftest import open_and_wait, wait_done +from pyevio import stream_stats +from pyevio.decoders import fadc250_stream as fs +from pyevio.web import jobs + + +def test_open_progress_summary_match_direct_stats(client, served_root): + file_id, progress = open_and_wait(client, served_root["synthetic"]) + assert progress["fraction"] == 1.0 and progress["records_done"] == progress["records_total"] == 3 + direct = stream_stats.compute_stream_stats(str(served_root["root"] / served_root["synthetic"]), workers=1) + + summary = client.get(f"/api/files/{file_id}/summary").json() + totals = summary["totals"] + assert totals["n_hits"] == direct.n_hits == served_root["expected_hits"] + assert totals["n_records"] == direct.n_records == 3 and totals["n_trailer_records"] == 1 + assert totals["n_events"] == 13 and totals["n_frames"] == 12 and totals["n_other_events"] == 1 + assert totals["non_fadc_words"] == direct.non_fadc_words and totals["n_empty_payload_banks"] == 24 + assert totals["hit_rate_hz"] == pytest.approx(direct.n_hits / direct.live_time_s) + assert summary["frames"]["stride"] == 4 and summary["frames"]["missing_frames"] == 1 and summary["frames"]["duplicate_frames"] == 1 + assert [row["roc"] for row in summary["rocs"]] == [7, 44] + assert summary["rocs"][0]["modules"] == ["fADC250"] and summary["rocs"][1]["modules"] == ["DCRB"] + assert summary["file"]["header_layout"] == "v6" and summary["file"]["record_count"] == 3 and summary["file"]["has_trailer"] + assert summary["records"] == {"count": 3, "has_trailer": True, "events": 13, "events_found": 13, "with_errors": 0, + "last_record_bit": 0, "compressed": 0, "without_index": 0, "truncated": 0, + "min_size": summary["records"]["min_size"], "max_size": summary["records"]["max_size"], + "mean_size": summary["records"]["mean_size"]} + checks = {row["name"]: row for row in summary["checks"]} + assert checks["missing frames"]["status"] == "warn" and checks["decode errors"]["status"] == "ok" + assert summary["stats"]["cached"] is False + + +def test_summary_before_done_is_409(client, served_root, monkeypatch): + release = threading.Event() + + def slow_compute(path, workers=None, progress=None, cancel=None, **_): + release.wait(5) + return stream_stats.compute_stream_stats(path, workers=1) + + monkeypatch.setattr(jobs, "compute_stream_stats", slow_compute) + file_id = client.post("/api/open", json={"path": served_root["synthetic"]}).json()["file_id"] + assert client.get(f"/api/files/{file_id}/summary").status_code == 409 + assert client.get(f"/api/files/{file_id}/hist/rate").status_code == 409 + release.set() + assert wait_done(client, file_id)["state"] == "done" + + +def test_records_paging(client, served_root): + file_id, _ = open_and_wait(client, served_root["synthetic"]) + first = client.get(f"/api/files/{file_id}/records", params={"from": 0, "count": 2}).json() + assert first["total"] == 4 and [row["index"] for row in first["rows"]] == [0, 1] + assert first["rows"][0]["event_count"] == 4 and first["rows"][0]["events_found"] == 4 and first["rows"][0]["errors"] == [] + assert first["rows"][0]["header_type"] == 0 and not first["rows"][0]["is_trailer"] + assert first["rows"][1]["offset"] == first["rows"][0]["offset"] + first["rows"][0]["size"] + rest = client.get(f"/api/files/{file_id}/records", params={"from": 2, "count": 10}).json() + assert [row["index"] for row in rest["rows"]] == [2, 3] + assert rest["rows"][1]["is_trailer"] and rest["rows"][1]["header_type"] == 3 and rest["rows"][1]["bit_info"]["is_last_record"] + assert first["rows"][1]["event_count"] == 5 and rest["rows"][0]["event_count"] == 4 # record 1 holds the extra non-stream event + assert client.get(f"/api/files/{file_id}/records", params={"from": 99}).json()["rows"] == [] + + +def test_structure_walk_to_hits(client, served_root): + file_id, _ = open_and_wait(client, served_root["synthetic"]) + root = client.get(f"/api/files/{file_id}/structure").json() + assert root["node"]["kind"] == "file" and root["total"] == 4 + assert [child["id"] for child in root["children"]] == ["r0", "r1", "r2", "t"] + assert root["children"][0]["has_children"] and not root["children"][3]["has_children"] + + record = client.get(f"/api/files/{file_id}/structure", params={"node": "r1"}).json() + assert record["node"]["kind"] == "record" and record["total"] == 5 + event = record["children"][0] + assert event["id"] == "r1/e0" and event["kind"] == "event" and event["tag"] == fs.STREAM_EVENT_TAG and event["has_children"] + assert record["children"][4]["tag"] == 0xFF50 # the non-stream event + + banks = client.get(f"/api/files/{file_id}/structure", params={"node": "r1/e0"}).json() + roles = [(child["tag"], child["role"]) for child in banks["children"]] + assert roles == [(fs.SIB_TAG, "stream_info"), (7, "roc_bank"), (44, "roc_bank")] + roc_7 = banks["children"][1] + assert roc_7["roc"] == 7 and roc_7["stream"] == 1 + + payloads = client.get(f"/api/files/{file_id}/structure", params={"node": roc_7["id"]}).json() + by_port = {child.get("port"): child for child in payloads["children"] if child["role"] != "roc_stream_info"} + assert payloads["children"][0]["role"] == "roc_stream_info" and payloads["children"][0]["tag"] == fs.ROC_STREAM_INFO_TAG + assert by_port[1]["role"] == "payload_hits" and by_port[1]["n_words"] == 16 and by_port[1]["module"] == "fADC250" and by_port[1]["has_children"] + assert by_port[5]["role"] == "payload_empty" and by_port[5]["n_words"] == 0 and not by_port[5]["has_children"] + + hits = client.get(f"/api/files/{file_id}/structure", params={"node": by_port[1]["id"]}).json() + assert hits["total"] == 16 and [hit["channel"] for hit in hits["children"]] == list(range(16)) + n = 1 * 4 # record 1, event 0 → frame index 4: the builder writes time_raw = 100 * ch + n, charge = 10 + n + assert [hit["time_raw"] for hit in hits["children"]] == [100 * ch + n for ch in range(16)] + assert [hit["charge"] for hit in hits["children"]] == [10 + n] * 16 + assert hits["children"][1]["t_ns"] == (100 + n) * fs.HIT_TIME_TICK_NS and not hits["children"][1]["flag"] + assert hits["children"][0]["word"] == f"{fs_hit_word(0, n, 10 + n):08x}" + + dcrb = client.get(f"/api/files/{file_id}/structure", params={"node": banks["children"][2]["id"]}).json() + dcrb_ports = {child.get("port"): child for child in dcrb["children"] if child["role"] != "roc_stream_info"} + assert dcrb_ports[4]["role"] == "payload_words" and dcrb_ports[4]["module"] == "DCRB" and not dcrb_ports[4]["has_children"] + assert client.get(f"/api/files/{file_id}/structure", params={"node": dcrb_ports[4]["id"]}).json()["children"] == [] + + paged = client.get(f"/api/files/{file_id}/structure", params={"node": by_port[1]["id"], "from": 14, "count": 5}).json() + assert [hit["index"] for hit in paged["children"]] == [14, 15] and paged["total"] == 16 + + assert client.get(f"/api/files/{file_id}/structure", params={"node": "r9"}).status_code == 404 + assert client.get(f"/api/files/{file_id}/structure", params={"node": "r1/e0/b0"}).status_code == 404 + assert client.get(f"/api/files/{file_id}/structure", params={"node": "r1/e0/zz"}).status_code == 400 + assert client.get(f"/api/files/{file_id}/structure", params={"node": "t"}).json()["node"]["is_trailer"] + + +def fs_hit_word(channel, time_raw, charge): + return (time_raw << fs.HIT_TIME_SHIFT) | (channel << fs.HIT_CHANNEL_SHIFT) | charge + + +def test_words_are_hex_and_capped(client, served_root): + file_id, _ = open_and_wait(client, served_root["synthetic"]) + head = client.get(f"/api/files/{file_id}/words", params={"offset": 0, "count": 8}).json() + assert head["words"][0] == "4556494f" and head["words"][7] == "c0da0100" and head["count"] == 8 + capped = client.get(f"/api/files/{file_id}/words", params={"offset": 0, "count": 100000}).json() + size = (served_root["root"] / served_root["synthetic"]).stat().st_size + assert capped["count"] == min(4096, size // 4) and capped["max_count"] == 4096 + assert client.get(f"/api/files/{file_id}/words", params={"offset": 2, "count": 1}).status_code == 400 + assert client.get(f"/api/files/{file_id}/words", params={"offset": size + 4, "count": 1}).status_code == 404 + tail = client.get(f"/api/files/{file_id}/words", params={"offset": size - 8, "count": 10}).json() + assert tail["count"] == 2 + + +@pytest.mark.parametrize("name,total_field", [("hits_per_frame", "n_frames"), ("rate", "n_hits"), ("occupancy", "n_hits"), + ("charge", "n_hits"), ("time_in_frame", "n_hits")]) +def test_histogram_sums_equal_totals(client, served_root, name, total_field): + file_id, _ = open_and_wait(client, served_root["synthetic"]) + totals = client.get(f"/api/files/{file_id}/summary").json()["totals"] + hist = client.get(f"/api/files/{file_id}/hist/{name}").json() + assert int(np.sum(hist["counts"])) == totals[total_field] + edges_key = "edges" if "edges" in hist else "edges_ns" + if name != "occupancy": + assert len(hist[edges_key]) == len(hist["counts"]) + 1 + else: + assert np.asarray(hist["counts"]).shape == (2, 5, 16) + + +def test_histogram_selection(client, served_root): + file_id, _ = open_and_wait(client, served_root["synthetic"]) + roc_7 = client.get(f"/api/files/{file_id}/hist/charge", params={"roc": 7}).json() + assert sum(roc_7["counts"]) == served_root["expected_hits"] + port_3 = client.get(f"/api/files/{file_id}/hist/charge", params={"roc": 7, "port": 3}).json() + assert sum(port_3["counts"]) == sum(range(1, 13)) and port_3["counts"][-1] == sum(range(1, 13)) + channel_3 = client.get(f"/api/files/{file_id}/hist/time_in_frame", params={"roc": 7, "port": 3, "ch": 3}).json() + assert sum(channel_3["counts"]) == sum(range(1, 13)) + assert sum(client.get(f"/api/files/{file_id}/hist/time_in_frame", params={"roc": 7, "port": 3, "ch": 4}).json()["counts"]) == 0 + rate = client.get(f"/api/files/{file_id}/hist/rate", params={"roc": 7, "port": 1, "ch": 0}).json() + assert sum(rate["counts"]) == 12 and len(rate["rate_hz"]) == len(rate["counts"]) == len(rate["frames_per_bin"]) + occupancy = client.get(f"/api/files/{file_id}/hist/occupancy", params={"roc": 7, "port": 1}).json() + assert occupancy["counts"] == [12] * 16 + assert client.get(f"/api/files/{file_id}/hist/charge", params={"roc": 8}).status_code == 404 + assert client.get(f"/api/files/{file_id}/hist/charge", params={"roc": 7, "port": 2}).status_code == 404 + assert client.get(f"/api/files/{file_id}/hist/charge", params={"port": 1}).status_code == 400 + assert client.get(f"/api/files/{file_id}/hist/charge", params={"roc": 7, "port": 1, "ch": 16}).status_code == 404 + assert client.get(f"/api/files/{file_id}/hist/nonsense").status_code == 404 + + +def test_second_open_is_a_cache_hit(client, served_root, monkeypatch): + calls = [] + real_compute = stream_stats.compute_stream_stats + + def counting_compute(path, **kwargs): + calls.append(path) + return real_compute(path, **kwargs) + + monkeypatch.setattr(jobs, "compute_stream_stats", counting_compute) + file_id, _ = open_and_wait(client, served_root["synthetic"]) + assert len(calls) == 1 + cached_files = list(served_root["cache_dir"].glob("*.npz")) + assert len(cached_files) == 1 and cached_files[0].stem.startswith(file_id) # file_id is the cache key's prefix + + again = client.post("/api/open", json={"path": served_root["synthetic"]}).json() + assert again["file_id"] == file_id and again["state"] == "done" and len(calls) == 1 + assert client.get(f"/api/files/{file_id}/summary").json()["totals"]["n_hits"] == served_root["expected_hits"] + + # A fresh server (same cache dir) loads the result instead of recomputing. + from conftest import TOKEN + from fastapi.testclient import TestClient + from pyevio.web.app import create_app + second = TestClient(create_app(served_root["root"], TOKEN, served_root["cache_dir"], stats_workers=1), + base_url="http://localhost", headers={"X-Token": TOKEN}) + opened = second.post("/api/open", json={"path": served_root["synthetic"]}).json() + assert opened["state"] == "done" and opened["cached"] and len(calls) == 1 + assert second.get(f"/api/files/{file_id}/summary").json()["stats"]["cached"] is True + + +def test_opening_another_file_cancels_the_running_job(client, served_root, monkeypatch): + def blocking_compute(path, workers=None, progress=None, cancel=None, **_): + """Blocks on the synthetic file until cancelled; any other file computes for real.""" + if not path.endswith("synthetic.evio"): + return stream_stats.compute_stream_stats(path, workers=1) + progress(0, 100) + deadline = time.monotonic() + 10 + while not cancel(): + assert time.monotonic() < deadline, "cancel flag never set" + time.sleep(0.005) + raise stream_stats.StatsCancelled("test") + + monkeypatch.setattr(jobs, "compute_stream_stats", blocking_compute) + first = client.post("/api/open", json={"path": served_root["synthetic"]}).json() + assert first["state"] in ("queued", "running") + + other_path = served_root["root"] / "runs" / "other.evio" + from test_stream_stats import write_synthetic_file + write_synthetic_file(other_path, n_records=1) + second = client.post("/api/open", json={"path": "runs/other.evio"}).json() + assert second["file_id"] != first["file_id"] + + assert wait_done(client, first["file_id"])["state"] == "cancelled" + assert wait_done(client, second["file_id"])["state"] == "done" + reopened = client.post("/api/open", json={"path": served_root["synthetic"]}).json() + assert reopened["state"] in ("queued", "running") # a cancelled file gets a new job on reopen + + +def test_errors_share_one_json_shape(client, served_root): + for response in (client.post("/api/open", json={}), client.get("/api/files/x/records", params={"from": "abc"}), + client.post("/api/open", json={"path": "runs/missing.evio"})): + assert response.status_code in (404, 422) and list(response.json()) == ["error"], response.text + + +def test_unwritable_cache_dir_still_finishes(served_root, tmp_path): + from conftest import TOKEN + from fastapi.testclient import TestClient + from pyevio.web.app import create_app + blocked = tmp_path / "blocked.file" + blocked.write_text("a file where the cache folder should be") + client = TestClient(create_app(served_root["root"], TOKEN, blocked, stats_workers=1), base_url="http://localhost", + headers={"X-Token": TOKEN}) + file_id, _ = open_and_wait(client, served_root["synthetic"]) + assert client.get(f"/api/files/{file_id}/summary").json()["totals"]["n_hits"] == served_root["expected_hits"] + + +def test_open_rejects_unreadable_files(client, served_root): + (served_root["root"] / "runs" / "garbage.evio").write_bytes(b"\0" * 64) + response = client.post("/api/open", json={"path": "runs/garbage.evio"}) + assert response.status_code == 400 and "EVIO" in response.json()["error"] + assert client.post("/api/open", json={"path": "runs/missing.evio"}).status_code == 404 + assert client.get("/api/files/nosuchid/progress").status_code == 404 + + +def test_golden_file_opens_with_no_frames(client, served_root): + if not served_root["golden"]: + pytest.skip("golden set absent") + file_id, _ = open_and_wait(client, served_root["golden"]) + summary = client.get(f"/api/files/{file_id}/summary").json() + assert summary["totals"]["n_frames"] == 0 and summary["totals"]["n_hits"] == 0 + assert summary["totals"]["hit_rate_hz"] == "n/a" and summary["totals"]["hits_per_frame"] == "n/a" + assert summary["records"]["events"] == summary["records"]["events_found"] > 0 + root = client.get(f"/api/files/{file_id}/structure").json() + events = client.get(f"/api/files/{file_id}/structure", params={"node": root["children"][0]["id"]}).json() + assert events["total"] == root["children"][0]["event_count"] + banks = client.get(f"/api/files/{file_id}/structure", params={"node": events["children"][0]["id"]}).json() + assert banks["node"]["kind"] == "event" and "children" in banks + hist = client.get(f"/api/files/{file_id}/hist/occupancy").json() + assert hist["counts"] == [] and hist["rocs"] == [] + + +def test_compressed_golden_file_events_come_from_the_record_buffer(client, served_root): + """F4: events of an LZ4 record live in the decompressed buffer; the tree and /words?record= read it.""" + if not served_root["golden_lz4"]: + pytest.skip("golden set absent") + file_id, _ = open_and_wait(client, served_root["golden_lz4"]) + summary = client.get(f"/api/files/{file_id}/summary").json() + assert summary["records"]["compressed"] >= 1 and summary["records"]["events_found"] == summary["records"]["events"] > 0 + root = client.get(f"/api/files/{file_id}/structure").json() + record = next(row for row in root["children"] if row["kind"] == "record" and row["compression_type"] != 0) + events = client.get(f"/api/files/{file_id}/structure", params={"node": record["id"]}).json() + assert events["total"] == record["event_count"] and events["children"][0]["compressed"] + event = events["children"][0] + banks = client.get(f"/api/files/{file_id}/structure", params={"node": event["id"]}).json() + assert banks["node"]["length"] == event["length"] + # The event's first word is its length word, readable only through the record buffer. + words = client.get(f"/api/files/{file_id}/words", params={"offset": event["offset"], "count": 2, "record": record["index"]}).json() + assert int(words["words"][0], 16) == event["length"] and words["record"] == record["index"] + for child in banks["children"]: + assert child["structure"] in ("Bank", "Segment", "TagSegment") + + +def test_truncated_tail_is_a_file_check(client, served_root): + """D4: a final record cut by EOF keeps its complete events and shows up in the checks with byte counts.""" + whole = (served_root["root"] / served_root["synthetic"]).read_bytes() + from pyevio import EvioFile + with EvioFile(str(served_root["root"] / served_root["synthetic"])) as evio_file: + last = evio_file.get_record(evio_file.record_count - 1) + cut = last.offset + last.size - 300 # drop the trailer and the tail of the last record + (served_root["root"] / "runs" / "truncated.evio").write_bytes(whole[:cut]) + file_id, _ = open_and_wait(client, "runs/truncated.evio") + summary = client.get(f"/api/files/{file_id}/summary").json() + checks = {row["name"]: row for row in summary["checks"]} + assert checks["truncated tail"]["status"] == "error" and checks["truncated tail"]["value"] == 300 + assert "complete events kept" in checks["truncated tail"]["detail"] + assert summary["records"]["truncated"] == 1 and summary["records"]["has_trailer"] is False + assert checks["trailer"]["status"] == "warn" + assert summary["scan_checks"][0][0] == "truncated_tail" + rows = client.get(f"/api/files/{file_id}/records").json()["rows"] + assert rows[-1]["is_truncated"] and rows[-1]["events_found"] < rows[-1]["event_count"] + assert summary["totals"]["n_frames"] == summary["records"]["events_found"] - 1 # minus the non-stream event diff --git a/tests/web/test_web_auth.py b/tests/web/test_web_auth.py new file mode 100644 index 0000000..02192d6 --- /dev/null +++ b/tests/web/test_web_auth.py @@ -0,0 +1,61 @@ +"""Token, Host and path confinement (F1): the bad cases are rejected, the good ones pass.""" +from fastapi.testclient import TestClient + +from conftest import TOKEN + + +def test_missing_or_wrong_token_is_401(app): + anonymous = TestClient(app, base_url="http://localhost") + assert anonymous.get("/api/ls").status_code == 401 + assert anonymous.get("/api/ls", headers={"X-Token": "wrong"}).status_code == 401 + assert anonymous.get(f"/api/ls?token={TOKEN}").status_code == 200 + assert anonymous.get("/api/ls", headers={"X-Token": TOKEN}).status_code == 200 + + +def test_index_needs_no_token_but_a_local_host(app): + anonymous = TestClient(app, base_url="http://localhost") + assert anonymous.get("/").status_code == 200 + assert anonymous.get("/index.html").status_code == 200 + assert anonymous.get("/", headers={"Host": "viewer.example.com"}).status_code == 403 + + +def test_bad_host_is_403(client): + for host in ("evil.example", "evil.example:8765", "localhost.evil.example", ""): + response = client.get("/api/ls", headers={"Host": host}) + assert response.status_code == 403, (host, response.text) + for host in ("localhost", "localhost:8765", "127.0.0.1", "127.0.0.1:9000"): + assert client.get("/api/ls", headers={"Host": host}).status_code == 200, host + + +def test_paths_outside_root_are_403(client): + for bad in ("../outside/secret.evio", "runs/../../outside/secret.evio", "/etc/passwd", "link_outside.evio", + "dir_outside/secret.evio"): + response = client.post("/api/open", json={"path": bad}) + assert response.status_code == 403, (bad, response.text) + assert client.get("/api/ls", params={"dir": "../outside"}).status_code == 403 + assert client.get("/api/ls", params={"dir": "dir_outside"}).status_code == 403 + assert client.get("/api/ls", params={"dir": "/"}).status_code == 403 + + +def test_no_api_file_endpoint(client): + assert client.get("/api/file", params={"path": "runs/synthetic.evio"}).status_code == 404 + + +def test_asset_route_stays_inside_the_package(client): + assert client.get("/index.html").status_code == 200 + assert client.get("/__init__.py").status_code == 404 + assert client.get("/..%2F..%2Fpyproject.toml").status_code in (403, 404) + + +def test_ls_lists_only_under_root(client, served_root): + listing = client.get("/api/ls").json() + assert listing["dir"] == "" and listing["parent"] is None + assert "runs" in listing["dirs"] and "dir_outside" not in listing["dirs"] + names = [entry["name"] for entry in listing["files"]] + assert "link_outside.evio" not in names + if served_root["golden"]: + assert "basic_le.evio" in names + runs = client.get("/api/ls", params={"dir": "runs"}).json() + assert runs["dir"] == "runs" and runs["parent"] == "" + assert [entry["name"] for entry in runs["files"]] == ["synthetic.evio"] + assert client.get("/api/ls", params={"dir": "missing"}).status_code == 404 diff --git a/tests/web/test_web_corpus.py b/tests/web/test_web_corpus.py new file mode 100644 index 0000000..ca68bac --- /dev/null +++ b/tests/web/test_web_corpus.py @@ -0,0 +1,62 @@ +"""Corpus smoke: a 15.5 GB SRO file opens through the API with progress, and a second open is a cache hit. + +Runs only with ``PYEVIO_CORPUS=1``; the first open analyzes the file with every +spare core (about half a minute on 22 workers), the second returns at once. +""" +import os +import time + +import pytest +from fastapi.testclient import TestClient + +from conftest import CORPUS_FILE, TOKEN +from pyevio.web.app import create_app + +pytestmark = [pytest.mark.slow, + pytest.mark.skipif(os.environ.get("PYEVIO_CORPUS") != "1", reason="set PYEVIO_CORPUS=1 to run on the SRO corpus")] + +PHASE2_FRAMES = 86_794 # frames in sro_000791.evio.00000.v6 (space/reports/phase2 report) + + +def test_corpus_open_progress_cache(tmp_path): + if not CORPUS_FILE.is_file(): + pytest.skip(f"corpus file absent: {CORPUS_FILE}") + client = TestClient(create_app(CORPUS_FILE.parent, TOKEN, tmp_path / "cache"), base_url="http://localhost", + headers={"X-Token": TOKEN}) + listing = client.get("/api/ls").json() + assert CORPUS_FILE.name in [entry["name"] for entry in listing["files"]] + + t_open = time.perf_counter() + opened = client.post("/api/open", json={"path": CORPUS_FILE.name}).json() + assert opened["state"] in ("queued", "running") + seen_running = False + while True: + progress = client.get(f"/api/files/{opened['file_id']}/progress").json() + if progress["state"] == "running" and 0 < progress["fraction"] < 1: + seen_running = True + assert progress["eta_s"] is not None and progress["records_total"] > 0 + if progress["state"] not in ("queued", "running"): + break + assert time.perf_counter() - t_open < 600 + time.sleep(0.2) + open_to_done_s = time.perf_counter() - t_open + assert progress["state"] == "done", progress + assert seen_running, "progress never reported a running fraction between 0 and 1" + print(f"\ncorpus open-to-done: {open_to_done_s:.1f} s, records {progress['records_total']}") + + summary = client.get(f"/api/files/{opened['file_id']}/summary").json() + assert summary["totals"]["n_frames"] == PHASE2_FRAMES and summary["frames"]["stride"] == 4 + assert summary["totals"]["n_hits"] > 0 and summary["records"]["count"] == progress["records_total"] + rows = client.get(f"/api/files/{opened['file_id']}/records", params={"from": 7880, "count": 100}).json() + assert rows["total"] == summary["records"]["count"] + 1 and rows["rows"][-1]["is_trailer"] + hits = client.get(f"/api/files/{opened['file_id']}/hist/rate").json() + assert sum(hits["counts"]) == summary["totals"]["n_hits"] + + t_again = time.perf_counter() + again = client.post("/api/open", json={"path": CORPUS_FILE.name}).json() + assert again["file_id"] == opened["file_id"] and again["state"] == "done" + assert time.perf_counter() - t_again < 5 + fresh = TestClient(create_app(CORPUS_FILE.parent, TOKEN, tmp_path / "cache"), base_url="http://localhost", + headers={"X-Token": TOKEN}) + cached = fresh.post("/api/open", json={"path": CORPUS_FILE.name}).json() + assert cached["state"] == "done" and cached["cached"] diff --git a/tests/web/test_web_sro.py b/tests/web/test_web_sro.py new file mode 100644 index 0000000..6efa361 --- /dev/null +++ b/tests/web/test_web_sro.py @@ -0,0 +1,60 @@ +"""Raw SRO smoke: a JLab hardware file (8-word record headers, truncated tail) opens through the API. + +Runs with ``PYEVIO_SRO=1`` or ``PYEVIO_CORPUS=1``. Reference numbers: PHASE0 SRO +reference and PHASE1 (space/reports): 7,893 records of which the last is +truncated, 86,794 events (2 salvaged from the tail), 764,009,774 fADC250 hits. +""" +import os +import time +from pathlib import Path + +import pytest +from fastapi.testclient import TestClient + +from conftest import TOKEN +from pyevio.web.app import create_app + +SRO_FILE = Path("/data/sro_boyarinov_data_2026/sro_000791.evio.00000") +SRO_RECORDS = 7_893 +SRO_EVENTS = 86_794 +SRO_HITS = 764_009_774 + +pytestmark = [pytest.mark.slow, + pytest.mark.skipif(os.environ.get("PYEVIO_SRO") != "1" and os.environ.get("PYEVIO_CORPUS") != "1", + reason="set PYEVIO_SRO=1 (or PYEVIO_CORPUS=1) to run on the raw SRO file")] + + +def test_raw_sro_file_opens_with_truncated_tail(tmp_path): + if not SRO_FILE.is_file(): + pytest.skip(f"raw SRO file absent: {SRO_FILE}") + client = TestClient(create_app(SRO_FILE.parent, TOKEN, tmp_path / "cache"), base_url="http://localhost", + headers={"X-Token": TOKEN}) + t_open = time.perf_counter() + opened = client.post("/api/open", json={"path": SRO_FILE.name}).json() + assert "file_id" in opened, opened + while True: + progress = client.get(f"/api/files/{opened['file_id']}/progress").json() + if progress["state"] not in ("queued", "running"): + break + assert time.perf_counter() - t_open < 600 + time.sleep(0.2) + open_to_done_s = time.perf_counter() - t_open + assert progress["state"] == "done", progress + print(f"\nraw SRO open-to-done: {open_to_done_s:.1f} s, records {progress['records_total']}") + + summary = client.get(f"/api/files/{opened['file_id']}/summary").json() + assert summary["file"]["header_layout"] == "sro-8word" and summary["file"]["has_trailer"] is False + assert summary["records"]["count"] == SRO_RECORDS and summary["records"]["truncated"] == 1 + assert summary["totals"]["n_events"] == SRO_EVENTS and summary["totals"]["n_frames"] == SRO_EVENTS + assert summary["totals"]["n_hits"] == SRO_HITS + checks = {row["name"]: row for row in summary["checks"]} + assert checks["truncated tail"]["status"] == "error" and checks["truncated tail"]["value"] > 0 + assert summary["scan_checks"][0][0] == "truncated_tail" and summary["scan_checks"][0][3] == 2 + + rows = client.get(f"/api/files/{opened['file_id']}/records", params={"from": SRO_RECORDS - 2, "count": 10}).json() + assert rows["total"] == SRO_RECORDS and len(rows["rows"]) == 2 + last = rows["rows"][-1] + assert last["is_truncated"] and last["header_length"] == 8 and last["events_found"] == 2 + assert not rows["rows"][0]["is_truncated"] + rate = client.get(f"/api/files/{opened['file_id']}/hist/rate").json() + assert sum(rate["counts"]) == SRO_HITS diff --git a/uv.lock b/uv.lock index e5abb88..ce4809e 100644 --- a/uv.lock +++ b/uv.lock @@ -8,6 +8,86 @@ resolution-markers = [ "python_full_version < '3.10'", ] +[[package]] +name = "annotated-doc" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "anyio" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "exceptiongroup" }, + { name = "idna" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, +] + +[[package]] +name = "anyio" +version = "4.15.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.15'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + [[package]] name = "click" version = "8.1.8" @@ -383,6 +463,47 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] +[[package]] +name = "fastapi" +version = "0.128.8" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic", version = "2.13.5", source = { registry = "https://pypi.org/simple" } }, + { name = "starlette", version = "0.49.3", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, + { name = "typing-inspection", version = "0.4.2", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/72/0df5c58c954742f31a7054e2dd1143bae0b408b7f36b59b85f928f9b456c/fastapi-0.128.8.tar.gz", hash = "sha256:3171f9f328c4a218f0a8d2ba8310ac3a55d1ee12c28c949650288aee25966007", size = 375523, upload-time = "2026-02-11T15:19:36.69Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/37/37b07e276f8923c69a5df266bfcb5bac4ba8b55dfe4a126720f8c48681d1/fastapi-0.128.8-py3-none-any.whl", hash = "sha256:5618f492d0fe973a778f8fec97723f598aa9deee495040a8d51aaf3cf123ecf1", size = 103630, upload-time = "2026-02-11T15:19:35.209Z" }, +] + +[[package]] +name = "fastapi" +version = "0.143.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "annotated-doc" }, + { name = "opentelemetry-api" }, + { name = "pydantic", version = "2.14.0", source = { registry = "https://pypi.org/simple" } }, + { name = "starlette", version = "1.7.0", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, + { name = "typing-inspection", version = "0.4.4", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/d7/6a8753ab6c1d432dc53703c3e1b92974a94531b7d047c32bbaae461ea844/fastapi-0.143.0.tar.gz", hash = "sha256:1acffe48206a80917cf7dac21992b5c44b25384e8902bf745c1fd9dabcf6c51f", size = 468391, upload-time = "2026-10-08T12:29:46.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/f4/27e386913417ad32aae42bba48b0c0cce40e9ff2fba1a871ca2702c37324/fastapi-0.143.0-py3-none-any.whl", hash = "sha256:3e9395fd35276425b61b516a31fdd7c77fe2af83e41b4da22e30696fb1304c5d", size = 144665, upload-time = "2026-10-08T12:29:44.853Z" }, +] + [[package]] name = "fonttools" version = "4.60.2" @@ -596,6 +717,53 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f6/10/d45b74135d5d642cb3a4fb0a957c1613ef93de4c8548671dfc3a5bf38299/fonttools-4.66.1-py3-none-any.whl", hash = "sha256:7234ae9e28db64273fbbfa72caebd0a97e3bdba6b05064114741b9539ef339d0", size = 1202222, upload-time = "2026-09-29T16:11:51.678Z" }, ] +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "anyio", version = "4.15.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, +] + [[package]] name = "importlib-resources" version = "6.5.2" @@ -1560,6 +1728,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/48/7f/c2d1b436b6e7cfebac140c2579a298344b85f2991a2ce5c3615cefb29400/numpy-2.5.4-cp315-cp315t-win_arm64.whl", hash = "sha256:7a14a461d9340f1b46b8648578aed9cdb8b3b018a8fac6c1dde2c9192a01a87f", size = 10883718, upload-time = "2026-10-10T20:05:28.547Z" }, ] +[[package]] +name = "opentelemetry-api" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/02/6e0ae9cc61bd3169d401077b507b3ebc344745171e1051ab430be012dcd9/opentelemetry_api-1.45.1.tar.gz", hash = "sha256:aa38ed19bcc084ba42782a73255b3582283eced7ad6dddbd6695189e69adfb75", size = 72804, upload-time = "2026-10-06T17:32:58.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/41/f7dcf80b81ee8e71c1a2b59f14208bc723edbd89ed027a73b175abf6348e/opentelemetry_api-1.45.1-py3-none-any.whl", hash = "sha256:b31553efa588ae44bc306f863c785c5333a9ecc091248c6ee68b4b6c87fdedfb", size = 60256, upload-time = "2026-10-06T17:32:33.506Z" }, +] + [[package]] name = "packaging" version = "26.3" @@ -1997,6 +2177,329 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/96/be/7b81a44d6a8e70581dcc1d6f01541f9000a973b1e5d75394aec91e7b179a/pyarrow-26.0.0-cp315-cp315t-win_amd64.whl", hash = "sha256:68cd662e9e2b00876a131950cf32336ace2d0865e1f9418763e3d3be8481dfa4", size = 29389953, upload-time = "2026-10-09T08:26:18.277Z" }, ] +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "annotated-types", version = "0.7.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic-core", version = "2.46.5", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, + { name = "typing-inspection", version = "0.4.2", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic" +version = "2.14.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "annotated-types", version = "0.8.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic-core", version = "2.50.0", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, + { name = "typing-inspection", version = "0.4.4", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6b/fb/6e44b63b26efea1cec48c26d8362313310202ef5ed6e7a52f1669e64e2cd/pydantic-2.14.0.tar.gz", hash = "sha256:8a51a7aaddd60f55566d1f07bdd87b92b463903f39a8f26b71a06314cd1548ae", size = 898613, upload-time = "2026-10-08T14:34:48.341Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/eb/9146591cc819d040475bf7f2be786710c7f7eb8083693bf859728da2ca9c/pydantic-2.14.0-py3-none-any.whl", hash = "sha256:15fab1bea6f1dc5003b54fc2ecab230c1fd1dbade2acd4addc52d81e32416d4b", size = 487109, upload-time = "2026-10-08T14:34:46.864Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/6b/8f79692844269427abb3e4dd9e68edfcbe65ae25527d99183214de716c59/pydantic_core-2.46.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6", size = 2076533, upload-time = "2026-08-28T09:57:35.421Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d0/c787604c71c2bdcda1a5656942fc822cd0f9cd879b9484bb84fc42172703/pydantic_core-2.46.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615", size = 1924650, upload-time = "2026-08-28T09:57:37.944Z" }, + { url = "https://files.pythonhosted.org/packages/4a/77/ca2f8e997d9bfdb32205297aff38f210f398822d895b1af1b59fd9df9c13/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb", size = 1951261, upload-time = "2026-08-28T09:57:39.339Z" }, + { url = "https://files.pythonhosted.org/packages/a0/53/bd12e1a9255df4edee00353778e2614b5346265d51e1567ab72153e803a2/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b", size = 2021808, upload-time = "2026-08-28T09:57:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/d7/41/f7f312751ebc6d6767da91964a9c7954c18e226a1720ab234e3dfb9d6c17/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6", size = 2196184, upload-time = "2026-08-28T09:57:42.275Z" }, + { url = "https://files.pythonhosted.org/packages/3d/93/ce93aa030ab6bac4683ba8861e7baad89dd24b02e66b8801a0e4f6a00311/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793", size = 2238212, upload-time = "2026-08-28T09:57:44.122Z" }, + { url = "https://files.pythonhosted.org/packages/34/a1/c8e6b66f499f510752c07a092dfe27621f9c255635e59d38704b5681c35a/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b", size = 2064073, upload-time = "2026-08-28T09:57:45.613Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/605e2b127ee30dbf4b1da9da4843587cf2b2d16486c241cc7a5be2d2c1bd/pydantic_core-2.46.5-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461", size = 2093102, upload-time = "2026-08-28T09:57:46.953Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f7/1ab28093c09032ddce7c92c7a55d503b6ecd70f42c32492946c1cb5477b1/pydantic_core-2.46.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736", size = 2133452, upload-time = "2026-08-28T09:57:48.362Z" }, + { url = "https://files.pythonhosted.org/packages/30/c8/47c79b756f12f85e8b0fbdb2b495f6b6eb32e6c98a4beae7a570a0b7c63c/pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3", size = 2146477, upload-time = "2026-08-28T09:57:49.74Z" }, + { url = "https://files.pythonhosted.org/packages/13/5c/79fc00cb8f651d6061991de8d7cedf1c78c73cbd4862c42ef418f03b8bfa/pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f", size = 2300832, upload-time = "2026-08-28T09:57:51.639Z" }, + { url = "https://files.pythonhosted.org/packages/b4/72/dd1a29853cf6d22a1ebd9e3baf0239cbc57d2d16caff36a89e38eb9b1db3/pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1", size = 2320505, upload-time = "2026-08-28T09:57:53.236Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/ba4a8e06a9ddad0b4caf69cfaeecc0fbfcec20473bd808f5127fd16491c4/pydantic_core-2.46.5-cp310-cp310-win32.whl", hash = "sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069", size = 1956853, upload-time = "2026-08-28T09:57:54.592Z" }, + { url = "https://files.pythonhosted.org/packages/f2/94/205ed9d7ddaf44acd489889708ea124a3f41bdb42c141c8684d528ad0e7a/pydantic_core-2.46.5-cp310-cp310-win_amd64.whl", hash = "sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d", size = 2042551, upload-time = "2026-08-28T09:57:56.017Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b6/81d2d19ea0be2c03664381b59f65fa72fc7969decedae00bc2c4ad835708/pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f", size = 2074737, upload-time = "2026-08-28T09:57:57.711Z" }, + { url = "https://files.pythonhosted.org/packages/0c/18/b70da8300e292df4099684ea11b1958043580d2f50d2dc8bf7e542bdd84a/pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f", size = 1921751, upload-time = "2026-08-28T09:57:59.265Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1a/0d590341b6ffa4b4aca83508e6b8db4761aaeacfc15a25ca3815876d4797/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061", size = 1948231, upload-time = "2026-08-28T09:58:00.678Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/02eb35761c51f2f7b1b042d6ab4cda6600f0c8c88a2243b3f734376201e5/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be", size = 2020708, upload-time = "2026-08-28T09:58:02.267Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ea/f86073830e35d508cc8ddf9c3d9e6e6840fcb88d34bf726b0b4710186f27/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a", size = 2194914, upload-time = "2026-08-28T09:58:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d7/fc36240d7791ce90939e51608568c33bfdae26202016f9770c229a487d86/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b", size = 2235622, upload-time = "2026-08-28T09:58:05.516Z" }, + { url = "https://files.pythonhosted.org/packages/cf/bc/3fa2d76b83162820a17da7f645b28d1cba99fc8e1e5fc6517067ec450fa1/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c", size = 2062091, upload-time = "2026-08-28T09:58:07.135Z" }, + { url = "https://files.pythonhosted.org/packages/ab/9a/095d557bb492c90cd8a70a6dd048bf793d433d03d86c81c11e912e4cd049/pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee", size = 2089904, upload-time = "2026-08-28T09:58:08.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/98/7b76b1ad10a19a617a52aaa1d80e159115af939b095e86f8e756fd52e0df/pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e", size = 2132244, upload-time = "2026-08-28T09:58:10.435Z" }, + { url = "https://files.pythonhosted.org/packages/20/32/7d6ca365fadba186a0c8f85de1a701663bce81efd309d9479be58687622f/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2", size = 2143901, upload-time = "2026-08-28T09:58:12.033Z" }, + { url = "https://files.pythonhosted.org/packages/f8/09/eb9a6aa57f22fd1541a9c0aa2a1f3aeef3ec65347d33e10a6da2f43e0ee9/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689", size = 2299425, upload-time = "2026-08-28T09:58:13.614Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f9/548a5bb9d4ba8cd26e26daf48052236f6b38bb61e7b7241fbc3c995719eb/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec", size = 2318566, upload-time = "2026-08-28T09:58:15.199Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/06454d18834c02c406c9133f1a3b485305fd9ee984f9636c2f730bef6a9d/pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129", size = 1954258, upload-time = "2026-08-28T09:58:16.813Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c2/718b9deb4b72453b5d8c7447a3b14cb77bef36917ef5f514e0948a4096a0/pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c", size = 2041030, upload-time = "2026-08-28T09:58:18.288Z" }, + { url = "https://files.pythonhosted.org/packages/67/ea/c1d1a5b72d6e1ff7f377a4d9199f6591f095beb5b409a8a5d89f7238d939/pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8", size = 2009234, upload-time = "2026-08-28T09:58:19.929Z" }, + { url = "https://files.pythonhosted.org/packages/82/3f/76358795aa7a8c6d4f36e2cb828ad1c90ee118e1393a9281664f5aade9d4/pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d", size = 2076516, upload-time = "2026-08-28T09:58:21.576Z" }, + { url = "https://files.pythonhosted.org/packages/db/50/26b091836076ce4cb2fac264186936acc069e0595772cfd02a563bc4761a/pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e", size = 1922874, upload-time = "2026-08-28T09:58:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/2a8ce3849e299d44e2d2c196b6082643a3235565a735cb51db7a6261f614/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29", size = 1951772, upload-time = "2026-08-28T09:58:25.435Z" }, + { url = "https://files.pythonhosted.org/packages/87/46/ac0dc8bdd9e6048183a14eb127764e7ad9240021c17513074a4711b0e31e/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4", size = 2031832, upload-time = "2026-08-28T09:58:27.102Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/339de5bef7be36301a2231eaa52e62163742c2281f11b5f4892bc79785cd/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a", size = 2208645, upload-time = "2026-08-28T09:58:28.948Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a0/9ff22b797724262da14427abaed4dd1d864a139693fc5e7809114376a716/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62", size = 2265935, upload-time = "2026-08-28T09:58:30.625Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a4/eb9409ec0736e50aa70a412f16c204ed149516846912f7e6724d4c73ee53/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2", size = 2066284, upload-time = "2026-08-28T09:58:32.289Z" }, + { url = "https://files.pythonhosted.org/packages/c0/02/7f6156ffc926857f1c37c07d9a388682865a81830ab6a1b637082c25e399/pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869", size = 2105889, upload-time = "2026-08-28T09:58:33.986Z" }, + { url = "https://files.pythonhosted.org/packages/92/b1/e781d357ebe09fc929f995700f1b3503e8897f1cece183ecb1300d4d67e9/pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5", size = 2158006, upload-time = "2026-08-28T09:58:35.647Z" }, + { url = "https://files.pythonhosted.org/packages/70/0a/644597d84ab400e50609c192120b85c9681c22d3a20461b9060a79be0a7a/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3", size = 2158408, upload-time = "2026-08-28T09:58:37.38Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ee/ca3b7b3a4b3769ffe9ce9432a7c9be755de9593a46d3b0d54d0409323e44/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b", size = 2309609, upload-time = "2026-08-28T09:58:39.22Z" }, + { url = "https://files.pythonhosted.org/packages/ce/52/39fa1f451486019524ca685020390e7ca351832fd874530ba30c8628e6dc/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0", size = 2342618, upload-time = "2026-08-28T09:58:40.89Z" }, + { url = "https://files.pythonhosted.org/packages/81/5e/468fc630568c61dcef3cd47ad32ffbeed9af643f49208d1ea86ab4f890c4/pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b", size = 1939475, upload-time = "2026-08-28T09:58:42.591Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c9/4c19f41b84cf6b622a72fbeed7665b25d47a187d68d47d0d430c07f23268/pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8", size = 2043140, upload-time = "2026-08-28T09:58:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/af/dd/0c1a050299147c746e5256db16d645ab5efd4f78c59937d581a0524e74a2/pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084", size = 1997729, upload-time = "2026-08-28T09:58:46.13Z" }, + { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, + { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" }, + { url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/08/c3/8ec0e290a9ebaebd64047bf5fda94be835c6b1551b02437e4b76778fbcd7/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c", size = 2026371, upload-time = "2026-08-28T09:59:22.227Z" }, + { url = "https://files.pythonhosted.org/packages/01/72/4fd20ad520fb8da0157f95b27a7eb05a72790ef08138e7701ac972c342ea/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21", size = 2202822, upload-time = "2026-08-28T09:59:24.277Z" }, + { url = "https://files.pythonhosted.org/packages/31/b0/d16e0771206b29314f0d52198b720be21e8a99ab2bf11e3bc0d7c9cebdff/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f", size = 2262756, upload-time = "2026-08-28T09:59:26.608Z" }, + { url = "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", size = 2068352, upload-time = "2026-08-28T09:59:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/08/7c/570abb1ad2155348dc754ea91be22e5aaa18eb6d69a6068f7c6f2679a6ed/pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a", size = 2104777, upload-time = "2026-08-28T09:59:30.95Z" }, + { url = "https://files.pythonhosted.org/packages/8e/25/5bf74adc65a1ac5b7be3f6cb0bcb5433615c1598a801c19d830d84c98ded/pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821", size = 2156312, upload-time = "2026-08-28T09:59:32.604Z" }, + { url = "https://files.pythonhosted.org/packages/90/6a/2ef38830675e050121040618135564ed56b860b45433b02d9b4ebece46f3/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2", size = 2150067, upload-time = "2026-08-28T09:59:34.453Z" }, + { url = "https://files.pythonhosted.org/packages/90/ef/a7dbb03a14a64c2a4621f989c615ed9a892535a6cad938fc27079f919d80/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47", size = 2304516, upload-time = "2026-08-28T09:59:36.194Z" }, + { url = "https://files.pythonhosted.org/packages/68/f8/6bb4c4b80e8a6fde1904c64a51c62a1d04fcdfa3ea521a66b2ddefa1d885/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a", size = 2335223, upload-time = "2026-08-28T09:59:37.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/80/f46b8c681195190b2c1f1c7c0a81abce60663e987613e09ef64d433dd96b/pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074", size = 1934827, upload-time = "2026-08-28T09:59:39.836Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", size = 2042648, upload-time = "2026-08-28T09:59:41.792Z" }, + { url = "https://files.pythonhosted.org/packages/69/0c/117c562c7c1babdf44576b72a5e496906506c93690387ecfbca7c729ae2e/pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5", size = 1989652, upload-time = "2026-08-28T09:59:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/e8/66/9336ae58f9eb68c41d121894e52c4c89eccb07eb8f602a04ee9c3f37736a/pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7", size = 2065829, upload-time = "2026-08-28T09:59:45.364Z" }, + { url = "https://files.pythonhosted.org/packages/c5/02/bc19b47a96c2d3109760711acf22369e56bd7e405ca52f7ade164d2ead57/pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3", size = 1905716, upload-time = "2026-08-28T09:59:47.18Z" }, + { url = "https://files.pythonhosted.org/packages/52/a4/70b47c0509923dd98ccfed04fb3e32ea3849c82a0ff2205bb41009b43c00/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f", size = 1934216, upload-time = "2026-08-28T09:59:49.241Z" }, + { url = "https://files.pythonhosted.org/packages/52/ab/aa03b65f7bb198585edf806b906c3223ecf1795543e39e23aec4cce27ad2/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7", size = 2010635, upload-time = "2026-08-28T09:59:51.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/8b/0da06343f30b84ec549aafd309c6456223d5dc8bd36af504c573faad561d/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c", size = 2209369, upload-time = "2026-08-28T09:59:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5b/844c4defaa34a3df66eb9257087d121d70c201298b96abdf9f492fc2f1bf/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111", size = 2253238, upload-time = "2026-08-28T09:59:55.484Z" }, + { url = "https://files.pythonhosted.org/packages/f4/64/a4e536cb16d7f61a7fd3120b46c577fc7fa7325992f69c4f52bc786d77d8/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829", size = 2065740, upload-time = "2026-08-28T09:59:58.038Z" }, + { url = "https://files.pythonhosted.org/packages/5f/75/aaa38c6bc2d085f6605b34eabdc6a8a4e0b2e61fc9c8e6e52b28e97b3125/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa", size = 2087425, upload-time = "2026-08-28T09:59:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/55/ae/fcab4cfc39aba3689e1d20c8b5250ad280957022c09af2ed9cd585602a5e/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034", size = 2139306, upload-time = "2026-08-28T10:00:03.057Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f4/f1d03a4bc9d9acbc62f4d742b8a319af52f71885079868b2ff8e48a651ee/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184", size = 2144589, upload-time = "2026-08-28T10:00:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/83/f3/7a53bb1356de514a4cd295f25b6ac39237895620c0462d2592b76c16e114/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38", size = 2288882, upload-time = "2026-08-28T10:00:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/cd/94/5a81583660c175c59d49ffb09f4b3a44debeaf86a19fca664ae1cdd9ee32/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9", size = 2335210, upload-time = "2026-08-28T10:00:10.177Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" }, + { url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" }, + { url = "https://files.pythonhosted.org/packages/96/cc/4c88abc035cc0d8b2646a715d8c4145fad7d95817eb5f18297066b21e20e/pydantic_core-2.46.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed", size = 2078970, upload-time = "2026-08-28T10:00:18.938Z" }, + { url = "https://files.pythonhosted.org/packages/b4/59/fa3ef009cc1b2ca3753fd6869ee461b0b5b67c420cf659e32a12be027a6a/pydantic_core-2.46.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0", size = 1917185, upload-time = "2026-08-28T10:00:20.891Z" }, + { url = "https://files.pythonhosted.org/packages/15/5e/b3d8901f9775ad928077c3155c36f56fc1c813285e3986ed736a5fbf538e/pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655", size = 1955266, upload-time = "2026-08-28T10:00:23.135Z" }, + { url = "https://files.pythonhosted.org/packages/aa/9e/5522b09d12e8720013f2e4ac174999f40a05501bd15ad2bfa197bc136198/pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a", size = 2023466, upload-time = "2026-08-28T10:00:25.489Z" }, + { url = "https://files.pythonhosted.org/packages/89/2a/a5267bf2c6c7ded3f282b315e5f0cf2c58008c15b917a652fc32f92d6775/pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d", size = 2198448, upload-time = "2026-08-28T10:00:27.676Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a5/f72c192aba23924065946728e4fba96f73939b90e5aa4f7d41e728aea8d4/pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8", size = 2240121, upload-time = "2026-08-28T10:00:30.168Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9e/0c0cc24149429c030bef1a5c1776150e7e61fcbbfc068c6d1f9de90eb259/pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf", size = 2067262, upload-time = "2026-08-28T10:00:32.285Z" }, + { url = "https://files.pythonhosted.org/packages/1c/00/a2b8690a11d909d9ec9c4eb4d084b4d2e1b227e9b2e74f5926cd39096245/pydantic_core-2.46.5-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464", size = 2095116, upload-time = "2026-08-28T10:00:35.556Z" }, + { url = "https://files.pythonhosted.org/packages/bf/7e/d3088a2717b7bb316d8d0e64a4b0caf994769e88c56df79df547d75c1dc0/pydantic_core-2.46.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64", size = 2134727, upload-time = "2026-08-28T10:00:37.829Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a4/55a9e0ef61cfd1cbf4289059eb68a3eab765fca8ead6f9991d7de027d42e/pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168", size = 2147932, upload-time = "2026-08-28T10:00:40.123Z" }, + { url = "https://files.pythonhosted.org/packages/2d/25/d2fbc9d59f91f6c50c0d2ec032041c5e3295d68325ade06ec93fa82da43c/pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e", size = 2301528, upload-time = "2026-08-28T10:00:42.339Z" }, + { url = "https://files.pythonhosted.org/packages/9d/76/eccc0528d1421e298b42f85650cf021f0f7c42f502c7e58808db4a672bdb/pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13", size = 2322431, upload-time = "2026-08-28T10:00:44.399Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0c/ffab5a9a0fb82825c44f00dea8ec9d540d2e1e4ab2f1c4f0c32bb8b37fd9/pydantic_core-2.46.5-cp39-cp39-win32.whl", hash = "sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7", size = 1958681, upload-time = "2026-08-28T10:00:46.786Z" }, + { url = "https://files.pythonhosted.org/packages/86/89/8bb47660fed8c16adf1aae301ba149442e8fd220c126bbea2d24b987abb8/pydantic_core-2.46.5-cp39-cp39-win_amd64.whl", hash = "sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0", size = 2046649, upload-time = "2026-08-28T10:00:48.99Z" }, + { url = "https://files.pythonhosted.org/packages/af/1e/ecca01fce348f7e8afa9572441ff6f7d1cc70d21e4859f33944d10877e1e/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2", size = 2075342, upload-time = "2026-08-28T10:00:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4c/af80c7a8032dfc897040ad5cb772bebde529a381186499e6e29987f23f8c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c", size = 1907219, upload-time = "2026-08-28T10:00:53.438Z" }, + { url = "https://files.pythonhosted.org/packages/be/3e/54d89e2b092e778716bf6153634ef479e955f48c261090be23aa1e0fb0b5/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47", size = 1953393, upload-time = "2026-08-28T10:00:55.58Z" }, + { url = "https://files.pythonhosted.org/packages/ea/89/828ee90cda28ce17bdefaa3a6eaf74fe430e113295a10e6126beca559d6c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a", size = 2099024, upload-time = "2026-08-28T10:00:57.794Z" }, + { url = "https://files.pythonhosted.org/packages/df/dd/053c2e4303f791f3b8f8a14ab0b22008e8eb21d868c0c90b4f9be705b76a/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942", size = 2062540, upload-time = "2026-08-28T10:01:00.318Z" }, + { url = "https://files.pythonhosted.org/packages/d7/dd/a18df751a5e37dd51bfad7f68e766999125bebe68c9e1d10a493ad01bd63/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f", size = 1902040, upload-time = "2026-08-28T10:01:02.529Z" }, + { url = "https://files.pythonhosted.org/packages/b7/13/01d40f9d07ce8a779fd6e0bd8ad4fba91309500dd67b869e2e219d261a6d/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433", size = 1967479, upload-time = "2026-08-28T10:01:05.004Z" }, + { url = "https://files.pythonhosted.org/packages/fa/04/c81d4841331c2178b6fb09ae225425e110ed72d990c9fe556c4ec03d1013/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c", size = 2111034, upload-time = "2026-08-28T10:01:07.345Z" }, + { url = "https://files.pythonhosted.org/packages/20/21/22102e9950b3049526d20e811b95396508377d87651edd2b80d2b3d28659/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f", size = 2071333, upload-time = "2026-08-28T10:01:09.636Z" }, + { url = "https://files.pythonhosted.org/packages/d8/18/87aefa427d191e6d3ab1447f1efc1cdcac86af1069239b133e8a0fd7f7c9/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0", size = 1912713, upload-time = "2026-08-28T10:01:12.285Z" }, + { url = "https://files.pythonhosted.org/packages/1f/93/fd89e9ad49b1805ca94d24ce1088b7d305f05c35ffafcedb9819d03588a0/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4", size = 2090926, upload-time = "2026-08-28T10:01:15.19Z" }, + { url = "https://files.pythonhosted.org/packages/6f/45/8e59dab6acf8d35f02f0a958980074f31038968bdb2c983fcae9d1efee03/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25", size = 2131303, upload-time = "2026-08-28T10:01:17.937Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a5/e1d4dc5180dd887a9522efc1f8716b8692b7606b1d3273d7862eaf66be44/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6", size = 2145128, upload-time = "2026-08-28T10:01:20.694Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/ad493864a7fb21c0c4df98f965e2db430cb25a9d7369b5778d5016c09fd9/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e", size = 2294560, upload-time = "2026-08-28T10:01:23.495Z" }, + { url = "https://files.pythonhosted.org/packages/02/8e/b41c84c913f29973a268e6c2b5bbf13c95adb9956c126d10da11ba3b2bef/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda", size = 2317531, upload-time = "2026-08-28T10:01:26.334Z" }, + { url = "https://files.pythonhosted.org/packages/db/1d/068464f23075f66a8f1b806935e9cd9363ee446636ea70d2c22ee8659dbf/pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266", size = 2140686, upload-time = "2026-08-28T10:01:28.947Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.50.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e6/6d/196e8c819e0e934f35a1a33b3530396feadb0af4ca38fe9f995249e55794/pydantic_core-2.50.0.tar.gz", hash = "sha256:84d2d38f7d163c4dec292f379e9de1960c661795442aca6c90d706436cb3749e", size = 513355, upload-time = "2026-10-08T14:30:58.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/4d/94bedc3c507275a60d172d2d1d8877f4d69e8d0403f83fb51a03e746ee07/pydantic_core-2.50.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f8df36f964c21168e345f914855e3b428e2cb6e1f739c8ef5963b77d86dd84ae", size = 2154414, upload-time = "2026-10-08T14:25:49.983Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/b2f891cd8d325031b6ded8ac886f3e3726562857f90cf261cb8b0e83f947/pydantic_core-2.50.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eadf95aab7301ac651628f097e521d742d0fb5f732155ebfd00d07933045d81c", size = 2048392, upload-time = "2026-10-08T14:25:52.906Z" }, + { url = "https://files.pythonhosted.org/packages/cb/94/d0386e10ebb0befe1385f483e3ee12b417ea328234c685004bfc8397f14b/pydantic_core-2.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02ec3675d606a355523e1c52bf5aa4116776f8d273dba03d8336a5a3ae984e15", size = 2052185, upload-time = "2026-10-08T14:25:54.176Z" }, + { url = "https://files.pythonhosted.org/packages/2f/65/c75b43d813965a929baf77f8610b7e42834bed88b32e2f88a44e3505828f/pydantic_core-2.50.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3e8ee6386f6b68e2f818ccf422ccfafc59bcff10862b52c7819db3aa0352dfc", size = 2191576, upload-time = "2026-10-08T14:25:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/89/d2/4cee448b2d9f2befe656f8e382d352abfdad7ed5bcef5cdfb75653f35b84/pydantic_core-2.50.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93502b3c762149a5904316ef52f0ed1ea721e0f4c8431f964f140ed15fa61926", size = 2390913, upload-time = "2026-10-08T14:25:57.487Z" }, + { url = "https://files.pythonhosted.org/packages/05/77/1e4f29fecf8d6d64224a4f021f74fb0f797501ba5e1a51d3f853587ada4e/pydantic_core-2.50.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8cc61ad94215ab98e5cbcdea2cfde45e11bb0136ee980e1240b721635e55790", size = 2432980, upload-time = "2026-10-08T14:25:58.914Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/dbb45e48fdb846e04ccf5e3a61bd0b48aeaf4f8f0e1449cfc8c31bd3fceb/pydantic_core-2.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbce1b5a2a88a465d7865df61b7e4f8829ddc49b4fa841e9b241815c9d67c3b2", size = 2160717, upload-time = "2026-10-08T14:26:00.662Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f4/d8c80e51cf12ee82fa1f4f87e5302bc47429de1a71fb8678e6647a5d57c3/pydantic_core-2.50.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:2568b190075acd058513dca34f7fddc7252fc958c1591cb67a554338fc9a81b2", size = 2257069, upload-time = "2026-10-08T14:26:02.156Z" }, + { url = "https://files.pythonhosted.org/packages/73/59/a2cc3bede29a8fd7446db4fa6e628268cffd5bfe082c15a7d6ebe4dc6125/pydantic_core-2.50.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:468f7e67cfbd8231f442af6726449efe46f2be0e5a57b44fba7ccd92c6f121c4", size = 2271467, upload-time = "2026-10-08T14:26:03.594Z" }, + { url = "https://files.pythonhosted.org/packages/95/32/52538b9729767a1cffe08494d6d97057d5ad8a2c5741ccfbe7e9ddbaa47d/pydantic_core-2.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c19500343957f254ecf3e60174f4a4cdd21690e0e1677740a8017d28ab2a2a4b", size = 2305629, upload-time = "2026-10-08T14:26:05.005Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f5/553e1c9641946cf967f57e678460386713289ae221cb4515a8ed7add76ad/pydantic_core-2.50.0-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d14d04058923d526a552fc3ebe8b0b0353c19516431cee196502b53119278fd9", size = 2467811, upload-time = "2026-10-08T14:26:06.69Z" }, + { url = "https://files.pythonhosted.org/packages/81/9f/6d0cea0bd42459db3e5030a0bc1f9b82dcb90b3dad57a367db32e9e3a667/pydantic_core-2.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5d0b210c871486f5acb56d87bf00e3c5d83aab6a1ef3042629fa6ae0172fcf47", size = 2480934, upload-time = "2026-10-08T14:26:08.274Z" }, + { url = "https://files.pythonhosted.org/packages/25/20/fda6d8366010c762089feb5675618ce634394466a7fbb7e945b7689e0277/pydantic_core-2.50.0-cp310-cp310-win32.whl", hash = "sha256:6e1ec4176c3b56017745937dfd4a3ec6df55f7f0e66991124499f3f79f8f8d1f", size = 2124054, upload-time = "2026-10-08T14:26:09.71Z" }, + { url = "https://files.pythonhosted.org/packages/00/0d/232cae06119357f3f0184e3d5ff409c52dab34a7481e7ea16e97d41ac8ca/pydantic_core-2.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:56178c4116fc0c859786875ff4acc1c8d52678f095c312b0eff2a2dd9d6f8d5f", size = 2179027, upload-time = "2026-10-08T14:26:11.288Z" }, + { url = "https://files.pythonhosted.org/packages/f1/99/114c2e71405da7610c884c64f8370f85b2fbb69bd427158a3f714515a803/pydantic_core-2.50.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55684bc850059fc85ff8dc21a3e342b722d3178993c49ebdfdee8b698a432720", size = 2152583, upload-time = "2026-10-08T14:26:12.913Z" }, + { url = "https://files.pythonhosted.org/packages/75/a7/fabcfea81a5c3525507af4347fa3a50e51036d5db6611a63e47379776e56/pydantic_core-2.50.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3ae59461625518449f800acc4f874753ae96fcf993c47a27be07beb651371fd", size = 2045652, upload-time = "2026-10-08T14:26:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/226019008a041da423dc59d34f980b2b6e60a71971d07a8f52e10fc4747a/pydantic_core-2.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7080928078ff56c07da393392f772054e93a39c8033dc9c04547bd949f9b614", size = 2050325, upload-time = "2026-10-08T14:26:16.081Z" }, + { url = "https://files.pythonhosted.org/packages/b9/29/11c98cd9c49338f64aeb3d6e166c99b65d8949f00f285c5b66de75ade316/pydantic_core-2.50.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b1bae96f41806b14dd8bb1568d39b5e33b5af7fb27f7be36c78b8fa84708917", size = 2189027, upload-time = "2026-10-08T14:26:17.581Z" }, + { url = "https://files.pythonhosted.org/packages/cf/b7/af7d9c4de715cc13e947d1135b73f0c181bce2f01e9f1d9e3c428f9ee31c/pydantic_core-2.50.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8facaf0a16121ac82cc403a71399a061b74624c1ae2034eec9ed6169c5d16ecb", size = 2388815, upload-time = "2026-10-08T14:26:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/26/87/cd95dcd4d066180b2e22eff3dca01ac3af56607f9ecc43b7ba0748496f47/pydantic_core-2.50.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:610e9f483ac53c5cc59c2d3687224029b54eb494feec2d40a2bcfdd187635192", size = 2431821, upload-time = "2026-10-08T14:26:20.958Z" }, + { url = "https://files.pythonhosted.org/packages/f0/14/7122b78e9915e7dd50f9dcec6041a4e32874907b41b9e0880db2f1c7ae1a/pydantic_core-2.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac223ea031905319a64d0df116979ae438b42d6265862a3d63c9f9808c2905a7", size = 2157622, upload-time = "2026-10-08T14:26:22.947Z" }, + { url = "https://files.pythonhosted.org/packages/97/86/fcddead5bda54fc8efa0d80dbba5962e9a91193570e227404c7593707833/pydantic_core-2.50.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:75b451ec5e64a1d4b803317f34710131742ff2e42f4bf5403f597d0af857d7d8", size = 2254921, upload-time = "2026-10-08T14:26:24.607Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e8/041d1c3e3e1f203a656ce592f8c1548e1ef2b0939d19c5ce66432c30e4bd/pydantic_core-2.50.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eee44c3f1f8acc220a743a5ed5588949a4f18b33df4cfbef2b1277470285401", size = 2268163, upload-time = "2026-10-08T14:26:26.207Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ac/f515994ef1351e883276e85af0a50d839ead9d0d22743fa2c6dfd552f7ce/pydantic_core-2.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f44107b5fdfecc03438feb165431652c8006650471326e53dd86d4c19124f5c5", size = 2302005, upload-time = "2026-10-08T14:26:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/04/6c/b970c4c87d92c4c974a5c5dc16bcf747f89b4e5729c5c45131267ef0421b/pydantic_core-2.50.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:718d05d4e078c7828f40ad3e310870fe4b837d93a32e7e8497a080c1f1040490", size = 2465387, upload-time = "2026-10-08T14:26:29.529Z" }, + { url = "https://files.pythonhosted.org/packages/4a/84/c0a92f97f9de7f133dfe694d0e8ca033a1c90fdf692dc69dfee3bf8a2e7b/pydantic_core-2.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:031867348c98ab49c6d3a16ad39738369ea48da59900d76d71c1e64de71fe79b", size = 2478673, upload-time = "2026-10-08T14:26:31.898Z" }, + { url = "https://files.pythonhosted.org/packages/f1/11/88e851761351cfef90382f175b07cede48edafc62a1509575dbc879934ef/pydantic_core-2.50.0-cp311-cp311-win32.whl", hash = "sha256:e41f9d1d9240e8e0d8a670ad3e66c0c00f0b1f7150a31bc6c445a4f87c1cb3ba", size = 2121424, upload-time = "2026-10-08T14:26:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1f/89184f13b9ebaf6d8710cd0d1cfb466d7dc829de23468ab471b543dd07eb/pydantic_core-2.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:90874428bc6678b26434336c77931c9734ecebedf50132c179205e5a9908761d", size = 2176278, upload-time = "2026-10-08T14:26:35.388Z" }, + { url = "https://files.pythonhosted.org/packages/ff/7a/5a630fff51218a860aa4e7699f781a7c9bf41c031987b613629c98f16618/pydantic_core-2.50.0-cp311-cp311-win_arm64.whl", hash = "sha256:b9be297ffe1015bfb2db4a23b6e1fec7e48361cf7c7b4f4f6bbdd008451b0a7b", size = 2183464, upload-time = "2026-10-08T14:26:37.485Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d8/e0fe374bc0082dfd337ca319505c9302ce383aeeeacc33d93383edd159e5/pydantic_core-2.50.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:79e8fc9c135ef628c45cb8aa5deef8d21de13d33bb4c59a859fa73d335ceb40a", size = 2222860, upload-time = "2026-10-08T14:26:39.575Z" }, + { url = "https://files.pythonhosted.org/packages/ef/7d/0a2f829e3e1d809393faab907e3d9307245cd6043ebf54fad439f72f0003/pydantic_core-2.50.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0abe1b44d361b948404b6b2ed80be2583e0077340572e071afa6e0eda4e1de30", size = 2025752, upload-time = "2026-10-08T14:26:41.786Z" }, + { url = "https://files.pythonhosted.org/packages/67/d4/e2808af12de4809dd6a4b532e3877baa5f1000df51bd8ebb8756450c6c92/pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae45853d25a23fba56681d2f9ed41f3e3f12f0a3b2393fefa08ff6406320a1f5", size = 2048432, upload-time = "2026-10-08T14:26:43.593Z" }, + { url = "https://files.pythonhosted.org/packages/18/58/46ad42a321051585d89f4e563b115015332caf79ba4e96f2785715c7f52d/pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd841dcf394ff261c26763a9d7be754176d4f1e6d26cb2a5d5331e91b6b56a5f", size = 2173565, upload-time = "2026-10-08T14:26:45.299Z" }, + { url = "https://files.pythonhosted.org/packages/92/69/541206e657ecea865e5f6d49a4a0d8062586d05da482d9d7ed77fdcdfc86/pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2e97985641fe53ad7824d1b5bfeb7990a5ff788c4559ee44d7522642560ddc2", size = 2361974, upload-time = "2026-10-08T14:26:47.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c0/cf4850441d0d3d3736abe5e8b6fcb49a50166aa0651ed8444172f81f4b4f/pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7987866a2569396e6765c54d643fd6a7b3b234e89ee8d45a3729a7b4b2726145", size = 2440817, upload-time = "2026-10-08T14:26:48.937Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e2/2f793fa2f1b338aa03124efd4362956c84d7bf1b331dc86050bc0151e67d/pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f187030fc3d62c668feb0f09e92852e0eb414d7fcefc4748f2e67d245aade37e", size = 2160358, upload-time = "2026-10-08T14:26:50.74Z" }, + { url = "https://files.pythonhosted.org/packages/db/00/35e314c08e721ec1f070408a4e41926b90347ecd2863c08c78daad5f8a16/pydantic_core-2.50.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d187f43d1c5b844adc871c5b8c22b4aa12a116aaca4e9bd1521bc9ce479aae1f", size = 2231416, upload-time = "2026-10-08T14:26:52.733Z" }, + { url = "https://files.pythonhosted.org/packages/0f/3a/6f7c36afe35a9eca24e5f74f33ca641ac8cf308aae4ac7af4e585d464a40/pydantic_core-2.50.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb4fcaabb28cabf21396a9b816b9afe091f8c776805fdf03e2cbc606b64dfa7c", size = 2242496, upload-time = "2026-10-08T14:26:54.485Z" }, + { url = "https://files.pythonhosted.org/packages/8d/af/77adf30285836c25f6a927e170df45f8dd4af713c89135b22abcbf3c6d67/pydantic_core-2.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1751e92d56fbb623b937d73985e500b1a2b1053e56f718a6c564660d99bb9cb0", size = 2279176, upload-time = "2026-10-08T14:26:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/08/37/4e2a05247f82b59337bf45e9bb14aed85e2d83aecd21e49ad6cedf91882b/pydantic_core-2.50.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:70df7ff903aea05383298715ea53551c8f27c8f70cbe54ba7f05606cd822e7e4", size = 2450488, upload-time = "2026-10-08T14:26:58.218Z" }, + { url = "https://files.pythonhosted.org/packages/85/e6/75f25906212ecb94d69a0c8ed16f5c4ac312dc9961c2e93ff2a7fdf9a07a/pydantic_core-2.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:24302bf47319a64e5c5c7c29e971d2b7a20a190c64e59035a3df9582dec636fa", size = 2476664, upload-time = "2026-10-08T14:26:59.98Z" }, + { url = "https://files.pythonhosted.org/packages/75/72/ebb97b3becd0c0f2c722f698d34dec951ab1aa6086edf535f8769b545e3e/pydantic_core-2.50.0-cp312-cp312-win32.whl", hash = "sha256:5dbf9f18c8af11db719e67633be0af556d7d765bee0ca9419bd706fe4b7ed9fe", size = 2102409, upload-time = "2026-10-08T14:27:01.846Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7b/5ebf3e62f5d0f6e3503ffdfffd7d0c2f8d45690afd37fa0cfdcb1786d7d6/pydantic_core-2.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:1541c334af5d42cb9eb03862a9b4d2cfbfc670fd05172ec51f3ce02d704550f1", size = 2171536, upload-time = "2026-10-08T14:27:03.797Z" }, + { url = "https://files.pythonhosted.org/packages/58/1c/879ee9d5b63c60e5a077bab74ad93a4a48476090ca9c97534ab4263d0bae/pydantic_core-2.50.0-cp312-cp312-win_arm64.whl", hash = "sha256:b1399f918aea8fb76ffa99b474c9b768accea1f079fde407ee538bec89f20fa7", size = 2162946, upload-time = "2026-10-08T14:27:05.876Z" }, + { url = "https://files.pythonhosted.org/packages/81/25/f9a6958f73d92f66d620e3e1b091becf6b7a2ea89437118d397e2c6ca9ba/pydantic_core-2.50.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:049b0404792dcb942f1092bfdae5f819ef30445b0d174782e1909fbdd91bb48b", size = 2222904, upload-time = "2026-10-08T14:27:07.869Z" }, + { url = "https://files.pythonhosted.org/packages/c5/41/7f299b2ecf0ddbec8c2a68057ed53d29458ea5b0850615570849c454dd89/pydantic_core-2.50.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8f16bc5bb12f4c581b0f40facc28dbf286db32d1bf4e7e4f4c4e0f7f4e34ecf9", size = 2024863, upload-time = "2026-10-08T14:27:09.78Z" }, + { url = "https://files.pythonhosted.org/packages/89/db/a9852fa8780acca5dd81a21bb66d4b2fb41c39dc5672cec66c32cc7f13e9/pydantic_core-2.50.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1d084e92d0f4a096a5155b23d1ac603db8073ef98a3d1384badf1455e5ae742", size = 2047340, upload-time = "2026-10-08T14:27:11.85Z" }, + { url = "https://files.pythonhosted.org/packages/90/82/cd174e776e71ebcb1d289a57cb3e89565123a84c5708865e12efa82313f9/pydantic_core-2.50.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0af2d2f745ec00a6616c4dfba4477f9156ccfb45690f6ffa5fd34f42e871ed4", size = 2173461, upload-time = "2026-10-08T14:27:13.948Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5c/9c4b2aea09ec7b7af966e79631b1970f1adeb6a8ed001bc8bb64a2d1c23d/pydantic_core-2.50.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2f28a5a299d4cefd1066a6883d22600b9ae3606f881c3015d255784634647580", size = 2362629, upload-time = "2026-10-08T14:27:15.909Z" }, + { url = "https://files.pythonhosted.org/packages/28/d9/93afd007b61c50425c3c8f0402425779341c8d498bd224e5788eaf419c4c/pydantic_core-2.50.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd70c2d9e73bca09fad54605dfeaae2b4e770b2800c65f5f5342901ed567b9f", size = 2440134, upload-time = "2026-10-08T14:27:17.716Z" }, + { url = "https://files.pythonhosted.org/packages/c9/93/a4ef199535547aaa7c5d2cbf009a1d6a2b252885b14c6e70404e1c661716/pydantic_core-2.50.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e58acd43ac8d3905659c1d5309318dd576243e723dd7c3b5dd4f555479b77d4b", size = 2158480, upload-time = "2026-10-08T14:27:19.618Z" }, + { url = "https://files.pythonhosted.org/packages/de/20/f216e028d3bfbd9f8c67f7a2f0f8db04240926f630e2e66a5a8ac45fe00d/pydantic_core-2.50.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:5a07c644047f5abc268b4c39f8cb5a30e08a3c349228cb70142c7d3ed87587c0", size = 2231837, upload-time = "2026-10-08T14:27:21.742Z" }, + { url = "https://files.pythonhosted.org/packages/56/3f/57a6acf26e0acb82238ba4e25b35cbd6013b1d74eac99c4f358ff56bf6d6/pydantic_core-2.50.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ad8dad549cd1645be591a50b4573995ee7e018f6619ddc2bc6ea44b2ad9f694", size = 2242240, upload-time = "2026-10-08T14:27:23.564Z" }, + { url = "https://files.pythonhosted.org/packages/94/41/f5f4014b40f91db4479e87dc038ac48a460a60baadea7ff9c942bc64dc62/pydantic_core-2.50.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:1773001198030e16f946a7ff7760fc3ebd45b12150f66fd0f433780043dc13d8", size = 2277852, upload-time = "2026-10-08T14:27:25.517Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fa/485e4db093e10f29676fc696abf9d88f3626ee520e99cc488fb091222db9/pydantic_core-2.50.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:8ab9e74878172948e0426e3d27fba333fd6a1c3f9456d8e75643e8e6868ac1a1", size = 2450132, upload-time = "2026-10-08T14:27:27.493Z" }, + { url = "https://files.pythonhosted.org/packages/d3/48/fd07063cfc65e498528cea59b27b979eb5c890a54dcf5bb19ab0a589516d/pydantic_core-2.50.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e15bb1535f68a27f28e579ba3a8f74e7b05d350c45f5622b76a311d5a19ae48a", size = 2477011, upload-time = "2026-10-08T14:27:29.972Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/6f34c285dc87ed2fae5f1b53c51bb732eda21dc0c6c73d6a5d9dcc7033cd/pydantic_core-2.50.0-cp313-cp313-win32.whl", hash = "sha256:c21e6a6e4e6d32fb6acbc4f0fa69e8319cac0d65eeaa8298d757371cc2a9c687", size = 2102027, upload-time = "2026-10-08T14:27:32.497Z" }, + { url = "https://files.pythonhosted.org/packages/5e/50/dbdb3ba6699d494e59db2f145aeb97990e28d1503bc9f7bdd57eb4c15677/pydantic_core-2.50.0-cp313-cp313-win_amd64.whl", hash = "sha256:4f96ccd9368ecbf6685d8f6981584ab72b4f0ffd20685e747737e7e340277b8d", size = 2169974, upload-time = "2026-10-08T14:27:34.692Z" }, + { url = "https://files.pythonhosted.org/packages/7d/ae/cfe0e52a9b45b5ba12b3a839db928669543948760a059a72f13cf0346c29/pydantic_core-2.50.0-cp313-cp313-win_arm64.whl", hash = "sha256:a2b88f9f9fa52e1c34938ff1a18ee7fbffe482df0bb43c087a9a60578d273d68", size = 2162504, upload-time = "2026-10-08T14:27:36.989Z" }, + { url = "https://files.pythonhosted.org/packages/59/d9/6dd838672e5ccddf01556bfd1b4a6767e0c75abf9aaa4092cb87a56dbc4a/pydantic_core-2.50.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:62a93a9d206a3580c975c3c1f65a869cd063844d016c004f8d786a9309b3c591", size = 2224496, upload-time = "2026-10-08T14:27:39.281Z" }, + { url = "https://files.pythonhosted.org/packages/b3/20/c57d2efcc63fb8fb6ae9ec2818baf30e2a68751e8d1dedefaf3dab2e45fd/pydantic_core-2.50.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5a8403eef4a66743e339102fb3cdd8c8b9016b8bd67924685893d062c88896f9", size = 2023860, upload-time = "2026-10-08T14:27:41.332Z" }, + { url = "https://files.pythonhosted.org/packages/26/c8/f44ea3f1b00288f715e2320cbcd0f604104325370ef4bee42c5ed2ab076e/pydantic_core-2.50.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8354fbbe2abf0fb724b9303bef43bfd9b7a2779332813fa6d6559983954e7d8", size = 2049144, upload-time = "2026-10-08T14:27:43.695Z" }, + { url = "https://files.pythonhosted.org/packages/74/5c/2f5cf84ceaf6d7c351737124aebc135f50ce48a9dd28d2b5283103face54/pydantic_core-2.50.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00963fde61cf8880d9e7b5635a9830e0591edfa45168447fdc5b47635c0f6437", size = 2173456, upload-time = "2026-10-08T14:27:45.792Z" }, + { url = "https://files.pythonhosted.org/packages/97/de/dc0bd815a328e62b72bb93b5f3c762939670d4119fd27405b454970833da/pydantic_core-2.50.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bbd7da16d8b2912cc56c9d0b85c4998a6cbf39b220f81c0d8c397c64672ae0e", size = 2365204, upload-time = "2026-10-08T14:27:48.117Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a5/458c4a29f52fdecb16b192fb27f117359da9c9c58401ebfd956637822dca/pydantic_core-2.50.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed557fa2744617eac3e34dd39b85037efbf23cd33f06851c00fdb8f18ad8f4c2", size = 2445007, upload-time = "2026-10-08T14:27:50.637Z" }, + { url = "https://files.pythonhosted.org/packages/98/14/0c0e72e0663be91a456167a2f7ed49c65195b388e8f1e8b2bb5083b27458/pydantic_core-2.50.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f816dc04e99627a5a6352ae51dfb30e603f2cb0b7009c91dc640c533def014", size = 2159911, upload-time = "2026-10-08T14:27:52.881Z" }, + { url = "https://files.pythonhosted.org/packages/62/7f/64af6921e17ed04dda0e07ebbd394b29fb557d33618cb0f3f81ec59c0508/pydantic_core-2.50.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:779b6c74526596a86d38248dedaecfb7851bbaf319c234be042c57acddd2c8c4", size = 2235761, upload-time = "2026-10-08T14:27:55.194Z" }, + { url = "https://files.pythonhosted.org/packages/82/11/b6ff9f7207af629094f4deac947d04be3812d5c95054010ad8f710a052f0/pydantic_core-2.50.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:21b62d45f327eb0802f842c132fda6d01a8376a8077922dc4dda69011c64d34a", size = 2243726, upload-time = "2026-10-08T14:27:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/6f7101f3c746a1686987a32875ae2f7c19f518d783979cee1a8a32e0a9ef/pydantic_core-2.50.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:4f31af62efd1fd0257735b72e6716b32d4f207654adeabfe524d44baf1bb6bed", size = 2277158, upload-time = "2026-10-08T14:27:59.714Z" }, + { url = "https://files.pythonhosted.org/packages/d2/74/67fe208f3ec7f5d8c47bf7cba70019a84b1cffad947ebc8caef14271b54f/pydantic_core-2.50.0-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:933f2d639eb81a3e1f145aec415453cc00983236629933f028d9507222583a2e", size = 2450059, upload-time = "2026-10-08T14:28:02.17Z" }, + { url = "https://files.pythonhosted.org/packages/cd/10/4a9c56a69f5841bdd94ffff5876a12ad2733209d5b89cadb67638d69e7c7/pydantic_core-2.50.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:c05d035e72530f6b00297941b0162218601542b76870c3bf2756bd87f16fc538", size = 2479142, upload-time = "2026-10-08T14:28:04.494Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c1/30d36746051e42bb67df986ee874f787526edb99205f6b1583c33dd81202/pydantic_core-2.50.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:ab3f95f737fc1b258b8210308fc02ce1442cf5950cf6d30b09ad89ab9e8afebd", size = 1483929, upload-time = "2026-10-08T14:28:06.527Z" }, + { url = "https://files.pythonhosted.org/packages/04/2c/c0e8949be4f99a74f02ae02d603bdd518c8a9eba72982a34d675134a792a/pydantic_core-2.50.0-cp314-cp314-win32.whl", hash = "sha256:f12d9690634414fc04b1a7072fdc35c34a9242232c1851fe4518383578bb09d4", size = 2104255, upload-time = "2026-10-08T14:28:08.729Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6f/a5a5baf99509c998e0f2335d66b815880c7d6c63231c8e4017b237d6837d/pydantic_core-2.50.0-cp314-cp314-win_amd64.whl", hash = "sha256:63263d64884688554fb025a3906c7b00573980cfee75f9afeb86239d577384bc", size = 2170939, upload-time = "2026-10-08T14:28:11.08Z" }, + { url = "https://files.pythonhosted.org/packages/40/bc/c89b93b69d59cfe61c1e91b1cd3d87cc740e57327ecfef84ce34b7dcadac/pydantic_core-2.50.0-cp314-cp314-win_arm64.whl", hash = "sha256:753863dd4317ec8cc9eb3e6d9d01a8ef1a1726a8003b4354658d68a1ae05f9db", size = 2157035, upload-time = "2026-10-08T14:28:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/ff/5e/d0ad47a406c42db95876900f4bfc520313c28d07a0dd5080da4972220c27/pydantic_core-2.50.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:c4abc425789f8540e86ca4cfdbc8dc650433cc2ac7c6136fee9bcb29d5665a02", size = 2234007, upload-time = "2026-10-08T14:28:15.9Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f4/69a7ec8400c1e34e5e11ab967f850ffd8ca71bb3aa0a8db93df5912bb6f2/pydantic_core-2.50.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cf150693a51ca21e8288cd08a9de05e5ab331776dfcfd0537b14523338f0502a", size = 2000888, upload-time = "2026-10-08T14:28:17.983Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f1/860bb499f7cdf4bb453e8080af5bc182487f2f025d94baeee29c907bde6f/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158749408ee19682b8a2a7e7135cced7f41d6f2f9de96088b1b1609858a6a158", size = 2022761, upload-time = "2026-10-08T14:28:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/89/fd/f571420436e79b9f7cc8f8ec534dee1759c240b4dc086737608f14d05c93/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dcbd1fe5083315243447c13f7252ae9fe9d128b1ae2857e3a916c609235dd863", size = 2192910, upload-time = "2026-10-08T14:28:22.502Z" }, + { url = "https://files.pythonhosted.org/packages/cc/94/b47c4a01ea978a7a3d02551e3625f0344ae1352d67ea78011c2eca5e39e4/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fdeda6272d60b1f6fb63f6a3dade55e274af62e1514d24a6549a12150c385cc", size = 2390178, upload-time = "2026-10-08T14:28:24.861Z" }, + { url = "https://files.pythonhosted.org/packages/77/61/d109f26b3ee4443cca220eaaa4f3fbcf78ff07aeb577becc37d9224db63f/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b16e164205a90b1050d2f5469f8a7829db7698ad198c69e6aab6cbfb5648b87", size = 2464453, upload-time = "2026-10-08T14:28:27.383Z" }, + { url = "https://files.pythonhosted.org/packages/de/a4/7be2f608f6f8e7655155057a82a7e2f135ad9b37fcbadd34fdf11b1ade24/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17a5ca9c197788a6424749a09a3dce824cb2c17b72f835f8a5e330935b973609", size = 2150682, upload-time = "2026-10-08T14:28:29.65Z" }, + { url = "https://files.pythonhosted.org/packages/80/ef/a8d867f6d3981c232d0f3c2254458cdee8471de7bff3f7edd252cc00c30c/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:01340f4fbb4f854b1f36a6fe9dcd2b26c8936aead4e4ad1205624ac025c875fc", size = 2245995, upload-time = "2026-10-08T14:28:31.934Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a6/7297a39c8814beab877be5ba4f594c2e166108cdd20c1f1c51fb71d5389e/pydantic_core-2.50.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:99e203d5c2a814facef78dcd993b0fb7a933124a3475a38979fc09cceae210b7", size = 2264090, upload-time = "2026-10-08T14:28:34.298Z" }, + { url = "https://files.pythonhosted.org/packages/c3/65/634fc407eaf61abec0d015d6fd4fd8456c18c71358e984f60b0a05092d49/pydantic_core-2.50.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:2092ce156f92aff17e3345baba2b7c0c1701f32ba922c5de71bd6248fbe164e3", size = 2293708, upload-time = "2026-10-08T14:28:36.725Z" }, + { url = "https://files.pythonhosted.org/packages/3a/04/b87fcf8062b8907c77769385a4340a814fe359660593dbbe4d8f3f7e9e61/pydantic_core-2.50.0-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:74cbb6cbd74445ca279668790e0c10eccac0428fd79fe061fce6c9e3982ad3fe", size = 2468464, upload-time = "2026-10-08T14:28:39.109Z" }, + { url = "https://files.pythonhosted.org/packages/77/f4/d7aacec95f9e00dcbad84bee2fd0fc081ae292d380dc8a3268e4103de957/pydantic_core-2.50.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:42fff617cb0b08505d8123d71e6e7a8e54210d9007498f564855bd843ce984b1", size = 2511897, upload-time = "2026-10-08T14:28:41.681Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d8/0a755b0069f9a0f4c57f98fd05b524473952556406244649d632d25f8646/pydantic_core-2.50.0-cp314-cp314t-win32.whl", hash = "sha256:36f9ed6ae1069913e4f6e86d8233e119e83e00a20c54f88faf9c81292f2fecc0", size = 2098906, upload-time = "2026-10-08T14:28:44.218Z" }, + { url = "https://files.pythonhosted.org/packages/27/4e/cd10a1fbd1ba1d730871e382ec2ac550487465c7c9be1a72b3f4f9181817/pydantic_core-2.50.0-cp314-cp314t-win_amd64.whl", hash = "sha256:980c81c2ec53ea9eb2227c14b3e6de35670b2de163b638f2a803e90a3bd5bbb0", size = 2148359, upload-time = "2026-10-08T14:28:46.47Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b1/a766eadfbc16b58d401f63dde3bf4e0943dcd2402011b6b8d9de2031ebe0/pydantic_core-2.50.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dec0dafc116ac29a84d143fdbc3b83fdb5d4ed339276be2251154537ab30e14d", size = 2175241, upload-time = "2026-10-08T14:28:48.934Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/43d0e765a80d6fc7d87b5f66a9023777aad6da7e7d64f486a4c2be8158b7/pydantic_core-2.50.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:af2b808a79bb04075e87c81a5b6179365b93f9a851f29dafd67abff72085d0c8", size = 2224750, upload-time = "2026-10-08T14:28:51.227Z" }, + { url = "https://files.pythonhosted.org/packages/9c/12/07e047c21ad90f184c7e8bfc6c9966b9ca51d4698e1a06460b65ca2ce105/pydantic_core-2.50.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2918547195ffb20118b829fdb8938e9dc92c9527fe6cbe58572594c96362880e", size = 2023936, upload-time = "2026-10-08T14:28:53.978Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a9/fb26fdd343ead65a699245c9d2150e84c47496a9b250859214a90cceecc9/pydantic_core-2.50.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0393763d66f6f61715488d074a2cefac04aeb3ee281e36fb4925dd44deaf9e17", size = 2048872, upload-time = "2026-10-08T14:28:56.342Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4d/9fc4ea28a8ecc1b85fe77a616f8df9a51696476aaa93c5b256269d025044/pydantic_core-2.50.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62ec6568896e0abf258cbcd22c406c1c8bf27d16224b21bec8f75c4ae88a8173", size = 2173752, upload-time = "2026-10-08T14:28:58.805Z" }, + { url = "https://files.pythonhosted.org/packages/70/7e/74b55196339413d787b283c2568cca4679b0645e48229421228acfa8839f/pydantic_core-2.50.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec786cb9d597dd75d993f8c1273e31bb2114c9bc22f67fba611e654e8347701b", size = 2365284, upload-time = "2026-10-08T14:29:01.434Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0e/4ebc7a851f0ef63fcaba205739c171e50dd183f8d79dcf0099c3b46aa60b/pydantic_core-2.50.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fce74add1099da1ea09473268950270071fd56773e2968604efb3ab1d240e02", size = 2445279, upload-time = "2026-10-08T14:29:04.034Z" }, + { url = "https://files.pythonhosted.org/packages/07/09/03d3524fc7d4960840e32fd88c8cf487b5516daa7b6845ffc74274e0247a/pydantic_core-2.50.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:243088c95e23b12db9f2cd7661d584a3f00814e087489f40cde7f9feac56b694", size = 2160424, upload-time = "2026-10-08T14:29:06.628Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b9/7c530c84049089033dd746700bfbb51520ed9376bc90f3dbbcb319880acf/pydantic_core-2.50.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:42a56b0052ac11d9d0d87b1c94a1ce52e31914fd133f269585e0f63a4ed988f2", size = 2236109, upload-time = "2026-10-08T14:29:09.053Z" }, + { url = "https://files.pythonhosted.org/packages/0a/08/70e07379ebc2538c22f8c372a37c009b96a3a1bd7921aee1dad28ee41be0/pydantic_core-2.50.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:350001f5573451150d919722ee095aa28bec037d6e23b86d7f04581a910fe924", size = 2244011, upload-time = "2026-10-08T14:29:11.549Z" }, + { url = "https://files.pythonhosted.org/packages/66/49/294810baacae4b088bfac60edab06036951e5ae6e0c20e8f6cfef7d70f66/pydantic_core-2.50.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:21e38a011783d8afc8b9d79928e273d06f349b52ae84edf63ec18ad07f077484", size = 2278392, upload-time = "2026-10-08T14:29:13.998Z" }, + { url = "https://files.pythonhosted.org/packages/c3/0e/6990b812f124cf3564b36492799df7a66cd3cf5678004ffe65dda85b136b/pydantic_core-2.50.0-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:588d309ce5c85448379556d72011b191c0414ee2e80d7c3f1ebe2ceb2d9027b1", size = 2450012, upload-time = "2026-10-08T14:29:16.524Z" }, + { url = "https://files.pythonhosted.org/packages/a8/c4/f8f1a763550a077c51d2c69b7a32db56d1b54e61c613bc19e6c7fd2e7cb2/pydantic_core-2.50.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:a8ee3965e01f10e4ff92ba1727626328ab7ba93bcd5674ff2b78ea1048ee0cea", size = 2479233, upload-time = "2026-10-08T14:29:19.111Z" }, + { url = "https://files.pythonhosted.org/packages/9d/83/7a09baa1e0e4710be47b84aaf808e7b86247d7fa43251ac8934099113f8d/pydantic_core-2.50.0-cp315-cp315-win32.whl", hash = "sha256:c05b75ef3574c9ee4e05bbcf8513f7ccb155d426514be9efef5f6f53152d5f5c", size = 2104507, upload-time = "2026-10-08T14:29:21.694Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a9/f1cf61f747538834ea2c14c442264e4f29663c95294ad7933867633a1dea/pydantic_core-2.50.0-cp315-cp315-win_amd64.whl", hash = "sha256:8447678b49412294801c9ea15ae31ea3bae7da65425268c92d40e032c38eac6f", size = 2171379, upload-time = "2026-10-08T14:29:24.613Z" }, + { url = "https://files.pythonhosted.org/packages/30/c8/9871261b760672cfa334498d94bc7dcbff2495345e639e806127f7087254/pydantic_core-2.50.0-cp315-cp315-win_arm64.whl", hash = "sha256:92016718bcf3e6f35a6bd986880191a8da7a35aa1f5b1e97544582ef938464cf", size = 2157182, upload-time = "2026-10-08T14:29:27.082Z" }, + { url = "https://files.pythonhosted.org/packages/de/3c/5107269aee5ee7855fa370ff837998792dbf124b8545244c370bec251a66/pydantic_core-2.50.0-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:71061800a3c225e730f7997f8a7fad6e0d0dcbe36609cdc7e60576a099a2832b", size = 2234440, upload-time = "2026-10-08T14:29:29.705Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ac/cb179b0c404337ef517515539f9899164a6d3d43d5c79c2556165da211c1/pydantic_core-2.50.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bc87bd34239835c8d73171acd039e591cea0a2ca8615e6188044ad170a40fca1", size = 2001074, upload-time = "2026-10-08T14:29:32.327Z" }, + { url = "https://files.pythonhosted.org/packages/b0/59/ef1714204f145e9497ab71e8bd82c5e40b5adf365d420be777d1e047cdaf/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57c0e5b26d82bf31ab2b044781527b1b1a36e9ed400856b6aca5097eb1abb909", size = 2023016, upload-time = "2026-10-08T14:29:35.06Z" }, + { url = "https://files.pythonhosted.org/packages/87/e9/08a3ade34b4af09a83740b62a4442b7623127d388fc21d4938798dd85a26/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41b9f2821f0a105f88cd54ad03fe1392ec600618ffa8610f7c5e466ecd98c531", size = 2193165, upload-time = "2026-10-08T14:29:37.721Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/29aa3e540d3aca72139e5b7dc56395a940849d85da2b7a9ccfbff71d0928/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:364f62d8024997536e57865cb1c8b36effad3249bf392a29a2379ea69db28238", size = 2390198, upload-time = "2026-10-08T14:29:40.616Z" }, + { url = "https://files.pythonhosted.org/packages/76/63/a5cbdde0a2090c47002819d85317428e15b41d22e581cf38e9714b4903af/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:955d7878130dfc124d6a5343e1b87d2933244fe14a4a0a3e98787e8e660a8eb4", size = 2464777, upload-time = "2026-10-08T14:29:43.29Z" }, + { url = "https://files.pythonhosted.org/packages/c5/55/fff3a363b0dcf72fdd72311c676b1fa769f2c13342129c694b2eb9886580/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf81432281af66ba3285b26b09c2d478d84730dc50ff90926c1bdcef54048a33", size = 2150389, upload-time = "2026-10-08T14:29:46.271Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f3/0062361fd2377185d322dc84cd05ec4b96da352195c89939c7b509664721/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:34a4a0938eb30931baca56e55786c5a6871ac7aa891a38c8cabcdb7e49dab91b", size = 2246225, upload-time = "2026-10-08T14:29:49.173Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/662e3870143d5f1632a02ceb9ce2d5168e88caf3da80e9b42f495ceb1284/pydantic_core-2.50.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f517a417cd02aa8fb05b603a0ac6d87b7b004c3ba4fcd279cad25cab7229043b", size = 2264404, upload-time = "2026-10-08T14:29:51.699Z" }, + { url = "https://files.pythonhosted.org/packages/32/5e/8b14ebf111700362c6e519e40209d86f521da81ef171b2891af0bb5de311/pydantic_core-2.50.0-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:d01029d54ff1f45c195b1f7e6fbf6e58fb7e7e12cda9a6e639570d9c581decb2", size = 2294152, upload-time = "2026-10-08T14:29:54.349Z" }, + { url = "https://files.pythonhosted.org/packages/55/29/85c486e0d25a8b523803032e97d7138edb7b7bc887fa8c6dd085e8824cdb/pydantic_core-2.50.0-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d06dbbfe8da01a0574de27afc19915bb3e7dddfbd184bb97e958f94051d8531b", size = 2469160, upload-time = "2026-10-08T14:29:57.193Z" }, + { url = "https://files.pythonhosted.org/packages/12/bf/c451db7567e92d6601c4d2f6bdbb945cf60104182e2b241d8fe0b6f01414/pydantic_core-2.50.0-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:5307a8bd49158b57a0ca4e10950d31085aa35d9007e934047043ccc6d28eea97", size = 2512204, upload-time = "2026-10-08T14:30:00.177Z" }, + { url = "https://files.pythonhosted.org/packages/43/1e/5b93a2513ced099acb0dc4dd6684742d6564ade60a59abcbabd161624e07/pydantic_core-2.50.0-cp315-cp315t-win32.whl", hash = "sha256:c2b246fa7cbdf9918488d1542a82bbb928cf71bcba66905c24131981e759ff0b", size = 2099026, upload-time = "2026-10-08T14:30:03.154Z" }, + { url = "https://files.pythonhosted.org/packages/37/f5/1b5967e31b025a23f2f627ffea1f5a874cff0adb72fa5f5af6bb36394ad9/pydantic_core-2.50.0-cp315-cp315t-win_amd64.whl", hash = "sha256:36c49d4e1769127461b609f110d91963790091ffcc2de401ac1d3b2f6a63bd54", size = 2148456, upload-time = "2026-10-08T14:30:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/48/15/213d6fe84816e8a5ed7b7539ecebb3f14c20739c2469f4e372f0f15bb042/pydantic_core-2.50.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f3abcabb04503023e1053add24472e78878de0bfd5c8a93686be01f4032c363c", size = 2175368, upload-time = "2026-10-08T14:30:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/11/ff/8d126ca04417cbc76a81648c135296ecc2f36d07adfb0b3376638efd1dd0/pydantic_core-2.50.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:38b03c5439c6a7a952f56e3e6596dae44bc78c3fb6a69df46cabfb2f888e5f0c", size = 2162541, upload-time = "2026-10-08T14:30:12.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3f/e3f11c40950d0f37b3891c1ed015f04a4ef36c881d04ef1a5d1ac91d1c6f/pydantic_core-2.50.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:4faa766450ef44d9eabed5b65a280f63f903d1e1ed6d2e278961eb22345ec49f", size = 2075402, upload-time = "2026-10-08T14:30:14.968Z" }, + { url = "https://files.pythonhosted.org/packages/42/f2/727d2b23ff6ca67c9c050c4ff4e5abd7b599d9ebcd819a74141d3b11c7c1/pydantic_core-2.50.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50920d66aaab60dbc6023c3035d55fbabfa58b6d205d0b39d47d820c4a7a13a8", size = 2108552, upload-time = "2026-10-08T14:30:17.774Z" }, + { url = "https://files.pythonhosted.org/packages/4a/da/a4321058eea61f0504366668a09472a4c37514be30cce77967c35ab7ffaa/pydantic_core-2.50.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586699b43066ca6038f96bd71d0eff0b6c292929e3d66ff63d5dc79d0f06d589", size = 2267745, upload-time = "2026-10-08T14:30:20.619Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c8/45e2cbac6379b8cec8cffd7e6aed50754fce13d93f0cff28bbbfe18c1d1c/pydantic_core-2.50.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:b916ff828d604d4311a5639b7b3da51eaea3923833ec3e300a5ee35eade99691", size = 2217049, upload-time = "2026-10-08T14:30:23.532Z" }, + { url = "https://files.pythonhosted.org/packages/61/8c/b81c4139bff6305e7a98fa7845a99e05df1461d3c33d0fef417e02114ae7/pydantic_core-2.50.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:732efbb50977ab7cf18f01d4c255834aeb14cb2425459f7bff681a1ba3a4ffa1", size = 2039121, upload-time = "2026-10-08T14:30:26.423Z" }, + { url = "https://files.pythonhosted.org/packages/0f/49/679293741809cf835290bccf80216aebfcf5d94cb84a34709f18b21abfd5/pydantic_core-2.50.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad9185366893714cd4514ae5e1a098227704fa395cb41a7855d75968ecedc826", size = 2109280, upload-time = "2026-10-08T14:30:29.216Z" }, + { url = "https://files.pythonhosted.org/packages/f5/49/76f167aec9b9d77a82e38131539ca6c6fcf69d720965f76eda20b87b454d/pydantic_core-2.50.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0def1dc09802a790e4a1b3cbc4401f0b53c58f273ce3671df9867f7bdf1fbe20", size = 2269313, upload-time = "2026-10-08T14:30:32.096Z" }, + { url = "https://files.pythonhosted.org/packages/1f/50/a6bd3c397b609aade207ffb78ce46f4ad4e29bb42a39007c87ee00e778f3/pydantic_core-2.50.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:68421ba548f6d86c7dededd70bfe530b4faf67eb811c53c70a1be69438d3ce99", size = 2154371, upload-time = "2026-10-08T14:30:34.965Z" }, + { url = "https://files.pythonhosted.org/packages/11/3c/2d32a1f945b9809b65701d2b72315bdcd700f13c093df5e60baaa784bc6a/pydantic_core-2.50.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:23e0940b7d73f405d92e98b2a05b93b16db163be13b7478bb19e1db2e486ade6", size = 2087028, upload-time = "2026-10-08T14:30:37.814Z" }, + { url = "https://files.pythonhosted.org/packages/aa/57/c2aea271192d8c4b81afeea9d61de8f5dc8686a1fcd1ace80e70a482fbce/pydantic_core-2.50.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee9913fa2b5bfa6111c11158cf481bb13544f8bd5d10382fb6ee2612b16fcf28", size = 2259611, upload-time = "2026-10-08T14:30:40.581Z" }, + { url = "https://files.pythonhosted.org/packages/35/88/32128d5498b95722fe914a21a25f59edd7dc8917474f47924005682532a8/pydantic_core-2.50.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ad3532291deedfdfcad3cf5d351d0076d646c68a0c63869a1bebf87c22159600", size = 2268636, upload-time = "2026-10-08T14:30:43.511Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/7dae31279e07aaa63dd4b17756f4ebd5647aed6bee5581ee3b3e85d82a0c/pydantic_core-2.50.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:9279f4be22bc3765dd9f61f5b4d38d9cb219d167bbd6f2e0ffa3368b1b71b4d1", size = 2305416, upload-time = "2026-10-08T14:30:46.386Z" }, + { url = "https://files.pythonhosted.org/packages/10/2a/61e47defbd490618fcde2641f80d5c077f2961de62e88500edacb49297f9/pydantic_core-2.50.0-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3b2f3e44af4c6512dd73557621385a71b18094c8be81d60e5a8e73a8ce96b7f4", size = 2466713, upload-time = "2026-10-08T14:30:49.214Z" }, + { url = "https://files.pythonhosted.org/packages/61/57/81327752c007834d684b0b7d20ce00087206f512c7347a6236fd89ef0223/pydantic_core-2.50.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:593dd4f24abeb3ed90222f98bc6eefcac68cd5aa96fc7745f93862a802952bce", size = 2481971, upload-time = "2026-10-08T14:30:52.088Z" }, + { url = "https://files.pythonhosted.org/packages/48/c3/e321d3a4b2737372cf775ffdd1a02428c7d2791ee5afc9f228793a0ee245/pydantic_core-2.50.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b123f9d8702106f39dc3af63a031ca8b5279862a3747ec6c03ca49dbe78b71b9", size = 2337958, upload-time = "2026-10-08T14:30:55.045Z" }, +] + [[package]] name = "pyevio" source = { editable = "." } @@ -2020,34 +2523,50 @@ test = [ { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] +web = [ + { name = "fastapi", version = "0.128.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "fastapi", version = "0.143.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "uvicorn", version = "0.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "uvicorn", version = "0.54.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] [package.dev-dependencies] dev = [ + { name = "fastapi", version = "0.128.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "fastapi", version = "0.143.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "httpx" }, { name = "pyarrow", version = "21.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pyarrow", version = "25.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, { name = "pyarrow", version = "26.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pyyaml" }, + { name = "uvicorn", version = "0.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "uvicorn", version = "0.54.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] [package.metadata] requires-dist = [ { name = "click", specifier = ">=8.1.0" }, + { name = "fastapi", marker = "extra == 'web'", specifier = ">=0.110" }, { name = "lz4", specifier = ">=4.4.0" }, { name = "matplotlib" }, { name = "numpy" }, { name = "pytest", marker = "extra == 'test'" }, { name = "rich" }, { name = "textual" }, + { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.27" }, ] -provides-extras = ["test"] +provides-extras = ["test", "web"] [package.metadata.requires-dev] dev = [ + { name = "fastapi", specifier = ">=0.128.8" }, + { name = "httpx", specifier = ">=0.28.1" }, { name = "pyarrow", specifier = ">=21.0.0" }, { name = "pytest" }, { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "uvicorn", specifier = ">=0.39.0" }, ] [[package]] @@ -2220,6 +2739,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "starlette" +version = "0.49.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/1a/608df0b10b53b0beb96a37854ee05864d182ddd4b1156a22f1ad3860425a/starlette-0.49.3.tar.gz", hash = "sha256:1c14546f299b5901a1ea0e34410575bc33bbd741377a10484a54445588d00284", size = 2655031, upload-time = "2025-11-01T15:12:26.13Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl", hash = "sha256:b579b99715fdc2980cf88c8ec96d3bf1ce16f5a8051a7c2b84ef9b1cdecaea2f", size = 74340, upload-time = "2025-11-01T15:12:24.387Z" }, +] + +[[package]] +name = "starlette" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "anyio", version = "4.15.1", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/2b/3850dc6bf7ef71b088962eba31dafc6cffd2f96e577ebb0bb316df96da3e/starlette-1.7.0.tar.gz", hash = "sha256:c79f74ea63cff761804fbbfb182f1e0b440c2d07b164d24700c5a1bab5d6ff5d", size = 2736246, upload-time = "2026-09-23T07:30:26.35Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", hash = "sha256:67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", size = 78980, upload-time = "2026-09-23T07:30:24.567Z" }, +] + [[package]] name = "textual" version = "8.2.8" @@ -2322,6 +2875,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + [[package]] name = "uc-micro-py" version = "1.0.3" @@ -2331,6 +2916,42 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229, upload-time = "2024-02-09T16:52:00.371Z" }, ] +[[package]] +name = "uvicorn" +version = "0.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" } }, + { name = "h11" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/4f/f9fdac7cf6dd79790eb165639b5c452ceeabc7bbabbba4569155470a287d/uvicorn-0.39.0.tar.gz", hash = "sha256:610512b19baa93423d2892d7823741f6d27717b642c8964000d7194dded19302", size = 82001, upload-time = "2025-12-21T13:05:17.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/25/db2b1c6c35bf22e17fe5412d2ee5d3fd7a20d07ebc9dac8b58f7db2e23a0/uvicorn-0.39.0-py3-none-any.whl", hash = "sha256:7beec21bd2693562b386285b188a7963b06853c0d006302b3e4cfed950c9929a", size = 68491, upload-time = "2025-12-21T13:05:16.291Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.54.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "click", version = "8.5.0", source = { registry = "https://pypi.org/simple" } }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/34/30e9280707135d2cfc589dfff3cb796bd07a3aeb1a3e415ba09dd89d7bb4/uvicorn-0.54.0.tar.gz", hash = "sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620", size = 112283, upload-time = "2026-09-25T06:52:37.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", hash = "sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", size = 87427, upload-time = "2026-09-25T06:52:35.829Z" }, +] + [[package]] name = "zipp" version = "3.23.1" From f1ee0743411f5a5ce9f897df9fca0f31fd4a9baa Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:24:38 -0400 Subject: [PATCH 28/65] Document the pyevio web server: install, token URL, ssh -L, cache dir Co-Authored-By: Claude Fable 5.1 --- docs/web_viewer.md | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/docs/web_viewer.md b/docs/web_viewer.md index 675f129..c43d2d3 100644 --- a/docs/web_viewer.md +++ b/docs/web_viewer.md @@ -1,22 +1,45 @@ # Web viewer -`pyevio web` opens a page for browsing an EVIO v6 file: file checks, channel occupancy, rate, charge and timing plots, and a clickable structure tree from the file header down to single fADC hit words. Decoding runs in the browser, and the file is never uploaded. +`pyevio web` opens a page for browsing an EVIO v6 file: file checks, channel occupancy, rate, charge and timing plots, a record table and a structure tree from the file header down to single fADC hit words. pyevio reads and decodes the file on the server; the browser receives JSON (histograms, record headers, tree nodes, requested words) and renders it. The file never leaves the machine it is on, and a 15 GB file produces the same few kilobytes per response as a 90 MB one. -Plots are written for CODA streaming fADC250 files (0xFF60 built time frames). Any other EVIO v6 file shows the structure tree only. +Plots are written for CODA streaming fADC250 files (0xFF60 built time frames). Any other EVIO v6 file shows the record table and the structure tree. -## Start it +## Install and start + +The server needs FastAPI and uvicorn, installed as the optional extra: + +```bash +pip install 'pyevio[web]' +``` ```bash -pyevio web # file browser starts in the current folder -pyevio web /path/to/runs # or in another folder -pyevio web --port 9000 --no-browser +pyevio web # serve the current folder +pyevio web /path/to/runs # serve another folder +pyevio web /path/to/runs --port 9000 --no-browser --workers 8 --cache-dir /scratch/pyevio-cache ``` -Pick a file with **Browse folders**, **Open .evio file**, or by dragging it onto the page. A 93 MB file loads in under a second. The whole file is held in browser memory, so multi-GB files may not fit. +The command prints a URL of the form `http://127.0.0.1:8765/?token=…` and opens it in a browser (unless `--no-browser`). The token is random per start and required on every API request: another user on the same machine cannot read your files by guessing the port. Open the printed URL, including the token; a page without it shows nothing. + +Only files under ROOT (the folder given on the command line, default the current folder) can be listed and opened. Paths are resolved with symlinks before the check, so a link that points outside ROOT is refused. + +### Analysis and cache + +Opening a file starts one analysis job on the server (`pyevio stats` on all cores minus two, or `--workers N`); the page shows its progress and the estimated time to completion. Opening another file cancels the running job. Results are cached as `.npz` under `~/.cache/pyevio/stats` (or `--cache-dir DIR`), keyed by the file path, size, modification time and the statistics version, so a second open of an unchanged file is immediate. The cache folder can be deleted at any time. + +### Files on a remote machine + +On a farm node, run the server there and forward the port over SSH: + +```bash +# on the node +pyevio web /path/to/runs --no-browser +# on your machine +ssh -L 8765:localhost:8765 user@node +``` -The page also works without the server: open `pyevio/web/index.html` directly. Only the folder browser needs `pyevio web`. +Then open the URL the server printed on the node, token included, in a local browser. The server listens on 127.0.0.1 only and rejects requests whose `Host` header is not `localhost` or `127.0.0.1`, which also blocks web pages that reach the port through DNS rebinding. -**Files on a remote machine** (e.g. a farm node): run `pyevio web /path/to/runs --no-browser` there, connect with `ssh -L 8765:localhost:8765 user@host`, and open http://localhost:8765 locally. The server listens on localhost only. +`--verbose` logs every request; by default only errors are logged. ## What it shows From 7fe323f3ffcb90f55d61425094cbad645acb04df Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:36:02 -0400 Subject: [PATCH 29/65] Polish the CLI: error messages, version, dead shortcut, compressed offsets F47: `EvioFile` raises ValueError for a file that is not EVIO or an EVIO version pyevio does not read; each command printed the traceback. The command group `EvioCli` converts the error once into click's `Error: ...` on stderr with exit code 1. `pyevio dump` opened the file inside its catch-all, which printed the error and exited 0; the open now sits outside it. F51: `pyevio --version` printed a hard-coded 0.1.0; it prints `pyevio.__version__`. F52 (Q26 B): the group callback tried to invoke `info` when the first argument was a file, but click resolves the command name first, so the branch never ran. Removed; a bare `pyevio` prints the help. F50: for an LZ4, LZ4_BEST or gzip record every event and bank offset indexes the decompressed record buffer, and `event` and `debug` printed them as file offsets. One note line per record (display.offset_scope_note) precedes the offsets; an uncompressed record prints nothing new. `pyevio event --hexdump` reads the event bytes from the event's buffer. tests/test_cli.py: info, dump, record, event, debug, ana and stats on the golden v4_le.evio (skipped when absent) and on a non-EVIO file exit 1 with the message on stderr and no traceback; --version equals __version__; bare invocation prints help; `pyevio FILE` is an unknown command; an LZ4 record built with the test_record_scanning helpers prints the offset note once (buffer offset 0x18[6]) while the plain file prints file offset 0x88[34] with no note. Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 10 +++- pyevio/cli/__init__.py | 31 ++++++----- pyevio/cli/debug.py | 4 ++ pyevio/cli/dump.py | 16 +++--- pyevio/cli/event.py | 11 ++-- pyevio/display.py | 20 ++++++++ tests/test_cli.py | 114 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 183 insertions(+), 23 deletions(-) create mode 100644 tests/test_cli.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 12130a7..3247698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F50) refer to the project's defect ledger. +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F52) refer to the project's defect ledger. ## [Unreleased] @@ -33,6 +33,10 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `RecordHeader.parse()` and `BufferReader` raise without printing hex dumps first. - Packaging: pytest, pyyaml and pyarrow sit in the default `dev` dependency group, so `uv run pytest` works without extras; setuptools package discovery is restricted to `pyevio*`. +### Removed + +- `docs/evio_roc_time_slice_bank.md` and `docs/evio_roc_tsb.png`: the bank layout they described does not match SRO data (F41). `docs/specs.md` moves to `docs/history/specs.md` as the pre-fix goal statement. + ### Fixed - F38 — leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. @@ -63,4 +67,8 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - F12 — the frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. - F28 (binning) — rate histograms binned from frame 0 to the last frame, so a later stripe squeezed into the right edge and partial last bins read low; `stream_stats` bins from the first to the last timestamp and normalizes by the frames each bin covers. - F48 — the Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. +- F47 — every command printed a traceback for a file pyevio cannot read (an EVIO v4 file, a file without the magic number); the message goes to stderr with exit code 1. +- F50 — `pyevio event` and `pyevio debug` printed the offsets of a compressed record as if they were file offsets; a note names them as offsets in the decompressed record buffer, and `pyevio event --hexdump` reads the event from that buffer. +- F51 — `pyevio --version` printed 0.1.0; it prints `pyevio.__version__`. +- F52 — the `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. - Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. (Fixed before the defect ledger existed; no finding number.) diff --git a/pyevio/cli/__init__.py b/pyevio/cli/__init__.py index 80fc11a..245f708 100644 --- a/pyevio/cli/__init__.py +++ b/pyevio/cli/__init__.py @@ -1,8 +1,7 @@ -import os -import sys - import click +from pyevio import __version__ + # Import and register commands from pyevio.cli.info import info_command from pyevio.cli.dump import dump_command @@ -16,8 +15,23 @@ from pyevio.cli.stats import stats_command -@click.group(invoke_without_command=True) -@click.version_option(version="0.1.0") +class EvioCli(click.Group): + """The pyevio command group: a file pyevio cannot read ends the command with its message. + + ``EvioFile`` raises ``ValueError`` for a file that is not EVIO or an EVIO + version pyevio does not read. Converting it here, once, turns the message + into click's ``Error: ...`` on stderr with exit code 1 for every command. + """ + + def invoke(self, ctx): + try: + return super().invoke(ctx) + except ValueError as error: + raise click.ClickException(str(error)) from error + + +@click.group(cls=EvioCli) +@click.version_option(version=__version__) @click.option('--verbose', '-v', is_flag=True, help="Enable verbose output") @click.pass_context def cli(ctx, verbose): @@ -26,13 +40,6 @@ def cli(ctx, verbose): ctx.ensure_object(dict) ctx.obj['VERBOSE'] = verbose - # If no command was provided, and there are arguments, check if the first one is a file - if ctx.invoked_subcommand is None and len(sys.argv) > 1: - potential_file = sys.argv[1] - if os.path.isfile(potential_file): - # Treat this as 'info' command - ctx.invoke(info_command, filename=potential_file, verbose=verbose) - # Register commands with the CLI cli.add_command(info_command) diff --git a/pyevio/cli/debug.py b/pyevio/cli/debug.py index 3d475ac..79c81a4 100644 --- a/pyevio/cli/debug.py +++ b/pyevio/cli/debug.py @@ -7,6 +7,7 @@ from pyevio.evio_file import EvioFile from pyevio.decoders import fadc250_stream +from pyevio.display import offset_scope_note from pyevio.roc_time_slice_bank import RocTimeSliceBank from pyevio.utils import print_offset_hex @@ -19,6 +20,9 @@ def display_record_info(console, record_obj, record_index): console.print(f"[bold cyan]Record #{record_index} Analysis[/bold cyan]") console.print(f"[bold]Offset: [green]0x{record_obj.offset:X}[{record_obj.offset//4}][/green], Length: [green]{record_obj.header.record_length}[/green] words[/bold]") console.print(f"[bold]Type: [green]{record_obj.header.event_type}[/green], Events: [green]{record_obj.event_count}[/green][/bold]") + note = offset_scope_note(record_obj) + if note: + console.print(note) def display_bank_header(console, bank, title=None): diff --git a/pyevio/cli/dump.py b/pyevio/cli/dump.py index eb4a23e..843423f 100644 --- a/pyevio/cli/dump.py +++ b/pyevio/cli/dump.py @@ -182,8 +182,10 @@ def dump_command(ctx, filename, count, start, record, format_as, only, verbose): verbose = verbose or ctx.obj.get('VERBOSE', False) console = Console() - try: - with EvioFile(filename, verbose) as evio_file: + # The open sits outside the catch-all: a file pyevio cannot read raises + # ValueError, which the command group reports with exit code 1. + with EvioFile(filename, verbose) as evio_file: + try: # Validate record if specified if record is not None: if record < 0 or record >= evio_file.record_count: @@ -212,8 +214,8 @@ def dump_command(ctx, filename, count, start, record, format_as, only, verbose): rendered_output = render_rows(formatted_rows) print(rendered_output) - except Exception as e: - console.print(f"[red]Error: {str(e)}[/red]") - if verbose: - import traceback - console.print(traceback.format_exc()) \ No newline at end of file + except Exception as e: + console.print(f"[red]Error: {str(e)}[/red]") + if verbose: + import traceback + console.print(traceback.format_exc()) \ No newline at end of file diff --git a/pyevio/cli/event.py b/pyevio/cli/event.py index 907a397..eb88272 100644 --- a/pyevio/cli/event.py +++ b/pyevio/cli/event.py @@ -10,7 +10,7 @@ import matplotlib.pyplot as plt from datetime import datetime -from pyevio.display import create_bank_tree +from pyevio.display import create_bank_tree, offset_scope_note from pyevio.evio_file import EvioFile from pyevio.roc_time_slice_bank import RocTimeSliceBank from pyevio.utils import make_hex_dump, print_offset_hex @@ -32,13 +32,18 @@ def display_event(console, evio_file, record_obj, event_obj, record_idx, """ # Display event header information console.print(f"[bold]Record #{record_idx} Event #{event_obj.index}[/bold]") + note = offset_scope_note(record_obj) + if note: + console.print(note) console.print(f"[bold]Offset: [green]0x{event_obj.offset:X}[{event_obj.offset//4}][/green], Length: [green]{event_obj.length}[/green] bytes[/bold]") - # Show hexdump of the full event if requested + # Show hexdump of the full event if requested. The event's buffer is the + # file for an uncompressed record and the decompressed bytes otherwise; + # event_obj.offset is valid only in that buffer. if hexdump: console.print() print_offset_hex( - evio_file.mm, + event_obj.mm, event_obj.offset, event_obj.length // 4, # Convert bytes to words f"Record #{record_idx} Event rel#{event_obj.index}, Length: {event_obj.length} bytes)" diff --git a/pyevio/display.py b/pyevio/display.py index 95c7f84..c31a3f5 100644 --- a/pyevio/display.py +++ b/pyevio/display.py @@ -2,6 +2,7 @@ Display utilities for rendering EVIO structures in a user-friendly way. """ from rich.tree import Tree +from pyevio.record import Record from pyevio.roc_time_slice_bank import RocTimeSliceBank @@ -125,3 +126,22 @@ def create_bank_tree(bank, title="Bank Structure"): tree = Tree(f"[bold]{title}[/bold]") display_bank_tree(tree, bank) return tree + + +COMPRESSION_NAMES = {Record.COMPRESSION_LZ4: "LZ4", Record.COMPRESSION_LZ4_BEST: "LZ4_BEST", + Record.COMPRESSION_GZIP: "gzip"} + + +def offset_scope_note(record): + """The line that says what the event and bank offsets of ``record`` refer to. + + For a compressed record every event and bank offset is an offset in the + decompressed record buffer (see ``Record``), so a reader who takes it for + a file offset lands on compressed bytes. Returns ``None`` for an + uncompressed record, whose offsets are file offsets. + """ + if record.compression_type == record.COMPRESSION_NONE: + return None + name = COMPRESSION_NAMES.get(record.compression_type, f"type {record.compression_type}") + # Kept under 80 columns so rich prints it on one line in a default terminal. + return f"[yellow]{name} compressed record: offsets below are in the decompressed record buffer[/yellow]" diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..0c470b6 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,114 @@ +"""The pyevio command group: error reporting, --version, no-argument help, offset labels (F47, F50, F51, F52).""" +import os + +import pytest +from click.testing import CliRunner + +import pyevio +from pyevio.cli import cli +from test_record_scanning import make_event, make_record, write_file + +GOLDEN_V4_FILE = "/data/evio-lib/golden/cases/cpp/v4_le.evio" + +# Every command that opens its file with EvioFile, with the arguments it needs after the +# file; the group converts the EvioFile error for all of them (F47). Absent on purpose: +# ``hex`` dumps raw bytes of any file, ``ui`` is an interactive textual app, ``web`` takes a directory. +FILE_COMMANDS = { + "info": [], + "dump": [], + "record": ["0"], + "event": ["0"], + "debug": ["--record", "0"], + "ana": ["--limit", "1"], + "stats": ["--workers", "1"], +} + + +def run(args): + # catch_exceptions=False: a ValueError that escapes the group fails the test with its traceback; + # a click error still ends as SystemExit, which the runner records as the exit code. + return CliRunner().invoke(cli, args, catch_exceptions=False) + + +@pytest.mark.parametrize("command", sorted(FILE_COMMANDS)) +@pytest.mark.skipif(not os.path.exists(GOLDEN_V4_FILE), reason="golden set not present") +def test_unsupported_version_is_a_message(command): + """An EVIO v4 file ends every command with the version message and exit code 1 (F47).""" + result = run([command, GOLDEN_V4_FILE] + FILE_COMMANDS[command]) + assert result.exit_code == 1 + assert "Error: EVIO version 4 file is not supported" in result.stderr + assert "Traceback" not in result.output + + +@pytest.mark.parametrize("command", sorted(FILE_COMMANDS)) +def test_non_evio_file_is_a_message(tmp_path, command): + """A file without the EVIO magic number ends every command with the message and exit code 1 (F47).""" + path = tmp_path / "noise.bin" + path.write_bytes(bytes(range(256)) * 8) + result = run([command, str(path)] + FILE_COMMANDS[command]) + assert result.exit_code == 1 + assert "Error: Not an EVIO file" in result.stderr + assert "Traceback" not in result.output + + +def test_version_option(): + """``pyevio --version`` prints the package version (F51).""" + result = run(["--version"]) + assert result.exit_code == 0 + assert pyevio.__version__ in result.output + + +def test_no_arguments_prints_help(): + """``pyevio`` with no arguments prints the help; the file shortcut is gone (F52).""" + result = run([]) + assert "Usage: " in result.output + assert "Commands:" in result.output + assert "info" in result.output + + +def test_file_as_first_argument_is_an_unknown_command(tmp_path): + """``pyevio FILE`` is rejected as an unknown command (F52, Q26 B).""" + path = write_file(tmp_path / "plain.evio", [make_record(1, [make_event(2)], last=True, with_index=True)]) + result = run([path]) + assert result.exit_code == 2 + assert "No such command" in result.stderr + + +def compressed_and_plain_files(tmp_path): + events = [make_event(2), make_event(3)] + lz4 = write_file(tmp_path / "lz4.evio", [make_record(1, events, last=True, with_index=True, compression=1)]) + plain = write_file(tmp_path / "plain.evio", [make_record(1, events, last=True, with_index=True)]) + return lz4, plain + + +NOTE = "LZ4 compressed record: offsets below are in the decompressed record buffer" + + +def test_event_command_labels_offsets_of_a_compressed_record(tmp_path): + """``pyevio event`` on an LZ4 record says its offsets are buffer offsets; a plain record gets no note (F50).""" + lz4, plain = compressed_and_plain_files(tmp_path) + + result = run(["event", lz4, "1", "--hexdump"]) + assert result.exit_code == 0, result.output + assert NOTE in result.output + # Buffer offset: 2-word index array + event 0 (4 words) → word 6. + assert "Offset: 0x18[6]" in result.output + + result = run(["event", plain, "1"]) + assert result.exit_code == 0, result.output + assert NOTE not in result.output + # File offset: 14-word file header + 14-word record header + 2-word index + event 0 (4 words) → word 34. + assert "Offset: 0x88[34]" in result.output + + +def test_debug_command_labels_offsets_of_a_compressed_record(tmp_path): + """``pyevio debug`` prints the note once per record (F50).""" + lz4, plain = compressed_and_plain_files(tmp_path) + + result = run(["debug", lz4, "--record", "0"]) + assert result.exit_code == 0, result.output + assert result.output.count(NOTE) == 1 + + result = run(["debug", plain, "--record", "0"]) + assert result.exit_code == 0, result.output + assert NOTE not in result.output From a359a136c720a7ede84a18add2dc6e40118b63b5 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:36:02 -0400 Subject: [PATCH 30/65] Remove the stale ROC time slice bank notes; archive specs.md under docs/history Q24 A: docs/evio_roc_time_slice_bank.md and its figure described a 0xFF30 layout that does not match SRO data (F41); docs/specs.md stated the pre-fix goal ("non-compressed v6") and is kept as history with a header line pointing at README.md. No document linked to either path. The CHANGELOG "Removed" section landed with the previous commit. Co-Authored-By: Claude Fable 5.1 --- docs/evio_roc_time_slice_bank.md | 120 ------------------------------- docs/evio_roc_tsb.png | Bin 236912 -> 0 bytes docs/{ => history}/specs.md | 2 + 3 files changed, 2 insertions(+), 120 deletions(-) delete mode 100644 docs/evio_roc_time_slice_bank.md delete mode 100644 docs/evio_roc_tsb.png rename docs/{ => history}/specs.md (99%) diff --git a/docs/evio_roc_time_slice_bank.md b/docs/evio_roc_time_slice_bank.md deleted file mode 100644 index 6e2b8b1..0000000 --- a/docs/evio_roc_time_slice_bank.md +++ /dev/null @@ -1,120 +0,0 @@ - -# ROC Time Slice Bank - -ROC Time Slice Bank - -![[evio_roc_tsb.png]] - -- "ROC Time Slice Bank" that has: - - Header - - Stream Info Bank (SIB) - - Data Banks - -I "ROC Time Slice Bank"-Header structure: -- 1st word (32 bit) - ROC Bank Length -- 2nd word (32 bit) - ROC_ID, 0x10, SS. In particular: - - First 16 bit ROC ID - - 0x10 - means Bank of banks - - SS (8 bits) - Stream Status. Bits 7 - error or not, Bits 6-4 Total Streams, Bits 3-0 Stream Mask - -II "Stream Info Bank (SIB)" - Structure: -- 1st word (32 bit) - Stream Info Length -- 2nd word (32 bit) - 0xFF30, 0x20, SS (same as above) -- Time slice segment (TSS) words: - 1. TSS Header: 0x31, 0x01, TSS Len (16 bits) - 2. Frame Number (32 bit) - 3. Timestamp (31-0) - 4. Timestamp (63-32) -- Aggregation Info Segment (AIS): - 1. AIS Header - 0x41, 0x85, AIS Len. (!) Important here - 2nd byte: top 2 bits = 2 for padding if odd # payloads (else 0), lower 6 bits is type 5 (unsigned short) => 0x85 (1000 0101) - 2. All other words - Payloads infos in 16 bit half-words. Number of payload infos is given in AIS Len. Since we read 32 bits, payloads go like (Payload2, Payload1) - word 1, (Payload4, Payload3) - word 2. If number of payloads is odd, the last word will be (0, PayloadN). There can't be more than 20 Payload infos in one AIS. Now how what is Payload info consists of: - - bits 11-8 - Module ID - - Bond? - 7 - - Lane ID - 6, 5 - - Payload Port # - 4-0 - -III "Data Bansks" structure (words): -1. Payload Port (PP) 1 Length -2. PP 1 ID, 0x0, SS -... PP 1 DATA -... -- Payload Port N Length -- 5PP N ID, 0x0, SS PP N Data - - -Let me explain what happens and how we should scan banks: - -Here is the full event hex dump -``` -0 0x00055118 87110 00 00 00 15 0 21 21 .... -1 0x0005511c 87111 ff 60 10 01 65376 4097 4284485633 .`.. -2 0x00055120 87112 00 00 00 07 0 7 7 .... -3 0x00055124 87113 ff 31 20 01 65329 8193 4281409537 .1 . -4 0x00055128 87114 32 01 00 03 12801 3 838926339 2... -5 0x0005512c 87115 00 00 00 00 0 0 0 .... -6 0x00055130 87116 00 00 00 00 0 0 0 .... -7 0x00055134 87117 00 00 00 00 0 0 0 .... -8 0x00055138 87118 42 01 00 01 16897 1 1107361793 B... -9 0x0005513c 87119 00 02 00 11 2 17 131089 .... -10 0x00055140 87120 00 00 00 0b 0 11 11 .... -11 0x00055144 87121 00 02 10 11 2 4113 135185 .... -12 0x00055148 87122 00 00 00 07 0 7 7 .... -13 0x0005514c 87123 ff 30 20 11 65328 8209 4281344017 .0 . -14 0x00055150 87124 31 01 00 03 12545 3 822149123 1... -15 0x00055154 87125 00 00 00 00 0 0 0 .... -16 0x00055158 87126 00 00 00 00 0 0 0 .... -17 0x0005515c 87127 00 00 00 00 0 0 0 .... -18 0x00055160 87128 41 85 00 01 16773 1 1099235329 A... -19 0x00055164 87129 00 00 00 00 0 0 0 .... -20 0x00055168 87130 00 00 00 01 0 1 1 .... -21 0x0005516c 87131 00 0f 00 01 15 1 983041 .... -``` - -We start with event length and header - -``` -87110 00 00 00 15 -87111 ff 60 10 01 -``` - -If we count `0x15=21` we will jump to the last word of the event. - -Now goes the first bank: -87112 00 00 00 07 - it says the bank content is the next 7 words and the last bank word is at offset 87119 -Read the next line. It is still inside event? Then it should be the next bank length. -87120 00 00 00 0b where 0xb=11. If we add 11 to the offset we correctly jump to offset 87131 which is the last word of the event. Bingo! Our event banks structure validated! - -Now we come back and see what bank is that? - -``` -11 0x00055144 87121 00 02 10 11 2 4113 135185 .... -12 0x00055148 87122 00 00 00 07 0 7 7 .... -``` -0x10 means it is a bank of banks. So we can jump in and see the the first child bank is FF30 - streaming! - -Now if we look at header we see - -I "ROC Time Slice Bank"-Header structure: -- 1st word (32 bit) - ROC Bank Length -- 2nd word (32 bit) - ROC_ID, 0x10, SS. In particular: - - First 16 bit ROC ID - - 0x10 - means Bank of banks - - SS (8 bits) - Stream Status. Bits 7 - error or not, Bits 6-4 Total Streams, Bits 3-0 Stream Mask - -Which means that 00 02 is ROC_ID and 0x11 is a status code - -00 00 00 07 0 7 - Stream Info bank length so it goes to the last line 87129 00 00 00 00 0 0 0, which is actually payload1 AIS record with module id = 0 - -FInally we have the final bank. The first line says it is 1 word which is 00 0f 00 01 - our payload - -``` -20 0x00055168 87130 00 00 00 01 0 1 1 .... -21 0x0005516c 87131 00 0f 00 01 15 1 983041 .... -``` - -Conclusion: -We find banks by taking first word and calculating where bank ends and validate that the end should correspond to our event end, another bank end, etc. - - - - \ No newline at end of file diff --git a/docs/evio_roc_tsb.png b/docs/evio_roc_tsb.png deleted file mode 100644 index 0645263e6a2f07930d2907308278b2b792959a2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236912 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
nwy})TPnX_09 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

o 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 z

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

    ~Qwz1j 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 diff --git a/docs/specs.md b/docs/history/specs.md similarity index 99% rename from docs/specs.md rename to docs/history/specs.md index 5820914..008bac8 100644 --- a/docs/specs.md +++ b/docs/history/specs.md @@ -1,3 +1,5 @@ +Historical: the goal statement before the 2026-10 reader fixes; see README.md + # **pyevio - EVIO v6 Reader Specification (v1.1)** **A Python library and CLI toolkit for reading/introspecting EVIO v6 files** From 6d46db02452051a474dd04526113fba1acb15708 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 01:38:42 -0400 Subject: [PATCH 31/65] Name the record in `pyevio event` and make dump's record range a parameter error F53: `pyevio event N` by global index passed the `--record` option (None) to the display and printed `Record #None`; it prints `record.index`. F54: `pyevio dump --record R` with R out of range returned 1 from the click callback, which printed the message and exited 0; it raises click.BadParameter (exit code 2), checked before the command's catch-all so the error is not swallowed. The `pyevio event --hexdump` title loses a stray `)`. Uncompressed output is otherwise unchanged. Tests: tests/test_cli.py runs both commands on a plain synthetic file through CliRunner and pins the record header, the hexdump title, the exit code 2 and the range message. Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 4 +++- pyevio/cli/dump.py | 9 ++++----- pyevio/cli/event.py | 4 ++-- tests/test_cli.py | 21 +++++++++++++++++++++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3247698..d8ff527 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F52) refer to the project's defect ledger. +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F54) refer to the project's defect ledger. ## [Unreleased] @@ -71,4 +71,6 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - F50 — `pyevio event` and `pyevio debug` printed the offsets of a compressed record as if they were file offsets; a note names them as offsets in the decompressed record buffer, and `pyevio event --hexdump` reads the event from that buffer. - F51 — `pyevio --version` printed 0.1.0; it prints `pyevio.__version__`. - F52 — the `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. +- F53 — `pyevio event N` by global index printed `Record #None`; it prints the record the event lives in. +- F54 — `pyevio dump --record R` with R out of range printed the message and exited 0; it is a parameter error (exit code 2). The `--hexdump` title of `pyevio event` lost a stray `)`. - Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. (Fixed before the defect ledger existed; no finding number.) diff --git a/pyevio/cli/dump.py b/pyevio/cli/dump.py index 843423f..51b9ba4 100644 --- a/pyevio/cli/dump.py +++ b/pyevio/cli/dump.py @@ -185,13 +185,12 @@ def dump_command(ctx, filename, count, start, record, format_as, only, verbose): # The open sits outside the catch-all: a file pyevio cannot read raises # ValueError, which the command group reports with exit code 1. with EvioFile(filename, verbose) as evio_file: + # Validated before the catch-all below, which would otherwise swallow the click error. + if record is not None and (record < 0 or record >= evio_file.record_count): + raise click.BadParameter(f"Record {record} out of range (0-{evio_file.record_count-1})") + try: - # Validate record if specified if record is not None: - if record < 0 or record >= evio_file.record_count: - console.print(f"[red]Record {record} out of range (0-{evio_file.record_count-1})[/red]") - return 1 - # If record is specified and start is default (2), adjust to 0 if start == 2 and not ctx.params.get("start"): start = 0 diff --git a/pyevio/cli/event.py b/pyevio/cli/event.py index eb88272..1f6227d 100644 --- a/pyevio/cli/event.py +++ b/pyevio/cli/event.py @@ -46,7 +46,7 @@ def display_event(console, evio_file, record_obj, event_obj, record_idx, event_obj.mm, event_obj.offset, event_obj.length // 4, # Convert bytes to words - f"Record #{record_idx} Event rel#{event_obj.index}, Length: {event_obj.length} bytes)" + f"Record #{record_idx} Event rel#{event_obj.index}, Length: {event_obj.length} bytes" ) console.print() @@ -100,7 +100,7 @@ def event_command(ctx, filename, event_index, record_index, hexdump, verbose): evio_file, record, event, - record_index, + record.index, hexdump=hexdump, verbose=verbose ) diff --git a/tests/test_cli.py b/tests/test_cli.py index 0c470b6..66929cb 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -112,3 +112,24 @@ def test_debug_command_labels_offsets_of_a_compressed_record(tmp_path): result = run(["debug", plain, "--record", "0"]) assert result.exit_code == 0, result.output assert NOTE not in result.output + + +def test_event_command_names_the_record_of_a_global_index(tmp_path): + """``pyevio event N`` by global index prints the record the event lives in (F53).""" + _, plain = compressed_and_plain_files(tmp_path) + result = run(["event", plain, "1", "--hexdump"]) + assert result.exit_code == 0, result.output + assert "Record #0 Event #1" in result.output + assert "Record #None" not in result.output + assert "Record #0 Event rel#1, Length: 20 bytes\n" in result.output + + +def test_dump_record_out_of_range_is_a_parameter_error(tmp_path): + """``pyevio dump --record R`` past the last record exits 2 with the range message (F54).""" + _, plain = compressed_and_plain_files(tmp_path) + result = run(["dump", plain, "--record", "7"]) + assert result.exit_code == 2 + assert "Record 7 out of range (0-0)" in result.stderr + + result = run(["dump", plain, "--record", "0", "2"]) + assert result.exit_code == 0, result.output From a530ab98963f1625df3bac6f2897ccba232ab3d8 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 02:07:18 -0400 Subject: [PATCH 32/65] Rewrite the web viewer as a thin client of pyevio.web The browser holds no EVIO decoding: index.html, style.css, app.js, charts.js and tree.js render /summary, /hist, /records, /structure and /words. One active file_id with a stale-response guard and an open serial (F27), progress polling with 409 resumption (F33), errors in the status strip (F29), trailer records from the server (F26, F30), ratios printed as sent (F31), rate axis from the server's bin edges in seconds (F28), no ROC/board caps (F13), split files (F34). The 0x41 payload-port map arrives decoded by the decoder (payload_map_entries) as segment entries (F32); the AIS segment is shown as the file has it (F15). Closes F25; test_web_api pins the entries and segment roles. Co-Authored-By: Claude Fable 5.1 --- pyevio/decoders/fadc250_stream.py | 30 +- pyevio/web/app.js | 613 ++++++++++++++++++++++++ pyevio/web/charts.js | 256 +++++++++++ pyevio/web/index.html | 741 ++++-------------------------- pyevio/web/structure.py | 22 +- pyevio/web/style.css | 142 ++++++ pyevio/web/tree.js | 305 ++++++++++++ tests/web/test_web_api.py | 9 + 8 files changed, 1452 insertions(+), 666 deletions(-) create mode 100644 pyevio/web/app.js create mode 100644 pyevio/web/charts.js create mode 100644 pyevio/web/style.css create mode 100644 pyevio/web/tree.js diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 60d9272..3016ddf 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -127,6 +127,25 @@ def event_words(mm, offset: int, length: int, endian: str) -> np.ndarray: return np.frombuffer(mm, dtype=np.dtype(endian + "u4"), count=length // 4, offset=offset) +def payload_map_entries(data_words, pad: int, big_endian: bool) -> list: + """``[(port, module id)]`` from the data words of a 0x41 payload-port segment, in entry order. + + Entries are uint16, two per word: the low half first in a little-endian file, the + high half first in a big-endian one. Pad bits 2 in the segment header mean an odd + entry count. Entries with port 0 stay in the list — the caller decides whether a zero + entry is a map slot (the decoder skips it, the viewer shows it). + """ + n_entries = 2 * len(data_words) - (1 if pad == 2 else 0) + entries = [] + for entry_i in range(n_entries): + word = int(data_words[entry_i // 2]) + first_half = (word >> 16) if big_endian else (word & 0xFFFF) + second_half = (word & 0xFFFF) if big_endian else (word >> 16) + entry = first_half if entry_i % 2 == 0 else second_half + entries.append((entry & MAP_PORT_MASK, (entry >> MAP_MODULE_SHIFT) & MAP_MODULE_MASK)) + return entries + + def unpack_hit_words(hit_words: np.ndarray): """Split hit words into ``(channel, time_raw, charge)`` columns. @@ -392,15 +411,10 @@ def _read_payload_port_map(self, read, info_i: int, info_end: int, event_index: self.error(event_index, segment_i, f"stream-info segment length {segment_len} runs past the bank end {info_end}") break if (header >> 24) == ROC_PAYLOAD_PORT_SEGMENT_TAG: - n_entries = 2 * segment_len - (1 if ((header >> 22) & 0x3) == 2 else 0) - for entry_i in range(n_entries): - word = read(segment_i + 1 + entry_i // 2) - first_half = (word >> 16) if big_endian else (word & 0xFFFF) - second_half = (word & 0xFFFF) if big_endian else (word >> 16) - entry = first_half if entry_i % 2 == 0 else second_half - port = entry & MAP_PORT_MASK + data_words = [read(segment_i + 1 + word_i) for word_i in range(segment_len)] + for port, module in payload_map_entries(data_words, (header >> 22) & 0x3, big_endian): if port: - port_map[port] = (entry >> MAP_MODULE_SHIFT) & MAP_MODULE_MASK + port_map[port] = module break segment_i = segment_end return port_map diff --git a/pyevio/web/app.js b/pyevio/web/app.js new file mode 100644 index 0000000..0334201 --- /dev/null +++ b/pyevio/web/app.js @@ -0,0 +1,613 @@ +// app.js — state, API client, tab routing and the four tab renderers of the pyevio viewer. +// The browser is a thin client: pyevio reads and decodes the file on the server, this page renders the JSON. +// One file is active at a time; responses that arrive for an earlier file are dropped (see fileApi). + +import { emptyChart, formatNumber, heatmap, heatmapScale, stepChart } from './charts.js'; +import { createTree, renderDetail, renderRecordsTable } from './tree.js'; + +const POLL_INTERVAL_MS = 500; +const RECORDS_PAGE = 200; +const TABS = ['overview', 'plots', 'records', 'structure']; + +const $ = id => document.getElementById(id); + +// ---------------------------------------------------------------- API client +// The token comes from the URL `pyevio web` printed (?token=…) and goes out as the X-Token header on every +// /api call: static files need none, and API URLs stay free of secrets in logs and bookmarks. +const TOKEN = new URLSearchParams(location.search).get('token') || ''; + +class ApiError extends Error { + constructor(status, message) { + super(message); + this.status = status; + } +} + +/** Thrown when a response belongs to a file that is no longer the active one; callers drop it silently. */ +class StaleResponse extends Error {} + +async function apiFetch(path, options = {}) { + let response; + try { + response = await fetch(path, { ...options, headers: { 'X-Token': TOKEN, 'Content-Type': 'application/json' } }); + } catch (error) { + throw new ApiError(0, `cannot reach the server (${error.message}); is \`pyevio web\` still running?`); + } + const body = await response.json().catch(() => ({})); + if (!response.ok) throw new ApiError(response.status, body.error || `${response.status} ${response.statusText}`); + return body; +} + +/** + * GET an endpoint of one file. The result is checked against the active file after the response arrives: + * two opens in flight must not let a slow earlier file overwrite the newer one. + * A 409 means the analysis is not done; polling resumes and the caller's render is abandoned. + */ +async function fileApi(fileId, path) { + try { + const data = await apiFetch(`/api/files/${fileId}${path}`); + if (fileId !== state.fileId) throw new StaleResponse(); + return data; + } catch (error) { + if (error instanceof ApiError && error.status === 409 && fileId === state.fileId) { + startPolling(fileId); + throw new StaleResponse(); + } + throw error; + } +} + +/** Run a renderer; stale responses are dropped, API errors are shown in the status strip. */ +async function guarded(action) { + try { + await action(); + } catch (error) { + if (error instanceof StaleResponse) return; + showError(error.message); + if (!(error instanceof ApiError)) console.error(error); + } +} + +// ---------------------------------------------------------------- state +const state = freshState(); + +function freshState(fileId = null, path = '') { + return { + fileId, path, summary: null, pollTimer: null, hists: new Map(), rendered: new Set(), + recordsStart: 0, tree: null, treeLoaded: false, roc: null, port: null, channel: 0, channels: 0, + }; +} + +function resetState(fileId, path) { + stopPolling(); + Object.assign(state, freshState(fileId, path)); +} + +// ---------------------------------------------------------------- status strip +function showError(message) { + $('stErr').textContent = message; + $('stErr').hidden = !message; +} + +function showMessage(message) { + $('stMsg').textContent = message; +} + +function showProgress(progress) { + const bar = $('prog'); + bar.hidden = false; + bar.firstElementChild.style.width = `${Math.round((progress.fraction || 0) * 100)}%`; + const done = formatNumber(progress.records_done); + const total = progress.records_total ? ` / ${formatNumber(progress.records_total)}` : ''; + const eta = progress.eta_s === null || progress.eta_s === undefined ? '' : `, about ${formatSeconds(progress.eta_s)} left`; + showMessage(`Analyzing — ${done}${total} records${eta} (${formatSeconds(progress.elapsed_s)} elapsed)`); +} + +function formatSeconds(seconds) { + if (seconds < 60) return `${Math.round(seconds)} s`; + return `${Math.floor(seconds / 60)} min ${Math.round(seconds % 60)} s`; +} + +// ---------------------------------------------------------------- opening a file and polling its analysis +let openSerial = 0; // counts clicks on files; the latest click owns the page, whichever /open answers last + +async function openFile(path) { + const serial = ++openSerial; + showError(''); + setTabsEnabled(false); + hideViews(); + $('stFile').textContent = path; + showMessage('Opening…'); + try { + const opened = await apiFetch('/api/open', { method: 'POST', body: JSON.stringify({ path }) }); + if (serial !== openSerial) return; // a later click already took over; this answer is for an older file + resetState(opened.file_id, path); + showBrowser(false); + handleProgress(opened); + } catch (error) { + if (serial !== openSerial) return; + $('prog').hidden = true; + showMessage('Open failed.'); + showError(error.message); + } +} + +/** Route one /progress (or /open) answer: keep polling, finish, or report the failure. */ +function handleProgress(progress) { + if (progress.state === 'queued' || progress.state === 'running') { + showProgress(progress); + startPolling(state.fileId); + return; + } + stopPolling(); + $('prog').hidden = true; + if (progress.state === 'done') { + showMessage(progress.cached ? 'Analysis loaded from the cache.' : `Analysis done in ${formatSeconds(progress.elapsed_s)}.`); + guarded(onAnalysisDone); + } else if (progress.state === 'cancelled') { + showMessage('Analysis cancelled: another file was opened.'); + } else { + showMessage('Analysis failed.'); + showError(progress.error || `analysis ended in state ${progress.state}`); + } +} + +// /summary and /hist answer 409 until the job is done, so the page polls /progress and renders after "done". +function startPolling(fileId) { + if (state.pollTimer || fileId !== state.fileId) return; + state.pollTimer = setTimeout(() => guarded(async () => { + state.pollTimer = null; + const progress = await fileApi(fileId, '/progress'); + handleProgress(progress); + }), POLL_INTERVAL_MS); +} + +function stopPolling() { + clearTimeout(state.pollTimer); + state.pollTimer = null; +} + +async function onAnalysisDone() { + const fileId = state.fileId; + state.summary = await fileApi(fileId, '/summary'); + document.body.dataset.fileId = fileId; // marks "tabs ready for this file" for scripts and tests + setTabsEnabled(true); + showTab(currentTab()); +} + +// ---------------------------------------------------------------- tabs +function currentTab() { + const name = location.hash.replace('#', ''); + return TABS.includes(name) ? name : 'overview'; +} + +function setTabsEnabled(enabled) { + document.querySelectorAll('.tab').forEach(button => { button.disabled = !enabled; }); +} + +/** Hide the tab views and drop the previous file's content, so nothing stale shows while the next file loads. */ +function hideViews() { + TABS.forEach(name => { $(`v-${name}`).hidden = true; }); + ['tiles', 'checks', 'standout', 'fileFacts', 'recordFacts', 'rocTable', 'recordsTable', 'tree', 'detail', 'recPageInfo', 'occupancyScale'] + .forEach(id => $(id).replaceChildren()); + document.querySelectorAll('svg.chart').forEach(svg => svg.replaceChildren()); + delete document.body.dataset.fileId; +} + +function showTab(name) { + if (!state.summary) return; + document.querySelectorAll('.tab').forEach(button => button.setAttribute('aria-selected', button.dataset.tab === name)); + TABS.forEach(tab => { $(`v-${tab}`).hidden = tab !== name; }); + if (location.hash !== `#${name}`) history.replaceState(null, '', `#${name}`); + if (state.rendered.has(name)) return; + state.rendered.add(name); + guarded(() => RENDERERS[name]()); +} + +// ---------------------------------------------------------------- Overview +const TILE_FIELDS = [ + ['n_records', 'records'], ['n_events', 'events'], ['n_frames', 'stream frames'], ['n_hits', 'hits'], + ['hit_rate_hz', 'hit rate (Hz)'], ['hits_per_frame', 'hits per frame'], ['duration_s', 'duration (s)'], ['errors', 'decode errors'], +]; + +/** Ratios arrive formatted by the server: "n/a" when a denominator is zero, printed as given. */ +function formatValue(value) { + if (value === null || value === undefined) return '—'; + if (typeof value === 'boolean') return value ? 'yes' : 'no'; + if (typeof value === 'string') return value; + if (Array.isArray(value)) return value.length ? value.join(', ') : 'none'; + return formatNumber(value); +} + +function renderOverview() { + const summary = state.summary; + renderTiles(summary.totals); + renderChecks(summary.checks); + renderStandout(summary); + renderFacts($('fileFacts'), fileFacts(summary)); + renderFacts($('recordFacts'), recordFacts(summary)); + renderRocTable(summary.rocs); +} + +function renderTiles(totals) { + const tiles = $('tiles'); + tiles.replaceChildren(); + TILE_FIELDS.forEach(([key, label]) => { + const tile = document.createElement('div'); + tile.className = 'tile'; + tile.dataset.key = key; + tile.dataset.value = JSON.stringify(totals[key]); + tile.innerHTML = `
    `; + tile.firstElementChild.textContent = formatValue(totals[key]); + tile.lastElementChild.textContent = label; + tiles.appendChild(tile); + }); +} + +function renderChecks(checks) { + const container = $('checks'); + container.replaceChildren(); + checks.forEach(check => { + const row = document.createElement('div'); + row.className = 'ck'; + row.dataset.status = check.status; + const icon = document.createElement('span'); + icon.className = `ico ${check.status}`; + icon.textContent = { ok: '✓', info: 'i', warn: '!', error: '✕' }[check.status] || '?'; + const body = document.createElement('div'); + body.innerHTML = ` `; + body.querySelector('b').textContent = check.name; + body.querySelector('.val').textContent = formatValue(check.value); + body.querySelector('.d').textContent = check.detail ? `— ${check.detail}` : ''; + row.append(icon, body); + container.appendChild(row); + }); +} + +/** Errors first, then warnings, then the first decode messages; "all checks pass" when there is nothing. */ +function renderStandout(summary) { + const list = $('standout'); + list.replaceChildren(); + const notable = [...summary.checks.filter(check => check.status === 'error'), ...summary.checks.filter(check => check.status === 'warn')]; + notable.forEach(check => { + const item = document.createElement('li'); + item.innerHTML = `: `; + item.firstElementChild.textContent = check.name; + item.lastElementChild.textContent = `${formatValue(check.value)}${check.detail ? ` — ${check.detail}` : ''}`; + list.appendChild(item); + }); + summary.totals.error_messages.slice(0, 3).forEach(message => { + const item = document.createElement('li'); + item.textContent = message; + list.appendChild(item); + }); + if (!list.children.length) { + const item = document.createElement('li'); + item.textContent = summary.totals.n_frames ? 'All checks pass.' : 'No stream frames (0xFF60) in this file; the plots are empty. All file checks pass.'; + list.appendChild(item); + } +} + +function fileFacts(summary) { + const file = summary.file; + const stats = summary.stats; + return [ + ['path', file.path], ['size', `${formatNumber(file.size)} B (${(file.size / 1e6).toFixed(1)} MB)`], + ['header layout', file.header_layout], ['byte order', file.endian === '<' ? 'little-endian' : 'big-endian'], + ['file type, version', `${file.file_type}, ${file.version}`], ['records (scanned)', file.record_count], + ['records (file header)', file.header_record_count], ['trailer', file.has_trailer], ['trailer position', file.trailer_position], + ['first record offset', file.first_record_offset], ['index array length', file.index_array_length], + ['user header length', file.user_header_length], + ['analysis', `${stats.cached ? 'from cache' : `${stats.wall_seconds.toFixed(1)} s on ${stats.workers} workers`}, stats version ${stats.version}`], + ]; +} + +function recordFacts(summary) { + const records = summary.records; + const frames = summary.frames; + const truncated = summary.scan_checks.find(check => check[0] === 'truncated_tail'); + return [ + ['events declared / found', `${formatNumber(records.events)} / ${formatNumber(records.events_found)}`], + ['records with errors', records.with_errors], ['compressed records', records.compressed], + ['records without index', records.without_index], ['truncated records', records.truncated], + ['salvaged events (truncated tail)', truncated ? truncated[3] : 'none'], + ['last-record bit set', records.last_record_bit], + ['record size min / mean / max', `${formatNumber(records.min_size)} / ${formatValue(records.mean_size)} / ${formatNumber(records.max_size)} B`], + ['stream frames', frames.n_frames], ['first / last frame', `${frames.first_frame} / ${frames.last_frame}`], + ['frame stride', frames.stride], ['frame period', `${formatNumber(frames.frame_period_ns)} ns`], + ['missing / duplicate / out-of-order', `${frames.missing_frames} / ${frames.duplicate_frames} / ${frames.out_of_order}`], + ['timestamp-step outliers', frames.dts_outliers], + ['duration / live time', `${formatValue(summary.totals.duration_s)} s / ${formatValue(summary.totals.live_time_s)} s`], + ]; +} + +function renderFacts(table, facts) { + table.replaceChildren(); + facts.forEach(([name, value]) => { + const row = table.insertRow(); + row.insertCell().textContent = name; + row.insertCell().textContent = formatValue(value); + }); +} + +function renderRocTable(rocs) { + const table = $('rocTable'); + table.replaceChildren(); + const head = table.createTHead().insertRow(); + ['ROC', 'modules', 'ports', 'hits', 'non-fADC words', 'empty banks'].forEach((title, column_i) => { + const cell = document.createElement('th'); + cell.textContent = title; + if (column_i < 3) cell.className = 'l'; + head.appendChild(cell); + }); + const body = table.createTBody(); + rocs.forEach(roc => { + const row = body.insertRow(); + [roc.roc, roc.modules.join(', '), roc.ports.join(', '), formatNumber(roc.hits), formatNumber(roc.non_fadc_words), formatNumber(roc.empty_banks)] + .forEach((value, column_i) => { + const cell = row.insertCell(); + cell.textContent = value; + if (column_i < 3) cell.className = 'l'; + }); + }); + if (!rocs.length) body.insertRow().insertCell().textContent = 'no ROC banks'; +} + +// ---------------------------------------------------------------- Plots +const NS_PER_S = 1e-9; +const NS_PER_US = 1e-3; + +/** One histogram, cached per file and selection. */ +async function getHist(name, selection = {}) { + const query = Object.entries(selection).filter(([, value]) => value !== null && value !== undefined) + .map(([key, value]) => `${key}=${value}`).join('&'); + const key = `${name}?${query}`; + if (!state.hists.has(key)) state.hists.set(key, fileApi(state.fileId, `/hist/${name}${query ? `?${query}` : ''}`)); + return state.hists.get(key); +} + +async function renderPlots() { + const [hitsPerFrame, rate, occupancy] = await Promise.all([getHist('hits_per_frame'), getHist('rate'), getHist('occupancy')]); + drawHitsPerFrame(hitsPerFrame); + drawRate($('chartRate'), rate, $('rateSub')); + drawOccupancy(occupancy); + state.channels = occupancy.channels; // channels per port, as the server's histogram axis has it + populateRocSelect(); +} + +function drawHitsPerFrame(hist) { + const frames = hist.counts.reduce((sum, count) => sum + count, 0); + $('hpfSub').textContent = frames ? `${formatNumber(frames)} frames; last bin collects frames at or above its left edge` : ''; + if (!frames) return emptyChart($('chartHitsPerFrame'), 'no stream frames'); + stepChart($('chartHitsPerFrame'), { edges: hist.edges, values: hist.counts, xLabel: hist.x_unit, yLabel: hist.y_unit }); +} + +/** Rate over time: the server's bin edges in ns from the first frame, drawn in seconds (axis title names the unit). */ +function drawRate(svg, hist, subtitle) { + const edgesS = hist.edges_ns.map(edge => edge * NS_PER_S); + if (subtitle) { + const binSeconds = edgesS.length > 1 ? edgesS[1] - edgesS[0] : 0; + subtitle.textContent = hist.counts.length ? `${hist.counts.length} bins of ${formatNumber(binSeconds)} s; empty bins are frames with no hits or missing frames` : ''; + } + if (!hist.counts.length || !state.summary.totals.n_frames) return emptyChart(svg, 'no stream frames'); + if (!hist.counts.some(count => count > 0)) return emptyChart(svg, 'no hits'); + stepChart(svg, { edges: edgesS, values: hist.rate_hz, xLabel: 'time since the first frame (s)', yLabel: 'hit rate (Hz)' }); +} + +function drawCharge(svg, hist) { + if (!hist.counts.some(count => count > 0)) return emptyChart(svg, 'no hits'); + stepChart(svg, { edges: hist.edges, values: hist.counts, xLabel: hist.x_unit, yLabel: hist.y_unit, logY: true }); +} + +function drawTimeInFrame(svg, hist) { + if (!hist.counts.some(count => count > 0)) return emptyChart(svg, 'no hits'); + stepChart(svg, { edges: hist.edges_ns.map(edge => edge * NS_PER_US), values: hist.counts, xLabel: 'time in frame (µs)', yLabel: hist.y_unit }); +} + +/** ROC × port heatmap of the whole file: the per-channel counts of each port summed. */ +function drawOccupancy(hist) { + const svg = $('chartOccupancy'); + if (!hist.rocs.length) { + heatmapScale($('occupancyScale'), 0); + return emptyChart(svg, 'no stream frames'); + } + const values = hist.counts.map(ports => ports.map(channels => channels.reduce((sum, count) => sum + count, 0))); + const maximum = heatmap(svg, { + rows: hist.rocs.map(roc => `ROC ${roc}`), cols: hist.ports, values, rowTitle: 'ROC', colTitle: 'payload port', valueLabel: 'hits', + isDead: (roc_i, port_i) => hist.module_id[roc_i][port_i] === 255, + onCell: (roc_i, port_i) => selectRoc(hist.rocs[roc_i], hist.ports[port_i]), + }); + heatmapScale($('occupancyScale'), maximum, 'hits'); +} + +function populateRocSelect() { + const rocs = state.summary.rocs; + const select = $('selRoc'); + select.replaceChildren(...rocs.map(roc => new Option(`${roc.roc} (${roc.modules.join(', ') || 'no modules'})`, roc.roc))); + $('rocPanel').hidden = $('channelPanel').hidden = !rocs.length; + if (rocs.length) selectRoc(rocs[0].roc, rocs[0].ports[0]); +} + +function rocRow(roc) { + return state.summary.rocs.find(row => row.roc === roc); +} + +/** Select a ROC (and a port): redraws the per-ROC charts and the port/channel selectors. */ +function selectRoc(roc, port = null) { + const row = rocRow(roc); + if (!row) return; + state.roc = roc; + $('selRoc').value = String(roc); + $('rocInfo').textContent = `${formatNumber(row.hits)} hits, ports ${row.ports.join(', ') || 'none'}, ${row.empty_banks} empty banks, ${formatNumber(row.non_fadc_words)} non-fADC words`; + $('selPort').replaceChildren(...row.ports.map(value => new Option(String(value), value))); + $('selCh').replaceChildren(...Array.from({ length: state.channels }, (_, channel) => new Option(String(channel), channel))); + guarded(renderRocCharts); + selectChannel(port !== null && row.ports.includes(port) ? port : row.ports[0], 0); +} + +async function renderRocCharts() { + const roc = state.roc; + const [occupancy, rate, charge, time] = await Promise.all([ + getHist('occupancy', { roc }), getHist('rate', { roc }), getHist('charge', { roc }), getHist('time_in_frame', { roc })]); + if (roc !== state.roc) return; + const rocIndex = occupancy.rocs.indexOf(roc); + heatmap($('chartRocMap'), { + rows: occupancy.ports.map(port => `port ${port}`), cols: Array.from({ length: occupancy.channels }, (_, channel) => channel), + values: occupancy.counts, rowTitle: 'payload port', colTitle: 'channel', valueLabel: 'hits', + isDead: port_i => occupancy.module_id[rocIndex][port_i] === 255, + onCell: (port_i, channel) => selectChannel(occupancy.ports[port_i], channel), + }); + drawRate($('chartRocRate'), rate, $('rocRateSub')); + drawCharge($('chartRocCharge'), charge); + drawTimeInFrame($('chartRocTime'), time); +} + +function selectChannel(port, channel) { + if (port === undefined) return; + state.port = port; + state.channel = channel; + $('selPort').value = String(port); + $('selCh').value = String(channel); + $('chInfo').textContent = `ROC ${state.roc}, port ${port}, channel ${channel}`; + guarded(renderChannelCharts); +} + +async function renderChannelCharts() { + const selection = { roc: state.roc, port: state.port, ch: state.channel }; + const [rate, charge, time] = await Promise.all([getHist('rate', selection), getHist('charge', selection), getHist('time_in_frame', selection)]); + if (selection.roc !== state.roc || selection.port !== state.port || selection.ch !== state.channel) return; + drawRate($('chartChRate'), rate, null); + drawCharge($('chartChCharge'), charge); + drawTimeInFrame($('chartChTime'), time); +} + +/** Step through the ROC's channels: port by port, `state.channels` channels each. */ +function stepChannel(direction) { + const ports = rocRow(state.roc).ports; + const perPort = state.channels; + const flat = ports.indexOf(state.port) * perPort + state.channel + direction; + if (flat < 0 || flat >= ports.length * perPort) return; + selectChannel(ports[Math.floor(flat / perPort)], flat % perPort); +} + +// ---------------------------------------------------------------- Records +async function renderRecords() { + await loadRecordsPage(0); +} + +async function loadRecordsPage(start) { + const page = await fileApi(state.fileId, `/records?from=${start}&count=${RECORDS_PAGE}`); + state.recordsStart = page.start; + renderRecordsTable($('recordsTable'), page.rows, openRecordInStructure); + const last = page.start + page.rows.length; + $('recPageInfo').textContent = page.total ? `records ${formatNumber(page.start)} – ${formatNumber(last - 1)} of ${formatNumber(page.total)}` : 'no records'; + $('recPrev').disabled = page.start === 0; + $('recNext').disabled = last >= page.total; + $('recGo').max = Math.max(0, page.total - 1); +} + +// ---------------------------------------------------------------- Structure +async function renderStructure() { + await ensureTree(); +} + +async function ensureTree() { + if (state.treeLoaded) return; + const fileId = state.fileId; + const root = await fileApi(fileId, '/structure'); + state.tree = createTree($('tree'), { + loadChildren: (nodeId, start) => fileApi(fileId, `/structure?node=${encodeURIComponent(nodeId)}&from=${start}`).catch(dropStale), + onSelect: node => guarded(() => renderDetail($('detail'), node, loadWords(fileId))), + }); + state.tree.reset(root); + state.treeLoaded = true; +} + +const dropStale = error => { if (error instanceof StaleResponse) return null; throw error; }; + +/** /words reader bound to one file; a record index selects that record's buffer (the only view of LZ4/gzip events). */ +function loadWords(fileId) { + return ({ offset, count, record }) => { + const query = `offset=${offset}&count=${count}${record === null ? '' : `&record=${record}`}`; + return fileApi(fileId, `/words?${query}`).catch(dropStale); + }; +} + +async function openRecordInStructure(row) { + state.rendered.add('structure'); + showTab('structure'); + await guarded(async () => { + await ensureTree(); + await state.tree.openRecord(row.id); + }); +} + +const RENDERERS = { overview: renderOverview, plots: renderPlots, records: renderRecords, structure: renderStructure }; + +// ---------------------------------------------------------------- folder browser +let browserDir = ''; +let browserParent = null; + +function showBrowser(visible) { + $('browser').hidden = !visible; + $('browseBtn').setAttribute('aria-expanded', String(visible)); +} + +async function browse(dir) { + const listing = await apiFetch(`/api/ls?dir=${encodeURIComponent(dir)}&all=${$('brAll').checked}`); + browserDir = listing.dir; + browserParent = listing.parent; + $('brPath').textContent = `/${listing.dir}`; + $('brUp').disabled = listing.parent === null; + const list = $('brList'); + list.replaceChildren(); + listing.dirs.forEach(name => list.appendChild(browserItem('dir', name, '', () => guarded(() => browse(joinPath(listing.dir, name)))))); + listing.files.forEach(file => list.appendChild(browserItem('file', file.name, `${(file.size / 1e6).toFixed(1)} MB`, + () => openFile(joinPath(listing.dir, file.name))))); + if (!list.children.length) { + const empty = document.createElement('div'); + empty.className = 'bempty'; + empty.textContent = 'No folders or EVIO files here. Tick "all files" to list every file.'; + list.appendChild(empty); + } +} + +function joinPath(dir, name) { + return dir ? `${dir}/${name}` : name; +} + +function browserItem(kind, name, size, onClick) { + const button = document.createElement('button'); + button.type = 'button'; + button.className = `bitem ${kind}`; + button.innerHTML = ``; + button.children[0].textContent = kind; + button.children[1].textContent = name; + button.children[2].textContent = size; + button.addEventListener('click', onClick); + return button; +} + +// ---------------------------------------------------------------- wiring +function init() { + document.querySelectorAll('.tab').forEach(button => button.addEventListener('click', () => showTab(button.dataset.tab))); + addEventListener('hashchange', () => showTab(currentTab())); + $('browseBtn').addEventListener('click', () => showBrowser($('browser').hidden)); + $('brUp').addEventListener('click', () => guarded(() => browse(browserParent))); + $('brAll').addEventListener('change', () => guarded(() => browse(browserDir))); + $('selRoc').addEventListener('change', event => selectRoc(Number(event.target.value))); + $('selPort').addEventListener('change', event => selectChannel(Number(event.target.value), state.channel)); + $('selCh').addEventListener('change', event => selectChannel(state.port, Number(event.target.value))); + $('chPrev').addEventListener('click', () => stepChannel(-1)); + $('chNext').addEventListener('click', () => stepChannel(1)); + $('recPrev').addEventListener('click', () => guarded(() => loadRecordsPage(Math.max(0, state.recordsStart - RECORDS_PAGE)))); + $('recNext').addEventListener('click', () => guarded(() => loadRecordsPage(state.recordsStart + RECORDS_PAGE))); + $('recGo').addEventListener('change', event => guarded(() => loadRecordsPage(Math.max(0, Number(event.target.value) || 0)))); + if (!TOKEN) { + showError('No token in the page URL. Open the URL that `pyevio web` printed (it ends in ?token=…).'); + return; + } + guarded(() => browse('')); +} + +init(); diff --git a/pyevio/web/charts.js b/pyevio/web/charts.js new file mode 100644 index 0000000..783d913 --- /dev/null +++ b/pyevio/web/charts.js @@ -0,0 +1,256 @@ +// charts.js — plain SVG charts drawn from arrays the server sends: a step chart over bin edges and a heatmap. +// Colors come from the CSS custom properties in style.css (var(--…) works inside SVG attributes), so the +// dark-mode variant needs no code here. No library: the viewer must load on a machine without internet. + +const SVG_NS = 'http://www.w3.org/2000/svg'; +const WIDTH = 480; +const HEIGHT = 240; +const MARGIN = { left: 60, right: 12, top: 10, bottom: 42 }; + +// ---------------------------------------------------------------- number formatting +export function formatNumber(value) { + if (typeof value !== 'number') return String(value); + if (Number.isInteger(value)) return value.toLocaleString('en-US'); + const magnitude = Math.abs(value); + if (magnitude !== 0 && (magnitude < 0.001 || magnitude >= 1e15)) return value.toExponential(3); + return Number(value.toPrecision(4)).toLocaleString('en-US', { maximumFractionDigits: 6 }); +} + +export function formatCompact(value) { + if (value >= 1e9) return (value / 1e9).toPrecision(3) + 'G'; + if (value >= 1e6) return (value / 1e6).toPrecision(3) + 'M'; + if (value >= 1e3) return (value / 1e3).toPrecision(3) + 'k'; + return formatNumber(value); +} + +/** A tick label with as many decimals as the tick step needs, and no more. */ +function formatTick(value, step) { + if (value === 0) return '0'; + if (Math.abs(value) >= 1e4) return formatCompact(value); + const decimals = step >= 1 ? 0 : Math.min(9, Math.ceil(-Math.log10(step))); + return value.toFixed(decimals); +} + +/** Round tick positions covering [low, high]: 1, 2 or 5 times a power of ten. */ +function niceTicks(low, high, count) { + const span = high - low || 1; + const roughStep = span / count; + const power = 10 ** Math.floor(Math.log10(roughStep)); + const multiplier = [1, 2, 5, 10].find(candidate => candidate * power >= roughStep); + const step = multiplier * power; + const ticks = []; + for (let tick = Math.ceil(low / step) * step; tick <= high + step * 1e-9; tick += step) ticks.push(Number(tick.toFixed(12))); + return { ticks, step }; +} + +// ---------------------------------------------------------------- SVG helpers +function svgElement(tag, attributes, parent) { + const element = document.createElementNS(SVG_NS, tag); + for (const name in attributes) element.setAttribute(name, attributes[name]); + if (parent) parent.appendChild(element); + return element; +} + +function text(parent, x, y, content, attributes = {}) { + const node = svgElement('text', { x, y, ...attributes }, parent); + node.textContent = content; + return node; +} + +export function clearChart(svg) { + svg.replaceChildren(); + svg.setAttribute('viewBox', `0 0 ${WIDTH} ${HEIGHT}`); + svg.style.width = ''; // a heatmap may have pinned the width in pixels; step charts fill their panel +} + +/** A chart with nothing to draw shows why, instead of an empty frame. */ +export function emptyChart(svg, message) { + clearChart(svg); + text(svg, WIDTH / 2, HEIGHT / 2, message, { 'text-anchor': 'middle', class: 'axis-title' }); +} + +// ---------------------------------------------------------------- tooltip +const tip = document.getElementById('tip'); + +export function showTip(event, html) { + tip.innerHTML = html; + tip.hidden = false; + const box = tip.getBoundingClientRect(); + let x = event.clientX + 14; + let y = event.clientY + 14; + if (x + box.width > innerWidth - 8) x = event.clientX - box.width - 14; + if (y + box.height > innerHeight - 8) y = event.clientY - box.height - 14; + tip.style.left = x + 'px'; + tip.style.top = y + 'px'; +} + +export function hideTip() { + tip.hidden = true; +} + +/** Mouse position in the SVG's own coordinate system. */ +function svgPoint(svg, event) { + const point = svg.createSVGPoint(); + point.x = event.clientX; + point.y = event.clientY; + return point.matrixTransform(svg.getScreenCTM().inverse()); +} + +// ---------------------------------------------------------------- step chart +/** + * Draw `values[i]` as a horizontal step between `edges[i]` and `edges[i + 1]`. + * `edges` has one more entry than `values` and is already in the unit `xLabel` names (the caller scales + * nanoseconds to seconds). `logY` draws a decade axis; zero bins sit on the baseline. + * `formatX` and `formatY` are used for the tooltip; axis ticks use a step-aware default. + */ +export function stepChart(svg, { edges, values, xLabel, yLabel, logY = false, formatX = formatNumber, formatY = formatNumber }) { + clearChart(svg); + if (!values || values.length === 0 || edges.length !== values.length + 1) { + emptyChart(svg, 'no data'); + return; + } + const plot = { x0: MARGIN.left, x1: WIDTH - MARGIN.right, y0: HEIGHT - MARGIN.bottom, y1: MARGIN.top }; + const xLow = edges[0]; + const xHigh = edges[edges.length - 1] === xLow ? xLow + 1 : edges[edges.length - 1]; + const scaleX = value => plot.x0 + (value - xLow) / (xHigh - xLow) * (plot.x1 - plot.x0); + const yAxis = logY ? logAxis(values) : linearAxis(values); + const scaleY = value => plot.y0 - (yAxis.transform(value) - yAxis.low) / (yAxis.high - yAxis.low) * (plot.y0 - plot.y1); + + drawYAxis(svg, plot, yAxis, scaleY, yLabel); + drawXAxis(svg, plot, xLow, xHigh, scaleX, xLabel); + + let path = ''; + values.forEach((value, bin_i) => { + const y = scaleY(value).toFixed(1); + path += `${bin_i ? 'L' : 'M'}${scaleX(edges[bin_i]).toFixed(1)},${y}L${scaleX(edges[bin_i + 1]).toFixed(1)},${y}`; + }); + svgElement('path', { d: path, class: 'series' }, svg); + attachBinHover(svg, plot, { edges, values, scaleX, scaleY, formatX, formatY, xLabel, yLabel }); +} + +/** Linear axis from 0 to the first tick at or above the maximum, so the top of the data has a label. */ +function linearAxis(values) { + const maximum = Math.max(...values) || 1; + const { ticks, step } = niceTicks(0, maximum, 4); + const high = Math.ceil(maximum / step) * step; + if (ticks[ticks.length - 1] < high) ticks.push(high); + return { low: 0, high, ticks, transform: value => value, formatTick: value => formatTick(value, step) }; +} + +/** Decade axis from below the smallest positive value (so a count of 1 is not on the baseline) to above the largest. */ +function logAxis(values) { + const positive = values.filter(value => value > 0); + const lowDecade = positive.length ? Math.floor(Math.log10(Math.min(...positive) * 0.5)) : 0; + const highDecade = Math.max(lowDecade + 1, positive.length ? Math.ceil(Math.log10(Math.max(...positive))) : 1); + const ticks = []; + for (let decade = lowDecade; decade <= highDecade; decade++) ticks.push(10 ** decade); + return { low: lowDecade, high: highDecade, ticks, transform: value => (value > 0 ? Math.log10(value) : lowDecade), + formatTick: value => formatCompact(value) }; +} + +function drawYAxis(svg, plot, axis, scaleY, label) { + axis.ticks.forEach(tick => { + const y = scaleY(tick); + svgElement('line', { x1: plot.x0, x2: plot.x1, y1: y, y2: y, class: 'grid' }, svg); + text(svg, plot.x0 - 6, y + 4, axis.formatTick(tick), { 'text-anchor': 'end' }); + }); + text(svg, 12, (plot.y0 + plot.y1) / 2, label, { class: 'axis-title', 'text-anchor': 'middle', + transform: `rotate(-90 12 ${(plot.y0 + plot.y1) / 2})` }); +} + +function drawXAxis(svg, plot, low, high, scaleX, label) { + const { ticks, step } = niceTicks(low, high, 5); + ticks.forEach(tick => text(svg, scaleX(tick), plot.y0 + 16, formatTick(tick, step), { 'text-anchor': 'middle' })); + svgElement('line', { x1: plot.x0, x2: plot.x1, y1: plot.y0, y2: plot.y0, class: 'axis' }, svg); + text(svg, (plot.x0 + plot.x1) / 2, HEIGHT - 4, label, { class: 'axis-title', 'text-anchor': 'middle' }); +} + +/** Crosshair and tooltip for the bin under the mouse. */ +function attachBinHover(svg, plot, { edges, values, scaleX, scaleY, formatX, formatY, xLabel, yLabel }) { + const crosshair = svgElement('line', { y1: plot.y1, y2: plot.y0, class: 'hover-line', visibility: 'hidden' }, svg); + const dot = svgElement('circle', { r: 4, class: 'hover-dot', visibility: 'hidden' }, svg); + const hitArea = svgElement('rect', { x: plot.x0, y: plot.y1, width: plot.x1 - plot.x0, height: plot.y0 - plot.y1, class: 'hit-area' }, svg); + hitArea.addEventListener('mousemove', event => { + const x = svgPoint(svg, event).x; + let bin_i = edges.findIndex((edge, i) => i < values.length && scaleX(edge) <= x && x < scaleX(edges[i + 1])); + if (bin_i < 0) bin_i = x < scaleX(edges[0]) ? 0 : values.length - 1; + const centerX = (scaleX(edges[bin_i]) + scaleX(edges[bin_i + 1])) / 2; + crosshair.setAttribute('x1', centerX); + crosshair.setAttribute('x2', centerX); + crosshair.setAttribute('visibility', 'visible'); + dot.setAttribute('cx', centerX); + dot.setAttribute('cy', scaleY(values[bin_i])); + dot.setAttribute('visibility', 'visible'); + showTip(event, `${xLabel}: ${formatX(edges[bin_i])} – ${formatX(edges[bin_i + 1])}
    ${yLabel}: ${formatY(values[bin_i])}`); + }); + hitArea.addEventListener('mouseleave', () => { + hideTip(); + crosshair.setAttribute('visibility', 'hidden'); + dot.setAttribute('visibility', 'hidden'); + }); +} + +// ---------------------------------------------------------------- heatmap +/** + * A grid of `values[row_i][col_i]` colored by one sequential ramp (--heat-lo → --heat-hi). + * `isDead(row_i, col_i)` marks cells with no meaning (a port absent from a ROC's map); they are grey and have + * no value. `onCell(row_i, col_i)` runs on click. Returns the maximum value, for the color-scale legend. + */ +export function heatmap(svg, { rows, cols, values, rowTitle, colTitle, valueLabel, isDead = () => false, onCell = null }) { + svg.replaceChildren(); + if (!rows.length || !cols.length) { + emptyChart(svg, 'no data'); + return 0; + } + const labelWidth = 70; + const cellWidth = Math.max(14, Math.min(40, Math.floor((WIDTH - labelWidth - MARGIN.right) / cols.length))); + const cellHeight = Math.max(14, Math.min(26, cellWidth)); + const plot = { x0: labelWidth, y0: 22 }; + const height = plot.y0 + rows.length * cellHeight + 36; + const width = Math.max(WIDTH, plot.x0 + cols.length * cellWidth + MARGIN.right); + svg.setAttribute('viewBox', `0 0 ${width} ${height}`); + svg.style.width = `${width}px`; // one SVG unit per pixel: a small grid must not scale its labels up + svg.style.maxWidth = '100%'; + const maximum = Math.max(0, ...values.flatMap((row, row_i) => row.filter((_, col_i) => !isDead(row_i, col_i)))); + + cols.forEach((label, col_i) => text(svg, plot.x0 + col_i * cellWidth + cellWidth / 2, plot.y0 - 6, String(label), { 'text-anchor': 'middle' })); + rows.forEach((label, row_i) => text(svg, plot.x0 - 6, plot.y0 + row_i * cellHeight + cellHeight / 2 + 4, String(label), { 'text-anchor': 'end' })); + text(svg, plot.x0 + cols.length * cellWidth / 2, height - 6, colTitle, { class: 'axis-title', 'text-anchor': 'middle' }); + text(svg, 12, plot.y0 + rows.length * cellHeight / 2, rowTitle, { class: 'axis-title', 'text-anchor': 'middle', + transform: `rotate(-90 12 ${plot.y0 + rows.length * cellHeight / 2})` }); + + rows.forEach((rowLabel, row_i) => cols.forEach((colLabel, col_i) => { + const dead = isDead(row_i, col_i); + const value = values[row_i][col_i]; + const cell = svgElement('rect', { x: plot.x0 + col_i * cellWidth + 1, y: plot.y0 + row_i * cellHeight + 1, width: cellWidth - 2, + height: cellHeight - 2, rx: 2, class: dead ? 'cell-dead' : 'cell' }, svg); + if (!dead) cell.style.fill = heatColor(value, maximum); + cell.addEventListener('mousemove', event => showTip(event, dead + ? `${rowTitle} ${rowLabel}, ${colTitle} ${colLabel}: not in the map` + : `${rowTitle} ${rowLabel}, ${colTitle} ${colLabel}
    ${valueLabel}: ${formatNumber(value)}`)); + cell.addEventListener('mouseleave', hideTip); + if (onCell && !dead) { + cell.style.cursor = 'pointer'; + cell.addEventListener('click', () => onCell(row_i, col_i)); + } + })); + return maximum; +} + +/** One hue, light to dark, mixed in the browser so both color schemes use their own ramp ends. */ +function heatColor(value, maximum) { + const fraction = maximum > 0 ? Math.sqrt(value / maximum) : 0; // sqrt: a few hot channels must not flatten the rest + return `color-mix(in oklab, var(--heat-hi) ${Math.round(fraction * 100)}%, var(--heat-lo))`; +} + +export function heatmapScale(container, maximum, valueLabel) { + container.replaceChildren(); + if (maximum <= 0) return; + const low = document.createElement('span'); + low.textContent = '0'; + const ramp = document.createElement('span'); + ramp.className = 'ramp'; + const high = document.createElement('span'); + high.textContent = `${formatNumber(maximum)} ${valueLabel} (square-root scale)`; + container.append(low, ramp, high); +} diff --git a/pyevio/web/index.html b/pyevio/web/index.html index 9a46803..0f28c40 100644 --- a/pyevio/web/index.html +++ b/pyevio/web/index.html @@ -1,693 +1,120 @@ - - -EVIO Stream Viewer - - - - - + + + + +pyevio web viewer + + +
    -
    -

    EVIO Stream Viewer

    - - - -
    -
    Drop an .evio file anywhere on this page. It is decoded in your browser and never uploaded. EVIO v6 with CODA streaming fADC250 data (0xFF60 time frames) gets full plots; any other EVIO v6 file shows the structure tree.
    -
    - - - - + + + diff --git a/pyevio/web/structure.py b/pyevio/web/structure.py index e46e1f3..71212eb 100644 --- a/pyevio/web/structure.py +++ b/pyevio/web/structure.py @@ -37,6 +37,8 @@ MAX_CHILDREN = 5000 MAX_NODE_DEPTH = 32 NODE_PART = re.compile(r"^(r\d+|e\d+|b[0-9a-f]+|t)$") +COMPRESSION_NAMES = {Record.COMPRESSION_NONE: "none", Record.COMPRESSION_LZ4: "lz4", Record.COMPRESSION_LZ4_BEST: "lz4_best", + Record.COMPRESSION_GZIP: "gzip"} def page(items: list, start: int, count: int) -> dict: @@ -62,7 +64,8 @@ def describe_record(record: Record, index: int, evio_file: Optional[EvioFile] = "header_length": header.header_length, "header_type": header.header_type, "is_trailer": record.is_trailer, "event_count": header.event_count, "events_found": len(record.scan_events()), "index_array_length": header.index_array_length, "user_header_length": header.user_header_length, - "compression_type": header.compression_type, "compressed_length": header.compressed_data_length, + "compression_type": header.compression_type, "compression": COMPRESSION_NAMES.get(header.compression_type, str(header.compression_type)), + "compressed_length": header.compressed_data_length, "uncompressed_length": header.uncompressed_data_length, "version": header.version, "is_truncated": record.is_truncated, "declared_end": record.declared_end, "bit_info": {"raw": header.bit_info, "has_dictionary": header.has_dictionary, "is_last_record": header.is_last_record, @@ -100,6 +103,18 @@ def describe_bank(bank: Bank, node_id: str, role: Optional[str] = None) -> dict: return data +# Segments inside the stream-info banks of a frame; the AIS (0x42) is displayed as the file has it, never decoded. +INFO_SEGMENT_ROLES = {fs.SIB_TSS_SEGMENT_TAG: "time_slice", fs.SIB_AIS_SEGMENT_TAG: "aggregation_info", + fs.ROC_TSS_SEGMENT_TAG: "time_slice", fs.ROC_PAYLOAD_PORT_SEGMENT_TAG: "payload_map"} + + +def payload_map_rows(evio_file: EvioFile, segment: Bank) -> List[dict]: + """The decoded entries of a 0x41 payload-port segment, zero entries included, from the decoder.""" + words = fs.event_words(segment.mm, segment.data_offset, segment.data_length, evio_file.header.endian).tolist() + return [{"port": port, "module_id": module, "module": fs.MODULE_NAMES.get(module, str(module))} + for port, module in fs.payload_map_entries(words, segment.pad or 0, evio_file.header.endian == ">")] + + def _event_bank(evio_file: EvioFile, record_index: int, event_index: int) -> Bank: record = evio_file.get_record(record_index) offsets = record.get_event_offsets() @@ -139,13 +154,18 @@ def _bank_children(evio_file: EvioFile, chain: List[Bank], node_id: str) -> List children = [] in_stream_frame = event.tag == fs.STREAM_EVENT_TAG labels = _payload_labels(evio_file, event) if (in_stream_frame and len(chain) == 2 and bank.tag != fs.SIB_TAG) else None + info_segments = in_stream_frame and len(chain) in (2, 3) and bank.tag in (fs.SIB_TAG, fs.ROC_STREAM_INFO_TAG) for child in bank.get_children(): role = None if in_stream_frame and len(chain) == 1: role = "stream_info" if child.tag == fs.SIB_TAG else "roc_bank" elif labels is not None: role = "roc_stream_info" if child.tag == fs.ROC_STREAM_INFO_TAG else "payload" + elif info_segments: + role = INFO_SEGMENT_ROLES.get(child.tag) described = describe_bank(child, f"{node_id}/b{child.offset:x}", role) + if role == "payload_map": + described["entries"] = payload_map_rows(evio_file, child) if role == "roc_bank": described.update({"roc": child.tag, "stream": (child.num or 0) & 0xF}) if role == "payload": diff --git a/pyevio/web/style.css b/pyevio/web/style.css new file mode 100644 index 0000000..165146e --- /dev/null +++ b/pyevio/web/style.css @@ -0,0 +1,142 @@ +/* pyevio web viewer — one palette, defined once here; charts read it through var(--…) in SVG attributes. + Layout: app bar → folder browser → status strip → tabs (Overview / Plots / Records / Structure). 1280 px is the target width. */ +:root { + --bg: #f6f6f3; --surface: #fcfcfb; --line: #e3e2dc; --grid: #ecebe6; --hover: #efeee9; --sel: #dbe8fa; + --fg: #0b0b0b; --fg2: #52514e; --fg3: #7a7974; + --s1: #2a78d6; --s2: #eb6834; --s3: #1baf7a; + --heat-lo: #e4eefb; --heat-hi: #0d366b; --dead: #d9d8d2; --hdr: #fde8d5; + --c-file: #52514e; --c-rec: #4a3aa7; --c-bank: #1c5cab; --c-seg: #0f7a55; --c-hit: #b4500f; + --ok: #0ca30c; --info: #6b6a66; --warn: #e0a010; --error: #d03b3b; + --sans: system-ui, -apple-system, "Segoe UI", sans-serif; + --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; +} +@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { + --bg: #121211; --surface: #1a1a19; --line: #33332f; --grid: #2a2a27; --hover: #252523; --sel: #1d3556; + --fg: #f4f4f1; --fg2: #c3c2b7; --fg3: #8f8e86; + --s1: #4a93ea; --s2: #e8784c; --s3: #2bbd88; + --heat-lo: #1d2a3d; --heat-hi: #8fc0f5; --dead: #3a3a36; --hdr: #4a2c16; + --c-file: #c3c2b7; --c-rec: #9085e9; --c-bank: #6da7ec; --c-seg: #3cc495; --c-hit: #f08a52; + --ok: #3cc43c; --info: #9a9990; --warn: #f0b429; --error: #ef6464; color-scheme: dark; } } +:root[data-theme="dark"] { + --bg: #121211; --surface: #1a1a19; --line: #33332f; --grid: #2a2a27; --hover: #252523; --sel: #1d3556; + --fg: #f4f4f1; --fg2: #c3c2b7; --fg3: #8f8e86; + --s1: #4a93ea; --s2: #e8784c; --s3: #2bbd88; + --heat-lo: #1d2a3d; --heat-hi: #8fc0f5; --dead: #3a3a36; --hdr: #4a2c16; + --c-file: #c3c2b7; --c-rec: #9085e9; --c-bank: #6da7ec; --c-seg: #3cc495; --c-hit: #f08a52; + --ok: #3cc43c; --info: #9a9990; --warn: #f0b429; --error: #ef6464; color-scheme: dark; } + +body { margin: 0; background: var(--bg); color: var(--fg); font: 14px/1.5 var(--sans); } +[hidden] { display: none !important; } /* the hidden attribute must win over display: grid/flex on the same element */ +.wrap { max-width: 1248px; margin: 0 auto; padding: 20px 16px 48px; display: grid; gap: 16px; } +h1 { font-size: 20px; margin: 0; font-weight: 600; } +h2 { font-size: 15px; margin: 0; font-weight: 600; } +h3 { font-size: 14px; margin: 0; font-weight: 600; } +code { font-family: var(--mono); font-size: .9em; } +.small { font-size: 12.5px; color: var(--fg3); } +.bar { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; } +.bar .grow { flex: 1; } +.btn { font: 500 13px var(--sans); background: var(--s1); color: #fff; border: 0; border-radius: 6px; padding: 7px 14px; cursor: pointer; } +.btn.ghost { background: transparent; color: var(--fg); border: 1px solid var(--line); } +.btn:hover { filter: brightness(1.08); } .btn.ghost:hover { background: var(--hover); filter: none; } +.btn:disabled { opacity: .45; cursor: default; filter: none; } +.btn:focus-visible, .tab:focus-visible, select:focus-visible, input:focus-visible { outline: 2px solid var(--s1); outline-offset: 2px; } +select, input[type=number], input[type=text] { font: 13px var(--sans); background: var(--surface); color: var(--fg); border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px; } + +/* folder browser */ +.browser { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; display: grid; min-width: 0; } +.browser .bh { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; padding: 10px 12px; border-bottom: 1px solid var(--line); } +.browser .bh .path { flex: 1; min-width: 0; font: 13px var(--mono); color: var(--fg2); overflow-wrap: anywhere; } +.browser .bh label { font-size: 12.5px; color: var(--fg2); display: flex; gap: 4px; align-items: center; } +.blist { max-height: 300px; overflow: auto; padding: 4px; font: 13px var(--mono); } +.bitem { display: flex; gap: 10px; align-items: baseline; width: 100%; text-align: left; background: none; border: 0; color: var(--fg); font: inherit; padding: 4px 8px; border-radius: 4px; cursor: pointer; } +.bitem:hover { background: var(--hover); } +.bitem .bk { font-size: 10.5px; padding: 0 5px; border-radius: 3px; border: 1px solid currentColor; flex: none; } +.bitem.dir .bk { color: var(--c-rec); } .bitem.file .bk { color: var(--c-bank); } +.bitem .bn { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bitem .bs { color: var(--fg3); flex: none; } +.bempty { padding: 10px 12px; color: var(--fg3); font-family: var(--sans); font-size: 13px; } + +/* status strip */ +.status { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; display: grid; gap: 6px; } +.status .file { font: 500 14px var(--mono); overflow-wrap: anywhere; } +.status .msg { color: var(--fg2); font-size: 13px; } +.status .err { color: var(--error); font-size: 13px; } +.prog { height: 4px; background: var(--grid); border-radius: 2px; overflow: hidden; } +.prog i { display: block; height: 100%; background: var(--s1); width: 0; transition: width .2s; } + +/* tabs and views */ +.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); } +.tab { font: 500 14px var(--sans); background: none; border: 0; border-bottom: 2px solid transparent; color: var(--fg2); padding: 8px 12px; cursor: pointer; } +.tab[aria-selected="true"] { color: var(--fg); border-bottom-color: var(--s1); } +.tab:disabled { color: var(--fg3); cursor: default; } +.view { display: grid; gap: 16px; } +.panel { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; padding: 16px; min-width: 0; display: grid; gap: 10px; align-content: start; } +.panel p { margin: 0; color: var(--fg2); font-size: 13.5px; } +.grid2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 440px), 1fr)); gap: 16px; } +.grid3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: 16px 20px; } +.cell { display: grid; gap: 4px; align-content: start; min-width: 0; } +.cell .sub { font-size: 12.5px; color: var(--fg3); } +.controls { display: flex; gap: 8px 14px; flex-wrap: wrap; align-items: center; font-size: 13px; color: var(--fg2); } +.controls label { display: flex; gap: 6px; align-items: center; } +.empty { color: var(--fg3); font-size: 13px; padding: 8px 0; } + +/* overview */ +.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; } +.tile { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; } +.tile .v { font: 500 21px var(--mono); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; } +.tile .k { color: var(--fg2); font-size: 13px; } +.checks { display: grid; gap: 8px; } +.ck { display: grid; grid-template-columns: 22px 1fr; gap: 8px; font-size: 14px; } +.ico { font: 600 12px var(--mono); width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; color: #fff; margin-top: 1px; } +.ico.ok { background: var(--ok); } .ico.info { background: var(--info); } .ico.warn { background: var(--warn); color: #0b0b0b; } .ico.error { background: var(--error); } +.ck .d { color: var(--fg2); } +ul.find { margin: 0; padding-left: 18px; color: var(--fg2); display: grid; gap: 4px; } +ul.find b { color: var(--fg); font-weight: 500; } +.fields { border-collapse: collapse; font: 12.5px var(--mono); width: 100%; } +.fields td { padding: 3px 8px 3px 0; border-bottom: 1px solid var(--line); vertical-align: top; overflow-wrap: anywhere; } +.fields td:first-child { color: var(--fg2); font-family: var(--sans); white-space: nowrap; width: 40%; } + +/* tables (records, ROC rows, map entries) */ +.scroll { overflow-x: auto; } +table.t { border-collapse: collapse; font: 12.5px var(--mono); font-variant-numeric: tabular-nums; width: 100%; } +table.t th, table.t td { padding: 4px 8px; text-align: right; border-bottom: 1px solid var(--grid); white-space: nowrap; } +table.t th { color: var(--fg2); font-weight: 500; position: sticky; top: 0; background: var(--surface); } +table.t th.l, table.t td.l { text-align: left; } +table.t tbody tr.click { cursor: pointer; } table.t tbody tr.click:hover { background: var(--hover); } +table.t td.bad { color: var(--error); } table.t td.warn { color: var(--warn); } +.pager { display: flex; gap: 8px 14px; align-items: center; flex-wrap: wrap; font-size: 13px; color: var(--fg2); } + +/* charts */ +svg.chart { display: block; overflow: visible; width: 100%; height: auto; } +svg text { fill: var(--fg2); font: 11px var(--mono); } +svg text.axis-title { fill: var(--fg3); font-family: var(--sans); } +svg .grid { stroke: var(--grid); } svg .axis { stroke: var(--line); } +svg .series { fill: none; stroke: var(--s1); stroke-width: 2; stroke-linejoin: round; } +svg .hover-line { stroke: var(--fg3); stroke-dasharray: 3 3; } +svg .hover-dot { fill: var(--s1); stroke: var(--surface); stroke-width: 2; } +svg .hit-area { fill: transparent; } +svg .cell-dead { fill: var(--dead); } +svg .cell:hover { stroke: var(--fg); stroke-width: 1.5; } +.scale { display: flex; align-items: center; gap: 8px; font: 11px var(--mono); color: var(--fg2); } +.scale .ramp { width: 160px; height: 10px; border-radius: 2px; background: linear-gradient(90deg, var(--heat-lo), var(--heat-hi)); } +.tip { position: fixed; pointer-events: none; background: var(--surface); border: 1px solid var(--line); border-radius: 6px; padding: 6px 9px; font: 12px/1.45 var(--mono); color: var(--fg); box-shadow: 0 4px 14px rgb(0 0 0 / .12); z-index: 10; white-space: nowrap; } + +/* structure tab */ +.panes { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 16px; align-items: start; } +.pane { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; min-width: 0; } +.pane-h { padding: 10px 14px; border-bottom: 1px solid var(--line); display: flex; gap: 8px; align-items: center; flex-wrap: wrap; font-size: 13px; color: var(--fg2); } +.tree { padding: 8px 6px 12px; overflow: auto; max-height: 76vh; font: 12.5px/1.4 var(--mono); } +.node > .row { display: flex; align-items: baseline; gap: 6px; padding: 2px 6px; border-radius: 4px; cursor: pointer; white-space: nowrap; } +.node > .row:hover { background: var(--hover); } .node > .row.sel { background: var(--sel); } +.tw { width: 12px; flex: none; color: var(--fg3); text-align: center; } +.kind { font-size: 10.5px; padding: 0 5px; border-radius: 3px; border: 1px solid currentColor; flex: none; } +.k-file { color: var(--c-file); } .k-record { color: var(--c-rec); } .k-trailer { color: var(--c-rec); } .k-event { color: var(--c-bank); } +.k-bank { color: var(--c-bank); } .k-segment { color: var(--c-seg); } .k-hit { color: var(--c-hit); } +.nm { color: var(--fg); font-family: var(--sans); font-size: 13px; } .meta { color: var(--fg3); } .role { color: var(--c-seg); } +.kids { margin-left: 11px; padding-left: 10px; border-left: 1px solid var(--line); } +.more { color: var(--s1); font-family: var(--sans); font-size: 12.5px; padding: 2px 6px 2px 24px; cursor: pointer; background: none; border: 0; } +.detail { padding: 14px; display: grid; gap: 12px; } +.detail .path { font: 11.5px var(--mono); color: var(--fg3); overflow-wrap: anywhere; } +.detail p { margin: 0; color: var(--fg2); font-size: 13.5px; } +.hex { font: 12px/1.6 var(--mono); display: grid; grid-template-columns: auto repeat(4, auto); gap: 0 12px; justify-content: start; overflow-x: auto; } +.hex .a { color: var(--fg3); } .hex .h { background: var(--hdr); border-radius: 3px; padding: 0 2px; } +.errs { color: var(--error); font: 12.5px var(--mono); margin: 0; padding-left: 16px; } diff --git a/pyevio/web/tree.js b/pyevio/web/tree.js new file mode 100644 index 0000000..b01d289 --- /dev/null +++ b/pyevio/web/tree.js @@ -0,0 +1,305 @@ +// tree.js — the records table, the lazy structure tree and the hex view. +// Every label here prints a field the server sent (/records, /structure, /words). The viewer never reads a bank +// header itself: the record index for /words?record= is parsed from the node id, and the only format knowledge is +// how many words of a dump to highlight as "header" (2 for a bank, 1 for a segment, header_length for a record). + +import { formatNumber } from './charts.js'; + +const HEX_WORDS_FIRST = 64; +const HEX_WORDS_STEP = 256; + +export const hex = (value, digits = 4) => '0x' + Number(value).toString(16).padStart(digits, '0'); + +function element(tag, className, textContent) { + const node = document.createElement(tag); + if (className) node.className = className; + if (textContent !== undefined) node.textContent = textContent; + return node; +} + +// ---------------------------------------------------------------- records table +const RECORD_COLUMNS = [ + { title: '#', value: row => row.index, left: true }, + { title: 'offset', value: row => hex(row.offset, 8) }, + { title: 'size (B)', value: row => formatNumber(row.size) }, + { title: 'record #', value: row => row.record_number }, + { title: 'events declared / found', value: row => `${row.event_count} / ${row.events_found}`, + className: row => (row.events_found !== row.event_count ? 'bad' : '') }, + { title: 'header type', value: row => (row.is_trailer ? `${row.header_type} (trailer)` : row.header_type) }, + { title: 'compression', value: row => row.compression }, + { title: 'last-record bit', value: row => (row.bit_info.is_last_record ? 'set' : '—') }, + { title: 'index', value: row => (row.index_array_length ? `${row.index_array_length} B` : 'none') }, + { title: 'truncated', value: row => (row.is_truncated ? 'yes' : '—'), className: row => (row.is_truncated ? 'bad' : '') }, + { title: 'header quirk', value: row => row.header_quirk ?? '—', className: row => (row.header_quirk ? 'warn' : ''), left: true }, + { title: 'errors', value: row => (row.errors.length ? row.errors.length : '—'), className: row => (row.errors.length ? 'bad' : ''), + title_of: row => row.errors.join('\n') }, +]; + +/** Fill `table` with the rows of one /records page; `onRow(row)` runs when a row is clicked. */ +export function renderRecordsTable(table, rows, onRow) { + table.replaceChildren(); + const head = table.createTHead().insertRow(); + RECORD_COLUMNS.forEach(column => head.appendChild(element('th', column.left ? 'l' : '', column.title))); + const body = table.createTBody(); + rows.forEach(row => { + const tableRow = body.insertRow(); + tableRow.className = 'click'; + tableRow.dataset.id = row.id; + RECORD_COLUMNS.forEach(column => { + const cell = tableRow.insertCell(); + cell.textContent = column.value(row); + cell.className = [column.left ? 'l' : '', column.className ? column.className(row) : ''].join(' ').trim(); + if (column.title_of) cell.title = column.title_of(row); + }); + tableRow.addEventListener('click', () => onRow(row)); + }); +} + +// ---------------------------------------------------------------- node labels +const ROLE_LABELS = { + stream_info: 'stream info', roc_bank: 'ROC bank', roc_stream_info: 'ROC stream info', payload_hits: 'payload', + payload_empty: 'payload (empty)', payload_words: 'payload', payload_unmapped: 'payload (unmapped port)', + time_slice: 'time slice', aggregation_info: 'aggregation info (AIS)', payload_map: 'payload-port map', +}; + +/** `{kind, name, meta}` for one tree row, from the node's fields. */ +export function nodeLabel(node) { + switch (node.kind) { + case 'file': + return { kind: 'file', name: 'file', meta: `${node.header_layout}, ${node.record_count} records${node.has_trailer ? ' + trailer' : ''}` }; + case 'trailer': + return { kind: 'trailer', name: 'trailer', meta: `${formatNumber(node.size)} B at ${hex(node.offset, 8)}` }; + case 'record': + return { kind: 'record', name: `record ${node.index}`, meta: recordMeta(node) }; + case 'event': + return { kind: 'event', name: `event ${node.index}`, meta: `tag ${hex(node.tag)} type ${hex(node.data_type, 2)} num ${node.num}, ${node.length + 1} words` }; + case 'hit': + return { kind: 'hit', name: `hit ${node.index}`, meta: `ch ${node.channel} t ${node.t_ns} ns q ${node.charge} ${node.word}${node.flag ? ' FLAG' : ''}` }; + default: + return { kind: node.structure === 'Bank' ? 'bank' : 'segment', name: bankName(node), meta: bankMeta(node) }; + } +} + +function recordMeta(node) { + const parts = [`${node.event_count} events`, `${formatNumber(node.size)} B`]; + if (node.compression !== 'none') parts.push(node.compression); + if (node.is_truncated) parts.push('TRUNCATED'); + if (node.errors && node.errors.length) parts.push(`${node.errors.length} errors`); + return parts.join(', '); +} + +function bankName(node) { + const role = ROLE_LABELS[node.role]; + if (node.role === 'roc_bank') return `${role} ${node.roc} stream ${node.stream}`; + if (node.port !== undefined) return `${role} port ${node.port}`; + return role || `${node.structure} ${hex(node.tag)}`; +} + +function bankMeta(node) { + const parts = [`tag ${hex(node.tag)}`, `type ${hex(node.data_type, 2)}`]; + if (node.num !== null && node.num !== undefined) parts.push(`num ${node.num}`); + parts.push(`${node.length} words`); + if (node.module) parts.push(node.module); + if (node.n_words !== undefined && node.role === 'payload_hits') parts.push(`${node.n_words} hits`); + if (node.entries) parts.push(`${node.entries.length} entries`); + return parts.join(' '); +} + +// ---------------------------------------------------------------- tree +/** + * A lazy tree over /structure. `loadChildren(nodeId, start)` returns the server page `{total, start, children}`; + * `onSelect(node)` runs when a row is clicked. Rows carry data-id and data-role for tests and styling. + */ +export function createTree(container, { loadChildren, onSelect }) { + const entries = new Map(); // node id → {node, element, kidsElement, loaded, total} + let selectedRow = null; + + function reset(rootPage) { + container.replaceChildren(); + entries.clear(); + const rootElement = renderNode(rootPage.node, container); + const entry = entries.get(rootPage.node.id); + entry.expanded = true; + entry.kidsElement.hidden = false; + appendPage(entry, rootPage); + rootElement.querySelector('.tw').textContent = '▾'; + } + + function renderNode(node, parent) { + const label = nodeLabel(node); + const nodeElement = element('div', 'node'); + nodeElement.dataset.id = node.id; + if (node.role) nodeElement.dataset.role = node.role; + const row = element('div', 'row'); + row.tabIndex = 0; + row.append(element('span', 'tw', node.has_children ? '▸' : ''), element('span', `kind k-${label.kind}`, label.kind), + element('span', 'nm', label.name), element('span', 'meta', label.meta)); + const kidsElement = element('div', 'kids'); + kidsElement.hidden = true; + nodeElement.append(row, kidsElement); + parent.appendChild(nodeElement); + const entry = { node, element: nodeElement, row, kidsElement, loaded: 0, total: null, expanded: false }; + entries.set(node.id, entry); + row.addEventListener('click', () => { select(entry); toggle(entry); }); + row.addEventListener('keydown', event => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); row.click(); } }); + return nodeElement; + } + + function select(entry) { + if (selectedRow) selectedRow.classList.remove('sel'); + selectedRow = entry.row; + selectedRow.classList.add('sel'); + onSelect(entry.node); + } + + async function toggle(entry) { + if (!entry.node.has_children) return; + entry.expanded = !entry.expanded; + entry.kidsElement.hidden = !entry.expanded; + entry.row.querySelector('.tw').textContent = entry.expanded ? '▾' : '▸'; + if (entry.expanded && entry.total === null) await loadMore(entry); + } + + async function loadMore(entry) { + const page = await loadChildren(entry.node.id, entry.loaded); + if (!page) return; // a stale response: the file changed under this tree + appendPage(entry, page); + } + + function appendPage(entry, page) { + const moreButton = entry.kidsElement.querySelector('.more'); + if (moreButton) moreButton.remove(); + page.children.forEach(child => renderNode(child, entry.kidsElement)); + entry.loaded += page.children.length; + entry.total = page.total; + if (page.errors && page.errors.length && !entry.kidsElement.querySelector('.errs')) { + const list = element('ul', 'errs'); + page.errors.forEach(message => list.appendChild(element('li', '', message))); + entry.kidsElement.prepend(list); + } + if (entry.loaded < entry.total) { + const more = element('button', 'more', `show more (${formatNumber(entry.loaded)} of ${formatNumber(entry.total)} loaded)`); + more.type = 'button'; + more.addEventListener('click', () => loadMore(entry)); + entry.kidsElement.appendChild(more); + } + } + + /** Expand and select a top-level record (`r12`) or the trailer (`t`), loading root pages until it is present. */ + async function openRecord(recordId) { + const root = entries.get(''); + if (!root) return; + while (!entries.has(recordId) && root.loaded < root.total) await loadMore(root); + const entry = entries.get(recordId); + if (!entry) return; + select(entry); + if (!entry.expanded) await toggle(entry); + entry.row.scrollIntoView({ block: 'center' }); + } + + return { reset, openRecord }; +} + +// ---------------------------------------------------------------- detail pane +const HIDDEN_FIELDS = new Set(['id', 'has_children', 'kind', 'entries', 'bit_info', 'errors']); + +/** + * Show a node's fields, its decoded entries (payload-port map) and its raw words. + * `loadWords({offset, count, record})` fetches /words; hit rows have no offset and show their fields only. + */ +export async function renderDetail(container, node, loadWords) { + container.replaceChildren(); + container.appendChild(element('div', 'path', node.id || 'file')); + container.appendChild(fieldsTable(node)); + if (node.bit_info) { + container.appendChild(element('h3', '', 'bit info')); + container.appendChild(fieldsTable(node.bit_info)); + } + if (node.errors && node.errors.length) { + const list = element('ul', 'errs'); + node.errors.forEach(message => list.appendChild(element('li', '', message))); + container.appendChild(list); + } + if (node.entries) container.appendChild(entriesTable(node.entries)); + const words = wordsRequest(node); + if (words) await appendHex(container, node, words, loadWords); +} + +function fieldsTable(object) { + const table = element('table', 'fields'); + Object.entries(object).forEach(([name, value]) => { + if (HIDDEN_FIELDS.has(name) || value === undefined) return; + const row = table.insertRow(); + row.insertCell().textContent = name; + row.insertCell().textContent = fieldText(name, value); + }); + return table; +} + +function fieldText(name, value) { + if (value === null) return '—'; + if (typeof value === 'boolean') return value ? 'yes' : 'no'; + if (Array.isArray(value)) return value.join(', '); + if (typeof value === 'number' && (name === 'tag' || name === 'offset' || name === 'declared_end')) return `${hex(value)} (${formatNumber(value)})`; + if (typeof value === 'number' && name === 'data_type') return hex(value, 2); + return formatNumber(value); +} + +function entriesTable(entries) { + const table = element('table', 't'); + const head = table.createTHead().insertRow(); + ['entry', 'port', 'module id', 'module'].forEach(title => head.appendChild(element('th', '', title))); + const body = table.createTBody(); + entries.forEach((entry, entry_i) => { + const row = body.insertRow(); + [entry_i, entry.port, entry.module_id, entry.module].forEach(value => { row.insertCell().textContent = value; }); + }); + return table; +} + +/** Which words to fetch for a node: record headers are file offsets, banks index their record's buffer. */ +function wordsRequest(node) { + if (node.kind === 'hit' || node.kind === 'file' || node.offset === undefined) return null; + const totalWords = Math.floor(node.size / 4); + if (node.kind === 'record' || node.kind === 'trailer') { + return { offset: node.offset, record: null, totalWords, headerWords: node.header_length }; + } + const recordMatch = /^r(\d+)\//.exec(node.id); + return { offset: node.offset, record: recordMatch ? Number(recordMatch[1]) : null, totalWords, + headerWords: node.structure === 'Bank' ? 2 : 1 }; +} + +async function appendHex(container, node, request, loadWords) { + const heading = element('h3', '', 'raw words'); + const hexElement = element('div', 'hex'); + const note = element('p', 'small'); + container.append(heading, hexElement, note); + let shown = 0; + const showMore = async () => { + const count = Math.min(shown ? HEX_WORDS_STEP : HEX_WORDS_FIRST, request.totalWords - shown); + const page = await loadWords({ offset: request.offset + shown * 4, count, record: request.record }); + if (!page) return; + renderHexWords(hexElement, page.words, request.offset + shown * 4, request.headerWords - shown); + shown += page.count; + note.replaceChildren(); + note.textContent = `${formatNumber(shown)} of ${formatNumber(request.totalWords)} words, byte order ${page.endian === '<' ? 'little' : 'big'}-endian; offsets ${request.record === null ? 'in the file' : `in record ${request.record}'s buffer`}. `; + if (shown < request.totalWords && page.count > 0) { + const button = element('button', 'more', `show ${Math.min(HEX_WORDS_STEP, request.totalWords - shown)} more`); + button.type = 'button'; + button.addEventListener('click', showMore); + note.appendChild(button); + } + }; + await showMore(); +} + +/** Four words per row, the row's byte offset first; the first `headerWords` words are marked as the header. */ +export function renderHexWords(container, words, baseOffset, headerWords) { + for (let word_i = 0; word_i < words.length; word_i += 4) { + container.appendChild(element('span', 'a', hex(baseOffset + word_i * 4, 8))); + for (let column_i = 0; column_i < 4; column_i++) { + const index = word_i + column_i; + container.appendChild(element('span', index < headerWords ? 'h' : '', index < words.length ? words[index] : '')); + } + } +} diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index 70811ca..3879923 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -98,6 +98,15 @@ def test_structure_walk_to_hits(client, served_root): assert hits["children"][1]["t_ns"] == (100 + n) * fs.HIT_TIME_TICK_NS and not hits["children"][1]["flag"] assert hits["children"][0]["word"] == f"{fs_hit_word(0, n, 10 + n):08x}" + # F32: the 0x41 payload-port map arrives decoded by the decoder (uint16 entries in memory order, zero entries kept). + info = client.get(f"/api/files/{file_id}/structure", params={"node": payloads["children"][0]["id"]}).json() + assert [child["role"] for child in info["children"]] == ["time_slice", "payload_map"] + assert info["children"][1]["entries"] == [{"port": 1, "module_id": 0, "module": "fADC250"}, {"port": 3, "module_id": 0, "module": "fADC250"}, + {"port": 5, "module_id": 0, "module": "fADC250"}] + sib = client.get(f"/api/files/{file_id}/structure", params={"node": banks["children"][0]["id"]}).json() + assert [child["role"] for child in sib["children"]] == ["time_slice", "aggregation_info"] and "entries" not in sib["children"][1] + assert record["node"]["compression"] == "none" + dcrb = client.get(f"/api/files/{file_id}/structure", params={"node": banks["children"][2]["id"]}).json() dcrb_ports = {child.get("port"): child for child in dcrb["children"] if child["role"] != "roc_stream_info"} assert dcrb_ports[4]["role"] == "payload_words" and dcrb_ports[4]["module"] == "DCRB" and not dcrb_ports[4]["has_children"] From e69287a6961958fa57b5b6fdc7795c1f409e8809 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 02:07:18 -0400 Subject: [PATCH 33/65] Add headless-browser smoke tests of the viewer with Playwright One test per tab plus the error path and the second-open path (F36): tile values equal /summary, charts hold paths with the time axis in seconds, the records table has one row per record, the tree expands to hit words whose hex view equals /words, the golden file shows "n/a" and empty plots, a non-EVIO file shows its error (F29), a second open replaces the first (F27). Skips without Playwright or Chromium. Playwright is a dev dependency; package-data now ships web/*.js and web/*.css beside index.html. Co-Authored-By: Claude Fable 5.1 --- pyproject.toml | 3 +- tests/web/test_viewer.py | 218 +++++++++++++++++++++++++++++++++++++++ uv.lock | 209 +++++++++++++++++++++++++++++++++++++ 3 files changed, 429 insertions(+), 1 deletion(-) create mode 100644 tests/web/test_viewer.py diff --git a/pyproject.toml b/pyproject.toml index c442da6..3f6bd15 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ web = [ dev = [ "fastapi>=0.128.8", "httpx>=0.28.1", + "playwright>=1.60.0", "pyarrow>=21.0.0", "pytest", "pyyaml>=6.0.3", @@ -56,4 +57,4 @@ markers = [ ] [tool.setuptools.package-data] -pyevio = ["web/*.html"] +pyevio = ["web/*.html", "web/*.js", "web/*.css"] diff --git a/tests/web/test_viewer.py b/tests/web/test_viewer.py new file mode 100644 index 0000000..8d4e550 --- /dev/null +++ b/tests/web/test_viewer.py @@ -0,0 +1,218 @@ +"""Headless-browser smoke tests of the viewer, one per tab (F36). + +The FastAPI app runs in a uvicorn thread on a free port; Playwright drives Chromium against it. Each test +asserts that the tab renders what the API returns: tile values equal /summary, charts hold a path, the records +table has one row per record, the tree expands to a payload leaf and the hex view equals /words. + +Skipped when Playwright or its Chromium is missing. Install both with +``uv add --dev playwright`` and ``uv run playwright install chromium``. + +Screenshots of each tab go to ``$PYEVIO_SCREENSHOT_DIR`` (default /data/pyevio/plots/phase4) when that folder +can be created; a machine without it loses nothing. +""" +import json +import os +import threading +import time +from pathlib import Path + +import pytest + +from conftest import TOKEN, open_and_wait + +playwright_api = pytest.importorskip("playwright.sync_api") +uvicorn = pytest.importorskip("uvicorn") + +SCREENSHOT_DIR = Path(os.environ.get("PYEVIO_SCREENSHOT_DIR", "/data/pyevio/plots/phase4")) +LOAD_TIMEOUT_MS = 30_000 + + +@pytest.fixture(scope="session") +def browser(): + with playwright_api.sync_playwright() as playwright: + try: + browser = playwright.chromium.launch() + except Exception as error: # the package is installed but Chromium is not: `playwright install chromium` + pytest.skip(f"Chromium not available for Playwright: {error}") + yield browser + browser.close() + + +@pytest.fixture +def server(app): + """The app on 127.0.0.1 with a free port; uvicorn skips signal handlers when it runs off the main thread.""" + instance = uvicorn.Server(uvicorn.Config(app, host="127.0.0.1", port=0, log_level="warning")) + thread = threading.Thread(target=instance.run, daemon=True) + thread.start() + deadline = time.monotonic() + 10 + while not instance.started: + assert time.monotonic() < deadline, "uvicorn did not start" + time.sleep(0.02) + port = instance.servers[0].sockets[0].getsockname()[1] + yield f"http://127.0.0.1:{port}" + instance.should_exit = True + thread.join(5) + + +@pytest.fixture +def page(browser, server): + """A page on the viewer with the token in the URL; console and page errors fail the test.""" + page = browser.new_page(viewport={"width": 1280, "height": 900}) + errors = [] + page.on("pageerror", lambda error: errors.append(f"pageerror: {error}")) + # Chromium logs every non-2xx response as "Failed to load resource"; a 400 the page displays is not a page error. + page.on("console", lambda message: errors.append(f"console.error: {message.text}") + if message.type == "error" and not message.text.startswith("Failed to load resource") else None) + page.goto(f"{server}/?token={TOKEN}") + page.wait_for_selector(".bitem", timeout=LOAD_TIMEOUT_MS) + yield page + page.close() + assert errors == [], errors + + +def open_in_viewer(page, relative_path): + """Open a file through the folder browser and wait until the tabs are enabled for it.""" + if page.get_attribute("#browser", "hidden") is not None: + page.click("#browseBtn") + while page.inner_text("#brPath") != "/": + shown = page.inner_text("#brPath") + page.click("#brUp") + page.wait_for_function("previous => document.querySelector('#brPath').textContent !== previous", arg=shown) + *folders, name = relative_path.split("/") + for folder in folders: + page.click(f".bitem.dir:has-text('{folder}')") + page.wait_for_function("folder => document.querySelector('#brPath').textContent.endsWith(folder)", arg=folder) + page.click(f".bitem.file:has-text('{name}')") + page.wait_for_selector("body[data-file-id]", timeout=LOAD_TIMEOUT_MS) + return page.get_attribute("body", "data-file-id") + + +def show_tab(page, name): + page.click(f".tab[data-tab={name}]") + page.wait_for_selector(f"#v-{name}:not([hidden])") + + +def screenshot(page, name): + try: + SCREENSHOT_DIR.mkdir(parents=True, exist_ok=True) + except OSError: + return + page.screenshot(path=str(SCREENSHOT_DIR / f"{name}.png"), full_page=True) + + +def test_overview_tiles_equal_summary(page, client, served_root): + file_id = open_in_viewer(page, served_root["synthetic"]) + api_file_id, _ = open_and_wait(client, served_root["synthetic"]) + assert file_id == api_file_id + summary = client.get(f"/api/files/{file_id}/summary").json() + show_tab(page, "overview") + tiles = {tile.get_attribute("data-key"): json.loads(tile.get_attribute("data-value")) for tile in page.query_selector_all(".tile")} + for key in ("n_records", "n_events", "n_frames", "n_hits", "hit_rate_hz", "hits_per_frame", "errors"): + assert tiles[key] == summary["totals"][key], key + assert page.inner_text(".tile[data-key=n_hits] .v") == str(served_root["expected_hits"]) + statuses = [row.get_attribute("data-status") for row in page.query_selector_all("#checks .ck")] + assert statuses == [check["status"] for check in summary["checks"]] + standout = page.inner_text("#standout") + assert "missing frames" in standout and "duplicate frames" in standout + assert "little-endian" in page.inner_text("#fileFacts") + screenshot(page, "overview") + + +def test_plots_render_charts_and_heatmap(page, served_root): + open_in_viewer(page, served_root["synthetic"]) + show_tab(page, "plots") + page.wait_for_selector("#chartChCharge path.series, #chartChCharge text", timeout=LOAD_TIMEOUT_MS) + for chart in ("chartHitsPerFrame", "chartRate", "chartRocRate", "chartRocCharge", "chartRocTime", "chartChRate", "chartChCharge", "chartChTime"): + assert page.query_selector(f"#{chart} path.series") is not None, chart + assert "time since the first frame (s)" in page.text_content("#chartRate") + live = page.query_selector_all("#chartOccupancy rect.cell") + dead = page.query_selector_all("#chartOccupancy rect.cell-dead") + assert len(live) + len(dead) == 2 * 5 and len(live) == 5 # ROCs 7 and 44 × ports 1, 3, 4, 5, 6; each ROC maps 2—3 ports + assert [option.inner_text() for option in page.query_selector_all("#selRoc option")] == ["7 (fADC250)", "44 (DCRB)"] + page.select_option("#selRoc", "44") + page.wait_for_function("() => document.querySelector('#rocInfo').textContent.includes('non-fADC')") + assert "60 non-fADC words" in page.inner_text("#rocInfo") + screenshot(page, "plots") + + +def test_records_table_rows_and_click(page, client, served_root): + file_id = open_in_viewer(page, served_root["synthetic"]) + open_and_wait(client, served_root["synthetic"]) + records = client.get(f"/api/files/{file_id}/records").json() + show_tab(page, "records") + page.wait_for_selector("#recordsTable tbody tr") + rows = page.query_selector_all("#recordsTable tbody tr") + assert len(rows) == records["total"] == 4 + assert [row.get_attribute("data-id") for row in rows] == ["r0", "r1", "r2", "t"] + assert "(trailer)" in rows[3].inner_text() and "set" in rows[3].inner_text() + screenshot(page, "records") + rows[1].click() + page.wait_for_selector("#v-structure:not([hidden]) .node[data-id='r1/e0']") + assert "record_number" in page.inner_text("#detail") + + +def test_structure_expands_to_hits_and_hex_equals_words(page, client, served_root): + file_id = open_in_viewer(page, served_root["synthetic"]) + open_and_wait(client, served_root["synthetic"]) + show_tab(page, "structure") + page.click(".node[data-id=r1] > .row") + page.click(".node[data-id='r1/e0'] > .row") + page.click(".node[data-role=roc_bank] > .row") + page.click(".node[data-role=payload_hits] > .row") + page.wait_for_selector(".node[data-id$='/h15']") + hits = page.query_selector_all(".node[data-role=payload_hits] .node") + assert len(hits) == 16 and "ch 15" in hits[15].inner_text() + payload_id = page.get_attribute(".node[data-role=payload_hits]", "data-id") + payload = client.get(f"/api/files/{file_id}/structure", params={"node": payload_id}).json()["node"] + words = client.get(f"/api/files/{file_id}/words", params={"offset": payload["offset"], "count": payload["size"] // 4, "record": 1}).json() + page.wait_for_selector("#detail .hex") + shown = [cell.inner_text() for cell in page.query_selector_all("#detail .hex span:not(.a)") if cell.inner_text()] + assert shown == words["words"] + assert len(page.query_selector_all("#detail .hex span.h")) == 2 # a bank's two header words are highlighted + page.click(".node[data-role=roc_stream_info] > .row") + page.click(".node[data-role=payload_map] > .row") + page.wait_for_selector("#detail table.t") + assert [row.inner_text().split("\t") for row in page.query_selector_all("#detail table.t tbody tr")] == [ + ["0", "1", "0", "fADC250"], ["1", "3", "0", "fADC250"], ["2", "5", "0", "fADC250"]] + screenshot(page, "structure") + + +def test_golden_file_shows_na_and_empty_plots(page, served_root): + if not served_root["golden_lz4"]: + pytest.skip("golden set absent") + open_in_viewer(page, served_root["golden_lz4"]) + show_tab(page, "overview") + assert page.inner_text(".tile[data-key=hit_rate_hz] .v") == "n/a" + assert page.inner_text(".tile[data-key=n_frames] .v") == "0" + show_tab(page, "plots") + page.wait_for_function("() => document.querySelector('#chartOccupancy').textContent.includes('no stream frames')") + assert page.query_selector("#chartRate path.series") is None + show_tab(page, "structure") + page.click(".node[data-id=r0] > .row") + page.click(".node[data-id='r0/e0'] > .row") + page.wait_for_selector("#detail .hex") + assert "compressed\tyes" in page.inner_text("#detail") + assert "in record 0's buffer" in page.inner_text("#detail") + + +def test_failed_open_is_reported(page, served_root): + """F29: a file the server cannot read shows its error; the tabs stay disabled.""" + (served_root["root"] / "runs" / "garbage.evio").write_bytes(b"\0" * 64) + page.click(".bitem.dir:has-text('runs')") + page.click(".bitem.file:has-text('garbage.evio')") + page.wait_for_selector("#stErr:not([hidden])") + assert "EVIO" in page.inner_text("#stErr") + assert page.inner_text("#stMsg") == "Open failed." + assert all(button.get_attribute("disabled") is not None for button in page.query_selector_all(".tab")) + + +def test_second_open_replaces_the_first(page, served_root): + """F27: the page shows the file opened last; the earlier file's content is gone.""" + first = open_in_viewer(page, served_root["synthetic"]) + if not served_root["golden"]: + pytest.skip("golden set absent") + second = open_in_viewer(page, served_root["golden"]) + assert second != first + show_tab(page, "overview") + assert page.inner_text(".tile[data-key=n_frames] .v") == "0" + assert page.inner_text("#stFile") == served_root["golden"] diff --git a/uv.lock b/uv.lock index ce4809e..59d2259 100644 --- a/uv.lock +++ b/uv.lock @@ -717,6 +717,154 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f6/10/d45b74135d5d642cb3a4fb0a957c1613ef93de4c8548671dfc3a5bf38299/fonttools-4.66.1-py3-none-any.whl", hash = "sha256:7234ae9e28db64273fbbfa72caebd0a97e3bdba6b05064114741b9539ef339d0", size = 1202222, upload-time = "2026-09-29T16:11:51.678Z" }, ] +[[package]] +name = "greenlet" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/f5/3e9eafb4030588337b2a2ae4df46212956854e9069c07b53aa3caabafd47/greenlet-3.2.5.tar.gz", hash = "sha256:c816554eb33e7ecf9ba4defcb1fd8c994e59be6b4110da15480b3e7447ea4286", size = 191501, upload-time = "2026-02-20T20:08:51.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/d6/b3db928fc329b1b19ba32ffe143d2305f3aaafc583f5e1074c74ec445189/greenlet-3.2.5-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:34cc7cf8ab6f4b85298b01e13e881265ee7b3c1daf6bc10a2944abc15d4f87c3", size = 275803, upload-time = "2026-02-20T20:06:42.541Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ff/ab0ad4ff3d9e1faa266de4f6c79763b33fccd9265995f2940192494cc0ec/greenlet-3.2.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c11fe0cfb0ce33132f0b5d27eeadd1954976a82e5e9b60909ec2c4b884a55382", size = 633556, upload-time = "2026-02-20T20:30:41.594Z" }, + { url = "https://files.pythonhosted.org/packages/da/dd/7b3ac77099a1671af8077ecedb12c9a1be1310e4c35bb69fd34c18ab6093/greenlet-3.2.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a145f4b1c4ed7a2c94561b7f18b4beec3d3fb6f0580db22f7ed1d544e0620b34", size = 644943, upload-time = "2026-02-20T20:37:23.084Z" }, + { url = "https://files.pythonhosted.org/packages/56/f0/bea7e7909ea9045b0c5055dad1ec9b81c82b761b4567e625f4f8349acfa1/greenlet-3.2.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:edbf4ab9a7057ee430a678fe2ef37ea5d69125d6bdc7feb42ed8d871c737e63b", size = 640849, upload-time = "2026-02-20T20:43:57.305Z" }, + { url = "https://files.pythonhosted.org/packages/0f/36/84630e9ff1dfc8b7690957c0f77834a84eabdbd9c4977c3a2d0cbd5325c2/greenlet-3.2.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1d01bdd67db3e5711e6246e451d7a0f75fae7bbf40adde129296a7f9aa7cc9", size = 639841, upload-time = "2026-02-20T20:07:17.473Z" }, + { url = "https://files.pythonhosted.org/packages/12/c4/6a2ee6c676dea7a05a3c3c1291fbc8ea44f26456b0accc891471293825af/greenlet-3.2.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd593db7ee1fa8a513a48a404f8cc4126998a48025e3f5cbbc68d51be0a6bf66", size = 588813, upload-time = "2026-02-20T20:07:56.171Z" }, + { url = "https://files.pythonhosted.org/packages/01/c0/75e75c2c993aa850292561ec80f5c263e3924e5843aa95a38716df69304c/greenlet-3.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ac8db07bced2c39b987bba13a3195f8157b0cfbce54488f86919321444a1cc3c", size = 1117377, upload-time = "2026-02-20T20:32:48.452Z" }, + { url = "https://files.pythonhosted.org/packages/ee/03/e38ebf9024a0873fe8f60f5b7bc36bfb3be5e13efe4d798240f2d1f0fb73/greenlet-3.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4544ab2cfd5912e42458b13516429e029f87d8bbcdc8d5506db772941ae12493", size = 1141246, upload-time = "2026-02-20T20:06:23.576Z" }, + { url = "https://files.pythonhosted.org/packages/d8/7b/c6e1192c795c0c12871e199237909a6bd35757d92c8472c7c019959b8637/greenlet-3.2.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:acabf468466d18017e2ae5fbf1a5a88b86b48983e550e1ae1437b69a83d9f4ac", size = 276916, upload-time = "2026-02-20T20:06:18.166Z" }, + { url = "https://files.pythonhosted.org/packages/3e/b6/9887b559f3e1952d23052ec352e9977e808a2246c7cb8282a38337221e88/greenlet-3.2.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:472841de62d60f2cafd60edd4fd4dd7253eb70e6eaf14b8990dcaf177f4af957", size = 636107, upload-time = "2026-02-20T20:30:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/8a/be/e3e48b63bbc27d660fa1d98aecb64906b90a12e686a436169c1330ef34b2/greenlet-3.2.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d951e7d628a6e8b68af469f0fe4f100ef64c4054abeb9cdafbfaa30a920c950", size = 648240, upload-time = "2026-02-20T20:37:24.608Z" }, + { url = "https://files.pythonhosted.org/packages/17/f6/2cbe999683f759f14f598234f04ae8ba6f22953a624b3a7a630003e6bfff/greenlet-3.2.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:87b791dd0e031a574249af717ac36f7031b18c35329561c1e0368201c18caf1f", size = 644170, upload-time = "2026-02-20T20:43:59.002Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ac/e731ed62576e91e533b36d0d97325adc2786674ab9e48ed8a6a24f4ef4e9/greenlet-3.2.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8317d732e2ae0935d9ed2af2ea876fa714cf6f3b887a31ca150b54329b0a6e9", size = 643313, upload-time = "2026-02-20T20:07:19.012Z" }, + { url = "https://files.pythonhosted.org/packages/70/64/99e5cdceb494bd4c1341c45b93f322601d2c8a5e1e4d1c7a2d24c5ed0570/greenlet-3.2.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce8aed6fdd5e07d3cbb988cbdc188266a4eb9e1a52db9ef5c6526e59962d3933", size = 591295, upload-time = "2026-02-20T20:07:57.286Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e9/968e11f388c2b8792d3b8b40a57984c894a3b4745dae3662dce722653bc5/greenlet-3.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:60c06b502d56d5451f60ca665691da29f79ed95e247bcf8ce5024d7bbe64acb9", size = 1120277, upload-time = "2026-02-20T20:32:50.103Z" }, + { url = "https://files.pythonhosted.org/packages/cb/2c/b5f2c4c68d753dce08218dc5a6b21d82238fdfdc44309032f6fe24d285e6/greenlet-3.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d2a78e6f1bf3f1672df91e212a2f8314e1e7c922f065d14cbad4bc815059467", size = 1145746, upload-time = "2026-02-20T20:06:26.296Z" }, + { url = "https://files.pythonhosted.org/packages/ad/32/022b21523eee713e7550162d5ca6aed23f913cc2c6232b154b9fd9badc07/greenlet-3.2.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:2acb30e77042f747ca81f0a10cc153296567e92e666c5e1b117f4595afd43352", size = 278412, upload-time = "2026-02-20T20:03:15.02Z" }, + { url = "https://files.pythonhosted.org/packages/90/c5/8a3b0ed3cc34d8b988a44349437dfa0941f9c23ac108175f7b4ccea97111/greenlet-3.2.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:393c03c26c865f17f31d8db2f09603fadbe0581ad85a5d5908b131549fc38217", size = 644616, upload-time = "2026-02-20T20:30:44.823Z" }, + { url = "https://files.pythonhosted.org/packages/b1/2c/2627bea183554695016af6cae93d7474fa90f61e5a6601a84ae7841cb720/greenlet-3.2.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:04e6a202cde56043fd355fefd1552c4caa5c087528121871d950eb4f1b51fa99", size = 658813, upload-time = "2026-02-20T20:37:26.255Z" }, + { url = "https://files.pythonhosted.org/packages/44/c6/a80fc96f7cca7962dd972875d12c52dfabc94cb02bfeb19f3e7e169fca44/greenlet-3.2.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d5583b2ffa677578a384337ee13125bdf9a427485d689014b39d638a4f3d8dbe", size = 653512, upload-time = "2026-02-20T20:44:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/2f/1b/75a5aeff487a26ba427a3837da6372f1fe6f2a9c6b2898e28ac99d491c11/greenlet-3.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:45fcea7b697b91290b36eafc12fff479aca6ba6500d98ef6f34d5634c7119cbe", size = 655426, upload-time = "2026-02-20T20:07:20.124Z" }, + { url = "https://files.pythonhosted.org/packages/53/91/9b5dfb4f3c88f8247c7a8f4c3759f0740bfa6bb0c59a9f6bf938e913df56/greenlet-3.2.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f96e2bb8a56b7e1aed1dbfbbe0050cb2ecca99c7c91892fd1771e3afab63b3e3", size = 611138, upload-time = "2026-02-20T20:07:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8d/d0b086410512d9859c84e9242a9b341de9f5566011ddf3a3f6886b842b61/greenlet-3.2.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d7456e67b0be653dfe643bb37d9566cd30939c80f858e2ce6d2d54951f75b14a", size = 1126896, upload-time = "2026-02-20T20:32:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/ef/37/59fe12fe456e84ced6ba71781e28cde52a3124d1dd2077bc1727021f49fd/greenlet-3.2.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5ceb29d1f74c7280befbbfa27b9bf91ba4a07a1a00b2179a5d953fc219b16c42", size = 1154779, upload-time = "2026-02-20T20:06:27.583Z" }, + { url = "https://files.pythonhosted.org/packages/dd/95/d5d332fb73affaf7a1fbe80e49c2c7eae4f17c645af24a3b3fa25736d6f0/greenlet-3.2.5-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:f2cc88b50b9006b324c1b9f5f3552f9d4564c78af57cdfb4c7baf4f0aa089146", size = 277166, upload-time = "2026-02-20T20:03:57.077Z" }, + { url = "https://files.pythonhosted.org/packages/6c/77/89458e20db5a4f1c64f9a0191561227e76d809941ca2d7529006d17d3450/greenlet-3.2.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e66872daffa360b2537170b73ad530f14fa31785b1bc78080125d92edf0a6def", size = 644674, upload-time = "2026-02-20T20:30:46.118Z" }, + { url = "https://files.pythonhosted.org/packages/90/f8/9962175d2f2eaa629a7fd7545abacc8c4deda3baa4e52c1526d2eb5f5546/greenlet-3.2.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c5445ddb7b586d870dad32ca9fc47c287d6022a528d194efdb8912093c5303ad", size = 658834, upload-time = "2026-02-20T20:37:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/81/71/52c21a7106ce5218aa6fa59ec32825b2655f875a09b69f68bd3e5d01feb3/greenlet-3.2.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:fd904626b8779810062cb455514594776e3cba3b8c0ba4939894df9f7b384971", size = 653091, upload-time = "2026-02-20T20:44:01.927Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d7/826d0e080f0a7ad5ec47c8d143bbd3ca0887657bb806595fe2434d12938a/greenlet-3.2.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:752c896a8c976548faafe8a306d446c6a4c68d4fd24699b84d4393bd9ac69a8e", size = 655760, upload-time = "2026-02-20T20:07:21.551Z" }, + { url = "https://files.pythonhosted.org/packages/41/cc/33bd4c2f816be8c8e16f71740c4130adf3a66a3dd2ba29de72b9d8dd1096/greenlet-3.2.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499b809e7738c8af0ff9ac9d5dd821cb93f4293065a9237543217f0b252f950a", size = 614132, upload-time = "2026-02-20T20:08:00.351Z" }, + { url = "https://files.pythonhosted.org/packages/48/79/f3891dcfc59097474a53cc3c624f2f2465e431ab493bda043b8c873fb20a/greenlet-3.2.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2c7429f6e9cea7cbf2637d86d3db12806ba970f7f972fcab39d6b54b4457cbaf", size = 1125286, upload-time = "2026-02-20T20:32:54.032Z" }, + { url = "https://files.pythonhosted.org/packages/ca/47/212b47e6d2d7a04c4083db1af2fdd291bc8fe99b7e3571bfa560b65fc361/greenlet-3.2.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a5e4b25e855800fba17713020c5c33e0a4b7a1829027719344f0c7c8870092a2", size = 1152825, upload-time = "2026-02-20T20:06:29Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9d/4e9b941be05f8da7ba804c6413761d2c11cca05994cbf0a015bd729419f0/greenlet-3.2.5-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:7123b29e6bad2f3f89681be4ef316480fca798ebe8d22fbaced9cc3775007a4f", size = 277627, upload-time = "2026-02-20T20:06:04.798Z" }, + { url = "https://files.pythonhosted.org/packages/23/cb/a73625c9a35138330014ecf3740c0d62e0c2b5e7279bb7f2586b1b199fac/greenlet-3.2.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6e8fe0c72603201a86b2e038daf9b6c8570715f8779566419cff543b6ace88de", size = 690001, upload-time = "2026-02-20T20:30:47.754Z" }, + { url = "https://files.pythonhosted.org/packages/83/49/6d1531109507bce7dfb23acf57a87013627ed3ac058851176e443a6a9134/greenlet-3.2.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:050703a60603db0e817364d69e048c70af299040c13a7e67792b9e62d4571196", size = 702953, upload-time = "2026-02-20T20:37:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/90/ac/6d8fff3b273fc60ad4b46f8411fe91c1e4cca064dfff68d096bc982fa6d0/greenlet-3.2.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:04633da773ae432649a3f092a8e4add390732cc9e1ab52c8ff2c91b8dc86f202", size = 698353, upload-time = "2026-02-20T20:44:03.547Z" }, + { url = "https://files.pythonhosted.org/packages/f7/38/f958ee90fab93529b30cc1e4a59b27c1112b640570043a84af84da3b3b98/greenlet-3.2.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6712bfd520530eb67331813f7112d3ee18e206f48b3d026d8a96cd2d2ad20251", size = 698995, upload-time = "2026-02-20T20:07:22.663Z" }, + { url = "https://files.pythonhosted.org/packages/51/c1/a603906e79716d61f08afedaf8aed62017661457aef233d62d6e57ecd511/greenlet-3.2.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bc06a78fa3ffbe2a75f1ebc7e040eacf6fa1050a9432953ab111fbbbf0d03c1", size = 661175, upload-time = "2026-02-20T20:08:01.477Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8f/f880ff4587d236b4d06893fb34da6b299aa0d00f6c8259673f80e1b6d63c/greenlet-3.2.5-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:dbe0e81e24982bb45907ca20152b31c2e3300ca352fdc4acbd4956e4a2cbc195", size = 274946, upload-time = "2026-02-20T20:05:21.979Z" }, + { url = "https://files.pythonhosted.org/packages/3c/50/f6c78b8420187fdfe97fcf2e6d1dd243a7742d272c32fd4d4b1095474b37/greenlet-3.2.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:15871afc0d78ec87d15d8412b337f287fc69f8f669346e391585824970931c48", size = 631781, upload-time = "2026-02-20T20:30:48.845Z" }, + { url = "https://files.pythonhosted.org/packages/26/d6/3277f92e1961e6e9f41d9f173ea74b5c1f7065072637669f761626f26cc0/greenlet-3.2.5-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5bf0d7d62e356ef2e87e55e46a4e930ac165f9372760fb983b5631bb479e9d3a", size = 643740, upload-time = "2026-02-20T20:37:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/f8/8a/c37b87659378759f158dbe03eaeb7ed002a8968f1c649b2972f5323f99b2/greenlet-3.2.5-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:e3f03ddd7142c758ab41c18089a1407b9959bd276b4e6dfbd8fd06403832c87a", size = 639098, upload-time = "2026-02-20T20:44:07.287Z" }, + { url = "https://files.pythonhosted.org/packages/2a/6a/4f79d2e7b5ef3723fc5ffea0d6cb22627e5f95e0f19c973fa12bf1cf7891/greenlet-3.2.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6dff6433742073e5b6ad40953a78a0e8cddcb3f6869e5ea635d29a810ca5e7d0", size = 638382, upload-time = "2026-02-20T20:07:23.883Z" }, + { url = "https://files.pythonhosted.org/packages/4d/59/7aadf33f23c65dbf4db27e7f5b60c414797a61e954352ae4a86c5c8b0553/greenlet-3.2.5-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdd67619cefe1cc9fcab57c8853d2bb36eca9f166c0058cc0d428d471f7c785c", size = 587516, upload-time = "2026-02-20T20:08:02.841Z" }, + { url = "https://files.pythonhosted.org/packages/1d/46/b3422959f830de28a4eea447414e6bd7b980d755892f66ab52ad805da1c4/greenlet-3.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3828b309dfb1f117fe54867512a8265d8d4f00f8de6908eef9b885f4d8789062", size = 1115818, upload-time = "2026-02-20T20:32:55.786Z" }, + { url = "https://files.pythonhosted.org/packages/54/4a/3d1c9728f093415637cf3696909fa10852632e33e68238fb8ca60eb90de1/greenlet-3.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:67725ae9fea62c95cf1aa230f1b8d4dc38f7cd14f6103d1df8a5a95657eb8e54", size = 1140219, upload-time = "2026-02-20T20:06:30.334Z" }, +] + +[[package]] +name = "greenlet" +version = "3.5.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/6e/0091f175ccd02b02bc8811bbcbcc6ac2e980be116e3b2f7a736ca322bf84/greenlet-3.5.6.tar.gz", hash = "sha256:8e67c43bdfc88d5fee6db0d3e40175b362fc95fb85f0412d233b9b203c53a575", size = 207653, upload-time = "2026-09-14T15:42:51.806Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/4f/4af258e1ce388eb64be82d6466b7d0b3bc3eede154e14c3360a76a759b71/greenlet-3.5.6-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:95e7c44d072db623a1aab04ce488cf9533294a77ed9d072cd503a3596f4106ac", size = 292967, upload-time = "2026-09-14T14:26:34.475Z" }, + { url = "https://files.pythonhosted.org/packages/1d/05/dc0d54e90af2f192724936799cee990687792ff54a4638d3ae0e0a0145c0/greenlet-3.5.6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7d501d5eb5d4f67207df364752ad697465b834268744be7581c18d81d35d41d", size = 609284, upload-time = "2026-09-14T15:11:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/c1/51/826b4fe7bc39c3f910c95e889a981c827f72a611fc035f31816a256cf043/greenlet-3.5.6-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a364c1ea75dc51b83a17f52fe0c79cf8bc4ddf740403bebd4581c7666eea017d", size = 622648, upload-time = "2026-09-14T15:20:39.198Z" }, + { url = "https://files.pythonhosted.org/packages/55/3b/f2d36fc38934588dff6d6ec9288934c9611abac7a79c866c2002fc707698/greenlet-3.5.6-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5599b380c1f28efeb724e81569eac80cd92f99a85bd9775456caaf3225d40b11", size = 629557, upload-time = "2026-09-14T15:25:03.036Z" }, + { url = "https://files.pythonhosted.org/packages/94/5c/092682ae7ca1aadd44aa36b0bc35c48c9ed55f9ffebb5794980b1e2ae74b/greenlet-3.5.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eed88b64a5e5da72d6a71cdc5aaeefaa5ced9b748f8d19f89800b339961dad39", size = 622813, upload-time = "2026-09-14T14:35:54.845Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f6/4167f0e44e795840cbc219b2e5d8f576492192cd9e3e17e827db20287daa/greenlet-3.5.6-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:5bbda3c70dd35d60671bc33b01916802707a052130d9e50cdb871d34594d35cb", size = 425482, upload-time = "2026-09-14T15:28:34.144Z" }, + { url = "https://files.pythonhosted.org/packages/07/59/9c6b723a559b53bee0980a5dc57577d434891dd454f0fe54ed6e22d4e4ce/greenlet-3.5.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:874cea8bb1ec1ddccbacbd027856f6bf496f6bc18aba97a918c20e067edab236", size = 1585817, upload-time = "2026-09-14T15:10:03.922Z" }, + { url = "https://files.pythonhosted.org/packages/de/d4/2bceaa305ff0ecf99511480da8f0a866eb2469a68da8715008a0d3e8f65f/greenlet-3.5.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:128813fc29f2336a21b4d06eedd5e16bcc7ea46f59e9ff1cb30ea70e48195d88", size = 1650177, upload-time = "2026-09-14T14:35:46.736Z" }, + { url = "https://files.pythonhosted.org/packages/7a/33/c57855a6abada0c7bfb9c6c0f33df1fbed8e5224708478dbcdff6c5db490/greenlet-3.5.6-cp310-cp310-win_amd64.whl", hash = "sha256:dad3d233d441a022c1f7155f0fb9d5aff7b97c1ea8c7dfa02cce586b16ab2d0b", size = 322896, upload-time = "2026-09-14T14:24:52.308Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d7/41511ee2696f14be4200b524d9553dc4295e2bdeb20aa8962c3cb25e71c6/greenlet-3.5.6-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:a6a4b98a9132e0f45c9fc245a63894cfd8c45fb7a0d6bffc5eab3ec327cf7324", size = 294075, upload-time = "2026-09-14T14:25:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7b/b509624970909294cd064ff7346148ca9941c21bec9026d7873dd254e9fa/greenlet-3.5.6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45bfd2b51e38aaa5f9849f114d9c7c1d75f69187c849b3549cd64c465283abfa", size = 613429, upload-time = "2026-09-14T15:12:00.454Z" }, + { url = "https://files.pythonhosted.org/packages/2b/5c/d2eb503067f9ba20875ef8c87681f29a64f53bbbbe4059a5d7c53179d442/greenlet-3.5.6-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3c6dede9133e1da41d561bc3fb14e92b47e2ce39ae60edefaad145658ea7c5e2", size = 625405, upload-time = "2026-09-14T15:20:41.053Z" }, + { url = "https://files.pythonhosted.org/packages/1b/24/9b071d11c8bb9f5f38cccacc38fcc234d91997a4c395cc2bf43ecae89642/greenlet-3.5.6-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4fb8e59f68845d56c23c031dcd79c329f345e4a9d2ffac91c3d1ab366bdc457b", size = 633270, upload-time = "2026-09-14T15:25:04.864Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d3/63d4477ce31dff2fd802a9a20240f6606aac85977e0fb18443aae33de3f6/greenlet-3.5.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c20ea32a73d17b9b60e3371240e17b0068120c98a5ec01a224a7dd8c89733ba", size = 624428, upload-time = "2026-09-14T14:35:56.895Z" }, + { url = "https://files.pythonhosted.org/packages/88/17/ac11883ecc9da19c681c8b763ee39e6f7dca2aa81874eb11a075d3cbeb00/greenlet-3.5.6-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:d701eab36200c36224833d07dbdb709adb7fd4253429548ddb5e547b8ed40586", size = 428068, upload-time = "2026-09-14T15:28:35.872Z" }, + { url = "https://files.pythonhosted.org/packages/ad/aa/9cde4e00688eaa2a03b91d12e4681439a87e6aad860399e0847af6a014ca/greenlet-3.5.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5a0b2791239c99992a86c1b635b787fe2a877d9eaaa26f8891ce943832b585ae", size = 1588385, upload-time = "2026-09-14T15:10:05.386Z" }, + { url = "https://files.pythonhosted.org/packages/5c/01/24632b5ec186b64e21e07a8f53ce5e15a7e9cb33eddee99a5fe16379afa5/greenlet-3.5.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:188bf333769b7145e2b0b4a7f09615ec550ed44d3a2a8395fb7b36f0e9901e13", size = 1653119, upload-time = "2026-09-14T14:35:48.275Z" }, + { url = "https://files.pythonhosted.org/packages/ce/6c/019d2ef898f4b9ac845167f1c6f73229e9a4e2439362a5e2ce50205a19b0/greenlet-3.5.6-cp311-cp311-win_amd64.whl", hash = "sha256:a6b4ff33f7e011bbaa148238d131c4fd4f8afbab3c104ddfbdb2b12b74ff7016", size = 323317, upload-time = "2026-09-14T14:22:38.836Z" }, + { url = "https://files.pythonhosted.org/packages/5a/7a/439df999455e3bdf02b1c68f3848d4020385ef0a01f89f706b07bf148a65/greenlet-3.5.6-cp311-cp311-win_arm64.whl", hash = "sha256:59deccd347735a7774223b05a93773fddbb298aba3cea21be4337fb4752dbe32", size = 307739, upload-time = "2026-09-14T14:23:40.469Z" }, + { url = "https://files.pythonhosted.org/packages/72/18/3fc6d951466ae9a2a688edcddde3b2e388da0a8244e0caf7117bbeb0eb95/greenlet-3.5.6-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:a5876d0a60355af98d535c47f6cd6eb0f8a432396dab26845d380b92f8412422", size = 295668, upload-time = "2026-09-14T14:22:33.241Z" }, + { url = "https://files.pythonhosted.org/packages/27/89/366d2af5061eeefa5012f510d95a99c8620dcc457609838db4d538820318/greenlet-3.5.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e85880b538e59a59f55117b81f208a6660ad5ac328aad9305f812d9b8bc67a0f", size = 611700, upload-time = "2026-09-14T15:12:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/54/1c/07f133f865fd58ae593dd2bbec3144acaee9b04ffe2eb48c6e121747ceef/greenlet-3.5.6-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f0ba7c2a329d650628f4c8572fd1db29f0a59dd70a3e3e0710dcf18a35cce9d8", size = 624223, upload-time = "2026-09-14T15:20:42.459Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f2/844dc823ff2752ad049caa6b59d57e4572f9c445934b02d3518f4c67197c/greenlet-3.5.6-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ee7d9da3bf493909cf811a3f038840cb34fab5ae2956b8a263919f6e289ab188", size = 629529, upload-time = "2026-09-14T15:25:06.354Z" }, + { url = "https://files.pythonhosted.org/packages/66/6a/1594f3869c57c149abdb380492529e04d4c0229b5e4d79572c5bd0aaa673/greenlet-3.5.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:975736b002ed080d124cf81a79cb7e05cb26d6b3f5c7a7b651c0fcce70353aa1", size = 621404, upload-time = "2026-09-14T14:35:59.027Z" }, + { url = "https://files.pythonhosted.org/packages/c0/42/b1f8dbc89a53b9e77859fc1ad1627d106fc361daa3ea4bdf43a91ebb4338/greenlet-3.5.6-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:71890d5247020c25c21a6b65202782bfc281d4e6e244842419d30e3492bb6dcc", size = 432385, upload-time = "2026-09-14T15:28:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f5/33e5c9e48178b9259fd000f8f45caa4a65036f65d3d0c06a602f570f025d/greenlet-3.5.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0616b8f878098c5681fd8f0dc92d887551717402342a70f0abcbfea5f5ad8a44", size = 1584998, upload-time = "2026-09-14T15:10:06.653Z" }, + { url = "https://files.pythonhosted.org/packages/ef/31/9b4e140bc24d0ad7927ebd651f5608b0acc2334d061748c3b6ad19085cfa/greenlet-3.5.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb4596a6a4e5d47121a33ff20533a81e60f302d9e67b69909a8bc21a43f0a7", size = 1647568, upload-time = "2026-09-14T14:35:49.787Z" }, + { url = "https://files.pythonhosted.org/packages/c3/71/d79f1791f824f8ff15c2978746640467ae932a2365e0201069f7f272395f/greenlet-3.5.6-cp312-cp312-win_amd64.whl", hash = "sha256:7ac4abb3877c43af320392c664774eef6fa2cc063c79a55fc02d844a3cbe7395", size = 324203, upload-time = "2026-09-14T14:22:54.504Z" }, + { url = "https://files.pythonhosted.org/packages/63/af/42aca4d56e8cb321912203069d8d34734cb288222f10ad2ae102718cc577/greenlet-3.5.6-cp312-cp312-win_arm64.whl", hash = "sha256:301102a49120b095e72a7838792b41233975fc1c155daec6d98f81c00c9280e0", size = 308310, upload-time = "2026-09-14T14:24:03.008Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a1/e720a38852366c589e1a46cf570b886507ad2cf591050c203365638baab0/greenlet-3.5.6-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:f96f0e30b5a95c7631b12bfe214cbc90ec8fe8cfa36920596c10514a65743519", size = 294627, upload-time = "2026-09-14T14:24:40.102Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c3/58187858df41354a11e6a55b421e7af9059798abdab3a384cc51b8567c38/greenlet-3.5.6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c75116c9de79949de23006e2d9b35ee82874c594fcf5c0311b439acaa14b8441", size = 614356, upload-time = "2026-09-14T15:12:03.399Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b9/3a7e67d5f05c9760b1ad411fa52264bd69cc08e22a2ebfb4018b90628ced/greenlet-3.5.6-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cad5782f93f7f738b62c6527b6f32a60694d924029f299a8b524758cfa53d815", size = 626756, upload-time = "2026-09-14T15:20:44.269Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7c/40400455f5b5a65bb83e94fde66d1be9e5ec518638113f8083ace746c309/greenlet-3.5.6-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a93ee7c6e8fd0f8a83525a51bd777be57ee17787e91d805bd8d6faf9dcada18e", size = 632632, upload-time = "2026-09-14T15:25:07.813Z" }, + { url = "https://files.pythonhosted.org/packages/85/cb/ab0c123c514ed4e94c0dc9ee2e86362633e6b998cfc05de7fc9ac2eb9690/greenlet-3.5.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f98e8215e172f567ce80eeaed9107fb4d32b6c44f26983d9b8334658136a205a", size = 623779, upload-time = "2026-09-14T14:36:01.104Z" }, + { url = "https://files.pythonhosted.org/packages/f9/67/1f35cff30a6c51c3f23b63d4afcc7313ab4f97490ba3676fa78178984b27/greenlet-3.5.6-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:7f731ebac68ea06d628658295cb2d217b10186329fcf9a3b6a149045059bf92e", size = 434933, upload-time = "2026-09-14T15:28:38.858Z" }, + { url = "https://files.pythonhosted.org/packages/a5/26/fda8a5a06e7073333ccb038133c5893b9e0c4fe29d5992a17e83c241bc6e/greenlet-3.5.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df19e2d0b1620039af5102563fbd96e8938c7f5c3f5828528d641d9fc585525e", size = 1584930, upload-time = "2026-09-14T15:10:08.234Z" }, + { url = "https://files.pythonhosted.org/packages/2f/37/50f8813163148d6234e08b23dcad6a9e37f01d148c8ec976e4c44ea2d918/greenlet-3.5.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:06c0e933290fba8ffe53ead4ae1b8044b0e9754b75cebf381aa2bc3e50d82fac", size = 1647590, upload-time = "2026-09-14T14:35:51.173Z" }, + { url = "https://files.pythonhosted.org/packages/86/da/b7669b09586365654083a62bd0724cf06cb74bd5085a15cdd161271f992f/greenlet-3.5.6-cp313-cp313-win_amd64.whl", hash = "sha256:5b602b4201b965a8354d74e232364a66ff243dd142e350d035f46169bb36e13d", size = 324086, upload-time = "2026-09-14T14:23:48.428Z" }, + { url = "https://files.pythonhosted.org/packages/e5/5d/c9663cfe84a2a9e0aa96f066f5b0594c227ea4c647511e087e2e11d4ac0a/greenlet-3.5.6-cp313-cp313-win_arm64.whl", hash = "sha256:876077e7ebb8c84ed068e2b23d4c62ebb010d60df84b9591af1be2f39010ffb2", size = 308211, upload-time = "2026-09-14T14:28:01.634Z" }, + { url = "https://files.pythonhosted.org/packages/66/c0/d254544ae2b8bdd311aef000fafc02828c2771b17d994b3075620ea7cc6e/greenlet-3.5.6-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8cddea1b8339451c2fb3388e138347b6126744f33b611bdb55b7357361cfef46", size = 295221, upload-time = "2026-09-14T14:25:11.583Z" }, + { url = "https://files.pythonhosted.org/packages/18/18/eb54be16b9cc3971e09ca5b73334e1b8c804a4630d9addaaf218a4fe300f/greenlet-3.5.6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c59acfa8eb73a1e0d484392dc002bdf001fd4ce73394e0132df3d1ab6093d7cb", size = 660992, upload-time = "2026-09-14T15:12:04.876Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b4/e193efe65671dcf294bc51fcc59efb52d154adf8612c4ea016da0d2c486c/greenlet-3.5.6-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3b4a01c6da07ef9f80d4fe8933b994bc99747bcea3eab0330a9c34d3c12655b", size = 673428, upload-time = "2026-09-14T15:20:45.756Z" }, + { url = "https://files.pythonhosted.org/packages/fd/21/631bb45fafde1dca782152377c0676d182ec924820064047f533a3627b28/greenlet-3.5.6-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dd0b83bed3405b586a3133629f1d1a5bc7bfd64822a3b7ab342bdc68e6dbc61b", size = 677688, upload-time = "2026-09-14T15:25:09.279Z" }, + { url = "https://files.pythonhosted.org/packages/45/ac/28fa7a9e50f2859466214c4ac584d776db52c1604ad4dd158960a5af2a1f/greenlet-3.5.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a09d59bef1db94f384b5bcc2d523694d338f3df6b757aeeaf7baca5d0c0be88", size = 670773, upload-time = "2026-09-14T14:36:02.577Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/2b0a73e68e1e18e30b601d0d183cfdfc2beca4de5a6843c630f0fc9fb90c/greenlet-3.5.6-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:fdacf26402389bdd89857ad3c045a26fe8f3314f9a8b28226f82f88463a65b77", size = 480475, upload-time = "2026-09-14T15:28:40.741Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cd/fb7d6cdd86ff3427c1494854f0e35437eba05142be91f530f6da75e09e19/greenlet-3.5.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8b7c73d1cef3d9ae963e9ff03f6222df43efbb9054ffd2f1969c935b7fc84c02", size = 1631900, upload-time = "2026-09-14T15:10:09.745Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/143bdbb20a516628cb15074ae52ed17d850b450292609c7a6fccac6dbece/greenlet-3.5.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8b27df301f56e3b3d2298095c8f7d6b68f2521f6b1693e901fa039bdbae34424", size = 1693740, upload-time = "2026-09-14T14:35:52.959Z" }, + { url = "https://files.pythonhosted.org/packages/c9/9e/019642432e6ae283301df1361227d47610709d2dc69a38f95edef266d713/greenlet-3.5.6-cp314-cp314-win_amd64.whl", hash = "sha256:f8f0bd690e1a41294ac87905e8121c81a3761ec2583c768f13467428606c8c7a", size = 327473, upload-time = "2026-09-14T14:28:12.948Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7f/8aafc7bf70c948786dba7221d0dc0838e5329bebc6d434ef2208b4f0e760/greenlet-3.5.6-cp314-cp314-win_arm64.whl", hash = "sha256:8cda13494d86a4f12429641117cb6ac4bbbc9c30a33f711f7d3a2e5fbe4b0b7e", size = 311095, upload-time = "2026-09-14T14:28:00.7Z" }, + { url = "https://files.pythonhosted.org/packages/14/7e/7a205688a5b3074933b18a906608d46d106e9a79d776bdab5a4abf4b4feb/greenlet-3.5.6-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:97c5a53e8c1754df58e73f047a99e287d4da1bdfe64b0072fb25c87000897951", size = 305352, upload-time = "2026-09-14T14:21:31.962Z" }, + { url = "https://files.pythonhosted.org/packages/78/cb/9c4a57a9d9dd0256e20b8f7f4f06554c2c92badebf0ab73ce344321b78b9/greenlet-3.5.6-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fea4427d1ffdb3b523d7daa6712038428a4c16c450b9777bdd1221cfee0eab49", size = 672671, upload-time = "2026-09-14T15:12:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/97/52/c6729681ebbd298f4decd28746815acc8a0b0a0fde21d2df33776fd4d042/greenlet-3.5.6-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73a29b5ba642e35433166a03a3e02935e7238c4b3467fbd77523b99edea23e5b", size = 679489, upload-time = "2026-09-14T15:20:47.291Z" }, + { url = "https://files.pythonhosted.org/packages/71/76/3c11c21e0716b1f1dc7c1a4b3d690abb1d3b448c69a9d32049fecb64010a/greenlet-3.5.6-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:61a61b4a95a4f97922c3a6f5606d3e360851584bd47e500a5161373c53810e3d", size = 681303, upload-time = "2026-09-14T15:25:11.088Z" }, + { url = "https://files.pythonhosted.org/packages/58/c5/2b6c721ba8b8963da42d5a0f57f25b8aaeb1fe9bdd156875e57f3be648a2/greenlet-3.5.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:460e70b033aba8ed47e2ac9b5d0d2157b05a34fbfa30a241400aef4118902cdc", size = 676608, upload-time = "2026-09-14T14:36:03.959Z" }, + { url = "https://files.pythonhosted.org/packages/3f/26/3ae402202452cd5941bbbd483e5a74297e2397e7aa3182c2a5e3ab7d5666/greenlet-3.5.6-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:fe3170a69fe039b18ad18171e66faa9a75f6fe9d78f968fd9b54e09fbd714d81", size = 510112, upload-time = "2026-09-14T15:28:42.112Z" }, + { url = "https://files.pythonhosted.org/packages/b2/04/0d018e0d05bcdde19a0fcb907834155f1fc853a9bedd3f3f5e6acadcae19/greenlet-3.5.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca80a49b53ed1d22f7282da7255f7bb2fd1935fd0f623d8613fda38745f18961", size = 1641479, upload-time = "2026-09-14T15:10:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/f02ef9073919158f6403fe3701d4ed4403d646720e7201dfc6e9d264bac3/greenlet-3.5.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:916f92f2a8db10508f739d0b5e00b83defe5d1115a997c54532a6d7cf8c95404", size = 1698758, upload-time = "2026-09-14T14:35:54.336Z" }, + { url = "https://files.pythonhosted.org/packages/08/a5/1f48fe647473a2dcccfd1839b2ff2c78eb57009be776b4da071e901c9bff/greenlet-3.5.6-cp314-cp314t-win_amd64.whl", hash = "sha256:886bcf1870af74c32bc310fd00a6b803445e17e51b7d5a107c7b35c0f362cc16", size = 331574, upload-time = "2026-09-14T14:27:18.451Z" }, + { url = "https://files.pythonhosted.org/packages/cd/72/3882855a75838faeb54a58aeef4fd77d20b2a86d4bad570c70d41b565dcf/greenlet-3.5.6-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:3ac3494c381dab876cad7d0b22f3a722f3e0c8deb3a65b9e7f35ad7f58b8fcb3", size = 295926, upload-time = "2026-09-14T14:27:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/10/1f/be4d957d8a9b90bcbe8db206548a42134d96222d43e5ed3fc4708fb6e24b/greenlet-3.5.6-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:602024dae6d77e161f4b89491b62ca1d4f19949d79d47b2db057e476d21179d6", size = 666910, upload-time = "2026-09-14T15:12:07.901Z" }, + { url = "https://files.pythonhosted.org/packages/a1/af/60d62571a7d6de961e4ce7625d6c2faf359345659fc782d2cdf517c34577/greenlet-3.5.6-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8e63209c3e1e828ee6a457529b4a6d8b05d050fe0ae03a7ae49e967c5d312e0", size = 677415, upload-time = "2026-09-14T15:20:48.817Z" }, + { url = "https://files.pythonhosted.org/packages/f5/41/b3114c97c10e796010f00a30f51c81470072bca4b53e396ccca87484fcf7/greenlet-3.5.6-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9133d68624b1f2e89ec2f554d56aea8a5b0d7168cd9320200ba58d4d794845a4", size = 681337, upload-time = "2026-09-14T15:25:12.812Z" }, + { url = "https://files.pythonhosted.org/packages/fb/16/ac9e547b611539aaed1870eb1d6ddc57abdd5924b3a99bb9b5f0b44176b8/greenlet-3.5.6-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccadce0130fd813ec86ebfe969a6c58b42acc1d0fe55a47525375b740e07b605", size = 675927, upload-time = "2026-09-14T14:36:05.34Z" }, + { url = "https://files.pythonhosted.org/packages/48/1b/d41861c2fa00968e39e467a495ca8db9ce9b6310a5d9b57561b3d0dc48fa/greenlet-3.5.6-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:5adcbbfe78bdc242c71740a02e0991cc1b2f34d33c8bb15ca45eee8fd1140942", size = 487339, upload-time = "2026-09-14T15:28:43.497Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b1/b7ba08d6431121741f1d30be0d5d292e76873325179a63586cd9217b62f6/greenlet-3.5.6-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9297fb9c39b9a2c039dbcd306c410bd6906b95244dec3bba4318d36c718c164c", size = 1637236, upload-time = "2026-09-14T15:10:12.442Z" }, + { url = "https://files.pythonhosted.org/packages/af/c5/3b1cbc68f0c082022fc8717f7fe4b8b13b8d583c52352be37f4e9f55bcd2/greenlet-3.5.6-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:b374e79ffa7511afc11773aef40a4ccea6191fba1c856ea2f9c56738dca69d7a", size = 1698526, upload-time = "2026-09-14T14:35:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/de/56/12941ed2711400451c89d544e10f831800a2770f19dd55eac8f0f7f2003b/greenlet-3.5.6-cp315-cp315-win_amd64.whl", hash = "sha256:7969bffa322c097bd46ae595ada6a931cefda613f18ba64587e9cff4cb320756", size = 327739, upload-time = "2026-09-14T14:23:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3b/576b9ed5ac929252e340cf60b4bcb6a8515350dc20797064b1922dc4ea75/greenlet-3.5.6-cp315-cp315-win_arm64.whl", hash = "sha256:8dba0129b93e7091dfefaf4cf7000172741bff7f47bf6326fcf17f32fbb54d6b", size = 311715, upload-time = "2026-09-14T14:28:25.154Z" }, + { url = "https://files.pythonhosted.org/packages/16/c2/86cfc5555a98e12b86966ddbd24fd39af32f71f2f785c6595b7feb2db156/greenlet-3.5.6-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:de3de000d459402cda015068fd135aa50c0bf6f2477a80d4da1e646f123b4e78", size = 306244, upload-time = "2026-09-14T14:27:57.565Z" }, + { url = "https://files.pythonhosted.org/packages/14/6d/83ffc9d05a75a80ab3a7595dbb1d9604e5d4fc2996d73a8ae2dbd1284900/greenlet-3.5.6-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45663c01a4de48b9a64a2ee1509d92d1dfd3afb02b2ccfc9333029d11aef996a", size = 676578, upload-time = "2026-09-14T15:12:09.468Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d6/c2cf684810e5caded075970aaadea654ecb58b8382b9aecf1d231b936894/greenlet-3.5.6-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3deccbb57a481e3a408fe61cdfd5c13e0678fc0a30fdd09597917ca87b4be877", size = 684203, upload-time = "2026-09-14T15:20:50.261Z" }, + { url = "https://files.pythonhosted.org/packages/f2/d1/039c353d5593a97a89699e989324c9bc86af499e6c6152fe0180f5742204/greenlet-3.5.6-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:63aff70fe5aac59c72215f42ec39fcb59ff46774fa966e717f8ecb6ee2273577", size = 686023, upload-time = "2026-09-14T15:25:14.528Z" }, + { url = "https://files.pythonhosted.org/packages/62/19/00e1bee5d2af890dc8f400b54d0b0f9b489965f92bc12b407ff72cc6f469/greenlet-3.5.6-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:311018b46472fb26ee85870847fb89eb64cc8aaddb617400789d87076f7cfeec", size = 681253, upload-time = "2026-09-14T14:36:06.742Z" }, + { url = "https://files.pythonhosted.org/packages/8a/62/97ceb8e0b2ea96046cdf8e95b042715020ebb12d83ea0690db80a8f03d23/greenlet-3.5.6-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:520648db8fb92eef7b3e6013f5a6f901cdf0d6685f639c2f7a245879f865bef7", size = 517058, upload-time = "2026-09-14T15:28:44.924Z" }, + { url = "https://files.pythonhosted.org/packages/89/58/c9275fd0ca195d1d3402931bcce8cfcc74726ff76efb1883d229e6e1a3d7/greenlet-3.5.6-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:7f924a5a9d5890649566f2f6682e0d8ad8ca23028bacffbbac36dbd7fd680176", size = 1645988, upload-time = "2026-09-14T15:10:13.758Z" }, + { url = "https://files.pythonhosted.org/packages/e0/36/b35747582fa4f1a5453f8f3002405dbac788e450cec7674dc2d204b6ccb5/greenlet-3.5.6-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:de9923832f2d8c1a5ecd8d7260465a6ca5a86888a0d129e3bd5cf0406d2fc5bf", size = 1702383, upload-time = "2026-09-14T14:35:58.143Z" }, + { url = "https://files.pythonhosted.org/packages/ed/69/6ec22ac9351e474d2a134d0ff9400dc80362d1c20f0721088ffffdfc205b/greenlet-3.5.6-cp315-cp315t-win_amd64.whl", hash = "sha256:2ab5f42ac6c238eb71770715e6e909ad9a1a92b6c681ccb64cd5a0f07edb953f", size = 331845, upload-time = "2026-09-14T14:27:41.723Z" }, + { url = "https://files.pythonhosted.org/packages/30/cf/697c051fd534e223461fb8b523890e21a24eeca229cd50624cff6f02fabd/greenlet-3.5.6-cp315-cp315t-win_arm64.whl", hash = "sha256:f9fe868463ec7e1363733af77e38a5fda3e9b63940337048c945d69e0c80ff24", size = 315070, upload-time = "2026-09-14T14:22:21.476Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -2001,6 +2149,52 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/15/1633010b26e88e872c93b67c0b6c5e174fb74cb6fb5c1472b4d51d4a8f22/platformdirs-4.13.0-py3-none-any.whl", hash = "sha256:3dbcf4cd708f21cf876c4eaa90e58412bc4f033d87143f41b1493ff77c25b7e1", size = 32724, upload-time = "2026-10-11T02:05:22.776Z" }, ] +[[package]] +name = "playwright" +version = "1.60.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "greenlet", version = "3.2.5", source = { registry = "https://pypi.org/simple" } }, + { name = "pyee" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/f0/832bd9677194908da118064eef20082f2791e3d18215cc6d9391ee2c5a67/playwright-1.60.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:6a8cd0fec171fb3089e95e898c8bc8a6f35dea0b78b399e12fcc19427e91b1d7", size = 43474635, upload-time = "2026-05-18T12:00:31.969Z" }, + { url = "https://files.pythonhosted.org/packages/59/7b/e1d32ae8a3ed937ec2be3721c5f728b13d731a0b7c6442e0b3bec5094ac0/playwright-1.60.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:39b5420ba6145045b69ced4c5c47d4d9fe5bddfc8ff816c518913afcb25ec7a5", size = 42261327, upload-time = "2026-05-18T12:00:35.638Z" }, + { url = "https://files.pythonhosted.org/packages/d7/bc/23de499ded6411c188a20c5a0dea6f0cd4ed5d2b3cc6042a5dbd3ed609aa/playwright-1.60.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:2581d0e6a3392c71f91b27460c7fd093356818dc430f48153896c8aeeaef7705", size = 43474636, upload-time = "2026-05-18T12:00:39.294Z" }, + { url = "https://files.pythonhosted.org/packages/22/7b/1d679f4fced4ea94efadd17103856d8c565384f68382a1681264e46f5925/playwright-1.60.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:1c2bfae7884fb3fb05b853290eab8f343d524e5016f2f1def702acbbdf14c93e", size = 47467220, upload-time = "2026-05-18T12:00:43.179Z" }, + { url = "https://files.pythonhosted.org/packages/84/c2/1528d267d4442bd2c6b8eaeab819dd52c2030bf80e89293f0ba1f687473b/playwright-1.60.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43e66564125ee31b07a58cefb21e256d62d67d8d1713e6858df7a3019d8ed353", size = 47154856, upload-time = "2026-05-18T12:00:46.715Z" }, + { url = "https://files.pythonhosted.org/packages/bb/4e/b008b6440a7a1624378041da94829956d4b8f7ab9ef5aad22d0dc3f2e26d/playwright-1.60.0-py3-none-win32.whl", hash = "sha256:ec94e416ea320711e0ad4bf185dcbf41833672961e90773e1885255d7db7b7e7", size = 37902157, upload-time = "2026-05-18T12:00:50.374Z" }, + { url = "https://files.pythonhosted.org/packages/55/f0/0541524133104f9cc20bf900870ff4a736b76a23483f3a55295ddfa58409/playwright-1.60.0-py3-none-win_amd64.whl", hash = "sha256:9566821ce6030a1f9e7146a24e19355ab0d98805fd0f9be50bb3d8fef1750c02", size = 37902159, upload-time = "2026-05-18T12:00:53.728Z" }, + { url = "https://files.pythonhosted.org/packages/80/c8/210f282d278e4709cdd71b12a31af45a30a22ab3207b387e29b37e478713/playwright-1.60.0-py3-none-win_arm64.whl", hash = "sha256:6e4f6700a4c2250efff8e690a81d66e3855754fb587b6b87cf5c784014f91537", size = 34037981, upload-time = "2026-05-18T12:00:57.584Z" }, +] + +[[package]] +name = "playwright" +version = "1.63.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "greenlet", version = "3.5.6", source = { registry = "https://pypi.org/simple" } }, + { name = "pyee" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/dd/fbb3d34228ad753bc14464d5f2252585b73367539775a88d0a3949cf5a45/playwright-1.63.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:84c540759e8e7f01e690e197e04060f48899d37cea322299f255843273d3385d", size = 44278407, upload-time = "2026-09-15T16:49:06.045Z" }, + { url = "https://files.pythonhosted.org/packages/f5/9a/948b930b1a8c4ee869e5a139a2b7747caa06aab56a3f09a2f0abdcbda221/playwright-1.63.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fd1aa00631d44d55e56e0975bf3f3f285fac4a9fd2813183f0c12a488f1a1b24", size = 42944679, upload-time = "2026-09-15T16:49:10.039Z" }, + { url = "https://files.pythonhosted.org/packages/94/11/dc5c13fa1602371603acd461be47529c1b3513815d3a0dc98f642c291a10/playwright-1.63.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:c89fc4736502a1f0fac2c8ca5d10c0cbc1c669f1f4774a2d8507a43140e4d53f", size = 44278410, upload-time = "2026-09-15T16:49:13.861Z" }, + { url = "https://files.pythonhosted.org/packages/27/9c/103a5037789062bdab27c7dca53f3ca6b075b572ab2cd96eec825b3aec4e/playwright-1.63.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:ad21bc07516b187965a7521c5cf0df0bd657b17482eaad74335272d35a2b07de", size = 48217159, upload-time = "2026-09-15T16:49:17.404Z" }, + { url = "https://files.pythonhosted.org/packages/f3/82/3d85505284c5a210f2da6c07b8f757524e79d1fba9cfdafe1eafb766ae59/playwright-1.63.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:354e15b29503565fc598b89f16fbe070459343bef9d7498a93e304864000c6a7", size = 47902708, upload-time = "2026-09-15T16:49:21.055Z" }, + { url = "https://files.pythonhosted.org/packages/69/8d/f74ff6b52751859f4b69caf66aa7d4a3c8d6c1f0c7dc9920da103612ee39/playwright-1.63.0-py3-none-win32.whl", hash = "sha256:660c00c62639e31b16700ba5456b351ddba55bb766b7ce8261223aa34928e482", size = 38606075, upload-time = "2026-09-15T16:49:29.546Z" }, + { url = "https://files.pythonhosted.org/packages/76/eb/d6b8d92658038e260dbc7dd69fb3fdbe245aac283953de8b50b02bfe5f61/playwright-1.63.0-py3-none-win_amd64.whl", hash = "sha256:2f9a707a6c6c91157ed77bff2b8caeb04b3c8d46e70d585fc134298cbe4b5cc6", size = 38606082, upload-time = "2026-09-15T16:49:32.838Z" }, + { url = "https://files.pythonhosted.org/packages/be/75/2432b3e3c7c62103b72d4c4cc8b16a56383ada372bbb0d1278591e988f71/playwright-1.63.0-py3-none-win_arm64.whl", hash = "sha256:1e4a3a838ce22fb68ad17193fcd142a19610d9d70fb9966d2239f5dddc0cc05b", size = 34523554, upload-time = "2026-09-15T16:49:36.455Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -2500,6 +2694,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/48/c3/e321d3a4b2737372cf775ffdd1a02428c7d2791ee5afc9f228793a0ee245/pydantic_core-2.50.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b123f9d8702106f39dc3af63a031ca8b5279862a3747ec6c03ca49dbe78b71b9", size = 2337958, upload-time = "2026-10-08T14:30:55.045Z" }, ] +[[package]] +name = "pyee" +version = "13.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8", size = 31655, upload-time = "2026-02-14T21:12:28.044Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/b4d4827c93ef43c01f599ef31453ccc1c132b353284fc6c87d535c233129/pyee-13.0.1-py3-none-any.whl", hash = "sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b57689228", size = 15659, upload-time = "2026-02-14T21:12:26.263Z" }, +] + [[package]] name = "pyevio" source = { editable = "." } @@ -2535,6 +2741,8 @@ dev = [ { name = "fastapi", version = "0.128.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "fastapi", version = "0.143.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "httpx" }, + { name = "playwright", version = "1.60.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "playwright", version = "1.63.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pyarrow", version = "21.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pyarrow", version = "25.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, { name = "pyarrow", version = "26.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -2563,6 +2771,7 @@ provides-extras = ["test", "web"] dev = [ { name = "fastapi", specifier = ">=0.128.8" }, { name = "httpx", specifier = ">=0.28.1" }, + { name = "playwright", specifier = ">=1.60.0" }, { name = "pyarrow", specifier = ">=21.0.0" }, { name = "pytest" }, { name = "pyyaml", specifier = ">=6.0.3" }, From 46e683399fa0b0861eb2a28eee4aa69c22c50086 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 02:07:18 -0400 Subject: [PATCH 34/65] Document the four viewer tabs with corpus screenshots Screenshots of Overview, Plots, Records and Structure on sro_000791.evio.00000.v6; the stale "compressed records are skipped in the browser" note is replaced by a pointer to the decoder module. Co-Authored-By: Claude Fable 5.1 --- docs/images/web_viewer_overview.png | Bin 376751 -> 237731 bytes docs/images/web_viewer_plots_channel.png | Bin 379081 -> 37012 bytes docs/images/web_viewer_plots_file.png | Bin 181460 -> 65384 bytes docs/images/web_viewer_plots_roc.png | Bin 200936 -> 90404 bytes docs/images/web_viewer_records.png | Bin 0 -> 121092 bytes docs/images/web_viewer_structure.png | Bin 428320 -> 200186 bytes docs/web_viewer.md | 33 +++++++++++------------ 7 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 docs/images/web_viewer_records.png diff --git a/docs/images/web_viewer_overview.png b/docs/images/web_viewer_overview.png index 702c0530dae7fb9edbd533507912db23dda1d448..165d877bc1f73af3b86e46c20c539bcb91eb8f34 100644 GIT binary patch literal 237731 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

    v~PCLJJwPK);@ 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

    X{~V7)7lz@R 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

    OxybQ_&*g-J{uYoc^gzj6g6r#;ll@(R{oy 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%0Do_m$;w7PQbf4=G{rTVF6S5-aPT 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

    x@juCR@JtEkPVeuD>1*k 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%0DmDKF#58)@a%&lLv+6!aYg!p?ev2y6`0<#V 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 Ls-^vW;rf388q7wx literal 181460 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

    CfzKD6AI(JgX_c4{#(HRz|bDAC9 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 M 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 literal 0 HcmV?d00001 diff --git a/docs/images/web_viewer_structure.png b/docs/images/web_viewer_structure.png index 0214bdc3659d24af3f89ed6d8b325c5256a7ca7a..9c0670d59ebad20dd023893448c759299e432f88 100644 GIT binary patch literal 200186 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

    %!v~4bBep`MP^KHG~%B&sPum_|Na$!97 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%0Al;2mCn7u?I(?f4;YSKBR2oYg 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 Date: Sun, 11 Oct 2026 02:21:13 -0400 Subject: [PATCH 35/65] Add the "AIS entries identical" file check (F15) The SRO hardware fills every slot of the aggregation info segment (0x42) with one stream's (rocid << 16 | status) entry; the value changes per frame. The decoder now counts the AIS entries and their distinct values per frame (n_ais_entries, n_ais_distinct in FRAME_DTYPE and FrameHits) and ais_degenerate_mask names the repeated case. ROC banks still come from the bank walk alone; the AIS never locates them. stream_stats sums frames_with_ais and frames_with_degenerate_ais, and the summary gets the check row "AIS entries identical": info with the degenerate-frame count and the sentence that the segment repeats one stream's entry in every slot, ok when the count is zero. STATS_VERSION is bumped to "2": StreamStats.load refuses .npz caches written by version "1", and the web cache key includes the version, so the viewer recomputes stale entries. Tests prove: identical, distinct, absent and overrunning AIS segments through decode_frame and decode_frames in both byte orders, with hits and ROC-bank counts unchanged; the stats totals with 1 and 2 workers (merge covered); the .npz round trip of the new scalars; the /summary row (info, 12 for the synthetic file; ok, 0 for a distinct-entry file); under PYEVIO_CORPUS=1, every one of the 2200 frames in the first 200 corpus records is degenerate (24 entries, 1 value). Co-Authored-By: Claude Fable 5.1 --- docs/stream_decoding.md | 4 +- pyevio/decoders/fadc250_stream.py | 63 ++++++++++++++++++++++++++----- pyevio/stream_stats.py | 21 ++++++++--- pyevio/web/report.py | 5 +++ tests/test_fadc250_stream.py | 53 ++++++++++++++++++++++++-- tests/test_stream_stats.py | 29 ++++++++++++-- tests/web/test_web_api.py | 16 ++++++++ 7 files changed, 166 insertions(+), 25 deletions(-) diff --git a/docs/stream_decoding.md b/docs/stream_decoding.md index 0d5d379..36332f0 100644 --- a/docs/stream_decoding.md +++ b/docs/stream_decoding.md @@ -33,7 +33,7 @@ Facts the decoder relies on, each measured on both raw files with no exception: - The payload map (segment 0x41) holds uint16 entries, two per word, read in memory order (low half first in a little-endian file); pad value 2 in the segment header means an odd entry count. An entry is `module << 8 | port`: bits 11—8 module id, bit 7 bond, bits 6—5 lane, bits 4—0 port. Module 0 is fADC250, module 1 is DCRB. Every payload bank's tag appears in its stream's map (0 exceptions in 14.2 million payload banks per file). - Every payload bank declares data type 0x00. A bank with data has num 0; an empty bank has length 1 and num 1. Both are valid. File 00000 holds 357,735 empty banks among 14,233,888 payload banks (2.51%), all on ROC ids 7, 9, 25 and 27; ports 14 and 16 of ROC ids 7 and 25 are mapped and never carry a hit. -The decoder walks this tree by length words and trusts none of them: every bank end is checked against its container, and a bad length stops the walk of that event with a counted error (`errors`, `error_messages`, the first 50 messages kept) instead of an exception. A ROC bank without a stream-info bank, or a port absent from the map, is decoded as fADC250 and counted in `n_unmapped_payload_banks`. The decoder does not read the AIS segment: ROC banks come from the walk. +The decoder walks this tree by length words and trusts none of them: every bank end is checked against its container, and a bad length stops the walk of that event with a counted error (`errors`, `error_messages`, the first 50 messages kept) instead of an exception. A ROC bank without a stream-info bank, or a port absent from the map, is decoded as fADC250 and counted in `n_unmapped_payload_banks`. The decoder reads the AIS segment only to count its entries and their distinct values (`n_ais_entries`, `n_ais_distinct` per frame): ROC banks come from the walk. ## Hit word @@ -119,7 +119,7 @@ The raw files of the SRO hardware deviate from the evio-library output in five w | 8-word block headers, no file header | every block header is `{length, block number, 8, event count, 0, 4, 0, 0xc0da0100}`: version word 4 with no bit-info bits | `EvioFile.header_layout == "sro-8word"`; `header` is a stand-in `FileHeader` with `version` 6 and `container_version` 4; record headers have `header_length == 8`; `first_record_offset` is 0 | | no last-record bit, no trailer | the bit is set on no block; the file ends after its last block | the record scan continues while a record header follows and ends at the end of the file; `EvioFile.trailer` is `None` | | truncated tail | 3 of the 4 files end in a block cut mid-event: file 00000 declares 1,967,400 bytes and holds 531,760 (2 complete events); file 00001 declares 1,960,136 and holds 1,939,708 (10 complete events) | the block stays the last record with `is_truncated` set; its complete events are read; `EvioFile.checks` holds `("truncated_tail", declared, present, salvaged)` — `(1967400, 531760, 2)` and `(1960136, 1939708, 10)`; `record_count` counts the tail, `get_total_event_count()` counts its salvaged events (86,794 and 86,805) | -| AIS repeated entry | the AIS segment (tag 0x42) repeats one entry 24 times in every event instead of listing 24 streams (4 distinct values per file) | the decoder ignores the AIS; ROC banks come from the walk. No check reports the repetition. | +| AIS repeated entry | the AIS segment (tag 0x42) repeats one entry 24 times in every event instead of listing 24 streams (4 distinct values per file) | the decoder counts the entries and their distinct values per frame (`n_ais_entries`, `n_ais_distinct`); `stream_stats` counts `frames_with_ais` and `frames_with_degenerate_ais` (several entries, one value); the file check "AIS entries identical" shows the degenerate-frame count as `info`, `ok` when it is 0. ROC banks come from the walk. | | empty payload banks | length 1, num 1 on ports with no hit in the frame | counted per (ROC, stream, port) in `empty_banks`; `stream_stats.empty_banks` sums them per (ROC, port) | Two more checks exist for any file: `("bad_record_header", offset, message)` in `EvioFile.checks` when the scan meets bytes that are no record header (a byte-swapped header and a second file header are named), and `Record.errors` when an event length runs past its record. `stream_stats` counts events past their record in `n_out_of_bounds_events` and decode errors in `errors`. diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 3016ddf..ba562b9 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -13,7 +13,7 @@ event bank tag 0xFF60, type 0x10 (bank of banks), num 0 SIB tag 0xFF31, type 0x20 (bank of segments) TSS segment tag 0x32, len 3: {frame number, timestamp lo, timestamp hi} - AIS segment tag 0x42, len 24: aggregated-stream entries (ignored here) + AIS segment tag 0x42, len 24: aggregated-stream entries (counted, never walked) ROC bank tag = ROC id, type 0x10, num = stream status byte stream-info tag 0xFF30, type 0x20: TSS 0x31 + payload-port map 0x41 payload bank tag = payload port, type 0x00, one word per hit @@ -35,6 +35,13 @@ port absent from the map (or a ROC bank without a stream-info bank) is decoded as fADC250 and counted in ``n_unmapped_payload_banks``. +The AIS segment should list the aggregated streams, one ``(rocid << 16) | status`` +entry per stream. The SRO hardware writes one stream's entry into every slot, a +value that changes from frame to frame. The decoder records per frame how many +entries the segment has and how many distinct values (``n_ais_entries``, +``n_ais_distinct``); :func:`ais_degenerate_mask` names the repeated case. ROC +banks come from the bank walk alone; the AIS never locates them. + An empty payload bank has length 1 and num 1; a data bank has num 0. Both are valid. The walk trusts no length word: every bank end is checked against its container, a bad length stops the walk and lands in @@ -96,6 +103,7 @@ ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), ("first_hit_index", np.uint64), ("event_index", np.uint32), ("n_roc_banks", np.uint16), ("n_payload_banks", np.uint16), ("n_empty_payload_banks", np.uint16), ("non_fadc_words", np.uint32), ("errors", np.uint16), + ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), ]) ROC_BANK_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("roc", np.uint16), ("stream", np.uint8), @@ -178,6 +186,15 @@ def validate_hit_words(hit_words: np.ndarray) -> None: raise ValueError(f"{n_bad} hit words have a time field outside {HIT_TIME_BITS} bits (bit 31 set)") +def ais_degenerate_mask(frames: np.ndarray) -> np.ndarray: + """True per frame whose AIS segment holds several entries with one value: one stream repeated in every slot. + + ``frames`` is a table with ``n_ais_entries`` and ``n_ais_distinct`` columns (``FRAME_DTYPE`` + or ``stream_stats.FRAME_STATS_DTYPE``). A frame without an AIS (0 entries) is never degenerate. + """ + return (frames["n_ais_entries"] > 1) & (frames["n_ais_distinct"] == 1) + + def _is_big_endian(words: np.ndarray) -> bool: byteorder = words.dtype.byteorder return byteorder == ">" or (byteorder == "=" and sys.byteorder == "big") @@ -270,6 +287,8 @@ class FrameHits: n_flag_words: int errors: int error_messages: List[str] + n_ais_entries: int = 0 # entries of the SIB's aggregation info segment (0x42); 0 without one + n_ais_distinct: int = 0 # distinct values among them; 1 with several entries means one stream repeated def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: @@ -348,7 +367,7 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: self.error(event_index, 0, f"event length {event_end} words runs past the {n} words given") event_end = n - frame_number, timestamp, sib_end = self._read_sib(read, event_end, event_index) + frame_number, timestamp, sib_end, n_ais_entries, n_ais_distinct = self._read_sib(w, read, event_end, event_index) hits_before, payload_before, empty_before = self.n_hits, self.n_payload_banks, self.n_empty_payload_banks other_before, roc_banks_before = self.non_fadc_words, len(self.roc_bank_rows) @@ -373,25 +392,49 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: frame_number, timestamp, self.n_hits - hits_before, hits_before, event_index, len(self.roc_bank_rows) - roc_banks_before, self.n_payload_banks - payload_before, self.n_empty_payload_banks - empty_before, self.non_fadc_words - other_before, self.errors - errors_before, + n_ais_entries, n_ais_distinct, )) - def _read_sib(self, read, event_end: int, event_index: int): - """Return ``(frame_number, timestamp, sib_end)`` from the SIB at word 2; zeros on a bad SIB.""" + def _read_sib(self, w, read, event_end: int, event_index: int): + """Return ``(frame_number, timestamp, sib_end, n_ais_entries, n_ais_distinct)`` from the SIB at word 2. + + Zeros on a bad SIB. ``sib_end`` comes from the SIB length word alone, so the ROC bank + walk that starts there never depends on the AIS segment or its contents. + """ if 3 >= event_end: self.error(event_index, 2, "no room for the stream info bank") - return 0, 0, event_end + return 0, 0, event_end, 0, 0 sib_end = 2 + read(2) + 1 if sib_end > event_end: self.error(event_index, 2, f"SIB length {read(2)} runs past the event end {event_end}") - return 0, 0, event_end + return 0, 0, event_end, 0, 0 if (read(3) >> 16) != SIB_TAG: self.error(event_index, 3, f"expected SIB tag 0x{SIB_TAG:04X}, found 0x{read(3) >> 16:04X}") - return 0, 0, sib_end + return 0, 0, sib_end, 0, 0 # The TSS is the first segment of the SIB: header word tag<<24 | pad<<22 | type<<16 | length. if 7 >= sib_end or (read(4) >> 24) != SIB_TSS_SEGMENT_TAG or (read(4) & 0xFFFF) < 3: self.error(event_index, 4, "SIB does not start with a time slice segment (tag 0x32, length 3)") - return 0, 0, sib_end - return read(5), read(6) | (read(7) << 32), sib_end + return 0, 0, sib_end, 0, 0 + n_ais_entries, n_ais_distinct = self._count_ais_entries(w, read, 4 + (read(4) & 0xFFFF) + 1, sib_end, event_index) + return read(5), read(6) | (read(7) << 32), sib_end, n_ais_entries, n_ais_distinct + + def _count_ais_entries(self, w, read, segment_i: int, sib_end: int, event_index: int): + """Return ``(entries, distinct values)`` of the 0x42 segment among the SIB segments from ``segment_i``. + + ``(0, 0)`` without one. The entries are uint32 words; a segment length past the SIB end + is a counted error and ends the search. + """ + while segment_i < sib_end: + header = read(segment_i) + segment_len = header & 0xFFFF + segment_end = segment_i + segment_len + 1 + if segment_end > sib_end: + self.error(event_index, segment_i, f"SIB segment length {segment_len} runs past the SIB end {sib_end}") + return 0, 0 + if (header >> 24) == SIB_AIS_SEGMENT_TAG: + return segment_len, int(np.unique(w[segment_i + 1:segment_end]).size) + segment_i = segment_end + return 0, 0 def _read_payload_port_map(self, read, info_i: int, info_end: int, event_index: int, big_endian: bool) -> dict: """Return ``{port: module id}`` from the 0x41 segment of the stream-info bank at ``info_i``. @@ -537,6 +580,8 @@ def decode_frame(words: np.ndarray, event_index: int = 0) -> FrameHits: n_unmapped_payload_banks=stream_hits.n_unmapped_payload_banks, n_payload_words=stream_hits.n_payload_words, non_fadc_words=stream_hits.non_fadc_words, n_flag_words=stream_hits.n_flag_words, errors=stream_hits.errors, error_messages=stream_hits.error_messages, + n_ais_entries=int(frame_row["n_ais_entries"]) if is_stream_frame else 0, + n_ais_distinct=int(frame_row["n_ais_distinct"]) if is_stream_frame else 0, ) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index c997d1d..4ea4c26 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -35,7 +35,7 @@ from pyevio.evio_file import EvioFile from pyevio.decoders import fadc250_stream as fs -STATS_VERSION = "1" +STATS_VERSION = "2" # 2: AIS entry counts per frame and the frames_with_ais / frames_with_degenerate_ais totals N_CHANNELS = 16 CHARGE_BIN_SHIFT = 6 # 13-bit charge >> 6 → 128 bins of 64 N_CHARGE_BINS = (fs.HIT_CHARGE_MASK + 1) >> CHARGE_BIN_SHIFT @@ -63,7 +63,7 @@ class StatsCancelled(Exception): FRAME_SCAN_DTYPE = np.dtype([("record", np.uint32), ("event", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64)]) FRAME_STATS_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), - ("non_fadc_words", np.uint32), ("errors", np.uint16), + ("non_fadc_words", np.uint32), ("errors", np.uint16), ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), ]) @@ -174,6 +174,7 @@ class Accumulator: ARRAYS_3D = ("rate", "charge", "time") # (roc, port, channel, bins) ARRAYS_2D = ("empty_banks", "non_fadc_words_per_port") # (roc, port) + AIS_TOTALS = ("frames_with_ais", "frames_with_degenerate_ais") # counted from the frame table, not StreamHits attributes def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.t_first, self.t_last, self.n_rate_bins = int(t_first), int(t_last), int(n_rate_bins) @@ -189,7 +190,8 @@ def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.frame_rows = [] # FRAME_STATS_DTYPE arrays, concatenated at the end self.totals = {name: 0 for name in ("n_events", "n_frames", "n_other_events", "n_hits", "n_payload_banks", "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", - "non_fadc_words", "n_flag_words", "errors")} + "non_fadc_words", "n_flag_words", "errors", + "frames_with_ais", "frames_with_degenerate_ais")} self.error_messages: List[str] = [] def _grow(self, rocs: np.ndarray, ports: np.ndarray) -> None: @@ -259,10 +261,13 @@ def absorb(self, hits: fs.StreamHits) -> None: for name in FRAME_STATS_DTYPE.names: frame_rows[name] = hits.frames[name] self.frame_rows.append(frame_rows) + # The AIS totals come from the frame table; the other totals are StreamHits attributes of the same name. + self.totals["frames_with_ais"] += int(np.count_nonzero(hits.frames["n_ais_entries"])) + self.totals["frames_with_degenerate_ais"] += int(np.count_nonzero(fs.ais_degenerate_mask(hits.frames))) for name in self.totals: if name == "n_frames": self.totals[name] += hits.n_stream_frames - else: + elif name not in self.AIS_TOTALS: self.totals[name] += getattr(hits, name) self.error_messages = (self.error_messages + hits.error_messages)[:MAX_ERROR_MESSAGES] @@ -360,6 +365,8 @@ class StreamStats: n_flag_words: int errors: int error_messages: List[str] + frames_with_ais: int # frames whose SIB holds an aggregation info segment (0x42) + frames_with_degenerate_ais: int # of those, frames whose entries all hold one value (I15) checks: FrameChecks rocs: np.ndarray ports: np.ndarray @@ -383,7 +390,7 @@ class StreamStats: SCALAR_FIELDS = ("version", "path", "file_size", "bytes_processed", "tick_ns", "workers", "wall_seconds", "n_records", "n_trailer_records", "n_events", "n_frames", "n_other_events", "n_out_of_bounds_events", "n_hits", "n_payload_banks", "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", - "n_flag_words", "errors", "error_messages") + "n_flag_words", "errors", "error_messages", "frames_with_ais", "frames_with_degenerate_ais") @property def frame_period_ns(self) -> float: @@ -511,7 +518,9 @@ def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: in n_payload_banks=partial.totals["n_payload_banks"], n_empty_payload_banks=partial.totals["n_empty_payload_banks"], n_unmapped_payload_banks=partial.totals["n_unmapped_payload_banks"], n_payload_words=partial.totals["n_payload_words"], non_fadc_words=partial.totals["non_fadc_words"], n_flag_words=partial.totals["n_flag_words"], - errors=partial.totals["errors"], error_messages=partial.error_messages, checks=checks, + errors=partial.totals["errors"], error_messages=partial.error_messages, + frames_with_ais=partial.totals["frames_with_ais"], frames_with_degenerate_ais=partial.totals["frames_with_degenerate_ais"], + checks=checks, rocs=partial.rocs, ports=partial.ports, module_id=partial.module_id, module_ids=module_ids, module_words=module_words, frames=frames, rate_counts=partial.rate, rate_edges_ns=rate_edges_ns, frames_per_rate_bin=frames_per_rate_bin, occupancy=partial.charge.sum(axis=3), charge_hist=partial.charge, diff --git a/pyevio/web/report.py b/pyevio/web/report.py index 9087d87..8577b41 100644 --- a/pyevio/web/report.py +++ b/pyevio/web/report.py @@ -89,6 +89,11 @@ def row(name, status, value, detail=""): row("flag words", "warn" if stats.n_flag_words else "ok", stats.n_flag_words, "hit words with bit 31 set"), row("unmapped payload banks", "warn" if stats.n_unmapped_payload_banks else "ok", stats.n_unmapped_payload_banks, "ports absent from the 0x41 payload map, decoded as fADC250"), + # I15: the SRO hardware fills every AIS slot with one stream's entry. The decoder never uses the AIS + # to find ROC banks, so the repetition costs nothing; the row makes it visible. + row("AIS entries identical", "info" if stats.frames_with_degenerate_ais else "ok", stats.frames_with_degenerate_ais, + f"of {stats.frames_with_ais} frames with an aggregation info segment: the segment repeats one stream's entry " + "in every slot; it does not list the streams" if stats.frames_with_degenerate_ais else ""), ] return rows diff --git a/tests/test_fadc250_stream.py b/tests/test_fadc250_stream.py index a3328a2..eb57af0 100644 --- a/tests/test_fadc250_stream.py +++ b/tests/test_fadc250_stream.py @@ -59,10 +59,16 @@ def roc_bank(roc, stream_mask, frame_number, timestamp, payload_banks, with_stre return bank(roc, 0x10, (2 << 4) | stream_mask, children) -def stream_frame(frame_number, timestamp, roc_banks): - sib = bank(fs.SIB_TAG, 0x20, 0, - segment(fs.SIB_TSS_SEGMENT_TAG, 1, [frame_number, timestamp & 0xFFFFFFFF, timestamp >> 32]) - + segment(fs.SIB_AIS_SEGMENT_TAG, 1, [0x00070021] * 24)) +DEGENERATE_AIS = [0x00070021] * 24 # what the SRO hardware writes: one stream's (rocid << 16 | status) in every slot +DISTINCT_AIS = [(roc << 16) | status for roc in (7, 9, 25, 27, 29, 44, 45, 46, 53, 54, 55, 84) for status in (0x21, 0x22)] + + +def stream_frame(frame_number, timestamp, roc_banks, ais_entries=DEGENERATE_AIS): + """Stream event: SIB (TSS + AIS, the AIS left out when ``ais_entries`` is None) followed by the ROC banks.""" + sib_segments = segment(fs.SIB_TSS_SEGMENT_TAG, 1, [frame_number, timestamp & 0xFFFFFFFF, timestamp >> 32]) + if ais_entries is not None: + sib_segments += segment(fs.SIB_AIS_SEGMENT_TAG, 1, ais_entries) + sib = bank(fs.SIB_TAG, 0x20, 0, sib_segments) return bank(fs.STREAM_EVENT_TAG, 0x10, 0, sib + [w for rb in roc_banks for w in rb]) @@ -137,6 +143,43 @@ def test_decode_frame_columns(endian): assert rocs["first_hit_index"].tolist() == [0, 4] assert fs.empty_banks_per_port(frame.empty_banks) == {(7, 1, 5): 1, (7, 2, 16): 1} assert frame.empty_banks["module_id"].tolist() == [fs.MODULE_FADC250] * 2 + assert (frame.n_ais_entries, frame.n_ais_distinct) == (24, 1) + + +# ---------------------------------------------------------------- AIS segment (I15) +@pytest.mark.parametrize("endian", ["<", ">"]) +def test_ais_entries_are_counted_identical_and_distinct(endian): + """The decoder counts the AIS entries and their distinct values per frame; it never walks the AIS for ROC banks.""" + big = endian == ">" + rocs = [roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)], big_endian=big)] + degenerate = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs), endian)) + distinct = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs, ais_entries=DISTINCT_AIS), endian)) + without_ais = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs, ais_entries=None), endian)) + + assert (degenerate.n_ais_entries, degenerate.n_ais_distinct) == (24, 1) + assert (distinct.n_ais_entries, distinct.n_ais_distinct) == (24, 24) + assert (without_ais.n_ais_entries, without_ais.n_ais_distinct) == (0, 0) + # The AIS changes nothing else: hits, ROC banks and errors are the same in all three frames. + for frame in (degenerate, distinct, without_ais): + assert frame.errors == 0 and frame.n_hits == 3 and frame.n_roc_banks == 1 and frame.frame_number == FRAME_NUMBER + + hits = fs.decode_frames([to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs, ais_entries=entries), endian) + for entries in (DEGENERATE_AIS, DISTINCT_AIS, None, [0x00070021, 0x00070021, 0x002C0021])]) + assert hits.frames["n_ais_entries"].tolist() == [24, 24, 0, 3] + assert hits.frames["n_ais_distinct"].tolist() == [1, 24, 0, 2] + assert fs.ais_degenerate_mask(hits.frames).tolist() == [True, False, False, False] + + +def test_ais_segment_past_sib_end_is_an_error_and_keeps_the_hits(): + words = one_crate_frame() + ais_header_i = 4 + 3 + 1 # SIB length and header, then the 4-word TSS segment + assert (words[ais_header_i] >> 24) == fs.SIB_AIS_SEGMENT_TAG + words[ais_header_i] = (words[ais_header_i] & 0xFFFF0000) | 500 + + frame = fs.decode_frame(to_words(words, "<")) + assert frame.errors == 1 and "SIB segment length 500" in frame.error_messages[0] + assert (frame.n_ais_entries, frame.n_ais_distinct) == (0, 0) + assert frame.n_hits == 6 and frame.n_roc_banks == 2 # the ROC walk starts at the SIB end, untouched by the AIS @pytest.mark.parametrize("endian", ["<", ">"]) @@ -393,3 +436,5 @@ def test_corpus_record0_hits_match_payload_word_sums(): assert fs.non_fadc_words_per_port(hits.non_fadc_banks) == {k: v for k, v in expected_dcrb_per_port.items() if v} assert hits.non_fadc_words == sum(expected_dcrb_per_port.values()) == 400_546 assert hits.n_hits + hits.non_fadc_words == hits.n_payload_words == 499_660 + # I15: every AIS lists 24 slots holding one value (one stream's entry repeated). + assert hits.frames["n_ais_entries"].tolist() == [24] * 11 and hits.frames["n_ais_distinct"].tolist() == [1] * 11 diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index 351913e..6c55841 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -7,7 +7,7 @@ from pyevio.decoders import fadc250_stream as fs from pyevio import stream_stats -from test_fadc250_stream import DCRB_WORDS, bank, hit_word, roc_bank, stream_frame +from test_fadc250_stream import DCRB_WORDS, DEGENERATE_AIS, DISTINCT_AIS, bank, hit_word, roc_bank, stream_frame from test_fadc250_stream_example import make_record, pack_words CORPUS_FILE = "/data/evio-lib/corpus/sro_000791.evio.00000.v6" @@ -24,9 +24,14 @@ def make_trailer(number): return header + index -def write_synthetic_file(path, n_records=3, frames_per_record=4, with_trailer=True): - """Striped frames (stride 4) with one duplicate and one gap; fADC250 crate 7 and DCRB crate 44.""" +def write_synthetic_file(path, n_records=3, frames_per_record=4, with_trailer=True, distinct_ais=False): + """Striped frames (stride 4) with one duplicate and one gap; fADC250 crate 7 and DCRB crate 44. + + The AIS of every frame repeats one entry as the SRO hardware writes it; ``distinct_ais`` + lists 24 distinct entries instead. + """ import struct + ais_entries = DISTINCT_AIS if distinct_ais else DEGENERATE_AIS records = [] frame = 1000 expected_hits = 0 @@ -47,7 +52,7 @@ def write_synthetic_file(path, n_records=3, frames_per_record=4, with_trailer=Tr events.append(pack_words(stream_frame(frame_here, frame_here * PERIOD, [ roc_bank(7, 1, frame_here, frame_here * PERIOD, [(1, hits_port_1), (3, hits_port_3), (5, [])]), roc_bank(44, 2, frame_here, frame_here * PERIOD, [(4, DCRB_WORDS), (6, [])], module_id=fs.MODULE_DCRB), - ]))) + ], ais_entries=ais_entries))) if record_i == 1: events.append(pack_words(bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2])))) # one non-stream event records.append(make_record(record_i + 1, events)) @@ -96,6 +101,9 @@ def test_synthetic_file_totals_and_checks(tmp_path, workers): assert checks.first_frame == 1000 and checks.last_frame == max(frame_numbers) assert stats.frames["frame"].tolist() == frame_numbers assert stats.frames["n_hits"].tolist()[:2] == [17, 18] + # I15: every frame's AIS repeats one entry in its 24 slots + assert stats.frames_with_ais == stats.frames_with_degenerate_ais == 12 + assert stats.frames["n_ais_entries"].tolist() == [24] * 12 and stats.frames["n_ais_distinct"].tolist() == [1] * 12 # rate: every bin with frames reports hits / (frames × period); the sum over bins recovers the hits rate = stats.rate_hz() @@ -106,6 +114,14 @@ def test_synthetic_file_totals_and_checks(tmp_path, workers): assert int(stats.rate_counts[0, 0, 0].sum()) == 12 and len(channel_rate) == 8 and channel_rate.sum() > 0 +@pytest.mark.parametrize("workers", [1, 2]) +def test_distinct_ais_entries_are_not_degenerate(tmp_path, workers): + path, _, _ = write_synthetic_file(tmp_path / "distinct_ais.evio", distinct_ais=True) + stats = stream_stats.compute_stream_stats(path, workers=workers, rate_bins=8, chunk_records=1) + assert stats.n_frames == stats.frames_with_ais == 12 and stats.frames_with_degenerate_ais == 0 + assert stats.frames["n_ais_entries"].tolist() == [24] * 12 and stats.frames["n_ais_distinct"].tolist() == [24] * 12 + + def test_npz_round_trip_and_version(tmp_path): path, expected_hits, _ = write_synthetic_file(tmp_path / "synthetic.evio", n_records=1) stats = stream_stats.compute_stream_stats(path, workers=1, rate_bins=4) @@ -114,6 +130,7 @@ def test_npz_round_trip_and_version(tmp_path): loaded = stream_stats.StreamStats.load(str(out)) assert loaded.n_hits == expected_hits == stats.n_hits assert loaded.checks == stats.checks + assert (loaded.frames_with_ais, loaded.frames_with_degenerate_ais) == (4, 4) assert loaded.rocs.tolist() == stats.rocs.tolist() assert np.array_equal(loaded.rate_counts, stats.rate_counts) and np.array_equal(loaded.frames, stats.frames) assert loaded.version == stream_stats.STATS_VERSION @@ -161,6 +178,10 @@ def test_corpus_first_200_records_match_decoder(): assert stats.checks.frame_period_ticks == 65536 assert int(stats.rate_counts.sum()) == decoded.n_hits and int(stats.occupancy.sum()) == decoded.n_hits assert stats.errors == 0 and stats.n_trailer_records == 0 + # I15: every frame of the run carries a 24-slot AIS holding one value + assert stats.frames_with_ais == stats.frames_with_degenerate_ais == 2200 + assert int(fs.ais_degenerate_mask(decoded.frames).sum()) == 2200 + assert np.unique(decoded.frames["n_ais_entries"]).tolist() == [24] and np.unique(decoded.frames["n_ais_distinct"]).tolist() == [1] # rate_hz is hits per second of live time: its frame-weighted mean equals hits / (frames × period) rate = stats.rate_hz() weighted_mean = (rate * stats.frames_per_rate_bin).sum() / stats.frames_per_rate_bin.sum() diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index 3879923..916d52a 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -33,9 +33,25 @@ def test_open_progress_summary_match_direct_stats(client, served_root): "mean_size": summary["records"]["mean_size"]} checks = {row["name"]: row for row in summary["checks"]} assert checks["missing frames"]["status"] == "warn" and checks["decode errors"]["status"] == "ok" + # I15: every synthetic frame's AIS repeats one entry, as the SRO hardware writes it + assert totals["frames_with_ais"] == totals["frames_with_degenerate_ais"] == 12 + assert checks["AIS entries identical"]["status"] == "info" and checks["AIS entries identical"]["value"] == 12 + assert "repeats one stream's entry in every slot" in checks["AIS entries identical"]["detail"] assert summary["stats"]["cached"] is False +def test_distinct_ais_entries_pass_the_check(client, served_root): + """I15: a file whose AIS lists 24 distinct streams gets an ok row with no detail.""" + from test_stream_stats import write_synthetic_file + write_synthetic_file(served_root["root"] / "runs" / "distinct_ais.evio", distinct_ais=True) + file_id, _ = open_and_wait(client, "runs/distinct_ais.evio") + + summary = client.get(f"/api/files/{file_id}/summary").json() + assert summary["totals"]["frames_with_ais"] == 12 and summary["totals"]["frames_with_degenerate_ais"] == 0 + checks = {row["name"]: row for row in summary["checks"]} + assert checks["AIS entries identical"] == {"name": "AIS entries identical", "status": "ok", "value": 0, "detail": ""} + + def test_summary_before_done_is_409(client, served_root, monkeypatch): release = threading.Event() From b69cd793dc38dfe3f8e1c2506e19922a748ed454 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 02:30:05 -0400 Subject: [PATCH 36/65] Note the AIS entries check and stats version 2 in the changelog Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8ff527..7ee6268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Added +- File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). Stats version 2: caches written by version 1 are recomputed. - Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. - Reading of bare EVIO v6 record streams (an evio writer buffer dump, 14-word record headers with no file header) as `EvioFile.header_layout == "v6-records"`; `EvioFile.record_header_problem(offset)` names what is wrong with a record header; `pyevio info` prints the layout and the file checks. - Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. From 3fe9f9966a03da4ddb3c7c163bbb358c527397a0 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:14:57 -0400 Subject: [PATCH 37/65] Name findings by their F-numbers in code comments Comments and docstrings cited plan item ids (I9, I15, I17, I20) that exist only in the untracked planning notes; the changelog and the defect ledger call the same items F9, F15, F17 and F20. A grep for an F-number now finds every code site that implements it. F55. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/stream_stats.py | 2 +- pyevio/web/report.py | 2 +- tests/golden/test_golden.py | 6 +++--- tests/test_fadc250_stream.py | 6 +++--- tests/test_fadc250_stream_example.py | 8 ++++---- tests/test_stream_stats.py | 4 ++-- tests/web/test_web_api.py | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index 4ea4c26..bc7e45c 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -366,7 +366,7 @@ class StreamStats: errors: int error_messages: List[str] frames_with_ais: int # frames whose SIB holds an aggregation info segment (0x42) - frames_with_degenerate_ais: int # of those, frames whose entries all hold one value (I15) + frames_with_degenerate_ais: int # of those, frames whose entries all hold one value (F15) checks: FrameChecks rocs: np.ndarray ports: np.ndarray diff --git a/pyevio/web/report.py b/pyevio/web/report.py index 8577b41..e936760 100644 --- a/pyevio/web/report.py +++ b/pyevio/web/report.py @@ -89,7 +89,7 @@ def row(name, status, value, detail=""): row("flag words", "warn" if stats.n_flag_words else "ok", stats.n_flag_words, "hit words with bit 31 set"), row("unmapped payload banks", "warn" if stats.n_unmapped_payload_banks else "ok", stats.n_unmapped_payload_banks, "ports absent from the 0x41 payload map, decoded as fADC250"), - # I15: the SRO hardware fills every AIS slot with one stream's entry. The decoder never uses the AIS + # F15: the SRO hardware fills every AIS slot with one stream's entry. The decoder never uses the AIS # to find ROC banks, so the repetition costs nothing; the row makes it visible. row("AIS entries identical", "info" if stats.frames_with_degenerate_ais else "ok", stats.frames_with_degenerate_ais, f"of {stats.frames_with_ais} frames with an aggregation info segment: the segment repeats one stream's entry " diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py index 0f94eca..5ee930a 100644 --- a/tests/golden/test_golden.py +++ b/tests/golden/test_golden.py @@ -34,7 +34,7 @@ ``"v6-records"`` and checked like the v6 rows (the dictionary in the record user header of ``buffer_evw_dict_le.dump`` is skipped, not read). 3. v4 and v1—3 rows: ``EvioFile`` raises ``ValueError`` whose message names - the detected version and points at the evio tools (the I9 contract, see + the detected version and points at the evio tools (the F9 contract, see ``assert_unsupported_version_message``). 4. v6 rows: the header event-count sum equals the manifest count, the events found by ``Record.scan_events`` number the same, and no event @@ -72,7 +72,7 @@ # EVIO version each legacy row carries in word 5 of its first block header. -# These rows must fail with the I9 message instead of being read. +# These rows must fail with the F9 message instead of being read. LEGACY_VERSION = { "v4_le.evio": 4, "v4_be.evio": 4, @@ -107,7 +107,7 @@ def sha256_of(path): def assert_unsupported_version_message(message, version): - """The I9 contract for files pyevio does not read. + """The F9 contract for files pyevio does not read. The message names the detected EVIO version ("version 4") and tells the reader where to go: an evio tool (evio2xml, eviocopy) or the evio diff --git a/tests/test_fadc250_stream.py b/tests/test_fadc250_stream.py index eb57af0..0d3f8a2 100644 --- a/tests/test_fadc250_stream.py +++ b/tests/test_fadc250_stream.py @@ -146,7 +146,7 @@ def test_decode_frame_columns(endian): assert (frame.n_ais_entries, frame.n_ais_distinct) == (24, 1) -# ---------------------------------------------------------------- AIS segment (I15) +# ---------------------------------------------------------------- AIS segment (F15) @pytest.mark.parametrize("endian", ["<", ">"]) def test_ais_entries_are_counted_identical_and_distinct(endian): """The decoder counts the AIS entries and their distinct values per frame; it never walks the AIS for ROC banks.""" @@ -210,7 +210,7 @@ def test_non_stream_event_is_not_an_error(): def test_last_roc_bank_without_children_i17(): - """I17: the Parquet example crashed on a frame whose last ROC bank has no children (length 1).""" + """F17: the Parquet example crashed on a frame whose last ROC bank has no children (length 1).""" words = stream_frame(FRAME_NUMBER, TIMESTAMP, [ roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)]), bank(7, 0x10, 0x22, []), @@ -436,5 +436,5 @@ def test_corpus_record0_hits_match_payload_word_sums(): assert fs.non_fadc_words_per_port(hits.non_fadc_banks) == {k: v for k, v in expected_dcrb_per_port.items() if v} assert hits.non_fadc_words == sum(expected_dcrb_per_port.values()) == 400_546 assert hits.n_hits + hits.non_fadc_words == hits.n_payload_words == 499_660 - # I15: every AIS lists 24 slots holding one value (one stream's entry repeated). + # F15: every AIS lists 24 slots holding one value (one stream's entry repeated). assert hits.frames["n_ais_entries"].tolist() == [24] * 11 and hits.frames["n_ais_distinct"].tolist() == [1] * 11 diff --git a/tests/test_fadc250_stream_example.py b/tests/test_fadc250_stream_example.py index d98742b..bf89945 100644 --- a/tests/test_fadc250_stream_example.py +++ b/tests/test_fadc250_stream_example.py @@ -1,9 +1,9 @@ """The Parquet example and `pyevio debug` on a synthetic streaming file. Both callers use pyevio.decoders.fadc250_stream; these tests pin that the -example survives the I17 frame shape (a last ROC bank without children), +example survives the F17 frame shape (a last ROC bank without children), sorts hits by (frame, event, t_ns) so duplicate frames keep valid hit -ranges (I20), and that the debug command decodes a stream frame. +ranges (F20), and that the debug command decodes a stream frame. """ import importlib.util import struct @@ -42,10 +42,10 @@ def make_record(number, events): def write_stream_file(path): - """Two records: frame 100 (two hits, I17 shape), a non-stream event, then frame 100 again and frame 104.""" + """Two records: frame 100 (two hits, F17 shape), a non-stream event, then frame 100 again and frame 104.""" frame_100_a = stream_frame(100, 1000, [ roc_bank(7, 1, 100, 1000, [(1, [hit_word(2, 50, 10), hit_word(2, 30, 20)])]), - bank(7, 0x10, 0x22, []), # I17: last ROC bank has no children + bank(7, 0x10, 0x22, []), # F17: last ROC bank has no children ]) other = bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2])) frame_100_b = stream_frame(100, 1000, [roc_bank(9, 2, 100, 1000, [(2, [hit_word(4, 40, 30)]), (4, [])])]) diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index 6c55841..a65f97a 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -101,7 +101,7 @@ def test_synthetic_file_totals_and_checks(tmp_path, workers): assert checks.first_frame == 1000 and checks.last_frame == max(frame_numbers) assert stats.frames["frame"].tolist() == frame_numbers assert stats.frames["n_hits"].tolist()[:2] == [17, 18] - # I15: every frame's AIS repeats one entry in its 24 slots + # F15: every frame's AIS repeats one entry in its 24 slots assert stats.frames_with_ais == stats.frames_with_degenerate_ais == 12 assert stats.frames["n_ais_entries"].tolist() == [24] * 12 and stats.frames["n_ais_distinct"].tolist() == [1] * 12 @@ -178,7 +178,7 @@ def test_corpus_first_200_records_match_decoder(): assert stats.checks.frame_period_ticks == 65536 assert int(stats.rate_counts.sum()) == decoded.n_hits and int(stats.occupancy.sum()) == decoded.n_hits assert stats.errors == 0 and stats.n_trailer_records == 0 - # I15: every frame of the run carries a 24-slot AIS holding one value + # F15: every frame of the run carries a 24-slot AIS holding one value assert stats.frames_with_ais == stats.frames_with_degenerate_ais == 2200 assert int(fs.ais_degenerate_mask(decoded.frames).sum()) == 2200 assert np.unique(decoded.frames["n_ais_entries"]).tolist() == [24] and np.unique(decoded.frames["n_ais_distinct"]).tolist() == [1] diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index 916d52a..628f5ad 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -33,7 +33,7 @@ def test_open_progress_summary_match_direct_stats(client, served_root): "mean_size": summary["records"]["mean_size"]} checks = {row["name"]: row for row in summary["checks"]} assert checks["missing frames"]["status"] == "warn" and checks["decode errors"]["status"] == "ok" - # I15: every synthetic frame's AIS repeats one entry, as the SRO hardware writes it + # F15: every synthetic frame's AIS repeats one entry, as the SRO hardware writes it assert totals["frames_with_ais"] == totals["frames_with_degenerate_ais"] == 12 assert checks["AIS entries identical"]["status"] == "info" and checks["AIS entries identical"]["value"] == 12 assert "repeats one stream's entry in every slot" in checks["AIS entries identical"]["detail"] @@ -41,7 +41,7 @@ def test_open_progress_summary_match_direct_stats(client, served_root): def test_distinct_ais_entries_pass_the_check(client, served_root): - """I15: a file whose AIS lists 24 distinct streams gets an ok row with no detail.""" + """F15: a file whose AIS lists 24 distinct streams gets an ok row with no detail.""" from test_stream_stats import write_synthetic_file write_synthetic_file(served_root["root"] / "runs" / "distinct_ais.evio", distinct_ais=True) file_id, _ = open_and_wait(client, "runs/distinct_ais.evio") From 262c5b4b5ee6c6811352e2656982292b1f89fc83 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:15:35 -0400 Subject: [PATCH 38/65] Count distinct AIS entries with a set instead of np.unique The 0x42 segment holds 24 words; building a Python set from the list is three times faster than np.unique on a slice that small, and the count runs once per frame inside the Python-level walk. F56. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/decoders/fadc250_stream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index ba562b9..2592151 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -432,7 +432,7 @@ def _count_ais_entries(self, w, read, segment_i: int, sib_end: int, event_index: self.error(event_index, segment_i, f"SIB segment length {segment_len} runs past the SIB end {sib_end}") return 0, 0 if (header >> 24) == SIB_AIS_SEGMENT_TAG: - return segment_len, int(np.unique(w[segment_i + 1:segment_end]).size) + return segment_len, len(set(w[segment_i + 1:segment_end].tolist())) # a set beats np.unique on 24 words segment_i = segment_end return 0, 0 From 18f6e40b094bf8814ed4b26addcc08de7cab912b Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:15:35 -0400 Subject: [PATCH 39/65] Sum StreamHits totals from one explicit tuple Accumulator.absorb mixed one loop over every total with two special cases (n_frames, the AIS totals) that were filled apart and skipped in the loop. HITS_TOTALS lists the totals that are StreamHits attributes of the same name; n_frames and the two AIS totals are added outside the loop. F57. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/stream_stats.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index bc7e45c..55ac914 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -174,7 +174,9 @@ class Accumulator: ARRAYS_3D = ("rate", "charge", "time") # (roc, port, channel, bins) ARRAYS_2D = ("empty_banks", "non_fadc_words_per_port") # (roc, port) - AIS_TOTALS = ("frames_with_ais", "frames_with_degenerate_ais") # counted from the frame table, not StreamHits attributes + # Totals summed from the StreamHits attribute of the same name; n_frames and the AIS totals are added apart. + HITS_TOTALS = ("n_events", "n_other_events", "n_hits", "n_payload_banks", "n_empty_payload_banks", + "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", "n_flag_words", "errors") def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.t_first, self.t_last, self.n_rate_bins = int(t_first), int(t_last), int(n_rate_bins) @@ -188,10 +190,7 @@ def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.module_id = np.full((0, 0), fs.MODULE_UNKNOWN, dtype=np.uint8) self.words_per_module = {} # module id → payload words (fADC250 hits count as words) self.frame_rows = [] # FRAME_STATS_DTYPE arrays, concatenated at the end - self.totals = {name: 0 for name in ("n_events", "n_frames", "n_other_events", "n_hits", "n_payload_banks", - "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", - "non_fadc_words", "n_flag_words", "errors", - "frames_with_ais", "frames_with_degenerate_ais")} + self.totals = {name: 0 for name in self.HITS_TOTALS + ("n_frames", "frames_with_ais", "frames_with_degenerate_ais")} self.error_messages: List[str] = [] def _grow(self, rocs: np.ndarray, ports: np.ndarray) -> None: @@ -261,14 +260,11 @@ def absorb(self, hits: fs.StreamHits) -> None: for name in FRAME_STATS_DTYPE.names: frame_rows[name] = hits.frames[name] self.frame_rows.append(frame_rows) - # The AIS totals come from the frame table; the other totals are StreamHits attributes of the same name. + for name in self.HITS_TOTALS: + self.totals[name] += getattr(hits, name) + self.totals["n_frames"] += hits.n_stream_frames self.totals["frames_with_ais"] += int(np.count_nonzero(hits.frames["n_ais_entries"])) self.totals["frames_with_degenerate_ais"] += int(np.count_nonzero(fs.ais_degenerate_mask(hits.frames))) - for name in self.totals: - if name == "n_frames": - self.totals[name] += hits.n_stream_frames - elif name not in self.AIS_TOTALS: - self.totals[name] += getattr(hits, name) self.error_messages = (self.error_messages + hits.error_messages)[:MAX_ERROR_MESSAGES] def merge(self, other: "Accumulator") -> None: From 6c359e8103ca6b6e35cb1689472f1e5fd8ecac42 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:18:08 -0400 Subject: [PATCH 40/65] Count malformed SIB segments as decode warnings, not errors A SIB segment after the time slice segment with a length past the SIB end counted as a decode error, the severity of a lost hit, although the ROC walk starts at the SIB end and every hit decodes. validate() raised, the Parquet example aborted and the viewer showed "error". F58. An AIS header with length 0 returned (0, 0) like a missing AIS, so a present-but-empty segment vanished from frames_with_ais. F59. The decoder gets a warnings channel beside errors: `warnings` and `warning_messages` on StreamHits and FrameHits, a `warnings` column in both frame tables, totals in stream_stats, a "decode warnings" file check (warn) in the viewer and a stderr line per message in the Parquet example. The bad-length case and the empty AIS are warnings; TSS and payload-map problems stay errors because hits depend on them. STATS_VERSION is 3. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 3 ++- examples/fadc250_stream_to_parquet.py | 5 +++- pyevio/decoders/fadc250_stream.py | 37 ++++++++++++++++++++++----- pyevio/stream_stats.py | 16 +++++++++--- pyevio/web/report.py | 2 ++ tests/test_fadc250_stream.py | 19 ++++++++++++-- tests/test_fadc250_stream_example.py | 3 ++- tests/test_stream_stats.py | 5 ++-- tests/web/test_web_api.py | 2 ++ 9 files changed, 74 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ee6268..e0855bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,8 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Added -- File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). Stats version 2: caches written by version 1 are recomputed. +- File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). +- Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check and the Parquet example prints the messages to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. - Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. - Reading of bare EVIO v6 record streams (an evio writer buffer dump, 14-word record headers with no file header) as `EvioFile.header_layout == "v6-records"`; `EvioFile.record_header_problem(offset)` names what is wrong with a record header; `pyevio info` prints the layout and the file checks. - Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. diff --git a/examples/fadc250_stream_to_parquet.py b/examples/fadc250_stream_to_parquet.py index 24e919d..d124a62 100644 --- a/examples/fadc250_stream_to_parquet.py +++ b/examples/fadc250_stream_to_parquet.py @@ -80,7 +80,8 @@ def decode(path): stats = {"records": record_count, "frames": len(frames), "hits": stream_hits.n_hits, "skipped_events": stream_hits.n_other_events + out_of_bounds, "out_of_order": out_of_order, "payload_words": stream_hits.n_payload_words, "non_fadc_words": stream_hits.non_fadc_words, - "empty_payload_banks": stream_hits.n_empty_payload_banks, "decode_errors": stream_hits.errors} + "empty_payload_banks": stream_hits.n_empty_payload_banks, "decode_errors": stream_hits.errors, + "decode_warnings": stream_hits.warnings} return hits, frame_tab, stats, stream_hits @@ -110,6 +111,8 @@ def convert(path, out_dir, force=False): t0 = time.time() hits, frames, stats, stream_hits = decode(path) checks = validate(stream_hits, frames) + for message in stream_hits.warning_messages: # malformed SIB segments; no hit depends on them + print(f"warn {path.name}: {message}", file=sys.stderr) meta = {"source_file": path.name, "source_bytes": str(path.stat().st_size), "decoder_version": DECODER_VERSION, "hit_format": HIT_FORMAT, **{k: str(v) for k, v in {**stats, **checks}.items()}} out_dir.mkdir(parents=True, exist_ok=True) diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 2592151..9945330 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -45,7 +45,10 @@ An empty payload bank has length 1 and num 1; a data bank has num 0. Both are valid. The walk trusts no length word: every bank end is checked against its container, a bad length stops the walk and lands in -``errors`` and ``error_messages`` instead of an exception. +``errors`` and ``error_messages`` instead of an exception. A malformed +segment after the time slice segment of the SIB (an AIS with a length past +the SIB end, or with no entries) touches no hit: it lands in ``warnings`` +and ``warning_messages`` and the walk goes on. Hit word layout (one ``uint32`` per hit), the single copy for pyevio. Evidence: every earlier decoder in this repository, the viewer and the @@ -103,7 +106,7 @@ ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), ("first_hit_index", np.uint64), ("event_index", np.uint32), ("n_roc_banks", np.uint16), ("n_payload_banks", np.uint16), ("n_empty_payload_banks", np.uint16), ("non_fadc_words", np.uint32), ("errors", np.uint16), - ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), + ("warnings", np.uint16), ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), ]) ROC_BANK_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("roc", np.uint16), ("stream", np.uint8), @@ -236,6 +239,8 @@ class StreamHits: n_flag_words: int = 0 errors: int = 0 error_messages: List[str] = field(default_factory=list) + warnings: int = 0 # malformed SIB segments after the TSS; no hit depends on them + warning_messages: List[str] = field(default_factory=list) HIT_COLUMNS = ("frame", "event_index", "roc", "stream", "port", "channel", "time_raw", "t_ns", "charge") @@ -289,6 +294,8 @@ class FrameHits: error_messages: List[str] n_ais_entries: int = 0 # entries of the SIB's aggregation info segment (0x42); 0 without one n_ais_distinct: int = 0 # distinct values among them; 1 with several entries means one stream repeated + warnings: int = 0 + warning_messages: List[str] = field(default_factory=list) def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: @@ -307,6 +314,7 @@ def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: frames["first_hit_index"] += np.repeat(hit_offsets, [len(c.frames) for c in chunks]) roc_banks["first_hit_index"] += np.repeat(hit_offsets, [len(c.roc_banks) for c in chunks]) messages = [m for c in chunks for m in c.error_messages][:MAX_ERROR_MESSAGES] + warning_messages = [m for c in chunks for m in c.warning_messages][:MAX_ERROR_MESSAGES] return StreamHits( **columns, frames=frames, roc_banks=roc_banks, empty_banks=np.concatenate([c.empty_banks for c in chunks]), @@ -320,6 +328,7 @@ def concatenate_stream_hits(chunks: Iterable[StreamHits]) -> StreamHits: non_fadc_words=sum(c.non_fadc_words for c in chunks), n_flag_words=sum(c.n_flag_words for c in chunks), errors=sum(c.errors for c in chunks), error_messages=messages, + warnings=sum(c.warnings for c in chunks), warning_messages=warning_messages, ) @@ -340,12 +349,19 @@ def __init__(self): self.n_payload_words = self.non_fadc_words = 0 self.errors = 0 self.error_messages = [] + self.warnings = 0 + self.warning_messages = [] def error(self, event_index: int, word_i: int, reason: str) -> None: self.errors += 1 if len(self.error_messages) < MAX_ERROR_MESSAGES: self.error_messages.append(f"event {event_index} word {word_i}: {reason}") + def warning(self, event_index: int, word_i: int, reason: str) -> None: + self.warnings += 1 + if len(self.warning_messages) < MAX_ERROR_MESSAGES: + self.warning_messages.append(f"event {event_index} word {word_i}: {reason}") + def walk_event(self, words: np.ndarray, event_index: int) -> None: """Walk one event; a bad length stops the walk and is recorded, never raised.""" self.n_events += 1 @@ -353,7 +369,7 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: w = np.ascontiguousarray(words, dtype=np.uint32) # a no-op view when the dtype already matches n = len(w) read = w.item # returns Python ints; faster than indexing a numpy scalar - errors_before = self.errors + errors_before, warnings_before = self.errors, self.warnings if n < 2: self.n_other_events += 1 self.error(event_index, 0, f"event has {n} words, a bank header needs 2") @@ -392,7 +408,7 @@ def walk_event(self, words: np.ndarray, event_index: int) -> None: frame_number, timestamp, self.n_hits - hits_before, hits_before, event_index, len(self.roc_bank_rows) - roc_banks_before, self.n_payload_banks - payload_before, self.n_empty_payload_banks - empty_before, self.non_fadc_words - other_before, self.errors - errors_before, - n_ais_entries, n_ais_distinct, + self.warnings - warnings_before, n_ais_entries, n_ais_distinct, )) def _read_sib(self, w, read, event_end: int, event_index: int): @@ -421,17 +437,22 @@ def _read_sib(self, w, read, event_end: int, event_index: int): def _count_ais_entries(self, w, read, segment_i: int, sib_end: int, event_index: int): """Return ``(entries, distinct values)`` of the 0x42 segment among the SIB segments from ``segment_i``. - ``(0, 0)`` without one. The entries are uint32 words; a segment length past the SIB end - is a counted error and ends the search. + The entries are uint32 words. Three cases yield ``(0, 0)``: no 0x42 segment (nothing + recorded), a 0x42 segment with no entries (a warning), and a segment whose length runs + past the SIB end (a warning; the search ends there). No hit depends on these segments, + so none of them is an error. """ while segment_i < sib_end: header = read(segment_i) segment_len = header & 0xFFFF segment_end = segment_i + segment_len + 1 if segment_end > sib_end: - self.error(event_index, segment_i, f"SIB segment length {segment_len} runs past the SIB end {sib_end}") + self.warning(event_index, segment_i, f"SIB segment length {segment_len} runs past the SIB end {sib_end}") return 0, 0 if (header >> 24) == SIB_AIS_SEGMENT_TAG: + if segment_len == 0: + self.warning(event_index, segment_i, "AIS segment holds no entries") + return 0, 0 return segment_len, len(set(w[segment_i + 1:segment_end].tolist())) # a set beats np.unique on 24 words segment_i = segment_end return 0, 0 @@ -541,6 +562,7 @@ def to_stream_hits(self) -> StreamHits: n_empty_payload_banks=self.n_empty_payload_banks, n_unmapped_payload_banks=self.n_unmapped_payload_banks, n_payload_words=self.n_payload_words, non_fadc_words=self.non_fadc_words, n_flag_words=count_flag_words(hit_words), errors=self.errors, error_messages=self.error_messages, + warnings=self.warnings, warning_messages=self.warning_messages, ) @@ -582,6 +604,7 @@ def decode_frame(words: np.ndarray, event_index: int = 0) -> FrameHits: n_flag_words=stream_hits.n_flag_words, errors=stream_hits.errors, error_messages=stream_hits.error_messages, n_ais_entries=int(frame_row["n_ais_entries"]) if is_stream_frame else 0, n_ais_distinct=int(frame_row["n_ais_distinct"]) if is_stream_frame else 0, + warnings=stream_hits.warnings, warning_messages=stream_hits.warning_messages, ) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index 55ac914..d35c223 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -35,7 +35,7 @@ from pyevio.evio_file import EvioFile from pyevio.decoders import fadc250_stream as fs -STATS_VERSION = "2" # 2: AIS entry counts per frame and the frames_with_ais / frames_with_degenerate_ais totals +STATS_VERSION = "3" # 2: AIS entry counts per frame and the AIS totals; 3: decode warnings per frame and in total N_CHANNELS = 16 CHARGE_BIN_SHIFT = 6 # 13-bit charge >> 6 → 128 bins of 64 N_CHARGE_BINS = (fs.HIT_CHARGE_MASK + 1) >> CHARGE_BIN_SHIFT @@ -63,7 +63,8 @@ class StatsCancelled(Exception): FRAME_SCAN_DTYPE = np.dtype([("record", np.uint32), ("event", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64)]) FRAME_STATS_DTYPE = np.dtype([ ("event_index", np.uint32), ("frame", np.uint32), ("timestamp", np.uint64), ("n_hits", np.uint32), - ("non_fadc_words", np.uint32), ("errors", np.uint16), ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), + ("non_fadc_words", np.uint32), ("errors", np.uint16), ("warnings", np.uint16), + ("n_ais_entries", np.uint16), ("n_ais_distinct", np.uint16), ]) @@ -176,7 +177,7 @@ class Accumulator: ARRAYS_2D = ("empty_banks", "non_fadc_words_per_port") # (roc, port) # Totals summed from the StreamHits attribute of the same name; n_frames and the AIS totals are added apart. HITS_TOTALS = ("n_events", "n_other_events", "n_hits", "n_payload_banks", "n_empty_payload_banks", - "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", "n_flag_words", "errors") + "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", "n_flag_words", "errors", "warnings") def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.t_first, self.t_last, self.n_rate_bins = int(t_first), int(t_last), int(n_rate_bins) @@ -192,6 +193,7 @@ def __init__(self, t_first: int, t_last: int, n_rate_bins: int): self.frame_rows = [] # FRAME_STATS_DTYPE arrays, concatenated at the end self.totals = {name: 0 for name in self.HITS_TOTALS + ("n_frames", "frames_with_ais", "frames_with_degenerate_ais")} self.error_messages: List[str] = [] + self.warning_messages: List[str] = [] def _grow(self, rocs: np.ndarray, ports: np.ndarray) -> None: """Extend the axes to the union with ``rocs``/``ports``, re-indexing every array.""" @@ -266,6 +268,7 @@ def absorb(self, hits: fs.StreamHits) -> None: self.totals["frames_with_ais"] += int(np.count_nonzero(hits.frames["n_ais_entries"])) self.totals["frames_with_degenerate_ais"] += int(np.count_nonzero(fs.ais_degenerate_mask(hits.frames))) self.error_messages = (self.error_messages + hits.error_messages)[:MAX_ERROR_MESSAGES] + self.warning_messages = (self.warning_messages + hits.warning_messages)[:MAX_ERROR_MESSAGES] def merge(self, other: "Accumulator") -> None: """Add another partial (built with the same time axis) into this one.""" @@ -283,6 +286,7 @@ def merge(self, other: "Accumulator") -> None: for name in self.totals: self.totals[name] += other.totals[name] self.error_messages = (self.error_messages + other.error_messages)[:MAX_ERROR_MESSAGES] + self.warning_messages = (self.warning_messages + other.warning_messages)[:MAX_ERROR_MESSAGES] # ---------------------------------------------------------------- workers @@ -361,6 +365,8 @@ class StreamStats: n_flag_words: int errors: int error_messages: List[str] + warnings: int # malformed SIB segments after the TSS (no hit depends on them) + warning_messages: List[str] frames_with_ais: int # frames whose SIB holds an aggregation info segment (0x42) frames_with_degenerate_ais: int # of those, frames whose entries all hold one value (F15) checks: FrameChecks @@ -386,7 +392,8 @@ class StreamStats: SCALAR_FIELDS = ("version", "path", "file_size", "bytes_processed", "tick_ns", "workers", "wall_seconds", "n_records", "n_trailer_records", "n_events", "n_frames", "n_other_events", "n_out_of_bounds_events", "n_hits", "n_payload_banks", "n_empty_payload_banks", "n_unmapped_payload_banks", "n_payload_words", "non_fadc_words", - "n_flag_words", "errors", "error_messages", "frames_with_ais", "frames_with_degenerate_ais") + "n_flag_words", "errors", "error_messages", "warnings", "warning_messages", + "frames_with_ais", "frames_with_degenerate_ais") @property def frame_period_ns(self) -> float: @@ -515,6 +522,7 @@ def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: in n_unmapped_payload_banks=partial.totals["n_unmapped_payload_banks"], n_payload_words=partial.totals["n_payload_words"], non_fadc_words=partial.totals["non_fadc_words"], n_flag_words=partial.totals["n_flag_words"], errors=partial.totals["errors"], error_messages=partial.error_messages, + warnings=partial.totals["warnings"], warning_messages=partial.warning_messages, frames_with_ais=partial.totals["frames_with_ais"], frames_with_degenerate_ais=partial.totals["frames_with_degenerate_ais"], checks=checks, rocs=partial.rocs, ports=partial.ports, module_id=partial.module_id, module_ids=module_ids, module_words=module_words, diff --git a/pyevio/web/report.py b/pyevio/web/report.py index e936760..031cfa8 100644 --- a/pyevio/web/report.py +++ b/pyevio/web/report.py @@ -86,6 +86,8 @@ def row(name, status, value, detail=""): row("timestamp-step outliers", "warn" if checks.dts_outliers else "ok", checks.dts_outliers, f"median step {checks.frame_period_ticks:.0f} ticks"), row("decode errors", "error" if stats.errors else "ok", stats.errors, stats.error_messages[0] if stats.error_messages else ""), + row("decode warnings", "warn" if stats.warnings else "ok", stats.warnings, + stats.warning_messages[0] if stats.warning_messages else ""), row("flag words", "warn" if stats.n_flag_words else "ok", stats.n_flag_words, "hit words with bit 31 set"), row("unmapped payload banks", "warn" if stats.n_unmapped_payload_banks else "ok", stats.n_unmapped_payload_banks, "ports absent from the 0x41 payload map, decoded as fADC250"), diff --git a/tests/test_fadc250_stream.py b/tests/test_fadc250_stream.py index 0d3f8a2..316fa0e 100644 --- a/tests/test_fadc250_stream.py +++ b/tests/test_fadc250_stream.py @@ -170,16 +170,31 @@ def test_ais_entries_are_counted_identical_and_distinct(endian): assert fs.ais_degenerate_mask(hits.frames).tolist() == [True, False, False, False] -def test_ais_segment_past_sib_end_is_an_error_and_keeps_the_hits(): +def test_ais_segment_past_sib_end_is_a_warning_and_keeps_the_hits(): + """A malformed segment after the TSS touches no hit: a warning, not an error, and validate() passes.""" words = one_crate_frame() ais_header_i = 4 + 3 + 1 # SIB length and header, then the 4-word TSS segment assert (words[ais_header_i] >> 24) == fs.SIB_AIS_SEGMENT_TAG words[ais_header_i] = (words[ais_header_i] & 0xFFFF0000) | 500 frame = fs.decode_frame(to_words(words, "<")) - assert frame.errors == 1 and "SIB segment length 500" in frame.error_messages[0] + assert frame.errors == 0 and frame.warnings == 1 and "SIB segment length 500" in frame.warning_messages[0] assert (frame.n_ais_entries, frame.n_ais_distinct) == (0, 0) assert frame.n_hits == 6 and frame.n_roc_banks == 2 # the ROC walk starts at the SIB end, untouched by the AIS + hits = fs.decode_frames([to_words(words, "<")]) + hits.validate() + assert hits.warnings == 1 and hits.frames["warnings"].tolist() == [1] and hits.frames["errors"].tolist() == [0] + + +def test_ais_segment_without_entries_is_a_warning(): + """An AIS header with length 0 is present but lists nothing: (0, 0) like a missing one, plus a warning.""" + rocs = [roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)])] + empty = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs, ais_entries=[]), "<")) + missing = fs.decode_frame(to_words(stream_frame(FRAME_NUMBER, TIMESTAMP, rocs, ais_entries=None), "<")) + assert (empty.n_ais_entries, empty.n_ais_distinct) == (missing.n_ais_entries, missing.n_ais_distinct) == (0, 0) + assert empty.warnings == 1 and "AIS segment holds no entries" in empty.warning_messages[0] + assert missing.warnings == 0 and empty.errors == missing.errors == 0 + assert empty.n_hits == missing.n_hits == len(HITS_A) @pytest.mark.parametrize("endian", ["<", ">"]) diff --git a/tests/test_fadc250_stream_example.py b/tests/test_fadc250_stream_example.py index bf89945..001f0b6 100644 --- a/tests/test_fadc250_stream_example.py +++ b/tests/test_fadc250_stream_example.py @@ -63,7 +63,8 @@ def test_example_decode_handles_i17_and_duplicate_frames(tmp_path): checks = example.validate(stream_hits, frames) assert stats["hits"] == 7 and stats["frames"] == 3 and stats["skipped_events"] == 1 - assert stats["payload_words"] == 7 and stats["empty_payload_banks"] == 1 and stats["decode_errors"] == 0 + assert stats["payload_words"] == 7 and stats["empty_payload_banks"] == 1 + assert stats["decode_errors"] == 0 and stats["decode_warnings"] == 0 assert stats["out_of_order"] == 0 assert checks == {"missing_frames": 3, "duplicate_frames": 1} diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index a65f97a..da9bc64 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -73,7 +73,8 @@ def test_synthetic_file_totals_and_checks(tmp_path, workers): assert stats.n_events == 13 and stats.n_frames == 12 and stats.n_other_events == 1 assert stats.n_hits == expected_hits assert stats.non_fadc_words == 12 * len(DCRB_WORDS) - assert stats.n_empty_payload_banks == 24 and stats.errors == 0 and stats.n_flag_words == 0 + assert stats.n_empty_payload_banks == 24 and stats.errors == stats.warnings == 0 and stats.n_flag_words == 0 + assert stats.frames["errors"].tolist() == stats.frames["warnings"].tolist() == [0] * 12 assert stats.rocs.tolist() == [7, 44] and stats.ports.tolist() == [1, 3, 4, 5, 6] assert dict(zip(stats.module_ids.tolist(), stats.module_words.tolist())) == {fs.MODULE_FADC250: expected_hits, fs.MODULE_DCRB: 12 * len(DCRB_WORDS)} @@ -177,7 +178,7 @@ def test_corpus_first_200_records_match_decoder(): assert stats.checks.stride == 4 and stats.checks.missing_frames == 0 and stats.checks.duplicate_frames == 0 assert stats.checks.frame_period_ticks == 65536 assert int(stats.rate_counts.sum()) == decoded.n_hits and int(stats.occupancy.sum()) == decoded.n_hits - assert stats.errors == 0 and stats.n_trailer_records == 0 + assert stats.errors == stats.warnings == 0 and stats.n_trailer_records == 0 # F15: every frame of the run carries a 24-slot AIS holding one value assert stats.frames_with_ais == stats.frames_with_degenerate_ais == 2200 assert int(fs.ais_degenerate_mask(decoded.frames).sum()) == 2200 diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index 628f5ad..85c30a8 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -33,6 +33,8 @@ def test_open_progress_summary_match_direct_stats(client, served_root): "mean_size": summary["records"]["mean_size"]} checks = {row["name"]: row for row in summary["checks"]} assert checks["missing frames"]["status"] == "warn" and checks["decode errors"]["status"] == "ok" + assert checks["decode warnings"] == {"name": "decode warnings", "status": "ok", "value": 0, "detail": ""} + assert totals["warnings"] == 0 # F15: every synthetic frame's AIS repeats one entry, as the SRO hardware writes it assert totals["frames_with_ais"] == totals["frames_with_degenerate_ais"] == 12 assert checks["AIS entries identical"]["status"] == "info" and checks["AIS entries identical"]["value"] == 12 From 66e2ae9c6104d38e1ad21faa25d29b6d3a74e4db Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:19:08 -0400 Subject: [PATCH 41/65] Leave the stats version out of the cache key With STATS_VERSION in the key every version bump changed the key of every cached file: the old .npz entries were never looked up again and never removed, and nothing in pyevio.web evicts anything. The key is now the resolved path, size and mtime only. An entry of another version fails StreamStats.load, counts as a miss (logged at info) and is overwritten at the same name by the recompute, so no orphans accumulate. F60. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- docs/web_viewer.md | 2 +- pyevio/web/__init__.py | 2 +- pyevio/web/cache.py | 23 ++++++++++++++--------- tests/web/test_web_api.py | 20 ++++++++++++++++++++ 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/web_viewer.md b/docs/web_viewer.md index fa0a7ec..0e8956f 100644 --- a/docs/web_viewer.md +++ b/docs/web_viewer.md @@ -24,7 +24,7 @@ Only files under ROOT (the folder given on the command line, default the current ### Analysis and cache -Opening a file starts one analysis job on the server (`pyevio stats` on all cores minus two, or `--workers N`); the page shows its progress and the estimated time to completion. Opening another file cancels the running job. Results are cached as `.npz` under `~/.cache/pyevio/stats` (or `--cache-dir DIR`), keyed by the file path, size, modification time and the statistics version, so a second open of an unchanged file is immediate. The cache folder can be deleted at any time. +Opening a file starts one analysis job on the server (`pyevio stats` on all cores minus two, or `--workers N`); the page shows its progress and the estimated time to completion. Opening another file cancels the running job. Results are cached as `.npz` under `~/.cache/pyevio/stats` (or `--cache-dir DIR`), keyed by the file path, size and modification time, so a second open of an unchanged file is immediate. An entry written by an older statistics version is recomputed and overwritten in place, so a pyevio upgrade leaves no stale files behind. The cache folder can be deleted at any time. ### Files on a remote machine diff --git a/pyevio/web/__init__.py b/pyevio/web/__init__.py index dc49805..0c51793 100644 --- a/pyevio/web/__init__.py +++ b/pyevio/web/__init__.py @@ -11,7 +11,7 @@ - ``app``: the FastAPI factory, logging and ``serve()``. - ``auth``: Host check, token check and path confinement to ROOT. - ``jobs``: opened files, the analysis job thread and its progress. -- ``cache``: ``.npz`` result cache keyed by path, size, mtime and stats version. +- ``cache``: ``.npz`` result cache keyed by path, size and mtime; an entry of another stats version is recomputed in place. - ``structure``: tree nodes, record pages and raw words from pyevio core. - ``report``: summary and histogram JSON from ``StreamStats``. - ``routes``: the ``/api`` endpoints. diff --git a/pyevio/web/cache.py b/pyevio/web/cache.py index 4a396cc..a305593 100644 --- a/pyevio/web/cache.py +++ b/pyevio/web/cache.py @@ -1,10 +1,12 @@ """Result cache: one ``.npz`` per analyzed file under the cache directory. -The key is sha256 over the resolved path, the file size, its mtime (ns) and -``STATS_VERSION``, so a rewritten file or a changed statistics layout misses -the cache instead of serving stale numbers. The key doubles as the viewer's -``file_id``: opening the same unchanged file twice yields the same id and the -cached result. +The key is sha256 over the resolved path, the file size and its mtime (ns), so +a rewritten file misses the cache instead of serving stale numbers. The key +doubles as the viewer's ``file_id``: opening the same unchanged file twice +yields the same id and the cached result. The statistics version is not part +of the key: an entry written by an older pyevio fails ``StreamStats.load``, +counts as a miss and is overwritten at the same key by the recompute, so a +version bump leaves no orphaned files behind. """ import hashlib import logging @@ -12,7 +14,7 @@ from pathlib import Path from typing import Optional -from pyevio.stream_stats import STATS_VERSION, StreamStats +from pyevio.stream_stats import StreamStats log = logging.getLogger("pyevio.web") @@ -20,10 +22,10 @@ def cache_key(path: Path) -> str: - """sha256 of (resolved path, size, mtime_ns, STATS_VERSION) as hex.""" + """sha256 of (resolved path, size, mtime_ns) as hex.""" stat = path.stat() digest = hashlib.sha256() - for part in (str(path), stat.st_size, stat.st_mtime_ns, STATS_VERSION): + for part in (str(path), stat.st_size, stat.st_mtime_ns): digest.update(str(part).encode()) digest.update(b"\0") return digest.hexdigest() @@ -44,7 +46,10 @@ def load(self, key: str) -> Optional[StreamStats]: return None try: return StreamStats.load(str(path)) - except (OSError, ValueError, KeyError) as error: + except ValueError as error: # another stats version, or a damaged file: recomputed over the same name + log.info("cache entry %s not usable (%s); recomputing", path, error) + return None + except (OSError, KeyError) as error: log.warning("cache entry %s unreadable (%s); recomputing", path, error) return None diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index 85c30a8..9beeb7d 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -219,6 +219,26 @@ def counting_compute(path, **kwargs): assert second.get(f"/api/files/{file_id}/summary").json()["stats"]["cached"] is True +def test_stale_cache_entry_is_recomputed_in_place(client, served_root, monkeypatch): + """F60: the key leaves the stats version out, so an old entry is overwritten, never orphaned.""" + from pyevio.web.cache import StatsCache, cache_key + + path = served_root["root"] / served_root["synthetic"] + key = cache_key(path.resolve()) + stale = stream_stats.compute_stream_stats(str(path), workers=1) + stale.version = "1" + StatsCache(served_root["cache_dir"]).save(key, stale) + assert StatsCache(served_root["cache_dir"]).load(key) is None # a miss, not an exception + + calls = [] + real_compute = stream_stats.compute_stream_stats + monkeypatch.setattr(jobs, "compute_stream_stats", lambda p, **kw: calls.append(p) or real_compute(p, **kw)) + file_id, _ = open_and_wait(client, served_root["synthetic"]) + assert key.startswith(file_id) and len(calls) == 1 + cached_files = list(served_root["cache_dir"].glob("*.npz")) + assert len(cached_files) == 1 and stream_stats.StreamStats.load(str(cached_files[0])).version == stream_stats.STATS_VERSION + + def test_opening_another_file_cancels_the_running_job(client, served_root, monkeypatch): def blocking_compute(path, workers=None, progress=None, cancel=None, **_): """Blocks on the synthetic file until cancelled; any other file computes for real.""" From 40d4a1ebc2199969c1f5330c1f4b3e8144b031df Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:19:23 -0400 Subject: [PATCH 42/65] Print the AIS check and the decode warnings in pyevio stats The viewer showed the "AIS entries identical" check and the CLI did not, so the two disagreed about a file's checks. `pyevio stats` prints the frames with an aggregation info segment, how many repeat one entry in every slot, and the decode warning count with the first message. F61. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/cli/stats.py | 4 ++++ tests/test_stream_stats.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pyevio/cli/stats.py b/pyevio/cli/stats.py index 23c6163..76cd592 100644 --- a/pyevio/cli/stats.py +++ b/pyevio/cli/stats.py @@ -34,6 +34,10 @@ def print_stats_summary(console, stats): if stats.live_time_s > 0: totals.add_row("Hit rate", f"{stats.n_hits / stats.live_time_s / 1e6:,.2f} MHz of live time (fADC250)") totals.add_row("Decode errors", f"{stats.errors:,}" + (f" — first: {stats.error_messages[0]}" if stats.error_messages else "")) + totals.add_row("Decode warnings", f"{stats.warnings:,}" + (f" — first: {stats.warning_messages[0]}" if stats.warning_messages else "")) + # F15: the SRO hardware fills every AIS slot with one stream's entry; the same check the viewer shows. + totals.add_row("AIS", f"{stats.frames_with_ais:,} frames with an aggregation info segment, " + f"{stats.frames_with_degenerate_ais:,} repeat one entry in every slot") totals.add_row("Wall time", f"{stats.wall_seconds:.1f} s with {stats.workers} workers for " f"{stats.bytes_processed / 1e6:,.1f} MB ({stats.bytes_processed / max(stats.wall_seconds, 1e-9) / 1e6:,.0f} MB/s)") console.print(totals) diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index da9bc64..f86f323 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -151,6 +151,10 @@ def test_stats_command_prints_summary(tmp_path): assert result.exit_code == 0, result.output assert f"{expected_hits:,}" in result.output and "stride 4" in result.output and "1 missing" in result.output assert "DCRB" in result.output and out.exists() + # F15 / F61: the CLI prints the same AIS check and warning count the viewer shows + flat = " ".join(result.output.split()) # rich wraps the table at 80 columns under CliRunner + assert "12 frames with an aggregation info segment, 12 repeat one entry in every slot" in flat + assert "Decode warnings 0" in flat @pytest.mark.skipif(os.environ.get("PYEVIO_CORPUS") != "1", reason="set PYEVIO_CORPUS=1 to run on the SRO corpus") From 2d0d9b085c86d0ed05cdd946dc0955ee33d05189 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:20:25 -0400 Subject: [PATCH 43/65] Bring the stream_decoding doc up to stats version 3 The doc still said StreamStats.load requires version "1" and its scalar list stopped before the AIS totals; it names version "3", the AIS totals, the warnings channel and the "decode warnings" file check. F62. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- docs/stream_decoding.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/stream_decoding.md b/docs/stream_decoding.md index 36332f0..dcf15ef 100644 --- a/docs/stream_decoding.md +++ b/docs/stream_decoding.md @@ -33,7 +33,7 @@ Facts the decoder relies on, each measured on both raw files with no exception: - The payload map (segment 0x41) holds uint16 entries, two per word, read in memory order (low half first in a little-endian file); pad value 2 in the segment header means an odd entry count. An entry is `module << 8 | port`: bits 11—8 module id, bit 7 bond, bits 6—5 lane, bits 4—0 port. Module 0 is fADC250, module 1 is DCRB. Every payload bank's tag appears in its stream's map (0 exceptions in 14.2 million payload banks per file). - Every payload bank declares data type 0x00. A bank with data has num 0; an empty bank has length 1 and num 1. Both are valid. File 00000 holds 357,735 empty banks among 14,233,888 payload banks (2.51%), all on ROC ids 7, 9, 25 and 27; ports 14 and 16 of ROC ids 7 and 25 are mapped and never carry a hit. -The decoder walks this tree by length words and trusts none of them: every bank end is checked against its container, and a bad length stops the walk of that event with a counted error (`errors`, `error_messages`, the first 50 messages kept) instead of an exception. A ROC bank without a stream-info bank, or a port absent from the map, is decoded as fADC250 and counted in `n_unmapped_payload_banks`. The decoder reads the AIS segment only to count its entries and their distinct values (`n_ais_entries`, `n_ais_distinct` per frame): ROC banks come from the walk. +The decoder walks this tree by length words and trusts none of them: every bank end is checked against its container, and a bad length stops the walk of that event with a counted error (`errors`, `error_messages`, the first 50 messages kept) instead of an exception. A ROC bank without a stream-info bank, or a port absent from the map, is decoded as fADC250 and counted in `n_unmapped_payload_banks`. The decoder reads the AIS segment only to count its entries and their distinct values (`n_ais_entries`, `n_ais_distinct` per frame): ROC banks come from the walk. A malformed SIB segment after the time slice segment (a length past the SIB end, or an AIS with no entries) touches no hit, so it is a warning (`warnings`, `warning_messages`, per frame and in total), not an error, and `validate()` passes. ## Hit word @@ -99,12 +99,12 @@ Statistics are per file. For a whole run, the charge, time-in-frame, occupancy a | `hits_per_frame_hist`, `hits_per_frame_edges` | (64,), (65,) | hits per frame in 64 linear bins from 0 to the largest count | | `empty_banks` | (R, P) | empty payload banks per port | | `non_fadc_words_per_port` | (R, P) | words of other modules per port | -| `frames` | (F,) structured | per frame: event index, frame number, timestamp, hits, other-module words, errors; sorted by event index | +| `frames` | (F,) structured | per frame: event index, frame number, timestamp, hits, other-module words, errors, warnings, AIS entries and distinct values; sorted by event index | | `checks` | `FrameChecks` | frame count, first and last frame and timestamp, stride, frame period, missing, duplicate, out-of-order frames, timestamp-step outliers | -Scalars: `n_records` (data records), `n_trailer_records`, `n_events`, `n_frames`, `n_other_events` (events that are no 0xFF60 frame), `n_out_of_bounds_events` (events whose range runs past their record; counted and skipped), `n_hits`, `n_payload_banks`, `n_empty_payload_banks`, `n_unmapped_payload_banks`, `n_payload_words`, `non_fadc_words`, `n_flag_words`, `errors`, `error_messages` (first 50), plus `path`, `file_size`, `bytes_processed`, `tick_ns`, `workers`, `wall_seconds`. `per_roc(hist)` sums a (R, P, 16, bins) histogram to (R, bins); `hits_per_roc()` returns `{roc: hits}`. +Scalars: `n_records` (data records), `n_trailer_records`, `n_events`, `n_frames`, `n_other_events` (events that are no 0xFF60 frame), `n_out_of_bounds_events` (events whose range runs past their record; counted and skipped), `n_hits`, `n_payload_banks`, `n_empty_payload_banks`, `n_unmapped_payload_banks`, `n_payload_words`, `non_fadc_words`, `n_flag_words`, `errors`, `error_messages` (first 50), `warnings`, `warning_messages` (first 50), `frames_with_ais`, `frames_with_degenerate_ais`, plus `path`, `file_size`, `bytes_processed`, `tick_ns`, `workers`, `wall_seconds`. `per_roc(hist)` sums a (R, P, 16, bins) histogram to (R, bins); `hits_per_roc()` returns `{roc: hits}`. -`save(path)` writes a compressed `.npz`: one entry `meta`, a JSON string with the scalar fields, `version` and the `checks` dictionary, and one array entry per array field. `StreamStats.load(path)` opens it with `allow_pickle=False` and raises `ValueError` unless `version` equals the `STATS_VERSION` of the running pyevio (`"1"`). The full run-791 file produces a 1.6 MB `.npz`. +`save(path)` writes a compressed `.npz`: one entry `meta`, a JSON string with the scalar fields, `version` and the `checks` dictionary, and one array entry per array field. `StreamStats.load(path)` opens it with `allow_pickle=False` and raises `ValueError` unless `version` equals the `STATS_VERSION` of the running pyevio (`"3"`). The full run-791 file produces a 1.6 MB `.npz`. `pyevio stats` prints the totals, the payload words per module, the frame checks, span against live time, the fADC250 hit rate of live time, the wall time with MB/s, and a per-ROC table (module, ports, hits, other words, empty banks); `--out FILE.npz` saves the result, `--records N` stops after N records. @@ -122,4 +122,4 @@ The raw files of the SRO hardware deviate from the evio-library output in five w | AIS repeated entry | the AIS segment (tag 0x42) repeats one entry 24 times in every event instead of listing 24 streams (4 distinct values per file) | the decoder counts the entries and their distinct values per frame (`n_ais_entries`, `n_ais_distinct`); `stream_stats` counts `frames_with_ais` and `frames_with_degenerate_ais` (several entries, one value); the file check "AIS entries identical" shows the degenerate-frame count as `info`, `ok` when it is 0. ROC banks come from the walk. | | empty payload banks | length 1, num 1 on ports with no hit in the frame | counted per (ROC, stream, port) in `empty_banks`; `stream_stats.empty_banks` sums them per (ROC, port) | -Two more checks exist for any file: `("bad_record_header", offset, message)` in `EvioFile.checks` when the scan meets bytes that are no record header (a byte-swapped header and a second file header are named), and `Record.errors` when an event length runs past its record. `stream_stats` counts events past their record in `n_out_of_bounds_events` and decode errors in `errors`. +Two more checks exist for any file: `("bad_record_header", offset, message)` in `EvioFile.checks` when the scan meets bytes that are no record header (a byte-swapped header and a second file header are named), and `Record.errors` when an event length runs past its record. `stream_stats` counts events past their record in `n_out_of_bounds_events`, decode errors in `errors` and decode warnings in `warnings`; the viewer shows both as file checks ("decode errors" at error severity, "decode warnings" at warn). From d205d519ddd912fcc9aa6087e2939fce36e5a429 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 17:29:50 -0400 Subject: [PATCH 44/65] Print decode warnings in pyevio debug; changelog lines for F60 and F61 `pyevio debug` printed a frame's error messages and skipped the new warning messages. The changelog header ran to F54, and the cache-key change (F60) and the new `pyevio stats` rows (F61) had no entry. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 6 ++++-- pyevio/cli/debug.py | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0855bf..60133e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,14 @@ # Changelog -All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F54) refer to the project's defect ledger. +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F62) refer to the project's defect ledger. ## [Unreleased] ### Added - File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). -- Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check and the Parquet example prints the messages to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. +- Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check, `pyevio debug` prints the messages and the Parquet example prints them to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. +- `pyevio stats` prints the decode warnings and the AIS check (frames with an aggregation info segment, frames whose segment repeats one entry), the same checks the viewer shows (F61). - Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. - Reading of bare EVIO v6 record streams (an evio writer buffer dump, 14-word record headers with no file header) as `EvioFile.header_layout == "v6-records"`; `EvioFile.record_header_problem(offset)` names what is wrong with a record header; `pyevio info` prints the layout and the file checks. - Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. @@ -34,6 +35,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `examples/fadc250_stream_to_parquet.py`: a `stream` column, `port` widened to `uint16`, hits sorted by (frame, event index, t_ns) and frames by (frame, event index), `DECODER_VERSION` "2"; event bytes come from `record.buffer` and no `Event` objects are kept. - `RecordHeader.parse()` and `BufferReader` raise without printing hex dumps first. - Packaging: pytest, pyyaml and pyarrow sit in the default `dev` dependency group, so `uv run pytest` works without extras; setuptools package discovery is restricted to `pyevio*`. +- `pyevio web` cache key: the file path, size and modification time without the stats version. An entry written by another version is recomputed and overwritten at the same name instead of staying behind as an orphan (F60). ### Removed diff --git a/pyevio/cli/debug.py b/pyevio/cli/debug.py index 79c81a4..03a666d 100644 --- a/pyevio/cli/debug.py +++ b/pyevio/cli/debug.py @@ -263,6 +263,8 @@ def display_stream_frame(console, evio_file, event_obj): f"{frame.non_fadc_words} words of other modules") for message in frame.error_messages: console.print(f"[red]Decode error: {message}[/red]") + for message in frame.warning_messages: + console.print(f"[yellow]Decode warning: {message}[/yellow]") module_names = {fadc250_stream.MODULE_FADC250: "fADC250", fadc250_stream.MODULE_DCRB: "DCRB", fadc250_stream.MODULE_UNKNOWN: "unmapped"} From 6e6c3555e66681f323b40599a09de06cc6a6d752 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:05:38 -0400 Subject: [PATCH 45/65] Add the pyevio[gui] extra and the `pyevio gui` command; drop the ui stub MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The console viewer is the optional extra `pyevio[gui]` (textual, textual-plotext), symmetric with `pyevio[web]`; `textual` leaves the core dependencies, so the library installs with click, lz4, rich, numpy and matplotlib only. `pyevio gui [PATH]` opens a file or a folder browser and prints an install hint with exit code 1 without the extra. The `pyevio ui` command and `pyevio/ui/` (a hard-coded sample tree) are removed; nothing imported them. The EVIO file-name filter moves from `pyevio.web.routes` (which imports FastAPI) to `pyevio.web`, so the console folder browser can use it without the web extra. pytest-asyncio joins the dev group for Textual's headless pilot tests (asyncio_mode auto). Q33, Q34, Q39 (D20—D22). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- README.md | 6 +- pyevio/cli/__init__.py | 4 +- pyevio/cli/gui.py | 30 +++++++ pyevio/cli/ui.py | 24 ----- pyevio/ui/__init__.py | 4 - pyevio/ui/app.py | 193 ----------------------------------------- pyevio/web/__init__.py | 9 ++ pyevio/web/routes.py | 10 +-- pyproject.toml | 10 ++- tests/test_cli.py | 2 +- uv.lock | 84 +++++++++++++++++- 11 files changed, 136 insertions(+), 240 deletions(-) create mode 100644 pyevio/cli/gui.py delete mode 100644 pyevio/cli/ui.py delete mode 100644 pyevio/ui/__init__.py delete mode 100644 pyevio/ui/app.py diff --git a/README.md b/README.md index ec850d0..74ea992 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,9 @@ The SRO detection walks the whole chain of 8-word headers at open: a chain in wh pip install pyevio ``` -The browser viewer installs as an extra: `pip install 'pyevio[web]'`. See [docs/web_viewer.md](docs/web_viewer.md). +The browser viewer installs as an extra: `pip install 'pyevio[web]'` (see [docs/web_viewer.md](docs/web_viewer.md)); the console viewer as `pip install 'pyevio[gui]'` (see [docs/console_gui.md](docs/console_gui.md)). -Requirements: Python 3.9 or later. Dependencies installed with the package: click, lz4, rich, numpy, matplotlib, textual. +Requirements: Python 3.9 or later. Dependencies installed with the package: click, lz4, rich, numpy, matplotlib. ## Python API @@ -171,7 +171,7 @@ pyevio hex run.evio 256 --bytes --endian '<' # the default is big-endian ```bash pyevio ana run.evio --per-record # event tag statistics over the file -pyevio ui run.evio # console UI (textual) +pyevio gui run.evio # console viewer (Textual; pip install 'pyevio[gui]') pyevio web /path/to/runs # browser viewer, see docs/web_viewer.md ``` diff --git a/pyevio/cli/__init__.py b/pyevio/cli/__init__.py index 245f708..ef98910 100644 --- a/pyevio/cli/__init__.py +++ b/pyevio/cli/__init__.py @@ -9,7 +9,7 @@ from pyevio.cli.record import record_command from pyevio.cli.event import event_command from pyevio.cli.hex import hex_command -from pyevio.cli.ui import ui_command +from pyevio.cli.gui import gui_command from pyevio.cli.ana import ana_command from pyevio.cli.web import web_command from pyevio.cli.stats import stats_command @@ -48,7 +48,7 @@ def cli(ctx, verbose): cli.add_command(record_command) cli.add_command(event_command) cli.add_command(hex_command) -cli.add_command(ui_command) +cli.add_command(gui_command) cli.add_command(ana_command) cli.add_command(web_command) cli.add_command(stats_command) diff --git a/pyevio/cli/gui.py b/pyevio/cli/gui.py new file mode 100644 index 0000000..55d4c44 --- /dev/null +++ b/pyevio/cli/gui.py @@ -0,0 +1,30 @@ +import sys +from pathlib import Path + +import click + + +@click.command(name="gui") +@click.argument("path", type=click.Path(exists=True), default=".") +@click.option("--cache-dir", type=click.Path(file_okay=False), default=None, + help="Where analysis results (.npz) are cached (default: ~/.cache/pyevio/stats, shared with pyevio web)") +@click.option("--workers", "-w", type=int, default=None, help="Worker processes for the analysis (default: cores minus two)") +def gui_command(path, cache_dir, workers): + """Browse an EVIO file in the terminal: checks, plots, records and structure. + + PATH is a file to open, or a folder (default: the current one) to pick a + file from. The analysis runs in the background and its result is cached, + so a file analyzed here opens at once in `pyevio web`, and the other way round. + """ + try: + from pyevio.gui.app import PyEvioGui + except ImportError: + from pyevio.gui import INSTALL_HINT + click.echo(INSTALL_HINT, err=True) + sys.exit(1) + from pyevio.gui.session import Session + + target = Path(path) + session = Session(cache_dir=Path(cache_dir) if cache_dir else None, workers=workers) + app = PyEvioGui(session, start_path=target if target.is_file() else None, start_dir=target if target.is_dir() else target.parent) + app.run() diff --git a/pyevio/cli/ui.py b/pyevio/cli/ui.py deleted file mode 100644 index 08c185e..0000000 --- a/pyevio/cli/ui.py +++ /dev/null @@ -1,24 +0,0 @@ -import click -from rich.console import Console -from rich.table import Table -from rich import box -from datetime import datetime - -from pyevio.evio_file import EvioFile -from pyevio.utils import make_hex_dump - -@click.command(name="ui") -@click.argument("filename", type=click.Path(exists=True)) -@click.option('--verbose', '-v', is_flag=True, help="Enable verbose output") -@click.pass_context -def ui_command(ctx, filename, verbose): - """Launch the textual UI for EVIO file inspection.""" - try: - from pyevio.ui.app import PyEvioApp - except ImportError: - print("Error: The textual library is required for the UI.") - print("Please install it with: pip install textual>=0.30.0") - return - - app = PyEvioApp(filename) - app.run() \ No newline at end of file diff --git a/pyevio/ui/__init__.py b/pyevio/ui/__init__.py deleted file mode 100644 index 19bad55..0000000 --- a/pyevio/ui/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -"""UI module for pyevio.""" -from .app import PyEvioApp - -__all__ = ["PyEvioApp"] \ No newline at end of file diff --git a/pyevio/ui/app.py b/pyevio/ui/app.py deleted file mode 100644 index eb46b67..0000000 --- a/pyevio/ui/app.py +++ /dev/null @@ -1,193 +0,0 @@ -"""Main application class for the pyevio UI.""" -import os -from rich.text import Text -from textual.app import App -from textual.widgets import Header, Footer, Tree, RichLog -from textual.containers import Container, Horizontal -from textual.binding import Binding - -class PyEvioApp(App): - """The main pyevio UI application.""" - - BINDINGS = [ - Binding(key="f2", action="view", description="View"), - Binding(key="f10", action="exit", description="Exit"), - ] - - CSS = """ - #main-container { - height: 100%; - } - - #left-panel { - width: 30%; - min-width: 20; - border: solid $accent; - } - - #right-panel { - width: 70%; - min-width: 50; - background: $surface; - border: solid $accent; - overflow-y: auto; - } - - Tree { - padding: 1; - } - - RichLog { - padding: 1; - } - """ - - def __init__(self, file_path: str): - """Initialize the application with a file path.""" - super().__init__() - self.file_path = file_path - self.file_size = 0 # Will be set during setup - - def compose(self): - """Compose the UI layout.""" - # Calculate file size - try: - self.file_size = os.path.getsize(self.file_path) - # Create the title - title = f"{self.file_path} ({self.file_size/1024:.2f} KB)" - except OSError as e: - title = f"{self.file_path} (Error: {str(e)})" - - yield Header(title) - - with Horizontal(id="main-container"): - # Left panel with tree - tree = Tree("File Structure", id="file-tree") - tree.root.expand() - - # Yield the container first - left_panel = Container(tree, id="left-panel") - yield left_panel - - # Right panel with text (using RichLog for better scrolling) - right_log = RichLog(id="detail-view") - right_log.write("Select an item in the tree to view details.") - yield Container(right_log, id="right-panel") - - yield Footer() - - def on_mount(self): - """Called when the app is mounted.""" - self.build_tree() - - def build_tree(self): - """Build the initial file structure tree with sample data.""" - # Get the tree widget - tree = self.query_one("#file-tree", Tree) - - # Add the file header - file_node = tree.root.add("File Header") - file_node.add("Magic Number: EVIO") - file_node.add("Version: 6") - file_node.add("Endianness: Little Endian") - - # Add records - records_node = tree.root.add("Records") - # Add sample data for now - for i in range(5): - record_node = records_node.add(f"Record #{i}") - record_node.add(f"Length: {100 + i*10} words") - record_node.add(f"Events: {i+1}") - - # Add sample events - events_node = record_node.add("Events") - for j in range(i+1): - event_node = events_node.add(f"Event #{j}") - event_node.add(f"Length: {50 + j*5} bytes") - event_node.add(f"Type: Physics") - - def on_tree_node_highlighted(self, event): - """Handle tree node highlighting.""" - # Update the right panel with information about the highlighted node - node = event.node - - # Get the text view widget - text_view = self.query_one("#detail-view", RichLog) - - # Clear previous content - text_view.clear() - - if "File Header" in node.label: - text_view.write("# File Header Information\n") - text_view.write("\nMagic Number: EVIO (0x4556494F)") - text_view.write("\nVersion: 6") - text_view.write("\nEndianness: Little") - text_view.write("\nRecord Count: 5") - text_view.write("\nIndex Array Length: 0 bytes") - text_view.write("\nUser Header Length: 0 bytes") - text_view.write("\nTrailer Position: 0x0") - - elif "Record #" in node.label: - record_num = node.label.split("#")[1] - text_view.write(f"# Record {record_num} Information\n") - text_view.write(f"\nOffset: 0x{1000 + int(record_num) * 100:X}") - text_view.write(f"\nLength: {100 + int(record_num) * 10} words") - text_view.write(f"\nEvents: {int(record_num) + 1}") - text_view.write(f"\nType: Physics") - text_view.write(f"\nCompression: None") - - elif node.label.plain.startswith("Event #"): - event_num = node.label.split("#")[1] - text_view.write(f"# Event {event_num} Information\n") - text_view.write(f"\nOffset: 0x{2000 + int(event_num) * 50:X}") - text_view.write(f"\nLength: {50 + int(event_num) * 5} bytes") - text_view.write(f"\nType: Physics") - text_view.write(f"\nBank Tag: 0xFF60") - text_view.write(f"\nBank Type: 0x10") - - elif "Magic Number" in node.label: - text_view.write("# Magic Number\n") - text_view.write("\nThe magic number identifies this file as an EVIO file.") - text_view.write("\nValue: 0x4556494F (ASCII: 'EVIO')") - text_view.write("\nLocation: First word of file header") - - elif "Version" in node.label: - text_view.write("# Version Information\n") - text_view.write("\nThis file uses EVIO format version 6.") - text_view.write("\nVersion 6 supports data compression and enhanced metadata.") - - elif "Endianness" in node.label: - text_view.write("# Endianness\n") - text_view.write("\nThis file uses little endian byte ordering.") - text_view.write("\nThis means the least significant byte is stored first.") - - elif "Length" in node.label: - text_view.write("# Length Information\n") - length_val = node.label.split(": ")[1].split(" ")[0] - text_view.write(f"\nThe length is {length_val} words/bytes.") - text_view.write("\nFor records, length is measured in 32-bit words.") - text_view.write("\nFor events, length is typically measured in bytes.") - - elif "Events" in node.label and ": " in node.label: - text_view.write("# Event Count\n") - count = node.label.split(": ")[1] - text_view.write(f"\nThis record contains {count} events.") - text_view.write("\nEach event contains a bank structure with data.") - - elif node.label == "Events": - text_view.write("# Events\n") - text_view.write("\nEvents contain the actual physics data.") - text_view.write("\nEach event has a hierarchical bank structure.") - text_view.write("\nSelect an event to see more details.") - - else: - text_view.write(f"# {node.label}\n") - text_view.write("\nNo detailed information available.") - - def action_view(self): - """Handle the view action (F2).""" - self.notify("Detail view mode - Press F10 to exit") - - def action_exit(self): - """Handle the exit action (F10).""" - self.exit() \ No newline at end of file diff --git a/pyevio/web/__init__.py b/pyevio/web/__init__.py index 0c51793..d47004a 100644 --- a/pyevio/web/__init__.py +++ b/pyevio/web/__init__.py @@ -32,6 +32,15 @@ def __init__(self, status: int, message: str): self.message = message +EVIO_NAME_MARKERS = (".evio", ".dat", ".ev") + + +def is_evio_name(name: str) -> bool: + """True for file names the folder browsers list by default (a marker anywhere in the name: ``run.evio.00000.v6`` counts).""" + lower = name.lower() + return any(marker in lower for marker in EVIO_NAME_MARKERS) + + WEB_DIR = Path(__file__).resolve().parent INDEX_HTML = WEB_DIR / "index.html" INSTALL_HINT = "The web viewer needs FastAPI and uvicorn: pip install 'pyevio[web]'" diff --git a/pyevio/web/routes.py b/pyevio/web/routes.py index f61228d..0105133 100644 --- a/pyevio/web/routes.py +++ b/pyevio/web/routes.py @@ -13,7 +13,7 @@ from pydantic import BaseModel from pyevio.evio_file import EvioFile -from pyevio.web import ApiError +from pyevio.web import ApiError, is_evio_name from pyevio.web.auth import inside_root, resolve_under_root from pyevio.web.jobs import FileRegistry from pyevio.web.report import build_summary, histogram @@ -22,14 +22,6 @@ router = APIRouter(prefix="/api") # Files the folder browser lists by default; the corpus names end in ".evio.00000.v6", so match the stem too. -EVIO_NAME_MARKERS = (".evio", ".dat", ".ev") - - -def is_evio_name(name: str) -> bool: - lower = name.lower() - return any(marker in lower for marker in EVIO_NAME_MARKERS) - - def registry_of(request: Request) -> FileRegistry: return request.app.state.registry diff --git a/pyproject.toml b/pyproject.toml index 3f6bd15..8e70335 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,6 @@ dependencies = [ "rich", "numpy", "matplotlib", - "textual" ] @@ -22,6 +21,10 @@ web = [ "fastapi>=0.110", "uvicorn>=0.27", ] +gui = [ + "textual>=4.0", + "textual-plotext>=1.0", +] # uv installs the dev group by default, so `uv run pytest` works without extras. [dependency-groups] @@ -31,7 +34,10 @@ dev = [ "playwright>=1.60.0", "pyarrow>=21.0.0", "pytest", + "pytest-asyncio>=0.24", "pyyaml>=6.0.3", + "textual>=4.0", + "textual-plotext>=1.0", "uvicorn>=0.39.0", ] @@ -52,6 +58,8 @@ include = ["pyevio*"] pyevio = "pyevio.cli:main" [tool.pytest.ini_options] +asyncio_mode = "auto" +asyncio_default_fixture_loop_scope = "function" markers = [ "slow: scans multi-gigabyte files; tests/golden/test_corpus.py runs only with PYEVIO_CORPUS=1", ] diff --git a/tests/test_cli.py b/tests/test_cli.py index 66929cb..00fed55 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,7 +12,7 @@ # Every command that opens its file with EvioFile, with the arguments it needs after the # file; the group converts the EvioFile error for all of them (F47). Absent on purpose: -# ``hex`` dumps raw bytes of any file, ``ui`` is an interactive textual app, ``web`` takes a directory. +# ``hex`` dumps raw bytes of any file, ``gui`` is an interactive textual app, ``web`` takes a directory. FILE_COMMANDS = { "info": [], "dump": [], diff --git a/uv.lock b/uv.lock index 59d2259..f2841d2 100644 --- a/uv.lock +++ b/uv.lock @@ -79,6 +79,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, ] +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, +] + [[package]] name = "certifi" version = "2026.7.22" @@ -2195,6 +2204,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/75/2432b3e3c7c62103b72d4c4cc8b16a56383ada372bbb0d1278591e988f71/playwright-1.63.0-py3-none-win_arm64.whl", hash = "sha256:1e4a3a838ce22fb68ad17193fcd142a19610d9d70fb9966d2239f5dddc0cc05b", size = 34523554, upload-time = "2026-09-15T16:49:36.455Z" }, ] +[[package]] +name = "plotext" +version = "5.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/d7/f75f397af966fe252d0d34ffd3cae765317fce2134f925f95e7d6725d1ce/plotext-5.3.2.tar.gz", hash = "sha256:52d1e932e67c177bf357a3f0fe6ce14d1a96f7f7d5679d7b455b929df517068e", size = 61967, upload-time = "2024-09-24T15:13:37.728Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/1e/12fe7c40cd2099a1f454518754ed229b01beaf3bbb343127f0cc13ce6c22/plotext-5.3.2-py3-none-any.whl", hash = "sha256:394362349c1ddbf319548cfac17ca65e6d5dfc03200c40dfdc0503b3e95a2283", size = 64047, upload-time = "2024-09-24T15:13:36.296Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -2721,10 +2739,13 @@ dependencies = [ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "numpy", version = "2.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "rich" }, - { name = "textual" }, ] [package.optional-dependencies] +gui = [ + { name = "textual" }, + { name = "textual-plotext" }, +] test = [ { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, @@ -2748,7 +2769,11 @@ dev = [ { name = "pyarrow", version = "26.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest-asyncio", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest-asyncio", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pyyaml" }, + { name = "textual" }, + { name = "textual-plotext" }, { name = "uvicorn", version = "0.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "uvicorn", version = "0.54.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] @@ -2762,10 +2787,11 @@ requires-dist = [ { name = "numpy" }, { name = "pytest", marker = "extra == 'test'" }, { name = "rich" }, - { name = "textual" }, + { name = "textual", marker = "extra == 'gui'", specifier = ">=4.0" }, + { name = "textual-plotext", marker = "extra == 'gui'", specifier = ">=1.0" }, { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.27" }, ] -provides-extras = ["test", "web"] +provides-extras = ["test", "web", "gui"] [package.metadata.requires-dev] dev = [ @@ -2774,7 +2800,10 @@ dev = [ { name = "playwright", specifier = ">=1.60.0" }, { name = "pyarrow", specifier = ">=21.0.0" }, { name = "pytest" }, + { name = "pytest-asyncio", specifier = ">=0.24" }, { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "textual", specifier = ">=4.0" }, + { name = "textual-plotext", specifier = ">=1.0" }, { name = "uvicorn", specifier = ">=0.39.0" }, ] @@ -2840,6 +2869,42 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] +[[package]] +name = "pytest-asyncio" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "backports-asyncio-runner" }, + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/86/9e3c5f48f7b7b638b216e4b9e645f54d199d7abbbab7a64a13b4e12ba10f/pytest_asyncio-1.2.0.tar.gz", hash = "sha256:c609a64a2a8768462d0c99811ddb8bd2583c33fd33cf7f21af1c142e824ffb57", size = 50119, upload-time = "2025-09-12T07:33:53.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/93/2fa34714b7a4ae72f2f8dad66ba17dd9a2c793220719e736dda28b7aec27/pytest_asyncio-1.2.0-py3-none-any.whl", hash = "sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99", size = 15095, upload-time = "2025-09-12T07:33:52.639Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, + { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -3003,6 +3068,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/be/35261223d9416a0751cdff1c7b4a6f881387218a12d439fe22fefebc8c04/textual-8.2.8-py3-none-any.whl", hash = "sha256:267375fd402dc8d981457212efa71f0e3365fd17bba144ba9bb3ed7563cb374a", size = 731418, upload-time = "2026-06-30T06:51:26.364Z" }, ] +[[package]] +name = "textual-plotext" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "plotext" }, + { name = "textual" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/b0/e4e0f38df057db778252db0dd2c08522d7222b8537b6a0181d797b9044bd/textual_plotext-1.0.1.tar.gz", hash = "sha256:836f53a3316756609e194129a35c2875638e7958c261f541e0a794f7c98011be", size = 16489, upload-time = "2024-11-30T19:25:56.625Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/53/fba7da208f9d3f59254413660fa0aa6599f2aca806f3ae356670455fd4ea/textual_plotext-1.0.1-py3-none-any.whl", hash = "sha256:6b6bfd00b29f121ddf216eaaf9bdac9d688ed72f40028484d279a10cbbb169ed", size = 16558, upload-time = "2024-11-30T19:25:32.208Z" }, +] + [[package]] name = "tomli" version = "2.5.0" From 300910d8213b10db66e2af08db0992772449770f Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:05:38 -0400 Subject: [PATCH 46/65] Console viewer backbone: session, app skeleton, open screen, pilot tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `pyevio.gui.session.Session` (no Textual) owns the open EvioFile, loads the shared statistics cache or starts the same AnalysisJob thread the web server uses, and serves summary, histograms, record rows, structure nodes and raw words through the `pyevio.web` model functions, so both viewers show the same numbers. Opening an unreadable file raises before the current file is touched; switching files cancels the running analysis. `PyEvioGui`: header, status strip with progress and the last error, four tabs (Overview, Plots, Records, Structure, keys 1—4) and the open screen (`o`): a directory tree filtered to EVIO names (Ctrl+A for every file), a path input, Backspace for the parent folder, Escape to cancel. The app polls the job on a timer and drives the panes through three hooks (file_closed, file_opened, stats_ready); panes hold model dicts only, so EvioFile.close() never meets a live view. The four panes are placeholders to be filled per tab. Q36, Q37, Q38 (D23—D25). Tests: tests/gui/test_session.py (open, cache hit, refusal, cancel on switch) and tests/gui/test_app.py (start with a file, tabs, open screen, unreadable file keeps the current one, start without a file). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/__init__.py | 22 +++ pyevio/gui/app.py | 292 ++++++++++++++++++++++++++++++++++++++ pyevio/gui/overview.py | 22 +++ pyevio/gui/panes.py | 46 ++++++ pyevio/gui/plots.py | 13 ++ pyevio/gui/records.py | 13 ++ pyevio/gui/session.py | 138 ++++++++++++++++++ pyevio/gui/structure.py | 17 +++ tests/gui/conftest.py | 63 ++++++++ tests/gui/test_app.py | 82 +++++++++++ tests/gui/test_session.py | 75 ++++++++++ 11 files changed, 783 insertions(+) create mode 100644 pyevio/gui/__init__.py create mode 100644 pyevio/gui/app.py create mode 100644 pyevio/gui/overview.py create mode 100644 pyevio/gui/panes.py create mode 100644 pyevio/gui/plots.py create mode 100644 pyevio/gui/records.py create mode 100644 pyevio/gui/session.py create mode 100644 pyevio/gui/structure.py create mode 100644 tests/gui/conftest.py create mode 100644 tests/gui/test_app.py create mode 100644 tests/gui/test_session.py diff --git a/pyevio/gui/__init__.py b/pyevio/gui/__init__.py new file mode 100644 index 0000000..8143712 --- /dev/null +++ b/pyevio/gui/__init__.py @@ -0,0 +1,22 @@ +"""Console viewer for EVIO files: a Textual app in the terminal. + +``pyevio gui [PATH]`` shows the same things as the browser viewer, in the +terminal: file checks and totals, plots, the record table and the structure +tree down to single hit words. It reads through the same model modules as +``pyevio web`` (``pyevio.web.report``, ``pyevio.web.structure``, +``pyevio.web.jobs``, ``pyevio.web.cache``; none of them imports FastAPI), so +the two viewers agree on every number and share the statistics cache. + +Modules, one job each: + +- ``session``: the open file, its analysis job and the cached statistics. No Textual. +- ``app``: the Textual app, the status strip and the file-open screen. +- ``overview``, ``plots``, ``records``, ``structure``: one pane per tab. +- ``export``: the current plot as a PNG through matplotlib. + +Textual and textual-plotext are the optional extra ``pyevio[gui]``; this +package imports them only inside the widget modules, so ``pyevio.gui.session`` +works without them. +""" + +INSTALL_HINT = "The console viewer needs Textual and textual-plotext: pip install 'pyevio[gui]'" diff --git a/pyevio/gui/app.py b/pyevio/gui/app.py new file mode 100644 index 0000000..15db356 --- /dev/null +++ b/pyevio/gui/app.py @@ -0,0 +1,292 @@ +"""The Textual app: status strip, four tabs, the file-open screen and the progress poll. + +Threading: the analysis runs in the session's job thread and writes only its own +fields; this app reads them on a timer (``_poll``) from the main thread and +drives the panes. No widget is ever touched from the job thread. +""" +from pathlib import Path +from typing import Optional + +from textual.app import App, ComposeResult +from textual.binding import Binding +from textual.containers import Horizontal, Vertical +from textual.screen import ModalScreen +from textual.widgets import DirectoryTree, Footer, Header, Input, Label, ProgressBar, Static, TabbedContent, TabPane + +from pyevio.gui.overview import OverviewPane +from pyevio.gui.plots import PlotsPane +from pyevio.gui.records import RecordsPane +from pyevio.gui.session import STATE_EMPTY, Session +from pyevio.gui.structure import StructurePane +from pyevio.web import ApiError, is_evio_name +from pyevio.web.jobs import STATE_DONE, STATE_ERROR, STATE_CANCELLED + +POLL_INTERVAL_S = 0.2 +TAB_IDS = ("overview", "plots", "records", "structure") + + +class EvioDirectoryTree(DirectoryTree): + """Folders and EVIO-named files; ``show_all`` lists every file.""" + + def __init__(self, path, show_all: bool = False, **kwargs): + super().__init__(path, **kwargs) + self.show_all = show_all + + def filter_paths(self, paths): + for path in paths: + if path.name.startswith("."): + continue + if path.is_dir() or self.show_all or is_evio_name(path.name): + yield path + + +class OpenScreen(ModalScreen[Optional[Path]]): + """Pick a file: type a path (a folder re-roots the tree), or select one in the tree. Escape cancels.""" + + BINDINGS = [ + Binding("escape", "cancel", "Cancel"), + Binding("backspace", "go_up", "Parent folder"), + Binding("ctrl+a", "toggle_all", "All files"), + ] + DEFAULT_CSS = """ + OpenScreen { + align: center middle; + } + OpenScreen > Vertical { + width: 90%; + height: 90%; + border: round $accent; + background: $surface; + padding: 0 1; + } + OpenScreen Input { + margin-bottom: 1; + } + OpenScreen EvioDirectoryTree { + height: 1fr; + } + OpenScreen #open-hint { + color: $text-muted; + } + """ + + def __init__(self, root: Path): + super().__init__() + self.root = Path(root).expanduser().resolve() + + def compose(self) -> ComposeResult: + with Vertical(): + yield Label("Open an EVIO file — type a path and press Enter, or pick one below") + yield Input(value=str(self.root), placeholder="path to a file or folder", id="open-path") + yield EvioDirectoryTree(self.root, id="open-tree") + yield Label("Enter opens · Backspace goes to the parent folder · Ctrl+A shows every file · Escape cancels", id="open-hint") + + def reroot(self, folder: Path) -> None: + self.root = folder + self.query_one("#open-path", Input).value = str(folder) + self.query_one("#open-tree", EvioDirectoryTree).path = folder + + def on_input_submitted(self, event: Input.Submitted) -> None: + path = Path(event.value).expanduser() + if path.is_file(): + self.dismiss(path.resolve()) + elif path.is_dir(): + self.reroot(path.resolve()) + else: + self.notify(f"no such file or folder: {event.value}", severity="error") + + def on_directory_tree_file_selected(self, event: DirectoryTree.FileSelected) -> None: + event.stop() + self.dismiss(Path(event.path).resolve()) + + def action_cancel(self) -> None: + self.dismiss(None) + + def action_go_up(self) -> None: + if self.root.parent != self.root: + self.reroot(self.root.parent) + + def action_toggle_all(self) -> None: + tree = self.query_one("#open-tree", EvioDirectoryTree) + tree.show_all = not tree.show_all + tree.reload() + + +class StatusStrip(Horizontal): + """One line under the header: the file, the analysis state, progress and the last error.""" + + DEFAULT_CSS = """ + StatusStrip { + height: 1; + padding: 0 1; + } + StatusStrip #status-text { + width: 1fr; + } + StatusStrip ProgressBar { + width: 30; + } + StatusStrip #status-error { + color: $error; + width: auto; + margin-left: 2; + } + """ + + def compose(self) -> ComposeResult: + yield Static("No file open — press o", id="status-text") + yield ProgressBar(total=100, show_eta=False, id="status-progress") + yield Static("", id="status-error") + + def show(self, text: str, fraction: Optional[float] = None) -> None: + self.query_one("#status-text", Static).update(text) + bar = self.query_one("#status-progress", ProgressBar) + bar.display = fraction is not None + if fraction is not None: + bar.update(progress=fraction * 100) + + def show_error(self, text: str) -> None: + self.query_one("#status-error", Static).update(text) + + +class PyEvioGui(App): + """``pyevio gui``: the console viewer.""" + + TITLE = "pyevio" + CSS = """ + TabbedContent { + height: 1fr; + } + """ + BINDINGS = [ + Binding("o", "open_file", "Open"), + Binding("1", "tab('overview')", "Overview"), + Binding("2", "tab('plots')", "Plots"), + Binding("3", "tab('records')", "Records"), + Binding("4", "tab('structure')", "Structure"), + Binding("q", "quit", "Quit"), + ] + + def __init__(self, session: Session, start_path: Optional[Path] = None, start_dir: Optional[Path] = None): + super().__init__() + self.session = session + self.start_path = Path(start_path) if start_path else None + self.start_dir = Path(start_dir) if start_dir else (self.start_path.parent if self.start_path else Path.cwd()) + self._poll_timer = None + # Direct references: TabbedContent mounts its panes after the app's own mount, so a query can come too early. + self.overview = OverviewPane(session, id="overview") + self.plots = PlotsPane(session, id="plots") + self.records = RecordsPane(session, id="records") + self.structure = StructurePane(session, id="structure") + self.panes = [self.overview, self.plots, self.records, self.structure] + + def compose(self) -> ComposeResult: + yield Header() + yield StatusStrip(id="status") + with TabbedContent(id="tabs"): + with TabPane("Overview", id="tab-overview"): + yield self.overview + with TabPane("Plots", id="tab-plots"): + yield self.plots + with TabPane("Records", id="tab-records"): + yield self.records + with TabPane("Structure", id="tab-structure"): + yield self.structure + yield Footer() + + def on_mount(self) -> None: + self.query_one("#status", StatusStrip).show("No file open — press o", None) + self.call_after_refresh(self._start) # the panes are mounted by then + + def _start(self) -> None: + if self.start_path is not None: + self.open_path(self.start_path) + else: + self.action_open_file() + + def on_unmount(self) -> None: + # The panes' children are gone by now; only the session needs closing (the job thread is cancelled). + try: + self.session.close() + except BufferError: + pass # a pane kept a view; the process ends anyway + + # ---------------------------------------------------------------- opening files + def action_open_file(self) -> None: + self.push_screen(OpenScreen(self.session.path.parent if self.session.path else self.start_dir), callback=self.open_path) + + def open_path(self, path: Optional[Path]) -> None: + """Open ``path`` in the session and reset every pane; a failure keeps the current file and shows the reason.""" + if path is None: + return + status = self.query_one("#status", StatusStrip) + status.show_error("") + if self._poll_timer is not None: + self._poll_timer.stop() + self._poll_timer = None + for pane in self.panes: + pane.file_closed() + try: + self.session.open(path) + except (ValueError, OSError, BufferError) as error: + self.show_error(f"{path}: {error}") + if self.session.is_open: + for pane in self.panes: + pane.file_opened() + self._poll() + return + self.sub_title = str(path) + self.start_dir = Path(path).parent + for pane in self.panes: + pane.file_opened() + self._poll() + if self.session.state != STATE_DONE: + self._poll_timer = self.set_interval(POLL_INTERVAL_S, self._poll) + + def show_error(self, message: str) -> None: + self.query_one("#status", StatusStrip).show_error(message) + self.notify(message, severity="error", timeout=8) + + # ---------------------------------------------------------------- analysis progress + def _poll(self) -> None: + status = self.query_one("#status", StatusStrip) + progress = self.session.progress() + state = progress["state"] + name = self.session.path.name if self.session.path else "" + if state == STATE_EMPTY: + status.show("No file open — press o", None) + return + if state == STATE_DONE: + if self._poll_timer is not None: + self._poll_timer.stop() + self._poll_timer = None + source = "cached" if progress["cached"] else f"{progress['elapsed_s']:.1f} s" + status.show(f"{name} — analysis done ({progress['records_total']:,} records, {source})", None) + try: + summary = self.session.summary() + except ApiError as error: + self.show_error(error.message) + return + for pane in self.panes: + pane.stats_ready(summary) + return + if state in (STATE_ERROR, STATE_CANCELLED): + if self._poll_timer is not None: + self._poll_timer.stop() + self._poll_timer = None + status.show(f"{name} — analysis {state}", None) + if progress["error"]: + self.show_error(progress["error"]) + return + eta = f", {progress['eta_s']:.0f} s left" if progress["eta_s"] else "" + status.show(f"{name} — analyzing {progress['records_done']:,} of {progress['records_total']:,} records{eta}", + progress["fraction"]) + + # ---------------------------------------------------------------- navigation + def action_tab(self, name: str) -> None: + self.query_one("#tabs", TabbedContent).active = f"tab-{name}" + + def show_structure_node(self, node_id: str) -> None: + """Switch to the Structure tab and select the node (``r3`` a record, ``r3/e1`` an event, …).""" + self.action_tab("structure") + self.structure.show_node(node_id) diff --git a/pyevio/gui/overview.py b/pyevio/gui/overview.py new file mode 100644 index 0000000..e72df8b --- /dev/null +++ b/pyevio/gui/overview.py @@ -0,0 +1,22 @@ +"""Overview tab: totals, file checks, what stands out, file facts and one row per ROC.""" +from textual.widgets import Static + +from pyevio.gui.panes import Pane + + +class OverviewPane(Pane): + def compose(self): + yield Static("Open a file to see its checks and totals.", id="overview-placeholder") + + def file_closed(self) -> None: + super().file_closed() + self.query_one("#overview-placeholder", Static).update("Open a file to see its checks and totals.") + + def file_opened(self) -> None: + self.query_one("#overview-placeholder", Static).update("Analyzing…") + + def stats_ready(self, summary: dict) -> None: + super().stats_ready(summary) + totals = summary["totals"] + self.query_one("#overview-placeholder", Static).update( + f"{summary['file']['path']}: {totals['n_records']:,} records, {totals['n_events']:,} events, {totals['n_hits']:,} hits") diff --git a/pyevio/gui/panes.py b/pyevio/gui/panes.py new file mode 100644 index 0000000..7677663 --- /dev/null +++ b/pyevio/gui/panes.py @@ -0,0 +1,46 @@ +"""The base of the four tab panes and the contract between the app and a pane. + +The app owns the :class:`~pyevio.gui.session.Session` and drives every pane +through three hooks, always from the main thread: + +- :meth:`Pane.file_closed` — the previous file is going away: drop every row, node + and plot that refers to it. Called before the session closes the file. +- :meth:`Pane.file_opened` — a file is open; its analysis may still be running. + Records and Structure load now, because they read the file, not the statistics. +- :meth:`Pane.stats_ready` — the analysis finished; ``summary`` is the dict of + ``pyevio.web.report.build_summary``. Overview and Plots load now. + +A pane keeps only what the session's model functions return (dicts, lists, +numbers), never a ``Record``, ``Event`` or ``Bank``: a live view of the file +mmap makes ``EvioFile.close()`` raise ``BufferError`` on the next file switch. +Anything slow runs through the session on demand (a page of 500 rows, one node's +children, one window of words), never the whole file. +""" +from typing import Optional + +from textual.containers import Vertical + + +class Pane(Vertical): + """One tab's content; see the module docstring for the hooks.""" + + DEFAULT_CSS = """ + Pane { + height: 1fr; + padding: 0 1; + } + """ + + def __init__(self, session, **kwargs): + super().__init__(**kwargs) + self.session = session + self.summary: Optional[dict] = None # the last build_summary dict, None until stats_ready + + def file_closed(self) -> None: + self.summary = None + + def file_opened(self) -> None: + pass + + def stats_ready(self, summary: dict) -> None: + self.summary = summary diff --git a/pyevio/gui/plots.py b/pyevio/gui/plots.py new file mode 100644 index 0000000..44393cb --- /dev/null +++ b/pyevio/gui/plots.py @@ -0,0 +1,13 @@ +"""Plots tab: hits per frame, rate, occupancy, charge and time in frame, at file, ROC and channel level.""" +from textual.widgets import Static + +from pyevio.gui.panes import Pane + + +class PlotsPane(Pane): + def compose(self): + yield Static("Plots appear when the analysis is done.", id="plots-placeholder") + + def stats_ready(self, summary: dict) -> None: + super().stats_ready(summary) + self.query_one("#plots-placeholder", Static).update(f"{summary['totals']['n_hits']:,} hits to plot") diff --git a/pyevio/gui/records.py b/pyevio/gui/records.py new file mode 100644 index 0000000..dedfc21 --- /dev/null +++ b/pyevio/gui/records.py @@ -0,0 +1,13 @@ +"""Records tab: a paged table of the record headers; Enter opens the record in the Structure tab.""" +from textual.widgets import Static + +from pyevio.gui.panes import Pane + + +class RecordsPane(Pane): + def compose(self): + yield Static("Open a file to list its records.", id="records-placeholder") + + def file_opened(self) -> None: + page = self.session.records(0, 1) + self.query_one("#records-placeholder", Static).update(f"{page['total']:,} records") diff --git a/pyevio/gui/session.py b/pyevio/gui/session.py new file mode 100644 index 0000000..c6faa4f --- /dev/null +++ b/pyevio/gui/session.py @@ -0,0 +1,138 @@ +"""The one open file of the console viewer: its ``EvioFile``, its analysis job and its statistics. + +No Textual here. The app calls :meth:`Session.open` from its main thread, polls +:meth:`Session.progress` on a timer while the analysis runs in the job's own +thread, and reads everything else (summary, tree nodes, record rows, raw +words, histograms) through the same functions the web server uses, so the two +viewers show the same numbers for the same file. + +The job thread never touches the ``EvioFile`` of the session: ``compute_stream_stats`` +opens the file itself in its workers. Every pane holds only the dicts the model +functions return, never a ``Record`` or ``Bank``; a live numpy view would make +``EvioFile.close()`` raise ``BufferError`` on the next file switch. +""" +import time +from pathlib import Path +from typing import Optional + +from pyevio.evio_file import EvioFile +from pyevio.stream_stats import StreamStats +from pyevio.web import ApiError +from pyevio.web.cache import StatsCache, cache_key +from pyevio.web.jobs import STATE_DONE, STATE_QUEUED, AnalysisJob +from pyevio.web.report import build_summary, histogram +from pyevio.web.structure import children_of, record_rows, words_at + +STATE_EMPTY = "empty" # no file open + + +class Session: + """Owns the open file; see the module docstring for the threading rules.""" + + def __init__(self, cache_dir: Optional[Path] = None, workers: Optional[int] = None): + self.cache = StatsCache(cache_dir) + self.workers = workers + self.path: Optional[Path] = None + self.evio_file: Optional[EvioFile] = None + self.key: Optional[str] = None + self.job: Optional[AnalysisJob] = None + self.stats: Optional[StreamStats] = None + self.from_cache = False + self.opened_at: Optional[float] = None + + # ---------------------------------------------------------------- open / close + def open(self, path) -> None: + """Open ``path``; the previous file closes and its running analysis is cancelled. + + A file pyevio cannot read raises ``ValueError`` (or ``OSError``) before the + previous file is touched, so the viewer keeps showing it. The cached statistics + are loaded when present; otherwise the analysis starts in its thread. + """ + path = Path(path).expanduser().resolve() + new_file = EvioFile(str(path)) + self.close() + self.path, self.evio_file, self.opened_at = path, new_file, time.monotonic() + self.key = cache_key(path) + self.stats = self.cache.load(self.key) + self.from_cache = self.stats is not None + if self.stats is None: + self.job = AnalysisJob(self.key[:16], path, self.key, self.cache, self.workers) + self.job.start() + + def close(self) -> None: + """Cancel the running analysis and close the file. Raises ``BufferError`` while a view of the mmap is alive.""" + if self.job is not None and self.job.is_active: + self.job.cancel() + self.job = None + self.stats = None + self.from_cache = False + if self.evio_file is not None: + evio_file, self.evio_file = self.evio_file, None + evio_file.close() + self.path = self.key = None + + @property + def is_open(self) -> bool: + return self.evio_file is not None + + # ---------------------------------------------------------------- analysis state + @property + def state(self) -> str: + """``empty``, or the job state: ``queued``, ``running``, ``done``, ``error``, ``cancelled``.""" + if self.evio_file is None: + return STATE_EMPTY + if self.stats is not None: + return STATE_DONE + if self.job is None: + return STATE_QUEUED + if self.job.state == STATE_DONE and self.job.stats is not None: + self.stats = self.job.stats # pick the finished result up on the first poll after the thread set it + return STATE_DONE + return self.job.state + + def progress(self) -> dict: + """Progress as the web ``/progress`` endpoint reports it, plus ``cached`` and ``state``.""" + state = self.state + if state == STATE_EMPTY: + return {"state": state, "fraction": 0.0, "records_done": 0, "records_total": 0, "elapsed_s": 0.0, + "eta_s": None, "error": None, "cached": False} + if self.job is None or (state == STATE_DONE and self.from_cache): + n_records = self.stats.n_records if self.stats is not None else 0 + return {"state": STATE_DONE, "fraction": 1.0, "records_done": n_records, "records_total": n_records, + "elapsed_s": 0.0, "eta_s": None, "error": None, "cached": True} + snapshot = self.job.snapshot() + snapshot["cached"] = False + return snapshot + + @property + def error(self) -> Optional[str]: + return self.job.error if self.job is not None else None + + def require_stats(self) -> StreamStats: + if self.state != STATE_DONE or self.stats is None: + raise ApiError(409, f"the analysis of {self.path.name if self.path else 'the file'} is {self.state}") + return self.stats + + def require_file(self) -> EvioFile: + if self.evio_file is None: + raise ApiError(409, "no file is open") + return self.evio_file + + # ---------------------------------------------------------------- model, as the web API serves it + def summary(self) -> dict: + """The Overview data (``pyevio.web.report.build_summary``); needs the finished analysis.""" + return build_summary(self.require_file(), self.require_stats(), str(self.path), self.from_cache) + + def histogram(self, name: str, roc: Optional[int] = None, port: Optional[int] = None, channel: Optional[int] = None) -> dict: + return histogram(self.require_stats(), name, roc, port, channel) + + def records(self, start: int = 0, count: int = 500) -> dict: + """A page of record rows; works before the analysis is done.""" + return record_rows(self.require_file(), start, count) + + def children(self, node: str = "", start: int = 0, count: int = 500) -> dict: + """A structure node and a page of its children (``pyevio.web.structure.children_of``).""" + return children_of(self.require_file(), node, start, count) + + def words(self, offset: int, count: int = 64, record_index: Optional[int] = None) -> dict: + return words_at(self.require_file(), offset, count, record_index) diff --git a/pyevio/gui/structure.py b/pyevio/gui/structure.py new file mode 100644 index 0000000..cf392aa --- /dev/null +++ b/pyevio/gui/structure.py @@ -0,0 +1,17 @@ +"""Structure tab: the lazy tree file → records → events → banks → hit words, with header fields and raw words.""" +from textual.widgets import Static + +from pyevio.gui.panes import Pane + + +class StructurePane(Pane): + def compose(self): + yield Static("Open a file to browse its structure.", id="structure-placeholder") + + def file_opened(self) -> None: + self.show_node("") + + def show_node(self, node_id: str) -> None: + """Select the node (``""`` the file, ``r3`` a record, ``r3/e1`` an event, …) and show its fields and words.""" + node = self.session.children(node_id, 0, 1) + self.query_one("#structure-placeholder", Static).update(f"node {node_id!r}: {node['total']:,} children") diff --git a/tests/gui/conftest.py b/tests/gui/conftest.py new file mode 100644 index 0000000..510a8e6 --- /dev/null +++ b/tests/gui/conftest.py @@ -0,0 +1,63 @@ +"""Fixtures for the console viewer tests: a synthetic stream file, a session with a temporary cache. + +``tests/`` is added to ``sys.path`` so the synthetic-file builder of +``test_stream_stats.py`` can be reused; pytest puts only this folder on the path. +The app tests need Textual (``pyevio[gui]``); the session tests do not. +""" +import sys +import time +from pathlib import Path + +import pytest + +TESTS_DIR = Path(__file__).resolve().parents[1] +if str(TESTS_DIR) not in sys.path: + sys.path.insert(0, str(TESTS_DIR)) + +from test_stream_stats import write_synthetic_file # noqa: E402 + +GOLDEN_FILE = Path("/data/evio-lib/golden/cases/cpp/basic_le.evio") +GOLDEN_LZ4_FILE = GOLDEN_FILE.with_name("lz4_le.evio") +WAIT_S = 60 + + +@pytest.fixture +def synthetic(tmp_path): + """``runs/synthetic.evio`` (12 stream frames, one other event, a trailer) and a non-EVIO file next to it.""" + folder = tmp_path / "runs" + folder.mkdir() + path, expected_hits, frame_numbers = write_synthetic_file(folder / "synthetic.evio") + (folder / "notes.txt").write_text("not an evio file") + (folder / "garbage.evio").write_bytes(b"\0" * 64) + return {"path": Path(path), "folder": folder, "expected_hits": expected_hits, "frame_numbers": frame_numbers, + "garbage": folder / "garbage.evio", "cache_dir": tmp_path / "cache", + "golden": GOLDEN_FILE if GOLDEN_FILE.is_file() else None, + "golden_lz4": GOLDEN_LZ4_FILE if GOLDEN_LZ4_FILE.is_file() else None} + + +@pytest.fixture +def session(synthetic): + from pyevio.gui.session import Session + + session = Session(cache_dir=synthetic["cache_dir"], workers=1) + yield session + try: + session.close() + except BufferError: + pass + + +def wait_until(predicate, timeout_s=WAIT_S, what="condition"): + """Block (outside the app) until ``predicate()`` is true.""" + deadline = time.monotonic() + timeout_s + while not predicate(): + assert time.monotonic() < deadline, f"{what} did not happen in {timeout_s} s" + time.sleep(0.02) + + +async def pilot_wait(pilot, predicate, timeout_s=WAIT_S, what="condition"): + """Pause the pilot until ``predicate()`` is true, letting the app's timers run.""" + deadline = time.monotonic() + timeout_s + while not predicate(): + assert time.monotonic() < deadline, f"{what} did not happen in {timeout_s} s" + await pilot.pause(0.05) diff --git a/tests/gui/test_app.py b/tests/gui/test_app.py new file mode 100644 index 0000000..a33a01d --- /dev/null +++ b/tests/gui/test_app.py @@ -0,0 +1,82 @@ +"""The app skeleton: open on start, progress to done, tabs, the open screen, errors.""" +import pytest + +textual = pytest.importorskip("textual") + +from textual.widgets import Input, Static, TabbedContent # noqa: E402 + +from conftest import pilot_wait # noqa: E402 +from pyevio.gui.app import OpenScreen, PyEvioGui, StatusStrip # noqa: E402 +from pyevio.gui.overview import OverviewPane # noqa: E402 +from pyevio.gui.records import RecordsPane # noqa: E402 +from pyevio.gui.structure import StructurePane # noqa: E402 + + +def status_text(app): + return str(app.query_one("#status-text", Static).render()) + + +def error_text(app): + return str(app.query_one("#status-error", Static).render()) + + +async def test_start_with_a_file_runs_the_analysis_and_fills_the_panes(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") + assert "analysis done" in status_text(app) and "3 records" in status_text(app) + assert app.query_one(OverviewPane).summary["totals"]["n_hits"] == synthetic["expected_hits"] + assert "4 records" in str(app.query_one("#records-placeholder", Static).render()) + assert error_text(app) == "" + assert app.sub_title == str(synthetic["path"].resolve()) + + +async def test_number_keys_switch_tabs(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + await pilot_wait(pilot, lambda: session.state == "done", what="analysis") + tabs = app.query_one("#tabs", TabbedContent) + for key, tab in (("3", "tab-records"), ("4", "tab-structure"), ("2", "tab-plots"), ("1", "tab-overview")): + await pilot.press(key) + await pilot.pause() + assert tabs.active == tab + app.show_structure_node("r1") + await pilot.pause() + assert tabs.active == "tab-structure" and "'r1'" in str(app.query_one("#structure-placeholder", Static).render()) + + +async def test_open_screen_opens_a_typed_path_and_an_unreadable_file_keeps_the_current_one(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + await pilot_wait(pilot, lambda: session.state == "done", what="analysis") + await pilot.press("o") + await pilot.pause() + assert isinstance(app.screen, OpenScreen) + field = app.screen.query_one("#open-path", Input) + field.value = str(synthetic["garbage"]) + await pilot.press("enter") + await pilot_wait(pilot, lambda: not isinstance(app.screen, OpenScreen), what="open screen to close") + assert "garbage.evio" in error_text(app) + assert session.path == synthetic["path"].resolve() and session.state == "done" + assert app.query_one(RecordsPane) is not None and "4 records" in str(app.query_one("#records-placeholder", Static).render()) + + # Escape cancels without touching the session. + await pilot.press("o") + await pilot.pause() + await pilot.press("escape") + await pilot.pause() + assert not isinstance(app.screen, OpenScreen) and session.path == synthetic["path"].resolve() + + +async def test_start_without_a_file_shows_the_open_screen(session, synthetic): + app = PyEvioGui(session, start_dir=synthetic["folder"]) + async with app.run_test(size=(120, 40)) as pilot: + await pilot.pause() + assert isinstance(app.screen, OpenScreen) + assert "No file open" in status_text(app) + app.screen.query_one("#open-path", Input).value = str(synthetic["path"]) + await pilot.press("enter") + await pilot_wait(pilot, lambda: app.query_one(StructurePane).query_one("#structure-placeholder", Static).render() is not None + and session.is_open, what="file to open") + await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") + assert "analysis done" in status_text(app) diff --git a/tests/gui/test_session.py b/tests/gui/test_session.py new file mode 100644 index 0000000..8cd1c47 --- /dev/null +++ b/tests/gui/test_session.py @@ -0,0 +1,75 @@ +"""Session: open, analyze, cache, switch and refuse files, without Textual.""" +import pytest + +from conftest import wait_until +from pyevio import stream_stats +from pyevio.gui.session import STATE_EMPTY, Session +from pyevio.web import ApiError + + +def test_open_analyze_and_read_the_model(session, synthetic): + assert session.state == STATE_EMPTY and not session.is_open + session.open(synthetic["path"]) + assert session.is_open and session.state in ("queued", "running", "done") + # The file is readable before the analysis is done; the statistics are not. + assert session.records(0, 10)["total"] == 4 and session.children("")["node"]["kind"] == "file" + assert session.words(0, 4)["count"] == 4 + wait_until(lambda: session.state == "done", what="analysis") + progress = session.progress() + assert progress["state"] == "done" and progress["fraction"] == 1.0 and progress["cached"] is False + summary = session.summary() + assert summary["totals"]["n_hits"] == synthetic["expected_hits"] and summary["stats"]["cached"] is False + assert session.histogram("hits_per_frame")["counts"] and sum(session.histogram("hits_per_frame")["counts"]) == 12 + assert session.histogram("occupancy", roc=7)["counts"] + with pytest.raises(ApiError): + session.histogram("nonsense") + + +def test_second_open_comes_from_the_shared_cache(session, synthetic): + session.open(synthetic["path"]) + wait_until(lambda: session.state == "done", what="analysis") + assert list(synthetic["cache_dir"].glob("*.npz")) + + other = Session(cache_dir=synthetic["cache_dir"], workers=1) + other.open(synthetic["path"]) + assert other.state == "done" and other.from_cache and other.progress()["cached"] is True + assert other.summary()["totals"]["n_hits"] == session.summary()["totals"]["n_hits"] + assert other.summary()["stats"]["cached"] is True + other.close() + assert other.state == STATE_EMPTY and not other.is_open + + +def test_unreadable_file_keeps_the_current_one(session, synthetic): + session.open(synthetic["path"]) + with pytest.raises(ValueError): + session.open(synthetic["garbage"]) + with pytest.raises((ValueError, OSError)): + session.open(synthetic["folder"] / "missing.evio") + assert session.is_open and session.path == synthetic["path"].resolve() + + +def test_switching_files_cancels_the_running_analysis(session, synthetic, monkeypatch): + import threading + from pyevio.web import jobs + + release = threading.Event() + real_compute = stream_stats.compute_stream_stats + + def slow_compute(path, workers=None, progress=None, cancel=None, **_): + release.wait(5) + if cancel(): + raise stream_stats.StatsCancelled("cancelled") + return real_compute(path, workers=1) + + monkeypatch.setattr(jobs, "compute_stream_stats", slow_compute) + session.open(synthetic["path"]) + first_job = session.job + assert session.state in ("queued", "running") + with pytest.raises(ApiError, match="is (queued|running)"): + session.summary() + session.open(synthetic["path"]) # the same path: a new job, the old one cancelled + release.set() + wait_until(lambda: not first_job.is_active, what="first job to end") + assert first_job.state == "cancelled" + wait_until(lambda: session.state == "done", what="second analysis") + assert session.summary()["totals"]["n_hits"] == synthetic["expected_hits"] From 2a6529d1dc173118894463afbca92e780c62a069 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:24:48 -0400 Subject: [PATCH 47/65] Console viewer: Overview and Records panes with paged record table The Overview pane renders the build_summary dict the app hands it: the totals (records and trailer, events by kind, fADC250 hits, hit rate, hits per frame, duration and live time, modules, decode errors and warnings), "what stands out" with the error and warn checks and the first decode messages (the web viewer's rule; info checks stay in the checks table), the full checks table with the status coloured, the file facts including the scan checks in words, and one row per ROC. It says the analysis is running until stats_ready and that no file is open after file_closed, so a failed open of another file keeps the current overview. The Records pane is a row-cursor DataTable over one page of 500 record rows at a time, loaded in file_opened before the analysis is done. The ] and [ keys replace the page, and moving the cursor past the last or first row of the page loads the next or previous one, so a file of a million records costs one page of strings. The row key is the record's node id, and Enter opens that record in the Structure tab. Both panes keep only the dicts the session returns, never a Record or a view of the file, so switching files cannot trip EvioFile.close(). Pilot tests cover the synthetic file's checks and ROC rows, the hook states, the trailer row, Enter, and paging on a 600-record file. I38, I39. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/overview.py | 189 +++++++++++++++++++++++++++++++++-- pyevio/gui/records.py | 195 ++++++++++++++++++++++++++++++++++++- tests/gui/test_overview.py | 108 ++++++++++++++++++++ tests/gui/test_records.py | 123 +++++++++++++++++++++++ 4 files changed, 604 insertions(+), 11 deletions(-) create mode 100644 tests/gui/test_overview.py create mode 100644 tests/gui/test_records.py diff --git a/pyevio/gui/overview.py b/pyevio/gui/overview.py index e72df8b..ac13d35 100644 --- a/pyevio/gui/overview.py +++ b/pyevio/gui/overview.py @@ -1,22 +1,199 @@ -"""Overview tab: totals, file checks, what stands out, file facts and one row per ROC.""" +"""Overview tab: totals, what stands out, the file checks, file facts and one row per ROC. + +Everything here is rendered from the ``build_summary`` dict the app passes to +:meth:`OverviewPane.stats_ready`; the pane keeps that dict and nothing else. +Six ``Static`` widgets in a ``VerticalScroll``: the state line, totals, "what +stands out", the checks table, the file facts and the per-ROC table. Text +sections are Textual markup (values escaped); the two tables are Rich +``Table`` renderables with the status word coloured by a Rich style. +""" +import math +from typing import List + +from rich.table import Table +from rich.text import Text +from textual.containers import VerticalScroll +from textual.markup import escape from textual.widgets import Static from pyevio.gui.panes import Pane +STATUS_STYLE = {"error": "red", "warn": "yellow", "info": "blue", "ok": "green"} +STANDOUT_ORDER = ("error", "warn") # the web viewer's rule: info checks stay in the checks table +NO_FILE_TEXT = "No file open — press o to open an EVIO file." +SECTION_IDS = ("overview-totals", "overview-standout", "overview-checks", "overview-file", "overview-rocs") + + +def fmt(value) -> str: + """One value as the web viewer prints it: ``n/a`` as given, lists joined, booleans as yes/no, numbers with separators.""" + if value is None: + return "—" + if isinstance(value, bool): + return "yes" if value else "no" + if isinstance(value, str): + return value + if isinstance(value, (list, tuple)): + return ", ".join(fmt(item) for item in value) if value else "none" + if isinstance(value, float): + return f"{value:,.3f}".rstrip("0").rstrip(".") if math.isfinite(value) else str(value) + return f"{value:,}" + + +def seconds(value) -> str: + return value if isinstance(value, str) else f"{value:.3f} s" + + +def facts_markup(title: str, rows: List[tuple]) -> str: + """A titled key/value list; the keys are padded to one column.""" + width = max((len(name) for name, _ in rows), default=0) + lines = [f"[b]{escape(title)}[/b]"] + lines += [f" {escape(name):<{width}} {escape(fmt(value))}" for name, value in rows] + return "\n".join(lines) + + +def status_text(status: str) -> Text: + return Text(status, style=STATUS_STYLE.get(status, "")) + class OverviewPane(Pane): + """See the module docstring; the hooks are those of :class:`~pyevio.gui.panes.Pane`.""" + + DEFAULT_CSS = """ + OverviewPane VerticalScroll { + height: 1fr; + } + OverviewPane Static { + margin-bottom: 1; + } + OverviewPane #overview-state { + color: $text-muted; + } + """ + def compose(self): - yield Static("Open a file to see its checks and totals.", id="overview-placeholder") + with VerticalScroll(id="overview-scroll"): + yield Static(NO_FILE_TEXT, id="overview-state") + for section_id in SECTION_IDS: + yield Static("", id=section_id) + # ---------------------------------------------------------------- hooks def file_closed(self) -> None: super().file_closed() - self.query_one("#overview-placeholder", Static).update("Open a file to see its checks and totals.") + self._set_state(NO_FILE_TEXT) + self._clear_sections() def file_opened(self) -> None: - self.query_one("#overview-placeholder", Static).update("Analyzing…") + name = self.session.path.name if self.session.path else "the file" + self._set_state(f"Analyzing {escape(name)} — the totals and checks appear when the analysis is done.") + self._clear_sections() def stats_ready(self, summary: dict) -> None: super().stats_ready(summary) + stats = summary["stats"] + source = "from cache" if stats["cached"] else f"computed in {stats['wall_seconds']:.1f} s on {stats['workers']} workers" + self._set_state(f"{escape(summary['file']['path'])} — analysis {source}, stats version {stats['version']}") + self.query_one("#overview-totals", Static).update(self.totals_markup(summary)) + self.query_one("#overview-standout", Static).update(self.standout_markup(summary["checks"], summary["totals"].get("error_messages", []))) + self.query_one("#overview-checks", Static).update(self.checks_table(summary["checks"])) + self.query_one("#overview-file", Static).update(self.file_markup(summary)) + self.query_one("#overview-rocs", Static).update(self.roc_table(summary["rocs"])) + self.query_one("#overview-scroll", VerticalScroll).scroll_home(animate=False) + + # ---------------------------------------------------------------- sections + def _set_state(self, markup: str) -> None: + self.query_one("#overview-state", Static).update(markup) + + def _clear_sections(self) -> None: + for section_id in SECTION_IDS: + self.query_one(f"#{section_id}", Static).update("") + + @staticmethod + def totals_markup(summary: dict) -> str: totals = summary["totals"] - self.query_one("#overview-placeholder", Static).update( - f"{summary['file']['path']}: {totals['n_records']:,} records, {totals['n_events']:,} events, {totals['n_hits']:,} hits") + modules = ", ".join(f"{module['name']} ({fmt(module['words'])} words)" for module in totals["modules"]) or "none" + first_error = f" — first: {totals['error_messages'][0]}" if totals["error_messages"] else "" + first_warning = f" — first: {totals['warning_messages'][0]}" if totals["warning_messages"] else "" + rows = [ + ("records", f"{fmt(totals['n_records'])} + {fmt(totals['n_trailer_records'])} trailer"), + ("events", f"{fmt(totals['n_events'])} ({fmt(totals['n_frames'])} stream frames, {fmt(totals['n_other_events'])} other, " + f"{fmt(totals['n_out_of_bounds_events'])} out of bounds)"), + ("fADC250 hits", totals["n_hits"]), + ("hit rate", totals["hit_rate_hz"] if isinstance(totals["hit_rate_hz"], str) else f"{totals['hit_rate_hz']:,.1f} Hz"), + ("hits per frame", totals["hits_per_frame"]), + ("duration / live time", f"{seconds(totals['duration_s'])} / {seconds(totals['live_time_s'])}"), + ("modules", modules), + ("decode errors", f"{fmt(totals['errors'])}{first_error}"), + ("decode warnings", f"{fmt(totals['warnings'])}{first_warning}"), + ] + return facts_markup("Totals", rows) + + @staticmethod + def standout_markup(checks: List[dict], messages: List[str] = ()) -> str: + """The error checks, then the warn checks, then the first decode messages — the web viewer's rule.""" + lines = ["[b]What stands out[/b]"] + notable = [check for status in STANDOUT_ORDER for check in checks if check["status"] == status] + for check in notable: + style = STATUS_STYLE[check["status"]] + detail = f" — {escape(check['detail'])}" if check["detail"] else "" + lines.append(f" [{style}]{check['status']:<5}[/{style}] {escape(check['name'])}: {escape(fmt(check['value']))}{detail}") + for message in list(messages)[:3]: + lines.append(f" [red]{escape(message)}[/red]") + if len(lines) == 1: + lines.append(" [green]all checks pass[/green]") + return "\n".join(lines) + + @staticmethod + def checks_table(checks: List[dict]) -> Table: + table = Table(title="Checks", title_justify="left", expand=False, pad_edge=False) + for column in ("check", "status", "value", "detail"): + table.add_column(column) + for check in checks: + table.add_row(check["name"], status_text(check["status"]), fmt(check["value"]), check["detail"] or "") + return table + + @staticmethod + def file_markup(summary: dict) -> str: + file = summary["file"] + rows = [ + ("path", file["path"]), + ("size", f"{fmt(file['size'])} B ({file['size'] / 1e6:.1f} MB)"), + ("header layout", file["header_layout"]), + ("byte order", "little-endian" if file["endian"] == "<" else "big-endian"), + ("EVIO version", file["version"]), + ("file type", file["file_type"]), + ("records", f"{fmt(file['header_record_count'])} declared in the file header, {fmt(file['record_count'])} scanned"), + ("trailer", f"{'present' if file['has_trailer'] else 'absent'}, position {fmt(file['trailer_position'])} in the file header"), + ("first record offset", file["first_record_offset"]), + ("index array length", f"{fmt(file['index_array_length'])} B"), + ("user header length", f"{fmt(file['user_header_length'])} B"), + ] + for words in (OverviewPane.scan_check_words(check) for check in summary["scan_checks"]): + rows.append(("record scan", words)) + if not summary["scan_checks"]: + rows.append(("record scan", "every record header read cleanly")) + return facts_markup("File", rows) + + @staticmethod + def scan_check_words(check: list) -> str: + """An ``EvioFile.checks`` tuple in words.""" + if check[0] == "truncated_tail": + _, declared, present, salvaged = check + return (f"truncated tail: the last record declares {fmt(declared)} B but {fmt(present)} B are present; " + f"{fmt(salvaged)} complete events kept") + if check[0] == "bad_record_header": + _, offset, reason = check + return f"bad record header at 0x{offset:X}: the scan stopped there ({reason})" + return f"{check[0]}: {', '.join(str(item) for item in check[1:])}" + + @staticmethod + def roc_table(rocs: List[dict]) -> Table: + table = Table(title="Per ROC", title_justify="left", expand=False, pad_edge=False) + for column, justify in (("ROC", "right"), ("modules", "left"), ("ports", "left"), ("hits", "right"), + ("other-module words", "right"), ("empty banks", "right")): + table.add_column(column, justify=justify) + for roc in rocs: + ports = f"{len(roc['ports'])}: {fmt(roc['ports'])}" if roc["ports"] else "none" + table.add_row(str(roc["roc"]), fmt(roc["modules"]), ports, fmt(roc["hits"]), fmt(roc["non_fadc_words"]), fmt(roc["empty_banks"])) + if not rocs: + table.add_row("—", "no ROC banks in the stream frames", "", "", "", "") + return table diff --git a/pyevio/gui/records.py b/pyevio/gui/records.py index dedfc21..519479c 100644 --- a/pyevio/gui/records.py +++ b/pyevio/gui/records.py @@ -1,13 +1,198 @@ -"""Records tab: a paged table of the record headers; Enter opens the record in the Structure tab.""" -from textual.widgets import Static +"""Records tab: a paged table of the record headers; Enter opens the record in the Structure tab. + +The table holds one page of ``PAGE_SIZE`` rows of ``session.records(start, count)`` +at a time, so a file of a million records costs one page of strings. The row +key is the record's node id (``r12``, ``t`` for the trailer), which is all the +Structure tab needs. Paging: ``]`` and ``[`` replace the page; moving the cursor +down past the last row (down, PageDown) loads the next page with the cursor on +its first row, and up past the first row loads the previous page with the cursor +on its last row. +""" +from typing import Optional + +from rich.text import Text +from textual.binding import Binding +from textual.message import Message +from textual.widgets import DataTable, Static from pyevio.gui.panes import Pane +PAGE_SIZE = 500 +COLUMNS = ("#", "offset", "size (B)", "events decl / found", "type", "compression", "last-record bit", "index", + "truncated", "header quirk", "errors") +NO_FILE_TEXT = "No file open." + + +def row_cells(row: dict) -> list: + """The cells of one ``describe_record`` dict; the problem cells are coloured. Every cell is a Text, never markup.""" + bad, warn = "red", "yellow" + events = Text(f"{row['event_count']} / {row['events_found']}", style=bad if row["events_found"] != row["event_count"] else "") + kind = "trailer" if row["is_trailer"] else str(row["header_type"]) + errors = Text("—") + if row["errors"]: + errors = Text(f"{len(row['errors'])}: {row['errors'][0]}", style=bad) + return [ + Text(str(row["index"]), justify="right"), + Text(f"0x{row['offset']:08X}"), + Text(f"{row['size']:,}", justify="right"), + events, + Text(kind), + Text(row["compression"]), + Text("set" if row["bit_info"]["is_last_record"] else "—"), + Text(f"{row['index_array_length']} B" if row["index_array_length"] else "none"), + Text("yes", style=bad) if row["is_truncated"] else Text("—"), + Text(str(row["header_quirk"]), style=warn) if row["header_quirk"] else Text("—"), + errors, + ] + + +class RecordsTable(DataTable): + """A row-cursor table that asks its pane for the next or previous page at the edges.""" + + DEFAULT_CSS = """ + RecordsTable { + height: 1fr; + } + """ + + class PageRequested(Message): + """The cursor tried to leave the page: ``step`` is +1 (next page) or -1 (previous page).""" + + def __init__(self, step: int) -> None: + super().__init__() + self.step = step + + def action_cursor_down(self) -> None: + if self.row_count and self.cursor_row >= self.row_count - 1: + self.post_message(self.PageRequested(+1)) + else: + super().action_cursor_down() + + def action_page_down(self) -> None: + if self.row_count and self.cursor_row >= self.row_count - 1: + self.post_message(self.PageRequested(+1)) + else: + super().action_page_down() + + def action_cursor_up(self) -> None: + if self.row_count and self.cursor_row <= 0: + self.post_message(self.PageRequested(-1)) + else: + super().action_cursor_up() + + def action_page_up(self) -> None: + if self.row_count and self.cursor_row <= 0: + self.post_message(self.PageRequested(-1)) + else: + super().action_page_up() + class RecordsPane(Pane): + """See the module docstring; the hooks are those of :class:`~pyevio.gui.panes.Pane`.""" + + BINDINGS = [ + Binding("]", "next_page", "Next page"), + Binding("[", "previous_page", "Previous page"), + ] + DEFAULT_CSS = """ + RecordsPane #records-placeholder { + height: auto; + color: $text-muted; + } + """ + + def __init__(self, session, **kwargs): + super().__init__(session, **kwargs) + self.start = 0 # index of the first row in the table + self.loaded = 0 # rows in the table + self.total = 0 # rows in the file (records + trailer) + self.ends_with_trailer = False # the last row of the page is the trailer + def compose(self): - yield Static("Open a file to list its records.", id="records-placeholder") + # The status line keeps the id of the earlier placeholder so the app tests keep reading it. + yield Static(NO_FILE_TEXT, id="records-placeholder", markup=False) + yield RecordsTable(cursor_type="row", zebra_stripes=True, id="records-table") + + def on_mount(self) -> None: + self._ensure_columns() + + def on_show(self) -> None: + if self.session.is_open: + self.table.focus() + + @property + def table(self) -> RecordsTable: + return self.query_one("#records-table", RecordsTable) + + def _ensure_columns(self) -> None: + table = self.table + if not table.columns: + for column in COLUMNS: + table.add_column(column, key=column) + + # ---------------------------------------------------------------- hooks + def file_closed(self) -> None: + super().file_closed() + self.start = self.loaded = self.total = 0 + self.ends_with_trailer = False + self.table.clear() + self._set_status(NO_FILE_TEXT) def file_opened(self) -> None: - page = self.session.records(0, 1) - self.query_one("#records-placeholder", Static).update(f"{page['total']:,} records") + self.load_page(0) + + # ---------------------------------------------------------------- paging + def load_page(self, start: int, cursor_row: Optional[int] = 0) -> None: + """Replace the table with the page at ``start``; ``cursor_row`` is where the cursor lands (None: the last row).""" + self._ensure_columns() + page = self.session.records(max(0, start), PAGE_SIZE) + table = self.table + table.clear() + for row in page["rows"]: + table.add_row(*row_cells(row), key=row["id"]) + self.start, self.loaded, self.total = page["start"], len(page["rows"]), page["total"] + self.ends_with_trailer = bool(page["rows"]) and page["rows"][-1]["is_trailer"] + if self.loaded: + table.move_cursor(row=self.loaded - 1 if cursor_row is None else min(cursor_row, self.loaded - 1), animate=False) + self._set_status(self.status_line()) + + def status_line(self) -> str: + if not self.total: + return "0 records in this file" + first, last = self.start, self.start + self.loaded - 1 + trailer = " (the trailer is the last row)" if self.ends_with_trailer else "" + hint = " · ] next page [ previous page" if self.total > PAGE_SIZE else "" + return f"rows {first}—{last} of {self.total:,} records{trailer} · Enter opens the record{hint}" + + def _set_status(self, text: str) -> None: + self.query_one("#records-placeholder", Static).update(text) + + @property + def has_next_page(self) -> bool: + return self.start + self.loaded < self.total + + @property + def has_previous_page(self) -> bool: + return self.start > 0 + + def action_next_page(self) -> None: + if self.has_next_page: + self.load_page(self.start + self.loaded, cursor_row=0) + + def action_previous_page(self) -> None: + if self.has_previous_page: + self.load_page(self.start - PAGE_SIZE, cursor_row=0) + + def on_records_table_page_requested(self, event: RecordsTable.PageRequested) -> None: + event.stop() + if event.step > 0 and self.has_next_page: + self.load_page(self.start + self.loaded, cursor_row=0) + elif event.step < 0 and self.has_previous_page: + self.load_page(self.start - PAGE_SIZE, cursor_row=None) + + # ---------------------------------------------------------------- selection + def on_data_table_row_selected(self, event: DataTable.RowSelected) -> None: + event.stop() + node_id = event.row_key.value + if node_id: + self.app.show_structure_node(node_id) diff --git a/tests/gui/test_overview.py b/tests/gui/test_overview.py new file mode 100644 index 0000000..a74d02f --- /dev/null +++ b/tests/gui/test_overview.py @@ -0,0 +1,108 @@ +"""The Overview pane: totals, checks, what stands out, file facts and the per-ROC table from the summary dict.""" +import io + +import pytest + +textual = pytest.importorskip("textual") + +from rich.console import Console # noqa: E402 +from textual.content import Content # noqa: E402 +from textual.widgets import Static # noqa: E402 + +from conftest import pilot_wait # noqa: E402 +from pyevio.gui.app import PyEvioGui # noqa: E402 +from pyevio.gui.overview import OverviewPane, fmt # noqa: E402 + + +def plain(app, section: str) -> str: + """The text of one Overview section: markup strings through Content, Rich tables through a recording console.""" + content = app.query_one(f"#{section}", Static).content + if isinstance(content, str): + return Content.from_markup(content).plain + console = Console(record=True, width=200, file=io.StringIO(), force_terminal=False) + console.print(content) + return console.export_text() + + +def check_line(text: str, name: str) -> str: + lines = [line for line in text.splitlines() if name in line] + assert lines, f"no line with {name!r} in:\n{text}" + return lines[0] + + +async def test_overview_shows_totals_checks_and_rocs_of_the_synthetic_file(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(160, 50)) as pilot: + await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") + await pilot.pause() + + state = plain(app, "overview-state") + assert "synthetic.evio" in state and "analysis" in state + + totals = plain(app, "overview-totals") + assert check_line(totals, "fADC250 hits").endswith(f"{synthetic['expected_hits']:,}") + assert "3 + 1 trailer" in check_line(totals, "records") + assert "12 stream frames, 1 other, 0 out of bounds" in check_line(totals, "events") + assert "Hz" in check_line(totals, "hit rate") + assert "fADC250" in check_line(totals, "modules") and "DCRB" in check_line(totals, "modules") + assert check_line(totals, "decode errors").endswith("0") + + checks = plain(app, "overview-checks") + assert "warn" in check_line(checks, "missing frames") + assert "info" in check_line(checks, "AIS entries identical") + assert "ok" in check_line(checks, "trailer") + + standout = plain(app, "overview-standout") + assert "missing frames" in standout and "duplicate frames" in standout + assert "AIS entries identical" not in standout # info checks stay in the checks table, as in the web viewer + assert "all checks pass" not in standout + assert "all checks pass" in OverviewPane.standout_markup([{"name": "x", "status": "ok", "value": 0, "detail": ""}]) + + facts = plain(app, "overview-file") + assert "little-endian" in check_line(facts, "byte order") + assert "3 scanned" in check_line(facts, "records") + assert "present" in check_line(facts, "trailer") + assert "every record header read cleanly" in check_line(facts, "record scan") + + rocs = plain(app, "overview-rocs") + assert "fADC250" in check_line(rocs, " 7 ") and f"{synthetic['expected_hits']:,}" in check_line(rocs, " 7 ") + assert "DCRB" in check_line(rocs, " 44 ") + + +async def test_overview_says_analyzing_before_stats_and_no_file_after_closing(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(160, 50)) as pilot: + await pilot_wait(pilot, lambda: app.overview.summary is not None, what="stats_ready") + summary = app.overview.summary + + # The hooks are the contract; drive them directly so the job thread's timing does not matter. + app.overview.file_closed() + await pilot.pause() + assert "No file open" in plain(app, "overview-state") and plain(app, "overview-totals") == "" + app.overview.file_opened() + await pilot.pause() + assert "Analyzing synthetic.evio" in plain(app, "overview-state") and plain(app, "overview-checks") == "" + app.overview.stats_ready(summary) + await pilot.pause() + assert "synthetic.evio" in plain(app, "overview-state") and "fADC250 hits" in plain(app, "overview-totals") + + +async def test_opening_an_unreadable_file_keeps_the_current_overview(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(160, 50)) as pilot: + await pilot_wait(pilot, lambda: app.overview.summary is not None, what="stats_ready") + app.open_path(synthetic["garbage"]) + await pilot.pause() + await pilot_wait(pilot, lambda: app.overview.summary is not None, what="stats_ready after the failed open") + assert session.path == synthetic["path"].resolve() + assert "synthetic.evio" in plain(app, "overview-state") + assert f"{synthetic['expected_hits']:,}" in plain(app, "overview-totals") + + +def test_scan_checks_in_words_and_value_formatting(): + assert OverviewPane.scan_check_words(["truncated_tail", 4096, 1024, 7]) == \ + "truncated tail: the last record declares 4,096 B but 1,024 B are present; 7 complete events kept" + assert OverviewPane.scan_check_words(["bad_record_header", 0x1000, "bad magic"]) == \ + "bad record header at 0x1000: the scan stopped there (bad magic)" + assert fmt("n/a") == "n/a" and fmt(None) == "—" and fmt(True) == "yes" and fmt([]) == "none" + assert fmt(12345) == "12,345" and fmt(2.5) == "2.5" and fmt([1, 3]) == "1, 3" diff --git a/tests/gui/test_records.py b/tests/gui/test_records.py new file mode 100644 index 0000000..1a7e699 --- /dev/null +++ b/tests/gui/test_records.py @@ -0,0 +1,123 @@ +"""The Records pane: one page of record rows, the trailer row, Enter to the Structure tab, paging.""" +import pytest + +textual = pytest.importorskip("textual") + +from textual.widgets import Static, TabbedContent # noqa: E402 + +from conftest import pilot_wait # noqa: E402 +from pyevio.gui.app import PyEvioGui # noqa: E402 +from pyevio.gui.records import PAGE_SIZE, RecordsTable # noqa: E402 +from pyevio.gui.session import Session # noqa: E402 +from test_stream_stats import write_synthetic_file # noqa: E402 + + +def status(app) -> str: + return str(app.query_one("#records-placeholder", Static).render()) + + +def cell_texts(table: RecordsTable, row_key: str) -> list: + return [str(cell) for cell in table.get_row(row_key)] + + +async def focus_table(app, pilot) -> RecordsTable: + await pilot.press("3") + await pilot.pause() + table = app.query_one("#records-table", RecordsTable) + app.set_focus(table) + await pilot.pause() + return table + + +async def test_records_table_lists_the_records_and_the_trailer(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(160, 50)) as pilot: + table = app.query_one("#records-table", RecordsTable) + await pilot_wait(pilot, lambda: table.row_count == 4, what="first page") + assert table.cursor_type == "row" + assert "rows 0—3 of 4 records" in status(app) + assert [column.label.plain for column in table.columns.values()][:5] == ["#", "offset", "size (B)", "events decl / found", "type"] + + row0 = cell_texts(table, "r0") + assert row0[0] == "0" and row0[1] == "0x00000038" and row0[3] == "4 / 4" and row0[4] == "0" and row0[5] == "none" # header type 0 in the synthetic records + assert row0[6] == "—" and row0[8] == "—" and row0[9] == "—" and row0[10] == "—" + assert cell_texts(table, "r1")[3] == "5 / 5" # record 1 has the extra non-stream event + trailer = cell_texts(table, "t") + assert trailer[0] == "3" and trailer[4] == "trailer" and trailer[6] == "set" and trailer[3] == "0 / 0" + + # The whole page is in the table before the analysis is necessarily done; the keys are node ids. + assert [key.value for key in table.rows] == ["r0", "r1", "r2", "t"] + + app.records.file_closed() + await pilot.pause() + assert table.row_count == 0 and "No file open" in status(app) + + +async def test_enter_opens_the_record_in_the_structure_tab(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(160, 50)) as pilot: + table = app.query_one("#records-table", RecordsTable) + await pilot_wait(pilot, lambda: table.row_count == 4, what="first page") + table = await focus_table(app, pilot) + assert app.focused is table + table.move_cursor(row=2) + await pilot.pause() + await pilot.press("enter") + await pilot.pause() + tabs = app.query_one("#tabs", TabbedContent) + assert tabs.active == "tab-structure" + assert "'r2'" in str(app.query_one("#structure-placeholder", Static).render()) + + +async def test_paging_through_a_file_of_more_than_one_page(tmp_path): + path, _, _ = write_synthetic_file(tmp_path / "long.evio", n_records=600, frames_per_record=1) + session = Session(cache_dir=tmp_path / "cache", workers=1) + try: + app = PyEvioGui(session, start_path=path) + async with app.run_test(size=(160, 50)) as pilot: + table = app.query_one("#records-table", RecordsTable) + await pilot_wait(pilot, lambda: table.row_count == PAGE_SIZE, what="first page") + assert app.records.total == 601 and app.records.start == 0 + assert "rows 0—499 of 601 records" in status(app) and "] next page" in status(app) + assert "trailer" not in status(app) # the trailer is on the second page + + table = await focus_table(app, pilot) + # Down at the last row of the page loads the next page with the cursor on its first row. + table.move_cursor(row=PAGE_SIZE - 1) + await pilot.pause() + await pilot.press("down") + await pilot_wait(pilot, lambda: app.records.start == PAGE_SIZE, what="next page by cursor") + assert table.row_count == 101 and table.cursor_row == 0 + assert "rows 500—600 of 601 records (the trailer is the last row)" in status(app) + assert cell_texts(table, "r500")[0] == "500" and cell_texts(table, "t")[4] == "trailer" + assert [key.value for key in table.rows][:2] == ["r500", "r501"] + + # Down at the very last row stays put; up at the first row goes back with the cursor on the last row. + table.move_cursor(row=100) + await pilot.pause() + await pilot.press("down") + await pilot.pause() + assert app.records.start == PAGE_SIZE and table.cursor_row == 100 + table.move_cursor(row=0) + await pilot.pause() + await pilot.press("up") + await pilot_wait(pilot, lambda: app.records.start == 0, what="previous page by cursor") + assert table.row_count == PAGE_SIZE and table.cursor_row == PAGE_SIZE - 1 + + # The bracket keys page explicitly. + await pilot.press("right_square_bracket") + await pilot_wait(pilot, lambda: app.records.start == PAGE_SIZE, what="next page by key") + await pilot.press("right_square_bracket") # no page after the last one + await pilot.pause() + assert app.records.start == PAGE_SIZE + await pilot.press("left_square_bracket") + await pilot_wait(pilot, lambda: app.records.start == 0, what="previous page by key") + assert table.cursor_row == 0 and "rows 0—499 of 601 records" in status(app) + await pilot.press("left_square_bracket") # no page before the first one + await pilot.pause() + assert app.records.start == 0 + finally: + try: + session.close() + except BufferError: + pass From 9119110e142732d131fca6a2266b5774d29c3711 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:27:19 -0400 Subject: [PATCH 48/65] Structure tab: lazy tree, detail panel with fields and raw words The console viewer's Structure tab now matches the browser's. The left side is a Textual Tree over pyevio.web.structure.children_of: the file, its records and trailer, events, banks and segments labeled by role inside stream frames (stream info, ROC bank with ROC id and stream, ROC stream info, payload-port map, payload banks with port, module and hit count) down to decoded hit words. Children load one page of 500 when a node is expanded; a page short of the total ends with a "more" row that loads the next page in place, so a file with thousands of records or a record with thousands of events never loads whole. The right side shows the highlighted node: every field of its dict, its walk errors in red, the decoded payload-port map and a hex dump of its raw words read through words_at, from the file for record headers and from the record buffer for events and banks, with a note when that buffer is decompressed; n and p move the 64-word window. show_node expands the path to an id (paging as needed) and selects it; the Records tab and the app's show_structure_node use it. Panes keep only the session's dicts, never a Record or Bank, so file switching stays safe. The detail column is not focusable on purpose: a focused widget inside a hidden TabPane makes Textual re-activate that tab, which would trap the number keys. Tests drive the pilot through the synthetic stream file, a 600-record file and the LZ4 golden file. I40. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/structure.py | 458 +++++++++++++++++++++++++++++++++++- tests/gui/test_structure.py | 288 +++++++++++++++++++++++ 2 files changed, 739 insertions(+), 7 deletions(-) create mode 100644 tests/gui/test_structure.py diff --git a/pyevio/gui/structure.py b/pyevio/gui/structure.py index cf392aa..e1ed0f9 100644 --- a/pyevio/gui/structure.py +++ b/pyevio/gui/structure.py @@ -1,17 +1,461 @@ -"""Structure tab: the lazy tree file → records → events → banks → hit words, with header fields and raw words.""" -from textual.widgets import Static +"""Structure tab: the lazy tree file → records → events → banks → hit words, with header fields and raw words. +The tree on the left is a Textual ``Tree`` whose nodes carry one dict each: the +node dict the session returned (``pyevio.web.structure.children_of``) plus the +paging state of its children and, for events and banks, the index and +compression of the record they live in, so their words are read from that +record's buffer (``words_at``). Children load one page of 500 when a node is +expanded; a page that does not reach the end ends with a "… N more" child whose +selection loads the next page in place. + +The panel on the right shows the highlighted node: its fields, its errors, the +decoded payload-port map when it has one, and a window of its raw words (``n`` / +``p`` move the window). Nothing here holds a ``Record``, ``Bank`` or a view of the +file; everything runs on the main thread. +""" +from typing import List, Optional + +from rich.text import Text +from textual.binding import Binding +from textual.containers import Horizontal, VerticalScroll +from textual.widgets import Static, Tree +from textual.widgets.tree import TreeNode + +from pyevio.decoders import fadc250_stream as fs from pyevio.gui.panes import Pane +from pyevio.web import ApiError + +PAGE_SIZE = 500 +HEX_WINDOW = 64 +# What a session call can raise: ApiError from the model, ValueError/OSError from core on malformed data, +# BufferError when the file is closing. Each is reported in the status strip; none takes the app down. +PANE_ERRORS = (ApiError, ValueError, OSError, BufferError) +HEX_PER_LINE = 8 +KIND_MORE = "more" # the "… N more" child; its data["id"] is the parent's id + +# The same role names as the browser's tree.js. +ROLE_LABELS = { + "stream_info": "stream info", "roc_bank": "ROC bank", "roc_stream_info": "ROC stream info", "payload_hits": "payload", + "payload_empty": "payload (empty)", "payload_words": "payload", "payload_unmapped": "payload (unmapped port)", + "time_slice": "time slice", "aggregation_info": "aggregation info (AIS)", "payload_map": "payload-port map", +} +# Fields shown elsewhere in the panel (path line, bit-info rows, errors, entries table) or of no interest. +HIDDEN_FIELDS = {"id", "has_children", "entries", "bit_info", "errors"} +HEX_FIELDS = {"tag", "offset", "declared_end"} + + +def hex_value(value: int, digits: int = 4) -> str: + return f"0x{value:0{digits}X}" + + +# ---------------------------------------------------------------- labels +def node_label(node: dict) -> str: + """One tree line for a node dict, labeled by kind and role as the browser does.""" + kind = node.get("kind") + if kind == "file": + trailer = " + trailer" if node.get("has_trailer") else "" + return f"file — {node.get('header_layout')}, {node.get('record_count')} records{trailer}" + if kind == "trailer": + return f"trailer — {node.get('size', 0):,} B at {hex_value(node.get('offset', 0), 8)}" + if kind == "record": + return f"record {node['index']} — {record_meta(node)}" + if kind == "event": + tag = node.get("tag", 0) + name = "stream frame" if tag == fs.STREAM_EVENT_TAG else f"type {hex_value(node.get('data_type', 0), 2)} num {node.get('num')}" + return f"event {node['index']} — tag {hex_value(tag)} {name}, {node.get('length', 0) + 1} words" + if kind == "hit": + flag = " FLAG" if node.get("flag") else "" + return f"hit {node['index']} — ch {node['channel']} t {node['t_ns']} ns q {node['charge']} {node['word']}{flag}" + if kind == KIND_MORE: + return f"… {node.get('remaining', 0):,} more (press Enter to load)" + return f"{bank_name(node)} — {bank_meta(node)}" + + +def record_meta(node: dict) -> str: + parts = [f"{node.get('event_count', 0)} events", f"{node.get('size', 0):,} B"] + if node.get("compression") not in (None, "none"): + parts.append(node["compression"]) + if node.get("is_truncated"): + parts.append("TRUNCATED") + if node.get("errors"): + parts.append(f"{len(node['errors'])} errors") + return ", ".join(parts) + + +def bank_name(node: dict) -> str: + role = ROLE_LABELS.get(node.get("role")) + if node.get("role") == "roc_bank": + return f"{role} {node.get('roc')} stream {node.get('stream')}" + if "port" in node: + return f"{role} port {node['port']}" + return role or f"{node.get('structure', 'bank')} {hex_value(node.get('tag', 0))}" + + +def bank_meta(node: dict) -> str: + parts = [f"tag {hex_value(node.get('tag', 0))}", f"type {hex_value(node.get('data_type', 0), 2)}"] + if node.get("num") is not None: + parts.append(f"num {node['num']}") + parts.append(f"{node.get('length', 0)} words") + if node.get("module"): + parts.append(node["module"]) + if node.get("role") == "payload_hits" and "n_words" in node: + parts.append(f"{node['n_words']} hits") + if node.get("entries"): + parts.append(f"{len(node['entries'])} entries") + return " ".join(parts) + + +def field_text(name: str, value) -> str: + if value is None: + return "—" + if isinstance(value, bool): + return "yes" if value else "no" + if isinstance(value, (list, tuple)): + return ", ".join(str(item) for item in value) + if isinstance(value, int): + if name in HEX_FIELDS: + return f"{hex_value(value)} ({value:,})" + if name == "data_type": + return hex_value(value, 2) + return f"{value:,}" + return str(value) + + +def fields_lines(node: dict) -> List[str]: + """``name value`` rows for the fields table; bit-info fields are prefixed ``bit_info.``.""" + rows = [(name, field_text(name, value)) for name, value in node.items() if name not in HIDDEN_FIELDS and not name.startswith("_")] + for name, value in (node.get("bit_info") or {}).items(): + rows.append((f"bit_info.{name}", field_text(name, value))) + width = max((len(name) for name, _ in rows), default=0) + return [f"{name:<{width}} {value}" for name, value in rows] + + +def entries_lines(entries: List[dict]) -> List[str]: + lines = ["payload-port map", f"{'entry':>5} {'port':>4} {'module id':>9} module"] + lines += [f"{i:>5} {entry['port']:>4} {entry['module_id']:>9} {entry['module']}" for i, entry in enumerate(entries)] + return lines + + +def hex_lines(words: List[str], base_offset: int) -> List[str]: + """``HEX_PER_LINE`` words per line, the line's byte offset first.""" + lines = [] + for start in range(0, len(words), HEX_PER_LINE): + lines.append(f"{hex_value(base_offset + start * 4, 8)} " + " ".join(words[start:start + HEX_PER_LINE])) + return lines + + +def words_request(data: dict) -> Optional[dict]: + """Which words a node has: record headers at file offsets, events and banks inside their record's buffer; hits and the file none.""" + kind = data.get("kind") + if kind in ("file", "hit", KIND_MORE) or data.get("offset") is None: + return None + total_words = int(data.get("size", 0)) // 4 + if kind in ("record", "trailer"): + return {"offset": data["offset"], "record": None, "total_words": total_words, "compressed": False} + return {"offset": data["offset"], "record": data.get("_record"), "total_words": total_words, + "compressed": data.get("_compression") not in (None, "none")} + + +# ---------------------------------------------------------------- the pane +class DetailPanel(VerticalScroll, can_focus=False): + """The scrolling detail column. Not focusable on purpose: when the tab switches away while the Tree has the + focus, Textual blurs the hidden Tree onto a focusable sibling, and a programmatic focus inside a TabPane + re-activates that tab (``TabbedContent._on_tab_pane_focused``), so the number keys could never leave the + Structure tab. With no focusable sibling the focus is simply dropped. The mouse wheel still scrolls it.""" class StructurePane(Pane): + """The structure tree and the detail panel; see the module docstring.""" + + BINDINGS = [ + Binding("n", "next_words", "Next words"), + Binding("p", "previous_words", "Previous words"), + ] + DEFAULT_CSS = """ + StructurePane Horizontal { + height: 1fr; + } + StructurePane #structure-tree { + width: 45%; + height: 1fr; + border-right: solid $panel; + } + StructurePane #structure-detail { + width: 1fr; + height: 1fr; + padding: 0 1; + } + StructurePane #structure-placeholder { + text-style: bold; + } + StructurePane #structure-errors { + color: $error; + } + StructurePane #structure-hex-title { + margin-top: 1; + text-style: bold; + } + StructurePane #structure-hex-note { + color: $text-muted; + } + """ + + def __init__(self, session, **kwargs): + super().__init__(session, **kwargs) + self._tree: Tree = Tree("no file open", data={"id": "", "kind": "file", "has_children": False, "_loaded": 0, "_total": 0}, id="structure-tree") + self._tree.root.allow_expand = False + self._generation = 0 # bumped on every rebuild; TreeNode ids restart from 0 after Tree.clear() + self._shown: Optional[tuple] = None # (generation, TreeNode.id) of the node the panel shows + self.detail: Optional[dict] = None # the node dict the panel shows (tests read it) + self.words_page: Optional[dict] = None # the last words_at dict (tests read it) + self._hex: Optional[dict] = None # the words request of the shown node plus "start", the window's first word + def compose(self): - yield Static("Open a file to browse its structure.", id="structure-placeholder") + with Horizontal(): + yield self._tree + with DetailPanel(id="structure-detail"): + yield Static("Open a file to browse its structure.", id="structure-placeholder") + yield Static("", id="structure-fields", markup=False) + yield Static("", id="structure-errors", markup=False) + yield Static("", id="structure-entries", markup=False) + yield Static("", id="structure-hex-title", markup=False) + yield Static("", id="structure-hex", markup=False) + yield Static("", id="structure-hex-note", markup=False) + + # ---------------------------------------------------------------- pane hooks + def file_closed(self) -> None: + super().file_closed() + self._generation += 1 + self._shown = None + self.detail = self.words_page = self._hex = None + self._tree.reset("no file open", {"id": "", "kind": "file", "has_children": False, "_loaded": 0, "_total": 0}) + self._tree.root.allow_expand = False + self._clear_panel("Open a file to browse its structure.") def file_opened(self) -> None: - self.show_node("") + self._generation += 1 + self._shown = None + self._tree.reset("file", {"id": "", "kind": "file", "has_children": True, "_loaded": 0, "_total": None}) + self._tree.root.allow_expand = True + try: + self._load_page(self._tree.root) + except PANE_ERRORS as error: + self._report(error) + return + self._tree.root.expand() + self._build_lines() + self._tree.move_cursor(self._tree.root) + self._show_detail(self._tree.root) + # ---------------------------------------------------------------- public def show_node(self, node_id: str) -> None: - """Select the node (``""`` the file, ``r3`` a record, ``r3/e1`` an event, …) and show its fields and words.""" - node = self.session.children(node_id, 0, 1) - self.query_one("#structure-placeholder", Static).update(f"node {node_id!r}: {node['total']:,} children") + """Expand the path to the node (``""`` the file, ``r3`` a record, ``r3/e1`` an event, …), select it and show it.""" + try: + target = self._walk_to(node_id) + except PANE_ERRORS as error: + self._report(error) + return + if target is None: + return + if target.allow_expand and not target.is_expanded: + target.expand() + self._build_lines() + self._tree.move_cursor(target) + self._tree.scroll_to_node(target, animate=False) + self._show_detail(target) + self._tree.focus() + + def _build_lines(self) -> None: + """Lay the tree lines out now: a node added or expanded this turn has no line (``_line == -1``) until the + tree rebuilds, and ``move_cursor``/``scroll_to_node`` read it directly. Textual 8.2 rebuilds lazily on idle + through this private property; nothing public triggers it synchronously.""" + self._tree._tree_lines # noqa: B018 + + # ---------------------------------------------------------------- tree events + def on_show(self) -> None: + self._tree.focus() # the tab became active: arrows, Enter, n and p go to the tree without a Tab first + + def on_tree_node_expanded(self, event: Tree.NodeExpanded) -> None: + event.stop() + data = event.node.data + if data is None or data.get("_total") is not None or not self.session.is_open: + return + try: + self._load_page(event.node) + except PANE_ERRORS as error: + self._report(error) + + def on_tree_node_selected(self, event: Tree.NodeSelected) -> None: + if event.node.data is None or event.node.data.get("kind") != KIND_MORE or event.node.parent is None: + return + event.stop() + try: + self._load_page(event.node.parent) + except PANE_ERRORS as error: + self._report(error) + + def on_tree_node_highlighted(self, event: Tree.NodeHighlighted) -> None: + event.stop() + try: + self._show_detail(event.node) + except PANE_ERRORS as error: + self._report(error) + + # ---------------------------------------------------------------- words window + def action_next_words(self) -> None: + self._move_window(HEX_WINDOW) + + def action_previous_words(self) -> None: + self._move_window(-HEX_WINDOW) + + def _move_window(self, step: int) -> None: + if self._hex is None: + return + start = max(0, min(self._hex["start"] + step, max(0, self._hex["total_words"] - 1))) + if start == self._hex["start"]: + return + self._hex["start"] = start + try: + self._show_words() + except PANE_ERRORS as error: + self._report(error) + + # ---------------------------------------------------------------- loading + def _load_page(self, tree_node: TreeNode) -> None: + """Append the next page of children to ``tree_node``, replacing its "more" child; raises ApiError.""" + data = tree_node.data + start = data.get("_loaded", 0) + page = self.session.children(data["id"], start, PAGE_SIZE) + more = tree_node.children[-1] if tree_node.children and (tree_node.children[-1].data or {}).get("kind") == KIND_MORE else None + if more is not None: + more.remove() + if start == 0: + if data["kind"] == "file": + data.update(page["node"]) + tree_node.set_label(node_label(data)) + if page.get("errors") is not None and data["kind"] != "file": + data["errors"] = list(page["errors"]) # the node's own walk errors (bank.errors, record.errors) + if data["kind"] == "record": + tree_node.set_label(node_label(data)) + record = data.get("_record") + compression = data.get("_compression") + for child in page["children"]: + child_data = dict(child) + if child_data["kind"] == "record": + child_data["_record"], child_data["_compression"] = child_data["index"], child_data.get("compression") + elif child_data["kind"] != "trailer": + child_data["_record"], child_data["_compression"] = record, compression + child_data["_loaded"], child_data["_total"] = 0, None if child_data.get("has_children") else 0 + tree_node.add(node_label(child_data), data=child_data, allow_expand=bool(child_data.get("has_children"))) + data["_loaded"] = start + len(page["children"]) + data["_total"] = page["total"] + if data["_total"] > data["_loaded"]: + remaining = data["_total"] - data["_loaded"] + tree_node.add(node_label({"kind": KIND_MORE, "remaining": remaining}), + data={"id": data["id"], "kind": KIND_MORE, "has_children": False, "remaining": remaining}, allow_expand=False) + if self._shown == (self._generation, tree_node.id): + self._show_detail(tree_node, force=True) # the errors arrived with the page + + def _walk_to(self, node_id: str) -> Optional[TreeNode]: + """The tree node for ``node_id``, loading pages and expanding ancestors on the way; None (reported) when absent.""" + if not self.session.is_open: + self._report("no file is open") + return None + root = self._tree.root + if root.data.get("_total") is None: + self._load_page(root) + parts = [part for part in node_id.strip("/").split("/") if part] + node = root + for depth, _ in enumerate(parts): + target_id = "/".join(parts[:depth + 1]) + if node.data.get("_total") is None: + self._load_page(node) + child = self._find_child(node, target_id) + while child is None and node.data["_total"] > node.data["_loaded"]: + self._load_page(node) + child = self._find_child(node, target_id) + if child is None: + self._report(f"no node {target_id!r} in the tree") + return None + if not node.is_expanded: + node.expand() + node = child + return node + + @staticmethod + def _find_child(node: TreeNode, child_id: str) -> Optional[TreeNode]: + for child in node.children: + if child.data is not None and child.data.get("kind") != KIND_MORE and child.data.get("id") == child_id: + return child + return None + + # ---------------------------------------------------------------- detail panel + def _show_detail(self, tree_node: TreeNode, force: bool = False) -> None: + data = tree_node.data + if data is None or (not force and self._shown == (self._generation, tree_node.id)): + return + self._shown = (self._generation, tree_node.id) + if data.get("kind") == KIND_MORE: + self.detail = None + self._hex = None + self._clear_panel(f"{data['remaining']:,} more children of {data['id'] or 'file'!r} — press Enter to load them") + return + self.detail = data + self.query_one("#structure-placeholder", Static).update(f"node {data.get('id', '')!r}" if data.get("id") else "node '' (file)") + self.query_one("#structure-fields", Static).update("\n".join(fields_lines(data))) + errors = data.get("errors") or [] + self.query_one("#structure-errors", Static).update(Text("\n".join(errors), style="bold red") if errors else "") + self.query_one("#structure-entries", Static).update("\n".join(entries_lines(data["entries"])) if data.get("entries") else "") + request = words_request(data) + self._hex = dict(request, start=0) if request and request["total_words"] > 0 else None + if self._hex is None: + self.words_page = None + self.query_one("#structure-hex-title", Static).update("") + self.query_one("#structure-hex", Static).update("") + self.query_one("#structure-hex-note", Static).update("") + return + try: + self._show_words() + except PANE_ERRORS as error: + self.query_one("#structure-hex", Static).update("") + self.query_one("#structure-hex-note", Static).update(self._error_text(error)) + self._report(error) + + def _show_words(self) -> None: + """Fetch and show the current window of the shown node's words; raises ApiError.""" + request = self._hex + start = request["start"] + count = min(HEX_WINDOW, request["total_words"] - start) + page = self.session.words(request["offset"] + start * 4, count, request["record"]) + self.words_page = page + self.query_one("#structure-hex-title", Static).update("raw words") + self.query_one("#structure-hex", Static).update("\n".join(hex_lines(page["words"], page["offset"]))) + endian = "little" if page["endian"] == "<" else "big" + where = "in the file" if request["record"] is None else f"in the buffer of record {request['record']}" + note = f"words {start:,}–{start + page['count'] - 1:,} of {request['total_words']:,}, {endian}-endian, offsets {where}" + if request["compressed"]: + note += "; offsets index the decompressed record buffer" + note += " (n: next 64 words, p: previous)" + self.query_one("#structure-hex-note", Static).update(note) + + def _clear_panel(self, heading: str) -> None: + self.query_one("#structure-placeholder", Static).update(heading) + for widget_id in ("fields", "errors", "entries", "hex-title", "hex", "hex-note"): + self.query_one(f"#structure-{widget_id}", Static).update("") + + @staticmethod + def _error_text(error) -> str: + if isinstance(error, ApiError): + return error.message + if isinstance(error, str): + return error + return f"{type(error).__name__}: {error}" + + def _report(self, error) -> None: + """Show an error (an exception or a message) in the app's status strip; never raise.""" + message = self._error_text(error) + show_error = getattr(self.app, "show_error", None) + if show_error is not None: + show_error(message) + else: + self.notify(message, severity="error") diff --git a/tests/gui/test_structure.py b/tests/gui/test_structure.py new file mode 100644 index 0000000..1a05cdb --- /dev/null +++ b/tests/gui/test_structure.py @@ -0,0 +1,288 @@ +"""The Structure tab: the lazy tree down to hit words, the detail panel with fields and raw words, paging and navigation.""" +from pathlib import Path + +import pytest + +textual = pytest.importorskip("textual") + +from textual.widgets import Static, TabbedContent, Tree # noqa: E402 + +from conftest import pilot_wait # noqa: E402 +from pyevio.decoders import fadc250_stream as fs # noqa: E402 +from pyevio.gui.app import PyEvioGui # noqa: E402 +from pyevio.gui.structure import StructurePane # noqa: E402 +from test_stream_stats import write_synthetic_file # noqa: E402 + + +def labels(node): + return [child.label.plain for child in node.children] + + +def ids(node): + return [child.data["id"] for child in node.children] + + +def child_by_id(node, child_id): + return next(child for child in node.children if child.data.get("id") == child_id) + + +def panel_text(app, widget_id): + content = app.query_one(f"#structure-{widget_id}", Static).content + return content if isinstance(content, str) else content.plain + + +async def open_app(session, path): + app = PyEvioGui(session, start_path=path) + pilot_cm = app.run_test(size=(120, 40)) + pilot = await pilot_cm.__aenter__() + pane = app.query_one(StructurePane) + tree = app.query_one("#structure-tree", Tree) + await pilot_wait(pilot, lambda: session.is_open and tree.root.data.get("_total") is not None, what="root page") + return app, pilot, pilot_cm, pane, tree + + +async def expand_and_wait(pilot, node): + """Expand a node and wait for its first page.""" + node.expand() + await pilot_wait(pilot, lambda: node.data.get("_total") is not None, what=f"children of {node.data['id']!r}") + await pilot.pause() + + +async def test_root_shows_the_records_and_the_trailer(session, synthetic): + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["path"]) + try: + tabs = app.query_one("#tabs", TabbedContent) + await pilot.press("4") + await pilot.pause() + assert app.focused is tree # the tab activation focuses the tree: arrows, Enter, n and p work at once + await pilot.press("2") # and the number keys still leave the tab while the tree has the focus + await pilot.pause() + assert tabs.active == "tab-plots" and app.focused is not tree + await pilot.press("4") + await pilot.pause() + assert tabs.active == "tab-structure" and app.focused is tree + assert tree.root.label.plain.startswith("file — ") and "3 records + trailer" in tree.root.label.plain + assert tree.root.is_expanded and ids(tree.root) == ["r0", "r1", "r2", "t"] + assert labels(tree.root)[0].startswith("record 0 — 4 events, ") and labels(tree.root)[3].startswith("trailer — ") + assert not tree.root.children[3].allow_expand and tree.root.children[0].allow_expand + # The root is shown in the panel: its fields and no words (the file node has none). + assert pane.detail["kind"] == "file" and "record_count 3\n" in panel_text(app, "fields") and pane.words_page is None + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_expanding_walks_record_frame_roc_payload_and_hits(session, synthetic): + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["path"]) + try: + record = child_by_id(tree.root, "r1") + await expand_and_wait(pilot, record) + assert ids(record) == ["r1/e0", "r1/e1", "r1/e2", "r1/e3", "r1/e4"] + event_labels = labels(record) + assert event_labels[0].startswith("event 0 — tag 0xFF60 stream frame, ") and event_labels[0].endswith(" words") + assert event_labels[4].startswith("event 4 — tag 0xFF50 type 0x10 num 0, ") + assert all(child.data["_record"] == 1 and child.data["_compression"] == "none" for child in record.children) + + frame = record.children[0] + await expand_and_wait(pilot, frame) + frame_labels = labels(frame) + assert frame_labels[0].startswith("stream info — tag 0xFF31") + assert frame_labels[1].startswith("ROC bank 7 stream 1 — tag 0x0007") + assert frame_labels[2].startswith("ROC bank 44 stream 2 — tag 0x002C") + assert [child.data["role"] for child in frame.children] == ["stream_info", "roc_bank", "roc_bank"] + + roc_7 = frame.children[1] + await expand_and_wait(pilot, roc_7) + roc_labels = labels(roc_7) + assert roc_labels[0].startswith("ROC stream info — tag 0xFF30") + assert roc_labels[1].startswith("payload port 1 — ") and "fADC250" in roc_labels[1] and "16 hits" in roc_labels[1] + assert roc_labels[3].startswith("payload (empty) port 5 — ") + by_port = {child.data.get("port"): child for child in roc_7.children[1:]} + assert by_port[1].allow_expand and not by_port[5].allow_expand + + payload = by_port[1] + await expand_and_wait(pilot, payload) + assert len(payload.children) == 16 and all(not child.allow_expand for child in payload.children) + n = 1 * 4 # record 1, event 0 is frame index 4 of the synthetic file + assert labels(payload)[3] == f"hit 3 — ch 3 t {(300 + n) * fs.HIT_TIME_TICK_NS} ns q {10 + n} {payload.children[3].data['word']}" + assert [child.data["channel"] for child in payload.children] == list(range(16)) + + # The ROC stream info carries the decoded payload-port map; the DCRB payload has words but no hit children. + info = roc_7.children[0] + await expand_and_wait(pilot, info) + assert [child.data["role"] for child in info.children] == ["time_slice", "payload_map"] + assert "3 entries" in labels(info)[1] + dcrb = frame.children[2] + await expand_and_wait(pilot, dcrb) + dcrb_labels = labels(dcrb) + assert any(label.startswith("payload port 4 — ") and "DCRB" in label for label in dcrb_labels) + assert not next(child for child in dcrb.children if child.data.get("port") == 4).allow_expand + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_detail_panel_shows_fields_errors_and_words(session, synthetic): + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["path"]) + try: + record = child_by_id(tree.root, "r1") + await expand_and_wait(pilot, record) + event = record.children[0] + tree.move_cursor(event) + await pilot.pause() + assert pane.detail["id"] == "r1/e0" + fields = panel_text(app, "fields") + assert "tag 0xFF60 (65,376)" in fields and "kind event" in fields and "structure Bank" in fields + assert panel_text(app, "placeholder") == "node 'r1/e0'" + assert panel_text(app, "errors") == "" + words = pane.words_page + assert words["record"] == 1 and int(words["words"][0], 16) == event.data["length"] and words["count"] == 64 + hex_text = panel_text(app, "hex") + assert hex_text.splitlines()[0].startswith(f"0x{event.data['offset']:08X} {words['words'][0]} {words['words'][1]}") + assert len(hex_text.splitlines()[0].split()) == 1 + 8 + note = panel_text(app, "hex-note") + assert "words 0–63 of" in note and "record 1" in note and "decompressed" not in note + + # n / p move the window of 64 words while the tree has the focus. + tree.focus() + await pilot.pause() + await pilot.press("n") + await pilot.pause() + assert pane.words_page["offset"] == event.data["offset"] + 64 * 4 and "words 64–" in panel_text(app, "hex-note") + await pilot.press("p") + await pilot.pause() + assert pane.words_page["offset"] == event.data["offset"] + await pilot.press("p") + await pilot.pause() + assert pane.words_page["offset"] == event.data["offset"] # clipped at the first word + + # A record node reads its header words at its file offset. + tree.move_cursor(record) + await pilot.pause() + assert pane.detail["kind"] == "record" and pane.words_page["record"] is None and pane.words_page["offset"] == record.data["offset"] + assert "bit_info.is_last_record" in panel_text(app, "fields") and "offsets in the file" in panel_text(app, "hex-note") + + # Hits have fields but no words. + frame = record.children[0] + await expand_and_wait(pilot, frame) + roc_7 = frame.children[1] + await expand_and_wait(pilot, roc_7) + payload = roc_7.children[1] + await expand_and_wait(pilot, payload) + tree.move_cursor(payload.children[0]) + await pilot.pause() + assert pane.detail["kind"] == "hit" and pane.words_page is None and "channel" in panel_text(app, "fields") and panel_text(app, "hex") == "" + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_show_node_expands_the_path_and_selects_the_node(session, synthetic): + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["path"]) + try: + app.show_structure_node("r1/e2") + await pilot.pause() + record = child_by_id(tree.root, "r1") + assert record.is_expanded and tree.cursor_node is child_by_id(record, "r1/e2") + assert pane.detail["id"] == "r1/e2" and pane.detail["index"] == 2 + assert panel_text(app, "placeholder") == "node 'r1/e2'" + await pilot_wait(pilot, lambda: child_by_id(record, "r1/e2").data.get("_total") is not None, what="event children") + assert ids(child_by_id(record, "r1/e2"))[0] == "r1/e2/b" + format(child_by_id(record, "r1/e2").children[0].data["offset"], "x") + + pane.show_node("r1/e2/" + ids(child_by_id(record, "r1/e2"))[1].split("/")[-1]) + await pilot.pause() + assert pane.detail["role"] == "roc_bank" and pane.detail["roc"] == 7 and tree.cursor_node.data["id"] == pane.detail["id"] + + pane.show_node("t") + await pilot.pause() + assert pane.detail["kind"] == "trailer" and tree.cursor_node is tree.root.children[3] + + pane.show_node("") + await pilot.pause() + assert pane.detail["kind"] == "file" and tree.cursor_node is tree.root + + # An unknown node reports an error and keeps the selection. + pane.show_node("r7") + await pilot.pause() + assert "r7" in str(app.query_one("#status-error", Static).render()) and tree.cursor_node is tree.root + finally: + await pilot_cm.__aexit__(None, None, None) + + +@pytest.fixture +def many_records(tmp_path): + folder = tmp_path / "many" + folder.mkdir() + path, _, _ = write_synthetic_file(folder / "many.evio", n_records=600, frames_per_record=1) + return Path(path) + + +async def test_more_child_pages_the_root_and_show_node_pages_until_present(session, many_records): + app, pilot, pilot_cm, pane, tree = await open_app(session, many_records) + try: + assert len(tree.root.children) == 501 and tree.root.data["_total"] == 601 + more = tree.root.children[-1] + assert more.label.plain == "… 101 more (press Enter to load)" and more.data["kind"] == "more" and not more.allow_expand + tree.focus() + await pilot.pause() + tree.move_cursor(more) + await pilot.pause() + assert "101 more" in panel_text(app, "placeholder") + await pilot.press("enter") + await pilot.pause() + assert len(tree.root.children) == 601 and ids(tree.root)[-1] == "t" and tree.root.children[-1].data["kind"] == "trailer" + assert tree.cursor_node.data["id"] == "r500" # the cursor lands on the first row of the new page + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_show_node_loads_root_pages_until_the_record_is_present(session, many_records): + app, pilot, pilot_cm, pane, tree = await open_app(session, many_records) + try: + assert len(tree.root.children) == 501 + app.show_structure_node("r550/e0") + await pilot.pause() + assert len(tree.root.children) == 601 + record = child_by_id(tree.root, "r550") + assert record.is_expanded and tree.cursor_node.data["id"] == "r550/e0" and pane.detail["id"] == "r550/e0" + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_lz4_record_words_come_from_the_decompressed_buffer(session, synthetic): + if synthetic["golden_lz4"] is None: + pytest.skip("golden set absent") + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["golden_lz4"]) + try: + record = next(child for child in tree.root.children if child.data["kind"] == "record" and child.data["compression_type"] != 0) + assert record.data["compression"] in record.label.plain + pane.show_node(f"{record.data['id']}/e0") + await pilot.pause() + event = pane.detail + assert event["kind"] == "event" and event["compressed"] and pane.words_page["record"] == record.data["index"] + assert int(pane.words_page["words"][0], 16) == event["length"] + assert "offsets index the decompressed record buffer" in panel_text(app, "hex-note") + await pilot_wait(pilot, lambda: tree.cursor_node.data.get("_total") is not None, what="event children") + assert all(child.data["structure"] in ("Bank", "Segment", "TagSegment") for child in tree.cursor_node.children) + finally: + await pilot_cm.__aexit__(None, None, None) + + +async def test_opening_another_file_rebuilds_the_tree(session, synthetic, many_records): + app, pilot, pilot_cm, pane, tree = await open_app(session, synthetic["path"]) + try: + record = child_by_id(tree.root, "r1") + await expand_and_wait(pilot, record) + tree.move_cursor(record.children[0]) + await pilot.pause() + assert pane.detail["id"] == "r1/e0" + app.open_path(many_records) + await pilot_wait(pilot, lambda: session.path == many_records.resolve() and tree.root.data.get("record_count") == 600, what="new file") + await pilot.pause() + assert "600 records" in tree.root.label.plain and len(tree.root.children) == 501 + assert pane.detail["kind"] == "file" and pane.detail["record_count"] == 600 + assert labels(tree.root)[0].startswith("record 0 — 1 events, ") + # Garbage keeps the current file and its tree. + app.open_path(synthetic["garbage"]) + await pilot.pause() + assert "garbage.evio" in str(app.query_one("#status-error", Static).render()) + assert "600 records" in tree.root.label.plain and len(tree.root.children) == 501 + finally: + await pilot_cm.__aexit__(None, None, None) From 9ca57389d2f5158f33802484bf5cd6b4f0a4eb37 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:31:23 -0400 Subject: [PATCH 49/65] Console viewer: Plots tab with plotext charts and PNG export The Plots tab of pyevio gui now draws what the browser's Plots tab draws, with textual-plotext: hits per frame, hit rate over time and the ROC-by-port occupancy heatmap at file level; the port-by-channel heatmap, rate, charge spectrum and time in frame for a ROC; rate, charge and time for one channel. A control row of Select widgets picks the level, ROC, port and channel, and keys do the same without the mouse: f/r/c switch the level, ]/[ step the ROC, }/{ the port, +/- the channel (rolling over into the next port like the browser's Prev/Next). Each plot keeps only the histogram dict of pyevio.web.report and rebuilds its plotext figure on render, so resizing redraws it; long histograms are rebinned to the widget width, and the heatmap is drawn as oversampled colour blocks with the counts printed in the cells and a dash on ports the ROC's map does not list. pyevio.gui.export turns one histogram dict into a PNG through matplotlib (Agg, so it works on a farm node): s saves the focused plot into the working directory, S every plot of the level, with names like synthetic_charge_roc7_port1_ch3.png. The module also holds the pure helpers (series, rebin, occupancy grid, ticks) the pane and the tests share. Two Textual details: the pane takes the focus when its tab is shown so its bindings work at once, and focused plots or Selects release the focus when hidden; Textual's blur would hand it to a sibling in the hidden tab and TabbedContent would switch the tab back. Reading the occupancy depth from the selection rather than the data shape fixes the export and the heatmap of a file without stream frames. I41. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/export.py | 295 ++++++++++++++++++++++++ pyevio/gui/plots.py | 470 ++++++++++++++++++++++++++++++++++++++- tests/gui/test_export.py | 92 ++++++++ tests/gui/test_plots.py | 157 +++++++++++++ 4 files changed, 1010 insertions(+), 4 deletions(-) create mode 100644 pyevio/gui/export.py create mode 100644 tests/gui/test_export.py create mode 100644 tests/gui/test_plots.py diff --git a/pyevio/gui/export.py b/pyevio/gui/export.py new file mode 100644 index 0000000..d8f5712 --- /dev/null +++ b/pyevio/gui/export.py @@ -0,0 +1,295 @@ +"""Histogram dicts as plot series, and one histogram as a PNG through matplotlib. + +Everything here is pure: the input is a dict of :func:`pyevio.web.report.histogram` +(lists of numbers), the output a dict, a string or a file. No Textual, so the +plots pane and the tests share one reading of the five histogram shapes: + +- ``hits_per_frame``, ``charge``: ``counts`` over ``edges``; +- ``time_in_frame``: ``counts`` over ``edges_ns``; +- ``rate``: ``rate_hz`` over ``edges_ns``, with ``counts`` and ``frames_per_bin`` per bin; +- ``occupancy``: ``counts`` at three depths by selection — (roc, port, channel) for the + file, (port, channel) for a ROC, one channel for a channel — plus ``module_id`` + (roc, port), 255 where the ROC's map does not list the port. + +matplotlib is imported inside :func:`save_histogram_png` only, with the ``Agg`` +backend: a farm node has no display, and the viewer must start without matplotlib. +""" +import math +from pathlib import Path +from typing import Optional + +from pyevio.decoders.fadc250_stream import MODULE_UNKNOWN + +NS_PER_S = 1e-9 +PLOT_COLOR = "#1f6fb5" # one hue for every single-series plot +DEAD_COLOR = "#8a8a8a" # a port the ROC's map does not list + + +# ---------------------------------------------------------------- ticks and labels +def nice_ticks(low: float, high: float, count: int) -> list: + """Round tick positions covering ``[low, high]``: 1, 2 or 5 times a power of ten (as the web charts do).""" + span = (high - low) or 1.0 + rough = span / max(count, 1) + power = 10 ** math.floor(math.log10(rough)) + step = next(candidate * power for candidate in (1, 2, 5, 10) if candidate * power >= rough) + first = math.ceil(low / step) * step + ticks = [] + tick = first + while tick <= high + step * 1e-9: + ticks.append(round(tick, 12)) + tick += step + return ticks + + +def format_compact(value: float) -> str: + """``1.2k``, ``3.4M``; integers below 1000 as they are.""" + if value == 0: + return "0" + magnitude = abs(value) + for limit, suffix in ((1e9, "G"), (1e6, "M"), (1e3, "k")): + if magnitude >= limit: + return f"{value / limit:.3g}{suffix}" + if float(value).is_integer(): + return str(int(value)) + return f"{value:.3g}" + + +def format_tick(value: float, step: float) -> str: + if value == 0: + return "0" + if abs(value) >= 1e4: + return format_compact(value) + decimals = 0 if step >= 1 else min(9, math.ceil(-math.log10(step))) + return f"{value:.{decimals}f}" + + +def tick_labels(ticks: list) -> list: + step = ticks[1] - ticks[0] if len(ticks) > 1 else (abs(ticks[0]) if ticks and ticks[0] else 1.0) + return [format_tick(tick, step) for tick in ticks] + + +# ---------------------------------------------------------------- the dicts as series +def selection_label(selection: Optional[dict]) -> str: + """``file``, ``ROC 7``, ``ROC 7 port 1 ch 3``.""" + selection = selection or {} + if selection.get("roc") is None: + return "file" + parts = [f"ROC {selection['roc']}"] + if selection.get("port") is not None: + parts.append(f"port {selection['port']}") + if selection.get("ch") is not None: + parts.append(f"ch {selection['ch']}") + return " ".join(parts) + + +HISTOGRAM_TITLES = {"hits_per_frame": "Hits per frame", "rate": "Hit rate", "occupancy": "Occupancy", + "charge": "Charge", "time_in_frame": "Time in frame"} + + +def histogram_title(hist: dict) -> str: + """``Charge — ROC 7 port 1 ch 3``; the occupancy names its axes.""" + name = HISTOGRAM_TITLES.get(hist["name"], hist["name"]) + if hist["name"] == "occupancy": + depth = occupancy_depth(hist) + name += " (ROC × port)" if depth == 3 else " (port × channel)" if depth == 2 else "" + return f"{name} — {selection_label(hist.get('selection'))}" + + +def series(hist: dict) -> dict: + """A one-dimensional histogram as ``{edges, values, x_label, y_label, log_y, empty}`` for drawing. + + ``values[i]`` belongs to ``[edges[i], edges[i + 1])``. The rate is drawn in seconds + from the first frame (the dict has nanoseconds); ``empty`` names why there is nothing + to draw, or is ``None``. + """ + name = hist["name"] + if name == "rate": + values = list(hist["rate_hz"]) + edges = [edge * NS_PER_S for edge in hist["edges_ns"]] + x_label, y_label, log_y = "time since the first frame (s)", "hit rate (Hz)", False + counts = hist["counts"] + elif name in ("hits_per_frame", "charge", "time_in_frame"): + values = list(hist["counts"]) + edges = list(hist["edges"] if name != "time_in_frame" else hist["edges_ns"]) + x_label, y_label, log_y = hist["x_unit"], hist["y_unit"], name == "charge" + counts = values + else: + raise ValueError(f"{name!r} is not a one-dimensional histogram") + if not values or len(edges) != len(values) + 1: + empty = "no stream frames" + elif not any(count > 0 for count in counts): + empty = "no stream frames" if name == "hits_per_frame" else "no hits" + else: + empty = None + return {"edges": edges, "values": values, "x_label": x_label, "y_label": y_label, "log_y": log_y, "empty": empty} + + +def rebin(hist: dict, max_bins: int) -> dict: + """The same histogram with adjacent bins merged so that at most ``max_bins`` remain. + + Counts add up. The rate of a merged bin is the frames-per-bin weighted mean of the + rates, which equals the merged counts over the merged live time, so no frame period + is needed. Returns ``hist`` itself when it already fits. + """ + name = hist["name"] + key_values = "rate_hz" if name == "rate" else "counts" + key_edges = "edges_ns" if name in ("rate", "time_in_frame") else "edges" + n_bins = len(hist[key_values]) + if max_bins < 1 or n_bins <= max_bins: + return hist + factor = math.ceil(n_bins / max_bins) + edges = hist[key_edges] + starts = list(range(0, n_bins, factor)) + new_edges = [edges[start] for start in starts] + [edges[n_bins]] + merged = dict(hist) + merged[key_edges] = new_edges + merged["counts"] = [sum(hist["counts"][start:start + factor]) for start in starts] + if name == "rate": + frames = [sum(hist["frames_per_bin"][start:start + factor]) for start in starts] + weighted = [sum(rate * weight for rate, weight in zip(hist["rate_hz"][start:start + factor], + hist["frames_per_bin"][start:start + factor])) + for start in starts] + merged["frames_per_bin"] = frames + merged["rate_hz"] = [total / count if count else 0.0 for total, count in zip(weighted, frames)] + return merged + + +def occupancy_depth(hist: dict) -> int: + """3 for the file (roc, port, channel), 2 for a ROC (port, channel), 1 for one channel. + + Read from the selection, not from the shape of ``counts``: a file without stream + frames has no ROCs, and its empty file-level list looks like any other depth. + """ + selection = hist.get("selection") or {} + if selection.get("roc") is None: + return 3 + if selection.get("port") is None: + return 2 + return 1 if selection.get("ch") is not None else 2 + + +def occupancy_grid(hist: dict) -> dict: + """The occupancy as a grid: ``rows``/``cols`` labels, ``values[row][col]``, ``dead[row][col]``, titles, ``empty``. + + File level: ROC × port, the channels summed. ROC level: port × channel. Channel + level: one cell. ``dead`` marks ports the ROC's map does not list (module 255). + """ + selection = hist.get("selection") or {} + rocs, ports, module_id, channels = hist["rocs"], hist["ports"], hist["module_id"], hist["channels"] + roc, port, channel = selection.get("roc"), selection.get("port"), selection.get("ch") + if roc is None: + values = [[sum(per_channel) for per_channel in per_port] for per_port in hist["counts"]] + dead = [[module == MODULE_UNKNOWN for module in row] for row in module_id] + rows, cols = [f"ROC {roc}" for roc in rocs], [str(port) for port in ports] + row_title, col_title = "ROC", "payload port" + else: + roc_i = rocs.index(roc) if roc in rocs else 0 + modules = module_id[roc_i] if roc_i < len(module_id) else [MODULE_UNKNOWN] * len(ports) + row_title, col_title = "payload port", "channel" + if port is None: # port × channel + values = [list(per_channel) for per_channel in hist["counts"]] + dead = [[module == MODULE_UNKNOWN] * channels for module in modules] + rows, cols = [f"port {port}" for port in ports], [str(channel) for channel in range(channels)] + else: # one port: its channels, or the one channel + port_i = ports.index(port) if port in ports else 0 + is_dead = port_i < len(modules) and modules[port_i] == MODULE_UNKNOWN + values = [list(hist["counts"])] + dead = [[is_dead] * len(values[0])] + rows = [f"port {port}"] + cols = [str(channel)] if channel is not None else [str(index) for index in range(len(values[0]))] + empty = None + if not rows or not cols: + empty = "no stream frames" + elif not any(value > 0 for row, dead_row in zip(values, dead) for value, is_dead in zip(row, dead_row) if not is_dead): + empty = "no hits" + return {"rows": rows, "cols": cols, "values": values, "dead": dead, "row_title": row_title, "col_title": col_title, + "value_label": hist.get("y_unit", "hits"), "empty": empty} + + +# ---------------------------------------------------------------- PNG +def default_png_name(file_path, hist_name: str, selection: Optional[dict] = None) -> str: + """``synthetic_charge_roc7_port1_ch3.png``: the file's stem, the histogram, the selection that is set.""" + stem = Path(str(file_path)).stem if file_path else "histogram" + parts = [stem, hist_name] + selection = selection or {} + for key, label in (("roc", "roc"), ("port", "port"), ("ch", "ch")): + if selection.get(key) is not None: + parts.append(f"{label}{selection[key]}") + return "_".join(parts) + ".png" + + +def save_histogram_png(hist: dict, path, title: str = "") -> Path: + """Draw one histogram dict (any of the five names) with matplotlib and write ``path`` as a PNG.""" + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.colors import PowerNorm + + path = Path(path) + figure, axes = plt.subplots(figsize=(8, 4.5), dpi=120) + try: + if hist["name"] == "occupancy": + _draw_occupancy_png(axes, figure, occupancy_grid(hist), PowerNorm) + else: + _draw_series_png(axes, series(hist)) + axes.set_title(title or histogram_title(hist), loc="left", fontsize=11) + figure.tight_layout() + figure.savefig(path, format="png") + finally: + plt.close(figure) + return path + + +def _draw_series_png(axes, data: dict) -> None: + if data["empty"]: + axes.text(0.5, 0.5, data["empty"], ha="center", va="center", transform=axes.transAxes, color=DEAD_COLOR) + axes.set_xticks([]) + axes.set_yticks([]) + return + axes.stairs(data["values"], data["edges"], fill=True, color=PLOT_COLOR, alpha=0.85, linewidth=0) + axes.set_xlim(data["edges"][0], data["edges"][-1]) + if data["log_y"]: + axes.set_yscale("log") + else: + axes.set_ylim(bottom=0) + axes.set_xlabel(data["x_label"]) + axes.set_ylabel(data["y_label"]) + axes.grid(True, axis="y", color="#dddddd", linewidth=0.6) + axes.set_axisbelow(True) + for side in ("top", "right"): + axes.spines[side].set_visible(False) + + +def _draw_occupancy_png(axes, figure, grid: dict, PowerNorm) -> None: + import numpy as np + + if grid["empty"] == "no stream frames": + axes.text(0.5, 0.5, grid["empty"], ha="center", va="center", transform=axes.transAxes, color=DEAD_COLOR) + axes.set_xticks([]) + axes.set_yticks([]) + return + values = np.array(grid["values"], dtype=float) + dead = np.array(grid["dead"], dtype=bool) + masked = np.ma.masked_where(dead, values) + maximum = float(masked.max()) if masked.count() else 0.0 + colormap = plt_colormap("Blues").with_extremes(bad=DEAD_COLOR) + image = axes.imshow(masked, cmap=colormap, norm=PowerNorm(0.5, vmin=0, vmax=maximum or 1), aspect="auto", + interpolation="nearest") + axes.set_xticks(range(len(grid["cols"])), grid["cols"]) + axes.set_yticks(range(len(grid["rows"])), grid["rows"]) + axes.set_xlabel(grid["col_title"]) + axes.set_ylabel(grid["row_title"]) + for row_i, (row, dead_row) in enumerate(zip(grid["values"], grid["dead"])): + for col_i, (value, is_dead) in enumerate(zip(row, dead_row)): + label = "–" if is_dead else format_compact(value) + dark = (not is_dead) and maximum > 0 and math.sqrt(value / maximum) > 0.55 + axes.text(col_i, row_i, label, ha="center", va="center", fontsize=7, color="white" if dark else "black") + bar = figure.colorbar(image, ax=axes) + bar.set_label(f"{grid['value_label']} (square-root scale); grey: port not in the ROC's map") + + +def plt_colormap(name: str): + import matplotlib + + return matplotlib.colormaps[name] diff --git a/pyevio/gui/plots.py b/pyevio/gui/plots.py index 44393cb..426ee7d 100644 --- a/pyevio/gui/plots.py +++ b/pyevio/gui/plots.py @@ -1,13 +1,475 @@ -"""Plots tab: hits per frame, rate, occupancy, charge and time in frame, at file, ROC and channel level.""" -from textual.widgets import Static +"""Plots tab: hits per frame, rate, occupancy, charge and time in frame, at file, ROC and channel level. +The pane mirrors the browser's Plots tab. A control row picks the level (file, +ROC, channel) and the ROC, port and channel; a 2 × 2 grid of +:class:`HistogramPlot` widgets draws the histograms of that selection: + +- file: hits per frame, hit rate over time, occupancy heatmap of ROC × port; +- ROC: occupancy heatmap of port × channel, hit rate, charge spectrum, time in frame; +- channel: hit rate, charge and time in frame of the one channel. + +Keys, on the pane (they need the focus inside it; the pane takes it when its tab +is shown): ``f`` / ``r`` / ``c`` switch the level, ``]`` / ``[`` step the ROC, +``}`` / ``{`` the port, ``+`` / ``-`` the channel (rolling over into the next +port, as the browser's Prev / Next do), Tab moves between the plots, ``s`` saves +the focused plot (else the first one) as a PNG in the working directory and ``S`` +saves every plot of the level. + +Each plot holds only the histogram dict and rebuilds its plotext figure in +``render``, so a resize or the focus border redraws it at the new size; the +dicts are lists of numbers, never a view of the file. +""" +from pathlib import Path +from typing import Optional + +from rich.text import Text +from textual import events, on +from textual.binding import Binding +from textual.containers import Grid, Horizontal +from textual.widgets import Select, Static +from textual_plotext import PlotextPlot + +from pyevio.gui.export import (default_png_name, format_compact, histogram_title, nice_ticks, occupancy_grid, rebin, + save_histogram_png, series, tick_labels) from pyevio.gui.panes import Pane +from pyevio.stream_stats import N_CHANNELS +from pyevio.web import ApiError + +LEVEL_FILE, LEVEL_ROC, LEVEL_CHANNEL = "file", "roc", "channel" +LEVELS = (("File", LEVEL_FILE), ("ROC", LEVEL_ROC), ("Channel", LEVEL_CHANNEL)) +PLOT_COUNT = 4 +MESSAGE_NO_FILE = "Open a file to see its plots." +MESSAGE_ANALYZING = "The analysis is running — the plots appear when it is done." +HINT = "f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all" + +# plotext colours: one hue for the series, a light-to-dark ramp of the same hue for the heatmap +SERIES_COLOR = (31, 111, 181) +RAMP_LOW = (28, 42, 68) +RAMP_HIGH = (120, 200, 255) +DEAD_CELL = (90, 90, 90) +TEXT_LIGHT, TEXT_DARK = (240, 240, 240), (20, 20, 20) +MIN_PLOT_WIDTH, MIN_PLOT_HEIGHT = 16, 6 + + +def heat_color(value: float, maximum: float) -> tuple: + """The ramp colour of ``value``; square root, so a few hot channels do not flatten the rest (as the web does).""" + fraction = (value / maximum) ** 0.5 if maximum > 0 and value > 0 else 0.0 + return tuple(int(round(low + (high - low) * fraction)) for low, high in zip(RAMP_LOW, RAMP_HIGH)) + + +def text_color_on(background: tuple) -> tuple: + luminance = 0.299 * background[0] + 0.587 * background[1] + 0.114 * background[2] + return TEXT_DARK if luminance > 150 else TEXT_LIGHT + + +class ReleaseFocusOnHide: + """Give the focus up when hidden, instead of passing it to a sibling. + + Textual's ``blur`` moves the focus to a visible sibling; when the Plots tab is + switched away the sibling is another widget of this pane, its focus makes + ``TabbedContent`` activate the Plots tab again, and the tab switch is undone. + """ + + def _on_hide(self, event: events.Hide) -> None: + if self.has_focus: + self.screen.set_focus(None) + super()._on_hide(event) + + +class PlotsSelect(ReleaseFocusOnHide, Select): + pass + + +class HistogramPlot(ReleaseFocusOnHide, PlotextPlot, can_focus=True): + """One histogram dict drawn with plotext; the figure is rebuilt from the dict at every render.""" + + DEFAULT_CSS = """ + HistogramPlot { + border: round $panel-lighten-2; + padding: 0; + } + HistogramPlot:focus { + border: round $accent; + } + """ + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.hist: Optional[dict] = None + self.title = "" + self.placeholder = "" + + def show(self, hist: Optional[dict], title: str = "", placeholder: str = "") -> None: + self.hist = hist + self.title = title or (histogram_title(hist) if hist else "") + self.placeholder = placeholder + self.border_title = self.title + self.refresh() + + def clear(self, placeholder: str = "") -> None: + self.show(None, "", placeholder) + + def render(self): + if self.hist is None: + return Text(self.placeholder, style="dim") + width, height = self.size.width, self.size.height + if width < MIN_PLOT_WIDTH or height < MIN_PLOT_HEIGHT: + return Text("") + try: + self.plt.clear_figure() + empty = self._build(width, height) + if empty: + return Text(empty, style="dim") + return super().render() + except Exception as error: # a plotext failure on odd data must never take the app down + return Text(f"cannot draw {self.title}: {error}", style="dim") + + # ---------------------------------------------------------------- building the plotext figure + def _build(self, width: int, height: int) -> Optional[str]: + """Draw ``self.hist`` into ``self.plt``; returns the reason when there is nothing to draw.""" + hist = self.hist + if hist["name"] == "occupancy": + return self._build_heatmap(occupancy_grid(hist), width, height) + data = series(rebin(hist, max(8, width - 12))) + if data["empty"]: + return data["empty"] + plt = self.plt + edges, values = data["edges"], data["values"] + if hist["name"] == "rate": + xs, ys = [], [] + for i, value in enumerate(values): # a step line: the bin's value from its left edge to its right one + xs += [edges[i], edges[i + 1]] + ys += [value, value] + plt.plot(xs, ys, marker="braille", color=SERIES_COLOR) + else: + centers = [(edges[i] + edges[i + 1]) / 2 for i in range(len(values))] + plt.bar(centers, values, width=1, color=SERIES_COLOR) + top = max(values) + if hist["name"] != "rate" and top <= 4: + y_ticks = list(range(int(top) + 1)) # counts: whole numbers only + else: + y_ticks = nice_ticks(0, top, 4) + if y_ticks and y_ticks[-1] < top: + y_ticks.append(round(y_ticks[-1] + (y_ticks[1] - y_ticks[0] if len(y_ticks) > 1 else top), 12)) + x_ticks = [tick for tick in nice_ticks(edges[0], edges[-1], 5) if edges[0] <= tick <= edges[-1]] + plt.xlim(edges[0], edges[-1]) + plt.ylim(0, y_ticks[-1] if y_ticks else top) + if x_ticks: + plt.xticks(x_ticks, tick_labels(x_ticks)) + if y_ticks: + plt.yticks(y_ticks, tick_labels(y_ticks)) + plt.xlabel(data["x_label"]) + plt.ylabel(data["y_label"]) + return None + + def _build_heatmap(self, grid: dict, width: int, height: int) -> Optional[str]: + """Each cell as a block of plotext matrix points, so the heatmap fills the widget; ``–`` marks unmapped ports.""" + if grid["empty"] == "no stream frames": + return grid["empty"] + plt = self.plt + rows, cols = len(grid["rows"]), len(grid["cols"]) + maximum = max((value for row, dead_row in zip(grid["values"], grid["dead"]) + for value, is_dead in zip(row, dead_row) if not is_dead), default=0) + # The matrix is at least as large as the canvas (one point per cell or more), so plotext leaves no gaps + # between the blocks; the canvas is the widget minus the tick labels, the frame and the axis titles. + block_w = max(1, -(-width // cols)) + block_h = max(1, -(-height // rows)) + colors = [[DEAD_CELL if is_dead else heat_color(value, maximum) + for value, is_dead in zip(row, dead_row)] for row, dead_row in zip(grid["values"], grid["dead"])] + matrix = [] + for row in colors: + line = [color for color in row for _ in range(block_w)] + matrix += [line] * block_h + plt.matrix_plot(matrix) + total_rows = rows * block_h + x_centers = [col_i * block_w + (block_w - 1) / 2 for col_i in range(cols)] + y_centers = [(total_rows - 1) - row_i * block_h - (block_h - 1) / 2 for row_i in range(rows)] + chars_per_cell = max(1, (width - 10) // cols) # about one block's width in terminal columns + x_step = max(1, -(-4 // chars_per_cell)) # at least four columns per tick label + plt.xticks([x for i, x in enumerate(x_centers) if i % x_step == 0], + [label for i, label in enumerate(grid["cols"]) if i % x_step == 0]) + plt.yticks(y_centers, grid["rows"]) + plt.xlabel(grid["col_title"]) + plt.ylabel(grid["row_title"]) + # The counts are printed in the cells when every one of them fits with a margin; the dash of an unmapped + # port always fits. + longest = max((len(format_compact(value)) for row, dead_row in zip(grid["values"], grid["dead"]) + for value, is_dead in zip(row, dead_row) if not is_dead), default=0) + with_values = longest + 1 < chars_per_cell + for row_i, (row, dead_row) in enumerate(zip(grid["values"], grid["dead"])): + for col_i, (value, is_dead) in enumerate(zip(row, dead_row)): + if not is_dead and not with_values: + continue + label = "–" if is_dead else format_compact(value) + background = colors[row_i][col_i] + plt.text(label, x_centers[col_i], y_centers[row_i], color=text_color_on(background), background=background, + alignment="center") + return None class PlotsPane(Pane): + """The Plots tab; see the module docstring for the keys and the levels.""" + + BINDINGS = [ + Binding("f", "level('file')", "File"), + Binding("r", "level('roc')", "ROC"), + Binding("c", "level('channel')", "Channel"), + # The step keys stay out of the footer (the hint line in the pane lists them) so the footer keeps the level and save keys. + Binding("right_square_bracket", "step('roc', 1)", "Next ROC", key_display="]", show=False), + Binding("left_square_bracket", "step('roc', -1)", "Prev ROC", key_display="[", show=False), + Binding("right_curly_bracket", "step('port', 1)", "Next port", key_display="}", show=False), + Binding("left_curly_bracket", "step('port', -1)", "Prev port", key_display="{", show=False), + Binding("plus", "step('channel', 1)", "Next channel", key_display="+", show=False), + Binding("equals_sign", "step('channel', 1)", "Next channel", show=False), + Binding("minus", "step('channel', -1)", "Prev channel", key_display="-", show=False), + Binding("s", "save", "Save PNG"), + Binding("S", "save_all", "Save all", key_display="S"), + ] + DEFAULT_CSS = """ + PlotsPane #plots-message { + padding: 1 0; + } + PlotsPane #plots-controls { + height: 3; + } + PlotsPane #plots-controls Select { + width: 16; + } + PlotsPane #plots-controls #plots-roc { + width: 24; + } + PlotsPane #plots-hint { + width: 1fr; + color: $text-muted; + padding: 1 1 0 1; + } + PlotsPane #plots-grid { + height: 1fr; + grid-size: 2 2; + grid-gutter: 0 1; + } + """ + + def __init__(self, session, **kwargs): + super().__init__(session, **kwargs) + self.level = LEVEL_FILE + self.roc: Optional[int] = None + self.port: Optional[int] = None + self.channel: int = 0 + self._updating = False # setting a Select programmatically posts Changed; ignored while this is set + def compose(self): - yield Static("Plots appear when the analysis is done.", id="plots-placeholder") + yield Static(MESSAGE_NO_FILE, id="plots-message") + with Horizontal(id="plots-controls"): + yield PlotsSelect(LEVELS, value=LEVEL_FILE, allow_blank=False, id="plots-level") + yield PlotsSelect([], prompt="ROC", id="plots-roc") + yield PlotsSelect([], prompt="port", id="plots-port") + yield PlotsSelect([(f"ch {channel}", channel) for channel in range(N_CHANNELS)], prompt="channel", id="plots-channel") + yield Static(HINT, id="plots-hint") + with Grid(id="plots-grid"): + for index in range(PLOT_COUNT): + yield HistogramPlot(id=f"plot-{index}") + + # ---------------------------------------------------------------- pane hooks + def file_closed(self) -> None: + super().file_closed() + self.roc = self.port = None + self.channel = 0 + for plot in self.plots: + plot.clear() + self._show_message(MESSAGE_NO_FILE) + + def file_opened(self) -> None: + self._show_message(MESSAGE_ANALYZING) def stats_ready(self, summary: dict) -> None: super().stats_ready(summary) - self.query_one("#plots-placeholder", Static).update(f"{summary['totals']['n_hits']:,} hits to plot") + rocs = summary["rocs"] + self.roc = rocs[0]["roc"] if rocs else None + self.port = rocs[0]["ports"][0] if rocs and rocs[0]["ports"] else None + self.channel = 0 + self.level = LEVEL_FILE + self._sync_controls() + self._show_message(None) + self.replot() + + def _show_message(self, message: Optional[str]) -> None: + self.query_one("#plots-message", Static).update(message or "") + self.query_one("#plots-message", Static).display = message is not None + self.query_one("#plots-controls", Horizontal).display = message is None + self.query_one("#plots-grid", Grid).display = message is None + + def on_show(self, event: events.Show) -> None: + """Take the focus when the tab is shown, so the pane's keys work at once.""" + focused = self.app.focused + if focused is None or not any(node is self for node in focused.ancestors_with_self): + self.plots[0].focus() + + # ---------------------------------------------------------------- selection + @property + def plots(self) -> list: + return [self.query_one(f"#plot-{index}", HistogramPlot) for index in range(PLOT_COUNT)] + + @property + def visible_plots(self) -> list: + return [plot for plot in self.plots if plot.display and plot.hist is not None] + + def titles(self) -> list: + """The titles of the plots on show, for the tests and the status.""" + return [plot.title for plot in self.plots if plot.display] + + def roc_row(self, roc: Optional[int]) -> Optional[dict]: + if self.summary is None or roc is None: + return None + return next((row for row in self.summary["rocs"] if row["roc"] == roc), None) + + def _sync_controls(self) -> None: + """Set the Select widgets to the pane's state without replotting.""" + self._updating = True + try: + rocs = self.summary["rocs"] if self.summary else [] + roc_select = self.query_one("#plots-roc", Select) + roc_select.set_options([(f"ROC {row['roc']} ({', '.join(row['modules']) or 'no modules'})", row["roc"]) for row in rocs]) + if self.roc is not None: + roc_select.value = self.roc + row = self.roc_row(self.roc) + ports = row["ports"] if row else [] + port_select = self.query_one("#plots-port", Select) + port_select.set_options([(f"port {port}", port) for port in ports]) + if self.port in ports: + port_select.value = self.port + self.query_one("#plots-channel", Select).value = self.channel + self.query_one("#plots-level", Select).value = self.level + finally: + self._updating = False + + @on(Select.Changed) + def _select_changed(self, event: Select.Changed) -> None: + event.stop() + if self._updating or event.value is Select.NULL or event.value != event.select.value: + return # programmatic, blank, or stale: the Select already shows another value (fast key repeats) + select_id = event.select.id + if select_id == "plots-level" and event.value != self.level: + self.level = event.value + elif select_id == "plots-roc" and event.value != self.roc: + self._set_roc(event.value) + self._sync_controls() + elif select_id == "plots-port" and event.value != self.port: + self.port = event.value + elif select_id == "plots-channel" and event.value != self.channel: + self.channel = event.value + else: + return + self.replot() + + def _set_roc(self, roc: int) -> None: + self.roc = roc + row = self.roc_row(roc) + self.port = row["ports"][0] if row and row["ports"] else None + self.channel = 0 + + def action_level(self, level: str) -> None: + if level == self.level or self.summary is None: + return + self.level = level + self._sync_controls() + self.replot() + + def action_step(self, what: str, direction: int) -> None: + if self.summary is None: + return + if what == "roc": + rocs = [row["roc"] for row in self.summary["rocs"]] + if not rocs: + return + index = (rocs.index(self.roc) if self.roc in rocs else 0) + direction + if not 0 <= index < len(rocs): + return + self._set_roc(rocs[index]) + else: + row = self.roc_row(self.roc) + ports = row["ports"] if row else [] + if not ports: + return + port_i = ports.index(self.port) if self.port in ports else 0 + if what == "port": + port_i += direction + if not 0 <= port_i < len(ports): + return + self.port = ports[port_i] + else: # the channel, rolling over into the next or previous port + flat = port_i * N_CHANNELS + self.channel + direction + if not 0 <= flat < len(ports) * N_CHANNELS: + return + self.port, self.channel = ports[flat // N_CHANNELS], flat % N_CHANNELS + self._sync_controls() + self.replot() + + # ---------------------------------------------------------------- plotting + def _histogram(self, name: str, **selection) -> Optional[dict]: + try: + return self.session.histogram(name, **selection) + except ApiError as error: + self.app.show_error(error.message) + return None + + def replot(self) -> None: + """Fetch the histograms of the current level and selection and hand them to the plots.""" + if self.summary is None: + return + plots = self.plots + requests, placeholder = [], "" + if self.level == LEVEL_FILE: + requests = [("hits_per_frame", {}), ("rate", {}), ("occupancy", {})] + elif self.roc is None: + placeholder = "no ROCs in the file" + elif self.level == LEVEL_ROC: + selection = {"roc": self.roc} + requests = [("occupancy", selection), ("rate", selection), ("charge", selection), ("time_in_frame", selection)] + elif self.port is None: + placeholder = f"ROC {self.roc} has no mapped ports" + else: + selection = {"roc": self.roc, "port": self.port, "channel": self.channel} + requests = [("rate", selection), ("charge", selection), ("time_in_frame", selection)] + for index, plot in enumerate(plots): + if index < len(requests): + name, selection = requests[index] + hist = self._histogram(name, **selection) + plot.show(hist, placeholder=f"{name}: not available" if hist is None else "") + plot.display = True + else: + plot.clear(placeholder) + plot.display = bool(placeholder) and index == 0 + + # ---------------------------------------------------------------- PNG export + def current_plot(self) -> Optional[HistogramPlot]: + """The focused plot, else the first plot on show.""" + focused = self.app.focused + if isinstance(focused, HistogramPlot) and focused.hist is not None and focused.display: + return focused + visible = self.visible_plots + return visible[0] if visible else None + + def _save(self, plot: HistogramPlot) -> Optional[Path]: + path = Path.cwd() / default_png_name(self.session.path, plot.hist["name"], plot.hist.get("selection")) + try: + return save_histogram_png(plot.hist, path, plot.title) + except Exception as error: # matplotlib missing, an unwritable folder: tell, do not crash + self.app.show_error(f"cannot save {path.name}: {error}") + return None + + def action_save(self) -> None: + plot = self.current_plot() + if plot is None: + self.app.notify("nothing to save", severity="warning") + return + path = self._save(plot) + if path is not None: + self.app.notify(f"saved {path}") + + def action_save_all(self) -> None: + paths = [path for plot in self.visible_plots for path in [self._save(plot)] if path is not None] + if paths: + self.app.notify(f"saved {len(paths)} PNG{'s' if len(paths) != 1 else ''} in {paths[0].parent}") + else: + self.app.notify("nothing to save", severity="warning") diff --git a/tests/gui/test_export.py b/tests/gui/test_export.py new file mode 100644 index 0000000..68d1adf --- /dev/null +++ b/tests/gui/test_export.py @@ -0,0 +1,92 @@ +"""PNG export of the histogram dicts, without Textual.""" +import pytest + +pytest.importorskip("matplotlib") + +from pyevio.gui.export import default_png_name, nice_ticks, occupancy_grid, rebin, save_histogram_png, series # noqa: E402 +from pyevio.stream_stats import compute_stream_stats # noqa: E402 +from pyevio.web.report import HISTOGRAM_NAMES, histogram # noqa: E402 + +PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n" + + +@pytest.fixture(scope="module") +def stats(tmp_path_factory): + from test_stream_stats import write_synthetic_file + + path, _, _ = write_synthetic_file(tmp_path_factory.mktemp("export") / "synthetic.evio") + return compute_stream_stats(str(path), workers=1) + + +@pytest.mark.parametrize("name", HISTOGRAM_NAMES) +def test_save_histogram_png_writes_a_png_for_every_histogram(stats, name, tmp_path): + hist = histogram(stats, name) + path = save_histogram_png(hist, tmp_path / f"{name}.png", f"{name} of the synthetic file") + assert path == tmp_path / f"{name}.png" + assert path.read_bytes()[:8] == PNG_SIGNATURE and path.stat().st_size > 1000 + + +def test_save_histogram_png_at_roc_and_channel_level(stats, tmp_path): + for selection in ({"roc": 7}, {"roc": 7, "port": 1, "channel": 3}, {"roc": 44}): + for name in ("occupancy", "charge", "rate", "time_in_frame"): + hist = histogram(stats, name, **selection) + path = save_histogram_png(hist, tmp_path / default_png_name("synthetic.evio", name, hist["selection"])) + assert path.read_bytes()[:8] == PNG_SIGNATURE + assert (tmp_path / "synthetic_charge_roc7_port1_ch3.png").is_file() + assert (tmp_path / "synthetic_occupancy_roc44.png").is_file() + + +def test_default_png_name(): + assert default_png_name("/data/runs/synthetic.evio", "charge", {"roc": 7, "port": 1, "ch": 3}) == "synthetic_charge_roc7_port1_ch3.png" + assert default_png_name("synthetic.evio", "hits_per_frame", {"roc": None, "port": None, "ch": None}) == "synthetic_hits_per_frame.png" + assert default_png_name("run_001.evio.0", "rate", {"roc": 44}) == "run_001.evio_rate_roc44.png" + assert default_png_name(None, "occupancy", None) == "histogram_occupancy.png" + + +def test_occupancy_grid_marks_unmapped_ports(stats): + grid = occupancy_grid(histogram(stats, "occupancy")) + assert grid["rows"] == ["ROC 7", "ROC 44"] and grid["cols"] == ["1", "3", "4", "5", "6"] + assert grid["dead"][0] == [False, False, True, False, True] and grid["dead"][1] == [True, True, False, True, False] + assert sum(grid["values"][0]) == stats.n_hits and grid["empty"] is None + roc = occupancy_grid(histogram(stats, "occupancy", roc=7)) + assert roc["rows"] == ["port 1", "port 3", "port 4", "port 5", "port 6"] and len(roc["cols"]) == 16 + assert roc["dead"][2] == [True] * 16 and not any(roc["dead"][0]) + channel = occupancy_grid(histogram(stats, "occupancy", roc=7, port=1, channel=3)) + assert channel["rows"] == ["port 1"] and channel["cols"] == ["3"] and channel["dead"] == [[False]] + port = occupancy_grid(histogram(stats, "occupancy", roc=7, port=4)) + assert port["rows"] == ["port 4"] and len(port["cols"]) == 16 and port["dead"] == [[True] * 16] + + +def test_occupancy_without_rocs_is_empty_and_still_exports(tmp_path): + hist = {"name": "occupancy", "rocs": [], "ports": [1, 3], "channels": 16, "module_id": [], "counts": [], + "y_unit": "hits", "selection": {"roc": None, "port": None, "ch": None}} + grid = occupancy_grid(hist) + assert grid["rows"] == [] and grid["empty"] == "no stream frames" + path = save_histogram_png(hist, tmp_path / "empty.png") + assert path.read_bytes()[:8] == PNG_SIGNATURE + + +def test_series_and_rebin_keep_the_totals(stats): + charge = histogram(stats, "charge") + data = series(charge) + assert len(data["edges"]) == len(data["values"]) + 1 and data["log_y"] and data["empty"] is None + merged = rebin(charge, 20) + assert len(merged["counts"]) <= 20 and sum(merged["counts"]) == sum(charge["counts"]) + assert merged["edges"][0] == charge["edges"][0] and merged["edges"][-1] == charge["edges"][-1] + rate = histogram(stats, "rate") + merged = rebin(rate, 16) + assert len(merged["rate_hz"]) <= 16 and sum(merged["counts"]) == sum(rate["counts"]) + assert sum(merged["frames_per_bin"]) == sum(rate["frames_per_bin"]) + # The merged rate is the merged counts over the merged live time. + live = [frames for frames in merged["frames_per_bin"]] + for rate_hz, counts, frames in zip(merged["rate_hz"], merged["counts"], live): + if frames: + assert rate_hz == pytest.approx(counts / (frames * stats.frame_period_ns * 1e-9)) + assert rebin(charge, 1000) is charge + assert series(histogram(stats, "charge", roc=44))["empty"] == "no hits" + + +def test_nice_ticks(): + assert nice_ticks(0, 64, 5) == [0, 20, 40, 60] + assert nice_ticks(0, 1, 4) == pytest.approx([0, 0.5, 1.0]) + assert nice_ticks(0, 0, 4) == [0] diff --git a/tests/gui/test_plots.py b/tests/gui/test_plots.py new file mode 100644 index 0000000..d97d634 --- /dev/null +++ b/tests/gui/test_plots.py @@ -0,0 +1,157 @@ +"""The Plots tab: the three levels, the keys, a ROC without hits, the PNG save.""" +import pytest + +textual = pytest.importorskip("textual") +pytest.importorskip("textual_plotext") + +from conftest import pilot_wait # noqa: E402 +from pyevio.gui.app import PyEvioGui # noqa: E402 +from pyevio.gui.plots import HistogramPlot, PlotsPane # noqa: E402 + +PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n" + + +async def open_plots(app, pilot): + """Wait for the analysis, switch to the Plots tab (the pane takes the focus) and return the pane.""" + await pilot_wait(pilot, lambda: app.plots.summary is not None, what="stats_ready") + await pilot.press("2") + await pilot.pause() + return app.query_one(PlotsPane) + + +def rendered(plot: HistogramPlot) -> str: + return plot.render().plain + + +async def test_file_level_shows_hits_per_frame_rate_and_occupancy(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + titles = pane.titles() + assert len(titles) == 3 + assert "Hits per frame" in titles[0] and "Hit rate" in titles[1] and "Occupancy" in titles[2] + assert all("file" in title for title in titles) + hits, rate, occupancy = pane.plots[:3] + assert rate.hist["name"] == "rate" and rate.hist["selection"] == {"roc": None, "port": None, "ch": None} + assert "hits per frame" in rendered(hits) and "frames" in rendered(hits) + assert "hit rate (Hz)" in rendered(rate) and "(s)" in rendered(rate) + text = rendered(occupancy) + assert "ROC 7" in text and "ROC 44" in text and "payload port" in text + assert "–" in text # ROC 44 has ports its map does not list + assert not pane.plots[3].display + assert isinstance(app.focused, HistogramPlot) + + +async def test_roc_level_has_four_plots_named_after_the_roc(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + await pilot.press("r") + await pilot.pause() + titles = pane.titles() + assert len(titles) == 4 and pane.level == "roc" and pane.roc == 7 + assert "Occupancy" in titles[0] and "Hit rate" in titles[1] and "Charge" in titles[2] and "Time in frame" in titles[3] + assert all("ROC 7" in title for title in titles) + charge = pane.plots[2] + assert charge.hist["selection"]["roc"] == 7 and sum(charge.hist["counts"]) > 0 + assert "charge (13-bit ADC units)" in rendered(charge) + assert "channel" in rendered(pane.plots[0]) and "port 1" in rendered(pane.plots[0]) + assert str(app.query_one("#status-error").render()) == "" + + +async def test_channel_level_steps_to_port_1_channel_3(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + await pilot.press("c") + await pilot.pause() + for _ in range(3): + await pilot.press("plus") + await pilot.pause() + assert pane.level == "channel" and (pane.roc, pane.port, pane.channel) == (7, 1, 3) + titles = pane.titles() + assert len(titles) == 3 and all("ROC 7 port 1 ch 3" in title for title in titles) + assert pane.plots[1].hist["selection"] == {"roc": 7, "port": 1, "ch": 3} + # Stepping past the last channel of port 1 rolls over into port 3; the port keys move one port. + pane.channel = 15 + await pilot.press("plus") + await pilot.pause() + assert (pane.port, pane.channel) == (3, 0) + await pilot.press("minus") + await pilot.pause() + assert (pane.port, pane.channel) == (1, 15) + await pilot.press("right_curly_bracket") + await pilot.pause() + assert pane.port == 3 and "port 3 ch 15" in pane.titles()[0] + # The Select widgets follow the keys. + from textual.widgets import Select + + assert app.query_one("#plots-port", Select).value == 3 + assert app.query_one("#plots-channel", Select).value == 15 + assert app.query_one("#plots-level", Select).value == "channel" + # And the pane follows the Select widgets (the mouse user's path). + app.query_one("#plots-channel", Select).value = 9 + await pilot.pause() + assert pane.channel == 9 and "port 3 ch 9" in pane.titles()[0] + app.query_one("#plots-roc", Select).value = 44 + await pilot.pause() + assert (pane.roc, pane.port, pane.channel) == (44, 4, 0) and "ROC 44 port 4 ch 0" in pane.titles()[0] + + +async def test_keys_do_not_crash_on_a_roc_without_hits(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + await pilot.press("r") + await pilot.press("right_square_bracket") # ROC 44, the DCRB + await pilot.pause() + assert pane.roc == 44 and all("ROC 44" in title for title in pane.titles()) + assert "no hits" in rendered(pane.plots[2]) + assert "–" in rendered(pane.plots[0]) # ports the DCRB's map does not list + for key in ("c", "plus", "plus", "minus", "right_curly_bracket", "left_curly_bracket", "right_square_bracket", + "left_square_bracket", "f", "r", "c"): + await pilot.press(key) + await pilot.pause() + for plot in pane.plots: + if plot.display: + rendered(plot) + assert pane.roc == 7 and pane.level == "channel" + assert str(app.query_one("#status-error").render()) == "" + + +async def test_s_saves_a_png_and_notifies(session, synthetic, tmp_path, monkeypatch): + monkeypatch.chdir(tmp_path) + app = PyEvioGui(session, start_path=synthetic["path"]) + notices = [] + monkeypatch.setattr(app, "notify", lambda message, **kwargs: notices.append(message)) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + await pilot.press("s") + await pilot.pause() + path = tmp_path / "synthetic_hits_per_frame.png" + assert path.is_file() and path.read_bytes()[:8] == PNG_SIGNATURE + assert notices and str(path) in notices[-1] + # The focused plot is the one saved: Tab moves to the rate plot. + await pilot.press("tab") + await pilot.press("s") + await pilot.pause() + assert (tmp_path / "synthetic_rate.png").is_file() + # S saves every plot of the level; at channel level the names carry the selection. + await pilot.press("c") + await pilot.press("S") + await pilot.pause() + for name in ("rate", "charge", "time_in_frame"): + assert (tmp_path / f"synthetic_{name}_roc7_port1_ch0.png").read_bytes()[:8] == PNG_SIGNATURE + assert "3 PNGs" in notices[-1] + assert pane.level == "channel" + + +async def test_file_closed_clears_the_plots(session, synthetic): + app = PyEvioGui(session, start_path=synthetic["path"]) + async with app.run_test(size=(120, 40)) as pilot: + pane = await open_plots(app, pilot) + pane.file_closed() + await pilot.pause() + assert pane.summary is None and all(plot.hist is None for plot in pane.plots) + assert not pane.query_one("#plots-grid").display + assert "Open a file" in str(pane.query_one("#plots-message").render()) From 21ad00f544b6ca415ad5caa4dee14f92ae94a278 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:50:35 -0400 Subject: [PATCH 50/65] Add rust/evio-stream, a streaming read-only EVIO v6 reader library A Rust library that reads what pyevio reads, over any std::io::Read without seeking and with one record in memory: v6 files, bare v6 record streams and the SRO hardware stream of 8-word block headers, in both byte orders, with LZ4, LZ4_BEST and gzip records decompressed. Words stay in file byte order and are decoded on read; a record owns one buffer and events and banks are slices into it. Every record, event, bank, segment and tagsegment length is checked against its container, so corrupt data ends a walk with an error value instead of a panic. A cut final record keeps its complete events and reports the truncated_tail check; garbage after the last record reports bad_record_header; a trailer's index is never read as events; evio-library v4 and v1-3 files are refused with the version error pyevio raises. The fadc250 module walks streaming frames as pyevio.decoders.fadc250_stream does: module per port from the 0x41 map, hits only for fADC250 ports, other modules counted, empty banks counted, the AIS counted and never trusted. The format comes from docs/evio6_file_structure.md and docs/stream_decoding.md. Dependencies are lz4_flex (safe decoder) and flate2 only. Q40, D27. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- .gitignore | 3 + rust/evio-stream/Cargo.lock | 71 +++ rust/evio-stream/Cargo.toml | 19 + rust/evio-stream/src/bank.rs | 387 ++++++++++++++++ rust/evio-stream/src/checks.rs | 108 +++++ rust/evio-stream/src/error.rs | 52 +++ rust/evio-stream/src/fadc250.rs | 767 ++++++++++++++++++++++++++++++++ rust/evio-stream/src/header.rs | 467 +++++++++++++++++++ rust/evio-stream/src/lib.rs | 57 +++ rust/evio-stream/src/reader.rs | 390 ++++++++++++++++ rust/evio-stream/src/record.rs | 270 +++++++++++ rust/evio-stream/src/words.rs | 169 +++++++ 12 files changed, 2760 insertions(+) create mode 100644 rust/evio-stream/Cargo.lock create mode 100644 rust/evio-stream/Cargo.toml create mode 100644 rust/evio-stream/src/bank.rs create mode 100644 rust/evio-stream/src/checks.rs create mode 100644 rust/evio-stream/src/error.rs create mode 100644 rust/evio-stream/src/fadc250.rs create mode 100644 rust/evio-stream/src/header.rs create mode 100644 rust/evio-stream/src/lib.rs create mode 100644 rust/evio-stream/src/reader.rs create mode 100644 rust/evio-stream/src/record.rs create mode 100644 rust/evio-stream/src/words.rs diff --git a/.gitignore b/.gitignore index e092f79..f1718c6 100644 --- a/.gitignore +++ b/.gitignore @@ -175,3 +175,6 @@ cython_debug/ pyevio/repomix-output.txt repomix-output.txt + +# Rust build output +rust/target/ diff --git a/rust/evio-stream/Cargo.lock b/rust/evio-stream/Cargo.lock new file mode 100644 index 0000000..cd4b7f4 --- /dev/null +++ b/rust/evio-stream/Cargo.lock @@ -0,0 +1,71 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "evio-stream" +version = "0.1.0" +dependencies = [ + "flate2", + "lz4_flex", +] + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "lz4_flex" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" diff --git a/rust/evio-stream/Cargo.toml b/rust/evio-stream/Cargo.toml new file mode 100644 index 0000000..3a129e2 --- /dev/null +++ b/rust/evio-stream/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "evio-stream" +version = "0.1.0" +edition = "2021" +description = "Streaming, read-only reader for EVIO v6 files and JLab SRO hardware streams" +license = "MIT" +publish = false + +[dependencies] +# LZ4 block decompression: records with compression type 1 (LZ4) and 2 +# (LZ4_BEST) hold one LZ4 block without a frame header. Pure Rust, no C +# toolchain; "safe-decode" keeps the decoder free of unsafe code. +lz4_flex = { version = "0.11", default-features = false, features = ["std", "safe-decode"] } +# gzip (and zlib) decompression for records with compression type 3. +flate2 = "1.1" + +[profile.release] +# Line tables for `perf`; no effect on speed. +debug = 1 diff --git a/rust/evio-stream/src/bank.rs b/rust/evio-stream/src/bank.rs new file mode 100644 index 0000000..fb00c05 --- /dev/null +++ b/rust/evio-stream/src/bank.rs @@ -0,0 +1,387 @@ +//! Bank, segment and tagsegment views with every length checked against the +//! container. + +use std::fmt; + +use crate::words::Words; + +/// The three EVIO structure kinds. A bank has a two-word header, a segment +/// and a tagsegment a one-word header. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum StructureKind { + Bank, + Segment, + TagSegment, +} + +impl StructureKind { + /// Header words of the kind. + pub fn header_words(self) -> usize { + match self { + StructureKind::Bank => 2, + _ => 1, + } + } + + /// "Bank", "Segment" or "TagSegment". + pub fn name(self) -> &'static str { + match self { + StructureKind::Bank => "Bank", + StructureKind::Segment => "Segment", + StructureKind::TagSegment => "TagSegment", + } + } +} + +/// EVIO content types. +pub mod data_type { + pub const UNKNOWN32: u8 = 0x0; + pub const UINT32: u8 = 0x1; + pub const FLOAT32: u8 = 0x2; + pub const STRING: u8 = 0x3; + pub const INT16: u8 = 0x4; + pub const UINT16: u8 = 0x5; + pub const INT8: u8 = 0x6; + pub const UINT8: u8 = 0x7; + pub const FLOAT64: u8 = 0x8; + pub const INT64: u8 = 0x9; + pub const UINT64: u8 = 0xa; + pub const INT32: u8 = 0xb; + pub const TAGSEGMENT: u8 = 0xc; + pub const SEGMENT: u8 = 0xd; + pub const BANK: u8 = 0xe; + pub const COMPOSITE: u8 = 0xf; + pub const BANK2: u8 = 0x10; + pub const SEGMENT2: u8 = 0x20; + + /// Name of a content type code. + pub fn name(code: u8) -> &'static str { + match code { + UNKNOWN32 => "unknown32", + UINT32 => "uint32", + FLOAT32 => "float32", + STRING => "string", + INT16 => "int16", + UINT16 => "uint16", + INT8 => "int8", + UINT8 => "uint8", + FLOAT64 => "float64", + INT64 => "int64", + UINT64 => "uint64", + INT32 => "int32", + TAGSEGMENT => "tagsegments", + SEGMENT | SEGMENT2 => "segments", + BANK | BANK2 => "banks", + COMPOSITE => "composite", + _ => "unknown", + } + } + + /// The kind of the children of a container type, `None` for a leaf type. + pub fn child_kind(code: u8) -> Option { + match code { + BANK | BANK2 => Some(super::StructureKind::Bank), + SEGMENT | SEGMENT2 => Some(super::StructureKind::Segment), + TAGSEGMENT => Some(super::StructureKind::TagSegment), + _ => None, + } + } +} + +/// A length that does not fit its container. The walk that met it stops. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct WalkError { + /// Word offset of the offending structure inside its container. + pub word: usize, + pub message: String, +} + +impl fmt::Display for WalkError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "word {}: {}", self.word, self.message) + } +} + +impl std::error::Error for WalkError {} + +/// A view of one structure: its header words and the words that follow. +/// +/// Every length word counts the words after it, so a structure with length +/// N occupies N + 1 words. Children are typed by the parent's content type: +/// a bank of banks holds banks, a bank of segments holds segments (one-word +/// headers), a bank of tagsegments holds tagsegments. +#[derive(Clone, Copy)] +pub struct Bank<'a> { + words: Words<'a>, + kind: StructureKind, + /// Words that follow the length word (the length field). + pub length: u32, + pub tag: u16, + pub data_type: u8, + /// Bank num byte; 0 for segments and tagsegments. + pub num: u8, + /// Padding bytes for 8- and 16-bit types; 0 for tagsegments. + pub pad: u8, +} + +impl<'a> Bank<'a> { + /// Parse the structure of `kind` that starts at word 0 of `words`; the + /// view bounds it. The error names a header that has no room or a + /// length that runs past the view. + pub fn parse(words: Words<'a>, kind: StructureKind) -> Result, WalkError> { + let header_words = kind.header_words(); + if words.len() < header_words { + return Err(WalkError { + word: 0, + message: format!( + "{} header needs {header_words} words, {} present", + kind.name(), + words.len() + ), + }); + } + let (length, tag, data_type, num, pad) = match kind { + StructureKind::Bank => { + let length = words.get(0).unwrap_or(0); + let info = words.get(1).unwrap_or(0); + ( + length, + (info >> 16) as u16, + ((info >> 8) & 0x3F) as u8, + (info & 0xFF) as u8, + ((info >> 14) & 3) as u8, + ) + } + StructureKind::Segment => { + let h = words.get(0).unwrap_or(0); + ( + h & 0xFFFF, + (h >> 24) as u16, + ((h >> 16) & 0x3F) as u8, + 0, + ((h >> 22) & 3) as u8, + ) + } + StructureKind::TagSegment => { + let h = words.get(0).unwrap_or(0); + ( + h & 0xFFFF, + ((h >> 20) & 0xFFF) as u16, + ((h >> 16) & 0xF) as u8, + 0, + 0, + ) + } + }; + let total = length as usize + 1; + if total < header_words { + return Err(WalkError { + word: 0, + message: format!( + "{} declares length {length}, no room for its {header_words}-word header", + kind.name() + ), + }); + } + if total > words.len() { + return Err(WalkError { + word: 0, + message: format!( + "{} declares {length} words, ends at word {total} past its limit {}", + kind.name(), + words.len() + ), + }); + } + let words = words.slice(0, total).ok_or_else(|| WalkError { + word: 0, + message: "structure range out of view".into(), + })?; + Ok(Bank { + words, + kind, + length, + tag, + data_type, + num, + pad, + }) + } + + /// Parse an event: the top-level bank of `words`. + pub fn event(words: Words<'a>) -> Result, WalkError> { + Bank::parse(words, StructureKind::Bank) + } + + /// Bank, segment or tagsegment. + pub fn kind(&self) -> StructureKind { + self.kind + } + + /// Header words plus the words that follow (length + 1). + pub fn total_words(&self) -> usize { + self.words.len() + } + + /// The whole structure, header included. + pub fn words(&self) -> Words<'a> { + self.words + } + + /// The words after the header: child structures or leaf data. + pub fn data(&self) -> Words<'a> { + self.words + .slice(self.kind.header_words(), self.words.len()) + .unwrap_or(Words::new(&[], self.words.order())) + } + + /// Leaf data bytes without the trailing `pad` bytes. + pub fn data_bytes(&self) -> &'a [u8] { + let bytes = self.data().bytes(); + let end = bytes.len().saturating_sub(self.pad as usize); + &bytes[..end] + } + + /// True for a bank of banks, segments or tagsegments. + pub fn is_container(&self) -> bool { + data_type::child_kind(self.data_type).is_some() + } + + /// The kind of the children, `None` for a leaf. + pub fn child_kind(&self) -> Option { + data_type::child_kind(self.data_type) + } + + /// Name of the content type. + pub fn type_name(&self) -> &'static str { + data_type::name(self.data_type) + } + + /// The children of a container, in order; empty for a leaf. A child + /// whose length runs past this structure ends the iteration with one + /// `Err` item. + pub fn children(&self) -> Children<'a> { + Children { + words: self.data(), + pos: 0, + kind: self.child_kind(), + failed: false, + } + } +} + +impl fmt::Debug for Bank<'_> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}(tag=0x{:04X}, type=0x{:02X}, num={}, length={})", + self.kind.name(), + self.tag, + self.data_type, + self.num, + self.length + ) + } +} + +/// Iterator over the children of a container (see [`Bank::children`]). +pub struct Children<'a> { + words: Words<'a>, + pos: usize, + kind: Option, + failed: bool, +} + +impl<'a> Iterator for Children<'a> { + type Item = Result, WalkError>; + + fn next(&mut self) -> Option { + let kind = self.kind?; + if self.failed || self.pos >= self.words.len() { + return None; + } + let rest = self.words.slice(self.pos, self.words.len())?; + match Bank::parse(rest, kind) { + Ok(child) => { + self.pos += child.total_words(); + Some(Ok(child)) + } + Err(mut e) => { + self.failed = true; + e.word += self.pos; + Some(Err(e)) + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::words::ByteOrder; + + fn le(words: &[u32]) -> Vec { + words.iter().flat_map(|w| w.to_le_bytes()).collect() + } + + #[test] + fn walks_banks_segments_and_tagsegments() { + // bank of banks: [ bank of segments: [ segment len 2 ], leaf uint32 len 1 ] + let bytes = le(&[ + 9, + 0xFF60_1000, + 4, + 0xFF31_2000, + 0x3201_0002, + 11, + 22, + 2, + 0x0001_0100, + 99, + ]); + let event = Bank::event(Words::new(&bytes, ByteOrder::Little)).unwrap(); + assert_eq!(event.tag, 0xFF60); + assert_eq!(event.data_type, 0x10); + assert!(event.is_container()); + let children: Vec<_> = event.children().map(Result::unwrap).collect(); + assert_eq!(children.len(), 2); + assert_eq!(children[0].tag, 0xFF31); + assert_eq!(children[0].child_kind(), Some(StructureKind::Segment)); + let segs: Vec<_> = children[0].children().map(Result::unwrap).collect(); + assert_eq!(segs.len(), 1); + assert_eq!(segs[0].tag, 0x32); + assert_eq!(segs[0].data().to_vec(), vec![11, 22]); + assert_eq!(children[1].tag, 1); + assert_eq!(children[1].num, 0); + assert_eq!(children[1].data().to_vec(), vec![99]); + assert!(children[1].children().next().is_none()); + } + + #[test] + fn bad_lengths_are_errors_not_panics() { + // child declares 10 words inside a 3-word parent + let bytes = le(&[3, 0x0001_1000, 10, 0x0002_0100]); + let event = Bank::event(Words::new(&bytes, ByteOrder::Little)).unwrap(); + let items: Vec<_> = event.children().collect(); + assert_eq!(items.len(), 1); + assert!(items[0].is_err()); + assert_eq!(items[0].as_ref().unwrap_err().word, 0); + + // top-level bank longer than the event + let bytes = le(&[u32::MAX, 0x0001_1000]); + assert!(Bank::event(Words::new(&bytes, ByteOrder::Little)).is_err()); + // bank length 0: no room for the second header word + let bytes = le(&[2, 0x0001_1000, 0, 0x0002_0100, 5]); + let event = Bank::event(Words::new(&bytes, ByteOrder::Little)).unwrap(); + assert!(event.children().next().unwrap().is_err()); + // too short for a header + assert!(Bank::event(Words::new(&bytes[..4], ByteOrder::Little)).is_err()); + // a tagsegment of length 0 is fine + let bytes = le(&[2, 0x0001_0C00, 0x1230_0000]); + let event = Bank::event(Words::new(&bytes, ByteOrder::Little)).unwrap(); + let ts = event.children().next().unwrap().unwrap(); + assert_eq!(ts.kind(), StructureKind::TagSegment); + assert_eq!(ts.tag, 0x123); + assert_eq!(ts.length, 0); + } +} diff --git a/rust/evio-stream/src/checks.rs b/rust/evio-stream/src/checks.rs new file mode 100644 index 0000000..d06ba84 --- /dev/null +++ b/rust/evio-stream/src/checks.rs @@ -0,0 +1,108 @@ +//! The per-file summary: counts and the checks of pyevio's `EvioFile.checks`. + +use std::io::Read; + +use crate::error::Error; +use crate::header::FileLayout; +use crate::reader::{BadRecordHeader, RecordReader, TruncatedTail}; +use crate::record::Record; +use crate::words::ByteOrder; + +/// What one pass over a stream found. +#[derive(Clone, Debug)] +pub struct Checks { + pub layout: FileLayout, + pub order: ByteOrder, + /// Data records read, a cut tail included, the trailer excluded. + pub records: u64, + /// Events found, the salvaged events of a cut tail included. + pub events: u64, + /// True when the stream ended in a trailer record. + pub trailer: bool, + pub truncated_tail: Option, + pub bad_record_header: Option, + /// Records whose event walk or decompression reported an error. + pub records_with_errors: u64, + /// The first [`Checks::MAX_MESSAGES`] record error messages, prefixed + /// with the record index. + pub error_messages: Vec, + /// Bytes consumed from the stream. + pub bytes: u64, +} + +impl Checks { + /// Error messages kept. + pub const MAX_MESSAGES: usize = 50; + + /// Start a summary for `reader`. + pub fn start(reader: &RecordReader) -> Checks { + Checks { + layout: reader.layout(), + order: reader.order(), + records: 0, + events: 0, + trailer: false, + truncated_tail: None, + bad_record_header: None, + records_with_errors: 0, + error_messages: Vec::new(), + bytes: 0, + } + } + + /// Count one record. + pub fn add(&mut self, record: &Record) { + if record.is_trailer() { + self.trailer = true; + } else { + self.records += 1; + self.events += record.event_count() as u64; + } + if !record.errors.is_empty() { + self.records_with_errors += 1; + for message in &record.errors { + if self.error_messages.len() >= Self::MAX_MESSAGES { + break; + } + self.error_messages + .push(format!("record {}: {message}", record.index)); + } + } + } + + /// Copy the end-of-stream state from the reader. + pub fn finish(&mut self, reader: &RecordReader) { + self.truncated_tail = reader.truncated_tail(); + self.bad_record_header = reader.bad_record_header().cloned(); + self.trailer = reader.trailer_seen(); + self.bytes = reader.bytes_read(); + } + + /// Read every record of `reader`, calling `visit` on each, and return + /// the summary. The reader's record buffers are recycled. + pub fn scan_with( + mut reader: RecordReader, + mut visit: F, + ) -> Result { + let mut checks = Checks::start(&reader); + while let Some(record) = reader.next_record()? { + checks.add(&record); + visit(&record); + reader.recycle(record); + } + checks.finish(&reader); + Ok(checks) + } + + /// Read every record of `reader` and return the summary. + pub fn scan(reader: RecordReader) -> Result { + Self::scan_with(reader, |_| {}) + } + + /// True when no check fired and no record reported an error. + pub fn is_clean(&self) -> bool { + self.truncated_tail.is_none() + && self.bad_record_header.is_none() + && self.records_with_errors == 0 + } +} diff --git a/rust/evio-stream/src/error.rs b/rust/evio-stream/src/error.rs new file mode 100644 index 0000000..7060321 --- /dev/null +++ b/rust/evio-stream/src/error.rs @@ -0,0 +1,52 @@ +//! The error type of the reader. + +use std::fmt; +use std::io; + +/// Why a stream could not be opened or read further. +/// +/// Malformed content inside a record (a bad event or bank length, a failed +/// decompression) is never an `Error`: it is recorded in +/// [`Record::errors`](crate::Record::errors) or returned by the bank walk as a +/// [`WalkError`](crate::WalkError), and reading goes on with what is sound. +#[derive(Debug)] +pub enum Error { + /// The underlying reader failed. + Io(io::Error), + /// The first bytes are no EVIO header at all (no magic word, too short). + NotEvio(String), + /// An EVIO version this crate does not read: an evio-library v4 file or a + /// v1—3 file. `version` is the version word of the header that gave it + /// away; `detail` says where. + UnsupportedVersion { version: u8, detail: String }, +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Error::Io(e) => write!(f, "I/O error: {e}"), + Error::NotEvio(m) => write!(f, "Not an EVIO file: {m}"), + Error::UnsupportedVersion { version, detail } => write!( + f, + "EVIO version {version} file is not supported: evio-stream reads EVIO version 6 \ + files and SRO streaming files. Convert the file with the evio tools (evio2xml, \ + eviocopy) or read it with the evio library. ({detail})" + ), + } + } +} + +impl std::error::Error for Error { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + match self { + Error::Io(e) => Some(e), + _ => None, + } + } +} + +impl From for Error { + fn from(e: io::Error) -> Self { + Error::Io(e) + } +} diff --git a/rust/evio-stream/src/fadc250.rs b/rust/evio-stream/src/fadc250.rs new file mode 100644 index 0000000..56aca3c --- /dev/null +++ b/rust/evio-stream/src/fadc250.rs @@ -0,0 +1,767 @@ +//! The CODA streaming fADC250 frame walk. +//! +//! A streaming time frame is one EVIO event (tag 0xFF60, a bank of banks): +//! +//! ```text +//! event bank tag 0xFF60, type 0x10, num 0 +//! SIB tag 0xFF31, type 0x20 (bank of segments) +//! TSS segment tag 0x32, length 3: {frame number, timestamp low, timestamp high} +//! AIS segment tag 0x42: aggregated-stream entries (counted, never walked) +//! ROC bank tag = ROC id, type 0x10, num = stream status byte +//! stream-info tag 0xFF30, type 0x20: TSS 0x31 + payload-port map 0x41 +//! payload bank tag = payload port, type 0x00, one word per hit +//! payload bank tag = payload port, length 1, num 1: an empty port +//! ROC bank ... +//! ``` +//! +//! The walk mirrors `pyevio.decoders.fadc250_stream`: every bank end is +//! checked against its container and a bad length ends the walk of that +//! event with a counted error. The module behind each payload port comes +//! from the 0x41 map of the ROC bank's stream-info bank; only fADC250 ports +//! (and unmapped ones) yield hits, the words of other modules (DCRB) are +//! counted. The AIS segment is counted (entries, distinct values) and never +//! used to locate ROC banks. +//! +//! Hit word: bit 31 flag (never set in the SRO data), bits 30—17 time in +//! 4 ns ticks, bits 16—13 channel, bits 12—0 charge (8191 = overflow). + +use crate::words::Words; + +pub const STREAM_EVENT_TAG: u16 = 0xFF60; +pub const SIB_TAG: u16 = 0xFF31; +pub const SIB_TSS_SEGMENT_TAG: u8 = 0x32; +pub const SIB_AIS_SEGMENT_TAG: u8 = 0x42; +pub const ROC_STREAM_INFO_TAG: u16 = 0xFF30; +pub const ROC_TSS_SEGMENT_TAG: u8 = 0x31; +pub const ROC_PAYLOAD_PORT_SEGMENT_TAG: u8 = 0x41; + +/// Module id of an fADC250 in the payload-port map. +pub const MODULE_FADC250: u8 = 0; +/// Module id of a DCRB in the payload-port map. +pub const MODULE_DCRB: u8 = 1; +/// Stand-in module id of a port absent from the map (decoded as fADC250). +pub const MODULE_UNKNOWN: u8 = 0xFF; + +/// Length of one hit-time tick in nanoseconds (the fADC250 sample period). +pub const HIT_TIME_TICK_NS: u16 = 4; + +/// Error and warning messages kept per frame; the counts are always exact. +pub const MAX_MESSAGES: usize = 50; + +/// Name of a module id: "fADC250", "DCRB", "unmapped" or "module N". +pub fn module_name(module: u8) -> String { + match module { + MODULE_FADC250 => "fADC250".into(), + MODULE_DCRB => "DCRB".into(), + MODULE_UNKNOWN => "unmapped".into(), + other => format!("module {other}"), + } +} + +/// One fADC250 hit. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub struct Hit { + pub frame: u32, + pub timestamp: u64, + pub roc: u16, + /// Stream mask from the ROC bank num byte (1 or 2). + pub stream: u8, + pub port: u16, + pub channel: u8, + /// Time from the frame start in 4 ns ticks (14 bits). + pub time_raw: u16, + /// 13-bit charge; 8191 means overflow. + pub charge: u16, + /// Bit 31 of the word; never set in the SRO data. + pub flag: bool, +} + +impl Hit { + /// Split a hit word into `(channel, time_raw, charge, flag)`. + #[inline(always)] + pub fn unpack(word: u32) -> (u8, u16, u16, bool) { + ( + ((word >> 13) & 0xF) as u8, + ((word >> 17) & 0x3FFF) as u16, + (word & 0x1FFF) as u16, + word >> 31 != 0, + ) + } + + /// Time from the frame start in nanoseconds. + pub fn t_ns(&self) -> u16 { + self.time_raw * HIT_TIME_TICK_NS + } +} + +/// What one ROC bank of a frame held. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub struct RocBank { + pub roc: u16, + /// Stream mask (bits 3—0 of the num byte). + pub stream: u8, + /// The whole num byte. + pub stream_status: u8, + /// Module of the first payload bank; [`MODULE_UNKNOWN`] without any. + pub module: u8, + pub n_payload_banks: u32, + pub n_empty_payload_banks: u32, + pub n_unmapped_payload_banks: u32, + pub n_hits: u64, + pub non_fadc_words: u64, +} + +/// A payload bank located by the walk: word offsets into the event. +#[derive(Clone, Copy, Debug)] +struct PayloadRef { + /// First data word (after the 2-word bank header). + start: u32, + n_words: u32, + roc: u16, + port: u16, + stream: u8, + module: u8, +} + +/// One payload bank of a frame. +#[derive(Clone, Copy, Debug)] +pub struct PayloadBank<'a> { + pub roc: u16, + pub stream: u8, + pub port: u16, + pub module: u8, + /// The data words (hits for an fADC250 port). + pub words: Words<'a>, +} + +impl PayloadBank<'_> { + /// True for a length-1 bank (no hit on the port in this frame). + pub fn is_empty(&self) -> bool { + self.words.is_empty() + } + + /// True when the words are fADC250 hits (module fADC250 or unmapped). + pub fn is_fadc250(&self) -> bool { + self.module == MODULE_FADC250 || self.module == MODULE_UNKNOWN + } +} + +/// Walks stream frames. Holds reusable scratch space so decoding a frame +/// allocates nothing in the common case. +#[derive(Default)] +pub struct FrameDecoder { + roc_banks: Vec, + payload: Vec, + ais: Vec, + errors: Vec, + warnings: Vec, +} + +/// One decoded frame, borrowing the event and the decoder. +pub struct Frame<'a> { + event: Words<'a>, + pub frame_number: u32, + pub timestamp: u64, + pub roc_banks: &'a [RocBank], + payload: &'a [PayloadRef], + pub n_payload_banks: u32, + pub n_empty_payload_banks: u32, + pub n_unmapped_payload_banks: u32, + /// Words of every payload bank (hits plus other-module words). + pub n_payload_words: u64, + /// fADC250 hit words (= sum of payload lengths of fADC250 ports). + pub n_hits: u64, + /// Payload words of other modules (DCRB). + pub non_fadc_words: u64, + /// Entries of the AIS segment, 0 without one. + pub n_ais_entries: u32, + /// Distinct values among the AIS entries. + pub n_ais_distinct: u32, + /// Bad lengths met; the walk of the structure stopped there. + pub n_errors: u32, + /// Malformed SIB segments after the TSS; no hit depends on them. + pub n_warnings: u32, + /// The first [`MAX_MESSAGES`] error messages. + pub errors: &'a [String], + /// The first [`MAX_MESSAGES`] warning messages. + pub warnings: &'a [String], +} + +impl<'a> Frame<'a> { + /// Every payload bank in walk order. + pub fn payload_banks(&self) -> impl Iterator> + '_ { + let event = self.event; + self.payload.iter().map(move |p| PayloadBank { + roc: p.roc, + stream: p.stream, + port: p.port, + module: p.module, + words: event + .slice(p.start as usize, p.start as usize + p.n_words as usize) + .unwrap_or(Words::new(&[], event.order())), + }) + } + + /// Every fADC250 hit of the frame, in walk order. + pub fn hits(&self) -> Hits<'a> { + Hits { + event: self.event, + frame: self.frame_number, + timestamp: self.timestamp, + payload: self.payload, + next_bank: 0, + current: None, + pos: 0, + } + } +} + +/// Iterator over the hits of a frame (see [`Frame::hits`]). +pub struct Hits<'a> { + event: Words<'a>, + frame: u32, + timestamp: u64, + payload: &'a [PayloadRef], + next_bank: usize, + current: Option<(PayloadRef, Words<'a>)>, + pos: usize, +} + +impl Iterator for Hits<'_> { + type Item = Hit; + + #[inline] + fn next(&mut self) -> Option { + loop { + if let Some((p, words)) = &self.current { + if let Some(word) = words.get(self.pos) { + self.pos += 1; + let (channel, time_raw, charge, flag) = Hit::unpack(word); + return Some(Hit { + frame: self.frame, + timestamp: self.timestamp, + roc: p.roc, + stream: p.stream, + port: p.port, + channel, + time_raw, + charge, + flag, + }); + } + self.current = None; + } + let p = *self.payload.get(self.next_bank)?; + self.next_bank += 1; + if p.module != MODULE_FADC250 && p.module != MODULE_UNKNOWN { + continue; + } + let start = p.start as usize; + let words = self + .event + .slice(start, start + p.n_words as usize) + .unwrap_or(Words::new(&[], self.event.order())); + self.current = Some((p, words)); + self.pos = 0; + } + } +} + +impl FrameDecoder { + /// A decoder with empty scratch space. + pub fn new() -> Self { + Self::default() + } + + fn error(&mut self, n_errors: &mut u32, word: usize, reason: String) { + *n_errors += 1; + if self.errors.len() < MAX_MESSAGES { + self.errors.push(format!("word {word}: {reason}")); + } + } + + fn warning(&mut self, n_warnings: &mut u32, word: usize, reason: String) { + *n_warnings += 1; + if self.warnings.len() < MAX_MESSAGES { + self.warnings.push(format!("word {word}: {reason}")); + } + } + + /// Decode one event. `None` when the event is no stream frame (its tag + /// is not 0xFF60); malformed lengths yield what was walked before them + /// plus counted errors, never a panic. + pub fn decode<'a>(&'a mut self, event: Words<'a>) -> Option> { + let n = event.len(); + let w = |i: usize| event.get(i).unwrap_or(0); + if n < 2 || (w(1) >> 16) as u16 != STREAM_EVENT_TAG { + return None; + } + self.roc_banks.clear(); + self.payload.clear(); + self.errors.clear(); + self.warnings.clear(); + let mut n_errors = 0u32; + let mut n_warnings = 0u32; + + let mut event_end = w(0) as usize + 1; + if event_end > n { + self.error( + &mut n_errors, + 0, + format!("event length {event_end} words runs past the {n} words given"), + ); + event_end = n; + } + + let sib = self.read_sib(event, event_end, &mut n_errors, &mut n_warnings); + let mut totals = Totals::default(); + + let mut roc_i = sib.end; + while roc_i < event_end { + if roc_i + 1 >= event_end { + self.error( + &mut n_errors, + roc_i, + "ROC bank header runs past the event end".into(), + ); + break; + } + let roc_len = w(roc_i) as usize; + let roc_end = roc_i + roc_len + 1; + if roc_end > event_end { + self.error( + &mut n_errors, + roc_i, + format!("ROC bank length {roc_len} runs past the event end {event_end}"), + ); + break; + } + let roc_header = w(roc_i + 1); + let dt = ((roc_header >> 8) & 0x3F) as u8; + if dt != 0x10 && dt != 0x0E { + self.error( + &mut n_errors, + roc_i, + format!("ROC bank 0x{roc_header:08X} is not a bank of banks"), + ); + roc_i = roc_end; + continue; + } + self.walk_roc_bank( + event, + roc_i + 2, + roc_end, + roc_header, + &mut totals, + &mut n_errors, + ); + roc_i = roc_end; + } + + Some(Frame { + event, + frame_number: sib.frame_number, + timestamp: sib.timestamp, + roc_banks: &self.roc_banks, + payload: &self.payload, + n_payload_banks: totals.payload_banks, + n_empty_payload_banks: totals.empty_banks, + n_unmapped_payload_banks: totals.unmapped_banks, + n_payload_words: totals.payload_words, + n_hits: totals.hits, + non_fadc_words: totals.non_fadc_words, + n_ais_entries: sib.n_ais_entries, + n_ais_distinct: sib.n_ais_distinct, + n_errors, + n_warnings, + errors: &self.errors, + warnings: &self.warnings, + }) + } + + /// The SIB at word 2: frame number, timestamp, where the ROC banks + /// start (from the SIB length word alone), and the AIS counts. + fn read_sib( + &mut self, + event: Words<'_>, + event_end: usize, + n_errors: &mut u32, + n_warnings: &mut u32, + ) -> Sib { + let w = |i: usize| event.get(i).unwrap_or(0); + let mut sib = Sib { + end: event_end, + ..Sib::default() + }; + if 3 >= event_end { + self.error(n_errors, 2, "no room for the stream info bank".into()); + return sib; + } + let sib_len = w(2) as usize; + let sib_end = 2 + sib_len + 1; + if sib_end > event_end { + self.error( + n_errors, + 2, + format!("SIB length {sib_len} runs past the event end {event_end}"), + ); + return sib; + } + sib.end = sib_end; + let tag = (w(3) >> 16) as u16; + if tag != SIB_TAG { + self.error( + n_errors, + 3, + format!("expected SIB tag 0x{SIB_TAG:04X}, found 0x{tag:04X}"), + ); + return sib; + } + // The TSS is the first segment: tag<<24 | pad<<22 | type<<16 | length. + let tss = w(4); + if 7 >= sib_end || (tss >> 24) as u8 != SIB_TSS_SEGMENT_TAG || (tss & 0xFFFF) < 3 { + self.error( + n_errors, + 4, + "SIB does not start with a time slice segment (tag 0x32, length 3)".into(), + ); + return sib; + } + sib.frame_number = w(5); + sib.timestamp = w(6) as u64 | ((w(7) as u64) << 32); + let next = 4 + (tss & 0xFFFF) as usize + 1; + self.count_ais(event, next, sib_end, &mut sib, n_warnings); + sib + } + + /// Entries and distinct values of the 0x42 segment among the SIB + /// segments from `segment_i`. A missing segment, an empty one or one + /// whose length runs past the SIB end leaves the counts at 0; the last + /// two are warnings, not errors. + fn count_ais( + &mut self, + event: Words<'_>, + mut segment_i: usize, + sib_end: usize, + sib: &mut Sib, + n_warnings: &mut u32, + ) { + let w = |i: usize| event.get(i).unwrap_or(0); + while segment_i < sib_end { + let header = w(segment_i); + let segment_len = (header & 0xFFFF) as usize; + let segment_end = segment_i + segment_len + 1; + if segment_end > sib_end { + self.warning( + n_warnings, + segment_i, + format!("SIB segment length {segment_len} runs past the SIB end {sib_end}"), + ); + return; + } + if (header >> 24) as u8 == SIB_AIS_SEGMENT_TAG { + if segment_len == 0 { + self.warning(n_warnings, segment_i, "AIS segment holds no entries".into()); + return; + } + self.ais.clear(); + self.ais.extend((segment_i + 1..segment_end).map(w)); + self.ais.sort_unstable(); + self.ais.dedup(); + sib.n_ais_entries = segment_len as u32; + sib.n_ais_distinct = self.ais.len() as u32; + return; + } + segment_i = segment_end; + } + } + + /// `port -> module` from the 0x41 segment of the stream-info bank at + /// `info_i`. Entries are uint16, two per word in memory order; pad 2 + /// means an odd entry count. Ports absent from the map stay + /// [`MODULE_UNKNOWN`]. + fn read_payload_port_map( + &mut self, + event: Words<'_>, + info_i: usize, + info_end: usize, + n_errors: &mut u32, + ) -> [u8; 32] { + let w = |i: usize| event.get(i).unwrap_or(0); + let mut map = [MODULE_UNKNOWN; 32]; + let mut segment_i = info_i + 2; + while segment_i < info_end { + let header = w(segment_i); + let segment_len = (header & 0xFFFF) as usize; + let segment_end = segment_i + segment_len + 1; + if segment_end > info_end { + self.error( + n_errors, + segment_i, + format!("stream-info segment length {segment_len} runs past the bank end {info_end}"), + ); + break; + } + if (header >> 24) as u8 == ROC_PAYLOAD_PORT_SEGMENT_TAG { + let pad = (header >> 22) & 3; + let n_entries = 2 * segment_len - usize::from(pad == 2); + let first_half = (segment_i + 1) * 2; + for entry_i in 0..n_entries { + let entry = event.get_u16(first_half + entry_i).unwrap_or(0); + let port = (entry & 0x1F) as usize; + if port != 0 { + map[port] = ((entry >> 8) & 0xF) as u8; + } + } + break; + } + segment_i = segment_end; + } + map + } + + fn walk_roc_bank( + &mut self, + event: Words<'_>, + mut child_i: usize, + roc_end: usize, + roc_header: u32, + totals: &mut Totals, + n_errors: &mut u32, + ) { + let w = |i: usize| event.get(i).unwrap_or(0); + let roc = (roc_header >> 16) as u16; + let stream_status = (roc_header & 0xFF) as u8; + let stream = stream_status & 0xF; + let mut bank = RocBank { + roc, + stream, + stream_status, + module: MODULE_UNKNOWN, + ..RocBank::default() + }; + let mut map = [MODULE_UNKNOWN; 32]; + // The stream-info bank comes first; its 0x41 segment names the module behind each port. + if child_i + 1 < roc_end && (w(child_i + 1) >> 16) as u16 == ROC_STREAM_INFO_TAG { + let info_end = (child_i + w(child_i) as usize + 1).min(roc_end); + map = self.read_payload_port_map(event, child_i, info_end, n_errors); + child_i = info_end; + } + while child_i < roc_end { + if child_i + 1 >= roc_end { + self.error( + n_errors, + child_i, + "payload bank header runs past the ROC bank end".into(), + ); + break; + } + let payload_len = w(child_i) as usize; + if payload_len == 0 || child_i + payload_len + 1 > roc_end { + self.error( + n_errors, + child_i, + format!( + "payload bank length {payload_len} runs past the ROC bank end {roc_end}" + ), + ); + break; + } + let port = (w(child_i + 1) >> 16) as u16; + let module = map.get(port as usize).copied().unwrap_or(MODULE_UNKNOWN); + if module == MODULE_UNKNOWN { + bank.n_unmapped_payload_banks += 1; + } + if bank.module == MODULE_UNKNOWN { + bank.module = module; + } + let n_words = (payload_len - 1) as u64; + bank.n_payload_banks += 1; + totals.payload_words += n_words; + if n_words == 0 { + bank.n_empty_payload_banks += 1; + } else if module == MODULE_FADC250 || module == MODULE_UNKNOWN { + bank.n_hits += n_words; + } else { + bank.non_fadc_words += n_words; + } + self.payload.push(PayloadRef { + start: (child_i + 2) as u32, + n_words: n_words as u32, + roc, + port, + stream, + module, + }); + child_i += payload_len + 1; + } + totals.payload_banks += bank.n_payload_banks; + totals.empty_banks += bank.n_empty_payload_banks; + totals.unmapped_banks += bank.n_unmapped_payload_banks; + totals.hits += bank.n_hits; + totals.non_fadc_words += bank.non_fadc_words; + self.roc_banks.push(bank); + } +} + +#[derive(Default)] +struct Sib { + frame_number: u32, + timestamp: u64, + end: usize, + n_ais_entries: u32, + n_ais_distinct: u32, +} + +#[derive(Default)] +struct Totals { + payload_banks: u32, + empty_banks: u32, + unmapped_banks: u32, + payload_words: u64, + hits: u64, + non_fadc_words: u64, +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::words::ByteOrder; + + /// A frame with one ROC bank (ROC 7, stream 1) mapping port 1 to fADC250 + /// and port 3 to DCRB; port 1 holds two hits, port 3 two words, port 5 + /// is empty and unmapped. + fn frame_words() -> Vec { + let mut v = vec![ + 0, // event length (patched) + 0xFF60_1000, + 0, // SIB length (patched) + 0xFF31_2000, + 0x3201_0003, // TSS + 42, // frame number + 0x1000, // timestamp low + 0x2, // timestamp high + 0x4201_0003, // AIS, 3 entries + 7, + 7, + 7, + ]; + v[2] = (v.len() - 3) as u32; + let roc_start = v.len(); + v.extend([ + 0, // ROC bank length (patched) + 0x0007_1021, // ROC 7, bank of banks, num 0x21 + 0, // stream-info length (patched) + 0xFF30_2000, + 0x3101_0003, // TSS + 42, + 0x1000, + 0x2, + 0x4105_0001, // payload map: tag 0x41, pad 0, 1 word = two entries + 0x0103_0001, // LE: low half 0x0001 (port 1, module 0), high half 0x0103 (port 3, module 1) + ]); + let info_i = roc_start + 2; + v[info_i] = (v.len() - info_i - 1) as u32; + v.extend([ + 3, + 0x0001_0000, // port 1, two hits + (5 << 17) | (3 << 13) | 100, + (7 << 17) | (15 << 13) | 8191, + 3, + 0x0003_0000, // port 3, two DCRB words + 0xDEAD, + 0xBEEF, + 1, + 0x0005_0001, // port 5, empty, unmapped + ]); + v[roc_start] = (v.len() - roc_start - 1) as u32; + v[0] = (v.len() - 1) as u32; + v + } + + fn le(words: &[u32]) -> Vec { + words.iter().flat_map(|w| w.to_le_bytes()).collect() + } + + #[test] + fn decodes_a_frame() { + let bytes = le(&frame_words()); + let mut decoder = FrameDecoder::new(); + let frame = decoder + .decode(Words::new(&bytes, ByteOrder::Little)) + .expect("stream frame"); + assert_eq!(frame.frame_number, 42); + assert_eq!(frame.timestamp, 0x2_0000_1000); + assert_eq!(frame.n_ais_entries, 3); + assert_eq!(frame.n_ais_distinct, 1); + assert_eq!(frame.n_errors, 0, "{:?}", frame.errors); + assert_eq!(frame.roc_banks.len(), 1); + let roc = frame.roc_banks[0]; + assert_eq!(roc.roc, 7); + assert_eq!(roc.stream, 1); + assert_eq!(roc.module, MODULE_FADC250); + assert_eq!(roc.n_payload_banks, 3); + assert_eq!(roc.n_empty_payload_banks, 1); + assert_eq!(roc.n_unmapped_payload_banks, 1); + assert_eq!(roc.n_hits, 2); + assert_eq!(roc.non_fadc_words, 2); + assert_eq!(frame.n_payload_words, 4); + let hits: Vec = frame.hits().collect(); + assert_eq!(hits.len(), 2); + assert_eq!(hits[0].channel, 3); + assert_eq!(hits[0].time_raw, 5); + assert_eq!(hits[0].charge, 100); + assert_eq!(hits[0].port, 1); + assert_eq!(hits[1].channel, 15); + assert_eq!(hits[1].charge, 8191); + assert_eq!(hits[1].t_ns(), 28); + assert!(!hits[1].flag); + let banks: Vec<_> = frame.payload_banks().collect(); + assert_eq!(banks.len(), 3); + assert!(banks[2].is_empty()); + assert!(!banks[1].is_fadc250()); + } + + #[test] + fn non_frame_and_bad_lengths() { + let mut decoder = FrameDecoder::new(); + let other = le(&[1, 0x0001_0100, 5]); + assert!(decoder + .decode(Words::new(&other, ByteOrder::Little)) + .is_none()); + assert!(decoder + .decode(Words::new(&other[..4], ByteOrder::Little)) + .is_none()); + + // ROC bank length past the event end + let mut words = frame_words(); + let roc_start = 12; + words[roc_start] = 1000; + let bytes = le(&words); + let frame = decoder + .decode(Words::new(&bytes, ByteOrder::Little)) + .unwrap(); + assert_eq!(frame.n_errors, 1); + assert_eq!(frame.roc_banks.len(), 0); + assert_eq!(frame.hits().count(), 0); + + // payload bank length 0xFFFFFFFF + let mut words = frame_words(); + let last_bank = words.len() - 2; + words[last_bank] = u32::MAX; + let bytes = le(&words); + let frame = decoder + .decode(Words::new(&bytes, ByteOrder::Little)) + .unwrap(); + assert_eq!(frame.n_errors, 1); + assert_eq!(frame.n_hits, 2); + + // event cut mid-bank: the length word says more than present + let words = frame_words(); + let bytes = le(&words); + let frame = decoder + .decode(Words::new(&bytes[..bytes.len() - 8], ByteOrder::Little)) + .unwrap(); + assert!(frame.n_errors >= 1); + } +} diff --git a/rust/evio-stream/src/header.rs b/rust/evio-stream/src/header.rs new file mode 100644 index 0000000..49eeeef --- /dev/null +++ b/rust/evio-stream/src/header.rs @@ -0,0 +1,467 @@ +//! File header, record header and layout detection. + +use std::fmt; + +use crate::words::{ByteOrder, Words}; + +/// The magic word at word 7 of every EVIO header, which fixes the byte order. +pub const MAGIC: u32 = 0xc0da_0100; +/// File type id "EVIO" in word 0 of a v6 file header. +pub const FILE_TYPE_EVIO: u32 = 0x4556_494F; +/// File type id "HIPO" in word 0 of a v6 file header. +pub const FILE_TYPE_HIPO: u32 = 0x4849_504F; + +/// Byte length of the short (8-word) header every layout starts with. +pub const SHORT_HEADER_BYTES: usize = 32; +/// Byte length of the full 14-word v6 header. +pub const FULL_HEADER_BYTES: usize = 56; + +/// Name of a file type id read in either byte order ("EVIO", "HIPO"), else +/// `None`. HIPO-flavored writers store the ASCII bytes in order whatever +/// the file's byte order, so both orders are accepted. +pub fn file_type_name(word: u32) -> Option<&'static str> { + match word { + FILE_TYPE_EVIO => Some("EVIO"), + FILE_TYPE_HIPO => Some("HIPO"), + _ => match word.swap_bytes() { + FILE_TYPE_EVIO => Some("EVIO"), + FILE_TYPE_HIPO => Some("HIPO"), + _ => None, + }, + } +} + +/// Byte order of the header whose first 32 bytes are `head`, from the magic +/// word at word 7. `None` when neither order matches or `head` is short. +pub fn detect_byte_order(head: &[u8]) -> Option { + let m = head.get(28..32)?; + let bytes = [m[0], m[1], m[2], m[3]]; + if u32::from_le_bytes(bytes) == MAGIC { + Some(ByteOrder::Little) + } else if u32::from_be_bytes(bytes) == MAGIC { + Some(ByteOrder::Big) + } else { + None + } +} + +/// A byte length rounded up to whole words, as user headers are stored. +pub fn padded_to_words(bytes: u64) -> u64 { + (bytes + 3) & !3 +} + +/// How a file starts; mirrors `EvioFile.header_layout` of pyevio. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum FileLayout { + /// A 14-word file header followed by 14-word record headers. + V6, + /// A bare stream of 14-word v6 records with no file header (a writer + /// buffer dump). + V6Records, + /// The JLab SRO hardware stream: no file header, 8-word block headers + /// `{length, block number, 8, event count, 0, 4, 0, magic}` whose + /// version word is exactly 4, no index arrays, no trailer. + Sro8Word, +} + +impl FileLayout { + /// The pyevio name of the layout. + pub fn name(self) -> &'static str { + match self { + FileLayout::V6 => "v6", + FileLayout::V6Records => "v6-records", + FileLayout::Sro8Word => "sro-8word", + } + } +} + +impl fmt::Display for FileLayout { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(self.name()) + } +} + +/// The v6 file header (14 words), or a stand-in for the layouts without one. +#[derive(Clone, Debug)] +pub struct FileHeader { + pub layout: FileLayout, + pub order: ByteOrder, + /// "EVIO", "HIPO", "EVIO records" or "SRO". + pub file_type: &'static str, + pub file_type_id: u32, + pub file_number: u32, + /// Words in the header; 0 for a stand-in. + pub header_length: u32, + /// Record count the header declares; 0 for a stand-in (count the records). + pub record_count: u32, + pub index_array_length: u32, + /// Bits 8—31 of word 5. + pub bit_info: u32, + /// Content version: 6 for every layout this crate reads. + pub version: u8, + /// Version word of the container headers: 6, or 4 for the SRO blocks. + pub container_version: u8, + pub user_header_length: u32, + pub user_register: u64, + pub trailer_position: u64, + pub user_integer1: u32, + pub user_integer2: u32, + pub has_dictionary: bool, + pub has_first_event: bool, + pub has_trailer: bool, +} + +impl FileHeader { + /// Parse a 14-word file header; `head` holds at least `header_length * 4` + /// bytes (and at least 32). Words 8—13 read as 0 when absent. + pub(crate) fn parse(head: &[u8], order: ByteOrder) -> Result { + let w = Words::new(head, order); + let word = |i: usize| w.get(i).unwrap_or(0); + let file_type_id = word(0); + let file_type = file_type_name(file_type_id) + .ok_or_else(|| format!("file type id 0x{file_type_id:08x}, expected EVIO or HIPO"))?; + let bit_info_version = word(5); + let bit_info = bit_info_version >> 8; + let version = (bit_info_version & 0xFF) as u8; + let u64_at = |i: usize| (word(i) as u64) | ((word(i + 1) as u64) << 32); + Ok(FileHeader { + layout: FileLayout::V6, + order, + file_type, + file_type_id, + file_number: word(1), + header_length: word(2), + record_count: word(3), + index_array_length: word(4), + bit_info, + version, + container_version: version, + user_header_length: word(6), + user_register: u64_at(8), + trailer_position: u64_at(10), + user_integer1: word(12), + user_integer2: word(13), + has_dictionary: bit_info & 1 != 0, + has_first_event: bit_info & 2 != 0, + has_trailer: bit_info & 4 != 0, + }) + } + + /// The stand-in header of a layout without a file header. + pub(crate) fn stand_in(layout: FileLayout, order: ByteOrder) -> FileHeader { + let (file_type, container_version) = match layout { + FileLayout::Sro8Word => ("SRO", 4), + _ => ("EVIO records", 6), + }; + FileHeader { + layout, + order, + file_type, + file_type_id: 0, + file_number: 0, + header_length: 0, + record_count: 0, + index_array_length: 0, + bit_info: 0, + version: 6, + container_version, + user_header_length: 0, + user_register: 0, + trailer_position: 0, + user_integer1: 0, + user_integer2: 0, + has_dictionary: false, + has_first_event: false, + has_trailer: false, + } + } +} + +/// Compression type of a record, bits 28—31 of header word 9. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Compression { + None, + Lz4, + Lz4Best, + Gzip, + Unknown(u8), +} + +impl Compression { + fn from_code(code: u8) -> Compression { + match code { + 0 => Compression::None, + 1 => Compression::Lz4, + 2 => Compression::Lz4Best, + 3 => Compression::Gzip, + other => Compression::Unknown(other), + } + } + + /// Short name: "none", "lz4", "lz4_best", "gzip" or "unknown(N)". + pub fn name(self) -> String { + match self { + Compression::None => "none".into(), + Compression::Lz4 => "lz4".into(), + Compression::Lz4Best => "lz4_best".into(), + Compression::Gzip => "gzip".into(), + Compression::Unknown(c) => format!("unknown({c})"), + } + } +} + +/// Header species, bits 28—31 of record header word 5. +pub const HEADER_TYPE_RECORD: u8 = 0; +/// Header species of a v6 file trailer. +pub const HEADER_TYPE_TRAILER: u8 = 3; + +/// Word 5 of an SRO hardware block header: version 4 and no bit-info bits. +pub const SRO_BLOCK_WORD: u32 = 0x0000_0004; + +/// A record header: 14 words, or the 8-word SRO block header whose words +/// 8—13 read as 0. +/// +/// ```text +/// 0 record length (words) 7 magic 0xc0da0100 +/// 1 record number 8 uncompressed data length (bytes, events only) +/// 2 header length (words) 9 compression type (bits 28—31) | compressed length (words) +/// 3 event count 10—11 user register 1 +/// 4 index array length (bytes) 12—13 user register 2 +/// 5 species (28—31) | bit-info (8—27) | version (0—7) +/// 6 user header length (bytes) +/// ``` +#[derive(Clone, Debug)] +pub struct RecordHeader { + pub record_length: u32, + pub record_number: u32, + pub header_length: u32, + pub event_count: u32, + pub index_array_length: u32, + pub version: u8, + /// Bits 8—27 of word 5. + pub bit_info: u32, + /// Bits 28—31 of word 5: 0 record, 3 trailer. + pub header_type: u8, + pub pad1: u8, + pub pad2: u8, + pub pad3: u8, + pub user_header_length: u32, + pub uncompressed_data_length: u32, + pub compression: Compression, + /// Padded length of the compressed data in words. + pub compressed_data_length: u32, + pub user_register1: u64, + pub user_register2: u64, + pub has_dictionary: bool, + pub is_last_record: bool, + pub has_first_event: bool, + /// CODA event type code, bits 10—13 of word 5. + pub event_type: u8, +} + +impl RecordHeader { + /// Parse the header from `head`, which holds `header_length * 4` bytes + /// (32 for an 8-word header, 56 for a 14-word one). The caller has + /// already run [`record_header_problem`] on the first 32 bytes. + pub(crate) fn parse(head: &[u8], order: ByteOrder) -> RecordHeader { + let w = Words::new(head, order); + let word = |i: usize| w.get(i).unwrap_or(0); + let header_length = word(2); + let bit_info_version = word(5); + let bit_info = (bit_info_version >> 8) & 0xF_FFFF; + let full = header_length >= 14 && head.len() >= FULL_HEADER_BYTES; + let compression_word = if full { word(9) } else { 0 }; + let u64_at = |i: usize| (word(i) as u64) | ((word(i + 1) as u64) << 32); + RecordHeader { + record_length: word(0), + record_number: word(1), + header_length, + event_count: word(3), + index_array_length: word(4), + version: (bit_info_version & 0xFF) as u8, + bit_info, + header_type: ((bit_info_version >> 28) & 0xF) as u8, + pad1: ((bit_info_version >> 20) & 3) as u8, + pad2: ((bit_info_version >> 22) & 3) as u8, + pad3: ((bit_info_version >> 24) & 3) as u8, + user_header_length: word(6), + uncompressed_data_length: if full { word(8) } else { 0 }, + compression: Compression::from_code(((compression_word >> 28) & 0xF) as u8), + compressed_data_length: compression_word & 0x0FFF_FFFF, + user_register1: if full { u64_at(10) } else { 0 }, + user_register2: if full { u64_at(12) } else { 0 }, + has_dictionary: bit_info & 1 != 0, + is_last_record: bit_info & 2 != 0, + has_first_event: bit_info & (1 << 6) != 0, + event_type: ((bit_info >> 2) & 0xF) as u8, + } + } + + /// True for the trailer record that closes a file (species 3). Its index + /// array lists records, never events. + pub fn is_trailer(&self) -> bool { + self.header_type == HEADER_TYPE_TRAILER + } + + /// True for the SRO hardware block header shape: 8 words, version 4, no + /// bit-info bits. + pub fn is_sro_block(&self) -> bool { + self.header_length == 8 && self.version == 4 && self.bit_info == 0 && self.header_type == 0 + } + + /// Byte length of the header itself. + pub fn header_bytes(&self) -> u64 { + self.header_length as u64 * 4 + } + + /// Byte length the header declares for the whole record, header included. + pub fn record_bytes(&self) -> u64 { + self.record_length as u64 * 4 + } + + /// The CODA event type name of bits 10—13. + pub fn event_type_name(&self) -> &'static str { + match self.event_type { + 0 => "ROC Raw", + 1 => "Physics", + 2 => "Partial Physics", + 3 => "Disentangled Physics", + 4 => "User", + 5 => "Control", + 6 => "Mixed", + 8 => "ROC Raw Streaming", + 9 => "Physics Streaming", + 15 => "Other", + _ => "Unknown", + } + } +} + +/// Why no record header can start with the 32 bytes `head`, or `None` when +/// one can. Mirrors `EvioFile.record_header_problem` of pyevio: a record +/// header has the magic at word 7, a header length of 8 or 14, a record +/// length of at least the header, and no file type id in word 0 (that is a +/// second file header, as in two files concatenated). +pub fn record_header_problem(head: &[u8], order: ByteOrder) -> Option { + if head.len() < SHORT_HEADER_BYTES { + return Some(format!( + "{} bytes left, a record header needs {SHORT_HEADER_BYTES}", + head.len() + )); + } + let w = Words::new(head, order); + let word = |i: usize| w.get(i).unwrap_or(0); + if let Some(name) = file_type_name(word(0)) { + return Some(format!( + "file header ({name}) where a record header should start" + )); + } + let magic = word(7); + if magic != MAGIC { + let hint = if magic.swap_bytes() == MAGIC { + " (byte-swapped record header)" + } else { + "" + }; + return Some(format!("no magic number at word 7 (0x{magic:08X}){hint}")); + } + let header_length = word(2); + if header_length != 8 && header_length != 14 { + return Some(format!("header length {header_length}, expected 8 or 14")); + } + let length_words = word(0); + if length_words < header_length { + return Some(format!( + "record length {length_words} words is shorter than its {header_length}-word header" + )); + } + None +} + +#[cfg(test)] +mod tests { + use super::*; + + fn le_words(words: &[u32]) -> Vec { + words.iter().flat_map(|w| w.to_le_bytes()).collect() + } + + #[test] + fn file_type_both_orders() { + assert_eq!(file_type_name(FILE_TYPE_EVIO), Some("EVIO")); + assert_eq!(file_type_name(FILE_TYPE_HIPO.swap_bytes()), Some("HIPO")); + assert_eq!(file_type_name(0x1234), None); + } + + #[test] + fn detects_order_and_problems() { + let sro = le_words(&[100, 1, 8, 11, 0, 4, 0, MAGIC]); + assert_eq!(detect_byte_order(&sro), Some(ByteOrder::Little)); + assert_eq!(record_header_problem(&sro, ByteOrder::Little), None); + let h = RecordHeader::parse(&sro, ByteOrder::Little); + assert!(h.is_sro_block()); + assert_eq!(h.record_bytes(), 400); + assert_eq!(h.compression, Compression::None); + + let be: Vec = [100u32, 1, 8, 11, 0, 4, 0, MAGIC] + .iter() + .flat_map(|w| w.to_be_bytes()) + .collect(); + assert_eq!(detect_byte_order(&be), Some(ByteOrder::Big)); + assert!(record_header_problem(&be, ByteOrder::Little) + .unwrap() + .contains("byte-swapped")); + + let short = le_words(&[5, 1, 8, 11, 0, 4, 0, MAGIC]); + assert!(record_header_problem(&short, ByteOrder::Little) + .unwrap() + .contains("shorter than")); + let bad_len = le_words(&[100, 1, 9, 11, 0, 4, 0, MAGIC]); + assert!(record_header_problem(&bad_len, ByteOrder::Little) + .unwrap() + .contains("expected 8 or 14")); + let file = le_words(&[FILE_TYPE_EVIO, 1, 14, 11, 0, 6, 0, MAGIC]); + assert!(record_header_problem(&file, ByteOrder::Little) + .unwrap() + .contains("file header")); + assert!(record_header_problem(&sro[..20], ByteOrder::Little) + .unwrap() + .contains("bytes left")); + assert_eq!(detect_byte_order(&sro[..20]), None); + } + + #[test] + fn parses_full_header_and_trailer() { + let trailer = le_words(&[14, 3, 14, 0, 0, 0x3000_0206, 0, MAGIC, 0, 0, 0, 0, 0, 0]); + let h = RecordHeader::parse(&trailer, ByteOrder::Little); + assert!(h.is_trailer()); + assert!(h.is_last_record); + assert_eq!(h.version, 6); + let lz4 = le_words(&[ + 40, + 1, + 14, + 2, + 8, + 0x0100_0006, + 0, + MAGIC, + 100, + (1 << 28) | 20, + 7, + 0, + 9, + 0, + ]); + let h = RecordHeader::parse(&lz4, ByteOrder::Little); + assert_eq!(h.compression, Compression::Lz4); + assert_eq!(h.compressed_data_length, 20); + assert_eq!(h.pad3, 1); + assert_eq!(h.uncompressed_data_length, 100); + assert_eq!(h.user_register1, 7); + assert_eq!(h.user_register2, 9); + assert!(!h.is_sro_block()); + assert_eq!(padded_to_words(5), 8); + assert_eq!(padded_to_words(8), 8); + } +} diff --git a/rust/evio-stream/src/lib.rs b/rust/evio-stream/src/lib.rs new file mode 100644 index 0000000..6780560 --- /dev/null +++ b/rust/evio-stream/src/lib.rs @@ -0,0 +1,57 @@ +//! Streaming, read-only reader for EVIO v6 files and JLab SRO hardware streams. +//! +//! The reader works over any [`std::io::Read`] (a file, standard input, a +//! pipe), never seeks and holds one record in memory at a time. It reads +//! the three layouts pyevio reads ([`FileLayout`]): v6 files with a file +//! header, bare v6 record streams, and the SRO hardware stream of 8-word +//! block headers. LZ4, LZ4_BEST and gzip records are decompressed. An +//! evio-library v4 file or a v1—3 file is refused with +//! [`Error::UnsupportedVersion`], which names the version. +//! +//! Words stay in file byte order inside the record buffer; [`Words`] decodes +//! them on read. Every length (record, event, bank, segment) is checked +//! against its container before it is trusted: a bad length ends the walk +//! with an error value, never a panic. +//! +//! ```no_run +//! use evio_stream::{Bank, FrameDecoder, RecordReader}; +//! +//! let mut reader = RecordReader::open("run.evio")?; +//! let mut decoder = FrameDecoder::new(); +//! while let Some(record) = reader.next_record()? { +//! for event in record.iter_events() { +//! let bank = Bank::event(event)?; +//! if let Some(frame) = decoder.decode(event) { +//! let hits = frame.hits().count(); +//! println!("frame {} tag 0x{:04X}: {hits} hits", frame.frame_number, bank.tag); +//! } +//! } +//! reader.recycle(record); +//! } +//! # Ok::<(), Box>(()) +//! ``` +//! +//! Modules: [`header`] (file and record headers, layout detection), +//! [`record`] (one record and its events), [`reader`] (the streaming +//! iterator), [`bank`] (bank, segment and tagsegment views), [`fadc250`] +//! (the streaming fADC250 frame walk), [`checks`] (the per-file summary). + +#![forbid(unsafe_code)] + +pub mod bank; +pub mod checks; +pub mod error; +pub mod fadc250; +pub mod header; +pub mod reader; +pub mod record; +pub mod words; + +pub use bank::{Bank, Children, StructureKind, WalkError}; +pub use checks::Checks; +pub use error::Error; +pub use fadc250::{Frame, FrameDecoder, Hit, Hits, PayloadBank, RocBank}; +pub use header::{Compression, FileHeader, FileLayout, RecordHeader}; +pub use reader::{BadRecordHeader, RecordReader, TruncatedTail}; +pub use record::{EventSpan, Record}; +pub use words::{ByteOrder, Words}; diff --git a/rust/evio-stream/src/reader.rs b/rust/evio-stream/src/reader.rs new file mode 100644 index 0000000..9aa6b73 --- /dev/null +++ b/rust/evio-stream/src/reader.rs @@ -0,0 +1,390 @@ +//! The streaming record reader. + +use std::fs::File; +use std::io::{self, Read}; +use std::path::Path; + +use crate::error::Error; +use crate::header::{ + detect_byte_order, file_type_name, padded_to_words, record_header_problem, FileHeader, + FileLayout, RecordHeader, FULL_HEADER_BYTES, SHORT_HEADER_BYTES, SRO_BLOCK_WORD, +}; +use crate::record::Record; +use crate::words::{ByteOrder, Words}; + +/// Largest buffer reserved before a record is read (64 MB); see `read_record`. +const RESERVE_CAP: u64 = 1 << 26; + +/// The `("bad_record_header", offset, message)` check of pyevio: bytes that +/// are no record header ended the scan. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct BadRecordHeader { + pub offset: u64, + pub message: String, +} + +/// The `("truncated_tail", declared, present, salvaged)` check of pyevio: the +/// last record's declared length ran past the end of the stream; its +/// complete events were kept. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct TruncatedTail { + /// Bytes the record header declares, header included. + pub declared_bytes: u64, + /// Bytes of the record present, header included. + pub present_bytes: u64, + /// Complete events read from the cut record. + pub salvaged_events: usize, +} + +/// Reads records one after another from any [`Read`], never seeking. +/// +/// The reader holds one record in memory at a time. It is an iterator over +/// `Result`; iteration ends at the end of the stream, after +/// the trailer, at a cut tail (the cut record is yielded with its complete +/// events) or at bytes that are no record header (recorded in +/// [`bad_record_header`](Self::bad_record_header), never an `Err`). The +/// only `Err` items are I/O errors and the version error of an evio-library +/// v4 file whose block chain only reveals itself after the first block. +pub struct RecordReader { + inner: R, + layout: FileLayout, + order: ByteOrder, + file_header: FileHeader, + file_user_header: Vec, + /// Bytes consumed from the stream so far. + offset: u64, + next_index: usize, + pending_head: Option<[u8; SHORT_HEADER_BYTES]>, + spare: Vec, + scratch: Vec, + done: bool, + after_last_bit: bool, + bad_record_header: Option, + truncated_tail: Option, + data_records: u64, + trailer_seen: bool, +} + +impl RecordReader { + /// Open a file. `"-"` reads standard input (see [`RecordReader::stdin`]). + pub fn open>(path: P) -> Result, Error> { + RecordReader::new(File::open(path)?) + } +} + +impl RecordReader> { + /// Read standard input. + pub fn stdin() -> Result { + RecordReader::new(io::stdin().lock()) + } +} + +impl RecordReader { + /// Detect the layout from the first bytes and position the reader at the + /// first record. Fails with [`Error::UnsupportedVersion`] for an EVIO v4 + /// or v1—3 file and [`Error::NotEvio`] for anything without the magic. + pub fn new(mut inner: R) -> Result { + let mut head = [0u8; SHORT_HEADER_BYTES]; + let got = read_full(&mut inner, &mut head)?; + if got < SHORT_HEADER_BYTES { + return Err(Error::NotEvio(format!( + "{got} bytes, a header needs {SHORT_HEADER_BYTES}" + ))); + } + let order = detect_byte_order(&head).ok_or_else(|| { + Error::NotEvio("no magic number 0xc0da0100 at word 7 of the first header".into()) + })?; + let w = Words::new(&head, order); + let word = |i: usize| w.get(i).unwrap_or(0); + + let mut offset = 0u64; + let mut file_user_header = Vec::new(); + let (layout, file_header, pending_head) = if file_type_name(word(0)).is_some() { + let header_length = word(2) as usize; + let header_bytes = header_length * 4; + let mut full = head.to_vec(); + if header_bytes > SHORT_HEADER_BYTES { + full.resize(header_bytes, 0); + let more = read_full(&mut inner, &mut full[SHORT_HEADER_BYTES..])?; + if more < header_bytes - SHORT_HEADER_BYTES { + return Err(Error::NotEvio(format!( + "file header declares {header_length} words, the file ends inside it" + ))); + } + } else if header_length < 8 { + return Err(Error::NotEvio(format!( + "file header length {header_length} words, expected 14" + ))); + } + let header = FileHeader::parse(&full, order).map_err(Error::NotEvio)?; + if header.version != 6 { + return Err(Error::UnsupportedVersion { + version: header.version, + detail: "file header".into(), + }); + } + offset += header_bytes as u64; + // The file-level index array (record lengths) is not used; the + // user header (dictionary, first event) is kept, padded to words. + let skip = header.index_array_length as u64; + offset += skip_bytes(&mut inner, skip)?; + let user_padded = padded_to_words(header.user_header_length as u64); + file_user_header.resize(user_padded as usize, 0); + let got = read_full(&mut inner, &mut file_user_header)?; + file_user_header.truncate(got.min(header.user_header_length as usize)); + offset += got as u64; + (FileLayout::V6, header, None) + } else { + let header_length = word(2); + let bit_info_version = word(5); + let version = (bit_info_version & 0xFF) as u8; + if header_length == 14 && version == 6 { + let header = FileHeader::stand_in(FileLayout::V6Records, order); + (FileLayout::V6Records, header, Some(head)) + } else if header_length == 8 && bit_info_version == SRO_BLOCK_WORD { + let header = FileHeader::stand_in(FileLayout::Sro8Word, order); + (FileLayout::Sro8Word, header, Some(head)) + } else { + let detail = if header_length == 8 && version == 4 { + format!( + "block header at offset 0 has bit-info 0x{:X}, an evio-library v4 file rather than an SRO stream", + bit_info_version >> 8 + ) + } else { + "block header at offset 0, no file header".to_string() + }; + return Err(Error::UnsupportedVersion { version, detail }); + } + }; + + Ok(RecordReader { + inner, + layout, + order, + file_header, + file_user_header, + offset, + next_index: 0, + pending_head, + spare: Vec::new(), + scratch: Vec::new(), + done: false, + after_last_bit: false, + bad_record_header: None, + truncated_tail: None, + data_records: 0, + trailer_seen: false, + }) + } + + /// The layout detected from the first bytes. + pub fn layout(&self) -> FileLayout { + self.layout + } + + /// The byte order of the file. + pub fn order(&self) -> ByteOrder { + self.order + } + + /// The file header, or a stand-in for the layouts without one. + pub fn file_header(&self) -> &FileHeader { + &self.file_header + } + + /// The file header's user header (dictionary and first event as a + /// record), empty for the layouts without one. + pub fn file_user_header(&self) -> &[u8] { + &self.file_user_header + } + + /// Bytes consumed from the stream so far. + pub fn bytes_read(&self) -> u64 { + self.offset + } + + /// Data records yielded so far (the trailer excluded). + pub fn data_records(&self) -> u64 { + self.data_records + } + + /// True once the trailer has been read. + pub fn trailer_seen(&self) -> bool { + self.trailer_seen + } + + /// Set when the scan ended on bytes that are no record header. + pub fn bad_record_header(&self) -> Option<&BadRecordHeader> { + self.bad_record_header.as_ref() + } + + /// Set when the last record was cut by the end of the stream. + pub fn truncated_tail(&self) -> Option { + self.truncated_tail + } + + /// Give a record's buffer back so the next record reuses the allocation. + pub fn recycle(&mut self, record: Record) { + let buffer = record.into_buffer(); + if buffer.capacity() > self.spare.capacity() { + self.spare = buffer; + } + } + + /// Read the next record, `Ok(None)` at the end. See the type docs for + /// what ends the iteration. + pub fn next_record(&mut self) -> Result, Error> { + if self.done { + return Ok(None); + } + match self.read_record() { + Ok(Some(record)) => Ok(Some(record)), + Ok(None) => { + self.done = true; + Ok(None) + } + Err(e) => { + self.done = true; + Err(e) + } + } + } + + fn stop_with(&mut self, message: String) -> Result, Error> { + // After a record with the last-record bit, bytes that are no record + // header end the scan quietly, as pyevio's scan does; otherwise they + // are a bad_record_header check. + if !self.after_last_bit { + self.bad_record_header = Some(BadRecordHeader { + offset: self.offset, + message, + }); + } + Ok(None) + } + + fn read_record(&mut self) -> Result, Error> { + let mut head = [0u8; FULL_HEADER_BYTES]; + let got = match self.pending_head.take() { + Some(pending) => { + head[..SHORT_HEADER_BYTES].copy_from_slice(&pending); + SHORT_HEADER_BYTES + } + None => read_full(&mut self.inner, &mut head[..SHORT_HEADER_BYTES])?, + }; + if got == 0 { + return Ok(None); + } + if let Some(problem) = record_header_problem(&head[..got], self.order) { + return self.stop_with(problem); + } + let header_length = Words::new(&head, self.order).get(2).unwrap_or(0) as usize; + let header_bytes = header_length * 4; + if header_bytes > SHORT_HEADER_BYTES { + let more = read_full(&mut self.inner, &mut head[SHORT_HEADER_BYTES..header_bytes])?; + if more < header_bytes - SHORT_HEADER_BYTES { + let left = SHORT_HEADER_BYTES + more; + return self.stop_with(format!( + "{left} bytes left, the {header_length}-word header needs {header_bytes}" + )); + } + } + let header = RecordHeader::parse(&head[..header_bytes], self.order); + + // Version 6 is the record header; the SRO block header (8 words, + // version 4, no bit-info bits) is the one other shape read. In an SRO + // stream any other 8-word header means an evio-library v4 file, which + // the whole-chain check of pyevio rejects at open; without seeks it is + // rejected where it shows. + if header.version != 6 && !header.is_sro_block() { + if self.layout == FileLayout::Sro8Word && header.header_length == 8 { + let detail = if header.version == 4 { + format!( + "block header at offset 0x{:X} has bit-info 0x{:X}, an evio-library v4 file rather than an SRO stream", + self.offset, + (header.bit_info | ((header.header_type as u32) << 20)) + ) + } else { + format!("block header at offset 0x{:X}, no file header", self.offset) + }; + return Err(Error::UnsupportedVersion { + version: header.version, + detail, + }); + } + return self.stop_with(format!( + "Unsupported EVIO version in record at offset 0x{:X}: version {}, expected 6", + self.offset, header.version + )); + } + + let body_len = header.record_bytes() - header.header_bytes(); + let mut body = std::mem::take(&mut self.spare); + body.clear(); + // Reserve the declared size (no zeroing: read_to_end fills spare + // capacity), capped so a corrupt length word cannot demand 16 GB up + // front; a larger record grows the buffer as it is read. + body.reserve(body_len.min(RESERVE_CAP) as usize); + (&mut self.inner).take(body_len).read_to_end(&mut body)?; + let is_truncated = (body.len() as u64) < body_len; + let present = header.header_bytes() + body.len() as u64; + let is_trailer = header.is_trailer(); + let is_last = header.is_last_record; + let record_offset = self.offset; + let record = Record::build( + self.next_index, + record_offset, + header, + self.order, + body, + is_truncated, + &mut self.scratch, + ); + self.next_index += 1; + self.offset += present; + self.after_last_bit = is_last; + if is_trailer { + self.trailer_seen = true; + self.done = true; + } else { + self.data_records += 1; + } + if is_truncated { + self.truncated_tail = Some(TruncatedTail { + declared_bytes: record.declared_bytes, + present_bytes: present, + salvaged_events: record.event_count(), + }); + self.done = true; + } + Ok(Some(record)) + } +} + +impl Iterator for RecordReader { + type Item = Result; + + fn next(&mut self) -> Option { + self.next_record().transpose() + } +} + +/// Fill `buf` as far as the stream allows; returns the bytes read (less than +/// `buf.len()` only at the end of the stream). +fn read_full(reader: &mut R, buf: &mut [u8]) -> io::Result { + let mut filled = 0; + while filled < buf.len() { + match reader.read(&mut buf[filled..]) { + Ok(0) => break, + Ok(n) => filled += n, + Err(e) if e.kind() == io::ErrorKind::Interrupted => continue, + Err(e) => return Err(e), + } + } + Ok(filled) +} + +/// Discard `n` bytes; returns how many were there. +fn skip_bytes(reader: &mut R, n: u64) -> io::Result { + io::copy(&mut reader.take(n), &mut io::sink()) +} diff --git a/rust/evio-stream/src/record.rs b/rust/evio-stream/src/record.rs new file mode 100644 index 0000000..47ba98b --- /dev/null +++ b/rust/evio-stream/src/record.rs @@ -0,0 +1,270 @@ +//! One record: its header, its bytes and the events inside. + +use std::io::Read; + +use crate::header::{padded_to_words, Compression, RecordHeader}; +use crate::words::{ByteOrder, Words}; + +/// Where one event lives inside [`Record::buffer`], in bytes. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct EventSpan { + pub offset: usize, + pub length: usize, +} + +/// A record read from the stream, with its bytes. +/// +/// The record owns one buffer that holds the index array, the user header +/// and the events: the bytes as they came from the file for a plain record, +/// the decompressed bytes for an LZ4, LZ4_BEST or gzip record. Event spans +/// index that buffer. Words stay in file byte order; [`Words`] decodes them. +#[derive(Debug)] +pub struct Record { + /// Position of the record in the stream: data records and the trailer, + /// in the order read, from 0. + pub index: usize, + /// Byte offset of the record header in the stream. + pub offset: u64, + pub header: RecordHeader, + order: ByteOrder, + buffer: Vec, + /// True when the record's declared length runs past the end of the + /// stream; `events` then holds the complete events present. + pub is_truncated: bool, + /// Byte length the header declares, header included. + pub declared_bytes: u64, + /// Bytes of the record present in the stream, header included. + pub present_bytes: u64, + data_start: usize, + data_end: usize, + events: Vec, + /// Why an event walk or a decompression stopped early; empty when every + /// length fit. + pub errors: Vec, +} + +impl Record { + /// Build a record from its header and the body bytes that follow the + /// header (`body` has `record_bytes - header_bytes` bytes, fewer for a + /// cut tail). `scratch` receives the compressed bytes of a compressed + /// record so the caller can recycle the allocation. + pub(crate) fn build( + index: usize, + offset: u64, + header: RecordHeader, + order: ByteOrder, + body: Vec, + is_truncated: bool, + scratch: &mut Vec, + ) -> Record { + let declared_bytes = header.record_bytes(); + let present_bytes = header.header_bytes() + body.len() as u64; + let mut errors = Vec::new(); + let index_len = header.index_array_length as usize; + let user_padded = padded_to_words(header.user_header_length as u64) as usize; + let data_start = index_len + user_padded; + + let (buffer, data_end) = if header.compression == Compression::None { + let end = body.len(); + (body, end) + } else { + let declared_end = data_start + header.uncompressed_data_length as usize; + let out = decompress(&header, &body, declared_end, &mut errors); + *scratch = body; + let end = declared_end.min(out.len()); + (out, end) + }; + + let mut record = Record { + index, + offset, + header, + order, + buffer, + is_truncated, + declared_bytes, + present_bytes, + data_start, + data_end, + events: Vec::new(), + errors, + }; + record.scan_events(); + record + } + + /// Walk the events: by the index array when the record has one, else by + /// the length word of each event bank. A trailer yields no events. + fn scan_events(&mut self) { + if self.header.is_trailer() { + return; + } + let w = Words::new(&self.buffer, self.order); + let data_end = self.data_end.min(self.buffer.len()); + let mut offset = self.data_start; + let declared = self.header.event_count as usize; + let index_len = self.header.index_array_length as usize; + + if index_len > 0 { + // The header's event count, the index size and the bytes present + // are three claims about the same number; trust none beyond the + // others (a cut tail may cut the index array itself). + let index_present = index_len.min(self.buffer.len()) / 4; + let count = declared.min(index_len / 4).min(index_present); + for i in 0..count { + let length = w.get(i).unwrap_or(0) as usize; + if length < 8 || offset.saturating_add(length) > data_end { + self.errors.push(format!( + "event {i} at 0x{offset:X} declares {length} bytes, record data ends at 0x{data_end:X}" + )); + break; + } + self.events.push(EventSpan { offset, length }); + offset += length; + } + } else { + while self.events.len() < declared { + let i = self.events.len(); + if offset.saturating_add(8) > data_end { + self.errors.push(format!( + "event {i} at 0x{offset:X} has no room for a bank header, record data ends at 0x{data_end:X}" + )); + break; + } + let bank_length = w.get(offset / 4).unwrap_or(0) as usize; + let length = (bank_length + 1) * 4; + if bank_length == 0 || offset.saturating_add(length) > data_end { + self.errors.push(format!( + "event {i} at 0x{offset:X} declares {length} bytes, record data ends at 0x{data_end:X}" + )); + break; + } + self.events.push(EventSpan { offset, length }); + offset += length; + } + } + } + + /// Byte order of the file. + pub fn order(&self) -> ByteOrder { + self.order + } + + /// True for the trailer that closes a file; it holds no events. + pub fn is_trailer(&self) -> bool { + self.header.is_trailer() + } + + /// The events found; for a cut tail, the complete ones. + pub fn events(&self) -> &[EventSpan] { + &self.events + } + + /// Number of events found (see [`Record::events`]). + pub fn event_count(&self) -> usize { + self.events.len() + } + + /// The words of event `i`. + pub fn event(&self, i: usize) -> Option> { + let span = self.events.get(i)?; + let bytes = self.buffer.get(span.offset..span.offset + span.length)?; + Some(Words::new(bytes, self.order)) + } + + /// The words of every event in order. + pub fn iter_events(&self) -> impl Iterator> + '_ { + self.events.iter().filter_map(move |span| { + let bytes = self.buffer.get(span.offset..span.offset + span.length)?; + Some(Words::new(bytes, self.order)) + }) + } + + /// Index array, user header and events (file bytes, or decompressed). + pub fn buffer(&self) -> &[u8] { + &self.buffer + } + + /// The index array bytes (one word per event length), empty without one. + pub fn index_array(&self) -> &[u8] { + let end = (self.header.index_array_length as usize).min(self.buffer.len()); + &self.buffer[..end] + } + + /// The user header bytes, unpadded. + pub fn user_header(&self) -> &[u8] { + let start = (self.header.index_array_length as usize).min(self.buffer.len()); + let end = (start + self.header.user_header_length as usize).min(self.buffer.len()); + &self.buffer[start..end] + } + + /// The event bytes present (from the first event to the data end). + pub fn data(&self) -> &[u8] { + let start = self.data_start.min(self.buffer.len()); + let end = self.data_end.min(self.buffer.len()).max(start); + &self.buffer[start..end] + } + + /// Take the buffer back for reuse (see [`RecordReader::recycle`](crate::RecordReader::recycle)). + pub fn into_buffer(self) -> Vec { + self.buffer + } +} + +/// Decompress a record body. The compressed bytes start right after the +/// header and run `compressed_data_length * 4 - pad3` bytes; LZ4 needs the +/// output size up front, which is index array + padded user header + the +/// uncompressed event bytes (`declared_end`). +fn decompress( + header: &RecordHeader, + body: &[u8], + declared_end: usize, + errors: &mut Vec, +) -> Vec { + let compressed_bytes = header.compressed_data_length as usize * 4; + let mut end = compressed_bytes.saturating_sub(header.pad3 as usize); + if end > body.len() { + errors.push(format!( + "compressed data declares {} words, {} bytes present", + header.compressed_data_length, + body.len() + )); + end = body.len(); + } + let compressed = &body[..end]; + let result: Result, String> = match header.compression { + Compression::Lz4 | Compression::Lz4Best => { + lz4_flex::block::decompress(compressed, declared_end).map_err(|e| e.to_string()) + } + Compression::Gzip => { + let mut out = Vec::with_capacity(declared_end); + let gzip_magic = + compressed.len() >= 2 && compressed[0] == 0x1f && compressed[1] == 0x8b; + let r = if gzip_magic { + flate2::read::MultiGzDecoder::new(compressed).read_to_end(&mut out) + } else { + flate2::read::ZlibDecoder::new(compressed).read_to_end(&mut out) + }; + r.map(|_| out).map_err(|e| e.to_string()) + } + Compression::None => unreachable!("plain records are not decompressed"), + Compression::Unknown(code) => Err(format!("unknown compression type {code}")), + }; + let out = match result { + Ok(out) => out, + Err(message) => { + errors.push(format!( + "decompression failed (type {}): {message}", + header.compression.name() + )); + Vec::new() + } + }; + if out.len() < declared_end { + errors.push(format!( + "decompressed {} bytes, header declares {declared_end}", + out.len() + )); + } + out +} diff --git a/rust/evio-stream/src/words.rs b/rust/evio-stream/src/words.rs new file mode 100644 index 0000000..0cc7fa9 --- /dev/null +++ b/rust/evio-stream/src/words.rs @@ -0,0 +1,169 @@ +//! A bounds-checked view of 32-bit words over bytes kept in file byte order. + +use std::fmt; + +/// Byte order of a file, decided by the magic word at word 7 of its first +/// header. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum ByteOrder { + Little, + Big, +} + +impl ByteOrder { + /// Decode one word. + #[inline(always)] + pub fn u32(self, bytes: [u8; 4]) -> u32 { + match self { + ByteOrder::Little => u32::from_le_bytes(bytes), + ByteOrder::Big => u32::from_be_bytes(bytes), + } + } + + /// Decode one half-word. + #[inline(always)] + pub fn u16(self, bytes: [u8; 2]) -> u16 { + match self { + ByteOrder::Little => u16::from_le_bytes(bytes), + ByteOrder::Big => u16::from_be_bytes(bytes), + } + } + + /// Decode a 64-bit value stored as two words, low word first. + #[inline] + pub fn u64(self, bytes: [u8; 8]) -> u64 { + match self { + ByteOrder::Little => u64::from_le_bytes(bytes), + ByteOrder::Big => u64::from_be_bytes(bytes), + } + } +} + +impl fmt::Display for ByteOrder { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(match self { + ByteOrder::Little => "little", + ByteOrder::Big => "big", + }) + } +} + +/// Words of a byte slice in the file's byte order. +/// +/// The bytes are never swapped in place: every read decodes one word with +/// the slice's [`ByteOrder`], which is a single instruction on the common +/// path (a little-endian file on a little-endian host). All accessors are +/// bounds checked and return `Option`; nothing here panics on short input. +#[derive(Clone, Copy)] +pub struct Words<'a> { + bytes: &'a [u8], + order: ByteOrder, +} + +impl<'a> Words<'a> { + /// View `bytes` as words. A trailing partial word is ignored. + #[inline] + pub fn new(bytes: &'a [u8], order: ByteOrder) -> Self { + Words { bytes, order } + } + + /// The bytes behind the view. + #[inline] + pub fn bytes(&self) -> &'a [u8] { + self.bytes + } + + /// The byte order used to decode words. + #[inline] + pub fn order(&self) -> ByteOrder { + self.order + } + + /// Number of whole words. + #[inline] + pub fn len(&self) -> usize { + self.bytes.len() / 4 + } + + /// True when the view holds no whole word. + #[inline] + pub fn is_empty(&self) -> bool { + self.bytes.len() < 4 + } + + /// Word `i`, or `None` past the end. + #[inline(always)] + pub fn get(&self, i: usize) -> Option { + let start = i.checked_mul(4)?; + let chunk = self.bytes.get(start..start.checked_add(4)?)?; + Some(self.order.u32([chunk[0], chunk[1], chunk[2], chunk[3]])) + } + + /// Half-word `i` in memory order (half-word 0 is the first two bytes), + /// or `None` past the end. + #[inline] + pub fn get_u16(&self, i: usize) -> Option { + let start = i.checked_mul(2)?; + let chunk = self.bytes.get(start..start.checked_add(2)?)?; + Some(self.order.u16([chunk[0], chunk[1]])) + } + + /// The words `start..end`, or `None` when the range is not inside the view. + #[inline] + pub fn slice(&self, start: usize, end: usize) -> Option> { + if start > end { + return None; + } + let bytes = self.bytes.get(start.checked_mul(4)?..end.checked_mul(4)?)?; + Some(Words { + bytes, + order: self.order, + }) + } + + /// Every whole word in order. + #[inline] + pub fn iter(&self) -> impl Iterator + 'a { + let order = self.order; + self.bytes + .chunks_exact(4) + .map(move |c| order.u32([c[0], c[1], c[2], c[3]])) + } + + /// The words copied into a `Vec` in host order. + pub fn to_vec(&self) -> Vec { + self.iter().collect() + } +} + +impl fmt::Debug for Words<'_> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Words({} words, {} endian)", self.len(), self.order) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn reads_both_orders_and_bounds() { + let bytes = [1u8, 0, 0, 0, 0, 0, 0, 2, 9]; + let le = Words::new(&bytes, ByteOrder::Little); + assert_eq!(le.len(), 2); + assert_eq!(le.get(0), Some(1)); + assert_eq!(le.get(1), Some(0x0200_0000)); + assert_eq!(le.get(2), None); + assert_eq!(le.get(usize::MAX), None); + let be = Words::new(&bytes, ByteOrder::Big); + assert_eq!(be.get(0), Some(0x0100_0000)); + assert_eq!(be.get(1), Some(2)); + assert_eq!(le.get_u16(1), Some(0)); + assert_eq!(be.get_u16(3), Some(2)); + assert_eq!(le.get_u16(4), None); + assert!(le.slice(1, 3).is_none()); + assert_eq!(le.slice(1, 2).unwrap().get(0), Some(0x0200_0000)); + assert!(le.slice(2, 1).is_none()); + assert_eq!(le.iter().count(), 2); + } +} From 9d9615e1147d2de226e6371e8915759aedec136d Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 18:50:35 -0400 Subject: [PATCH 51/65] evio-stream: evio-count and evio-dump tools, golden and SRO rulers evio-count prints records, events, trailer, layout, the file checks and the throughput of a file or stdin; with --fadc250 it walks every stream frame and decodes every hit word, printing hits for the complete records and the salvaged tail, other-module words, empty banks, AIS counts and a per-ROC table. evio-dump prints record headers and one event's bank tree with the first words in hex. tests/golden.rs walks all 46 rows of the evio-optim golden manifest (checked in as a TSV so cargo test needs no Python): the 39 readable rows give the manifest event count and layout with every bank tree walked, the 7 v4 and v1-3 rows end with the version error. tests/corpus.rs, behind EVIO_CORPUS=1, reproduces the 8 converted corpus files and the raw run-791 files: 86,794 events with truncated_tail (1967400, 531760, 2) and 764,009,774 fADC250 hits (763,992,122 in the complete blocks) for file 00000, 86,805 events with (1960136, 1939708, 10) and 764,140,261 hits (764,052,526 complete) for file 00001, matching pyevio and the independent decoders. One thread decodes every hit of the 15.5 GB raw file in 3.1 s (4.9 GB/s) and scans its records in 1.6 s (9.6 GB/s). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- rust/README.md | 165 +++++++++ rust/evio-stream/src/bin/evio-count.rs | 277 +++++++++++++++ rust/evio-stream/src/bin/evio-dump.rs | 333 ++++++++++++++++++ rust/evio-stream/tests/corpus.rs | 155 ++++++++ rust/evio-stream/tests/data/corpus.tsv | 10 + .../tests/data/golden_manifest.tsv | 46 +++ rust/evio-stream/tests/golden.rs | 256 ++++++++++++++ 7 files changed, 1242 insertions(+) create mode 100644 rust/README.md create mode 100644 rust/evio-stream/src/bin/evio-count.rs create mode 100644 rust/evio-stream/src/bin/evio-dump.rs create mode 100644 rust/evio-stream/tests/corpus.rs create mode 100644 rust/evio-stream/tests/data/corpus.tsv create mode 100644 rust/evio-stream/tests/data/golden_manifest.tsv create mode 100644 rust/evio-stream/tests/golden.rs diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 0000000..9b92522 --- /dev/null +++ b/rust/README.md @@ -0,0 +1,165 @@ +# evio-stream: a streaming EVIO v6 reader in Rust + +`rust/evio-stream` is a read-only, streaming reader for the files pyevio +reads, written against the same format references +(`docs/evio6_file_structure.md`, `docs/stream_decoding.md`) and checked +against the same rulers. It is a library with two command-line tools. + +What it reads: + +- EVIO v6 files with a file header (`v6`), bare v6 record streams without one + (`v6-records`, the evio writer buffer dumps), and the JLab SRO hardware + stream of 8-word block headers with no file header (`sro-8word`). +- Plain, LZ4, LZ4_BEST and gzip records; both byte orders. +- A final record cut by the end of the file: its complete events are kept and + reported as a `truncated_tail` check, as pyevio does. Garbage after the last + record ends the scan with a `bad_record_header` check. +- The bank / segment / tagsegment tree of any event, every length checked + against its container; a bad length is an error value, never a panic. +- CODA streaming fADC250 frames (tag 0xFF60): the frame walk of + `pyevio.decoders.fadc250_stream`, with the module per port from the 0x41 + payload map, hits for fADC250 ports, word counts for other modules (DCRB), + empty payload banks, and the AIS counted but never used to locate ROC banks. + +What it refuses: evio-library v4 files and v1—3 files, with an error naming +the version (`EVIO version 4 file is not supported ... evio2xml, eviocopy`), +as pyevio does. + +The reader works over any `std::io::Read` (file, stdin, pipe), never seeks, +and holds one record in memory at a time. No `unsafe` (`#![forbid(unsafe_code)]`). + +## Library + +```rust +use evio_stream::{Bank, Checks, FrameDecoder, RecordReader}; + +let mut reader = RecordReader::open("run.evio")?; // or RecordReader::new(any_read) +println!("{}", reader.layout()); // v6 | v6-records | sro-8word +let mut decoder = FrameDecoder::new(); +while let Some(record) = reader.next_record()? { // one record in memory + for event in record.iter_events() { // Words<'_> over the record buffer + let bank = Bank::event(event)?; // tag, data_type, num, length, children() + if let Some(frame) = decoder.decode(event) { // None for a non-0xFF60 event + for hit in frame.hits() { /* frame, timestamp, roc, stream, port, channel, time_raw, charge */ } + } + } + reader.recycle(record); // reuse the buffer +} +reader.truncated_tail(); // Option +reader.bad_record_header(); // Option +// Or in one call: Checks::scan(reader)? -> records, events, trailer, checks, errors, bytes +``` + +Types: `RecordReader` (iterator of `Result`), `Record` +(header, buffer, `events()`, `event(i)`, `errors`, `is_truncated`), +`RecordHeader` / `FileHeader` / `FileLayout` / `Compression`, `Words` +(bounds-checked word view in file byte order), `Bank` / `Children` / +`WalkError`, `FrameDecoder` / `Frame` / `Hit` / `RocBank` / `PayloadBank`, +`Checks`, `Error`. + +Layout decisions: + +- Words stay in file byte order; `Words::get` decodes each word with the + file's `ByteOrder` on read. A little-endian file on a little-endian host + pays nothing, and the SRO walk reads only headers, so swapping a whole + 15 GB record stream in place would touch every byte twice for nothing. +- A `Record` owns one `Vec`: the bytes after the header as read from the + file for a plain record, the decompressed bytes for a compressed one + (sized as index array + padded user header + uncompressed length). Event + spans and bank views are slices into it; nothing is copied per event. The + reader reads the body into reserved capacity without zeroing it, and + `recycle` hands the allocation back for the next record. +- `FrameDecoder` keeps its scratch vectors across frames; a decoded `Frame` + borrows the event and the decoder, and `hits()` decodes the words lazily. + +## Tools + +``` +cargo build --release +target/release/evio-count FILE|- [--fadc250] +target/release/evio-dump FILE|- [--record N] [--event M] [--words K] +``` + +`evio-count` prints layout, byte order, records, events, trailer, the +`truncated_tail` and `bad_record_header` checks, record errors and the +throughput. With `--fadc250` it walks every stream frame and decodes every +hit word: frames, ROC banks, payload banks (empty, unmapped), fADC250 hits +(complete records and the salvaged tail separately), other-module words, flag +words, AIS counts, decode errors, a per-ROC table. + +`evio-dump` prints the file header and one line per record header; with +`--record N` the full header and event table of record N; with `--event M` +the bank tree of event M of record N (tag, type, num, length) with the first +K words of each leaf in hex. + +## Rulers and tests + +``` +cd rust/evio-stream +cargo test --release # unit tests + the golden manifest +EVIO_CORPUS=1 cargo test --release --test corpus -- --nocapture # 140 GB, minutes +cargo fmt --check && cargo clippy --all-targets -- -D warnings +``` + +- Golden set (`tests/golden.rs`, `tests/data/golden_manifest.tsv` generated + from the evio-optim `manifest.yaml`): all 46 rows pass. 39 readable rows + (C++ and Java writers: plain LE/BE, LZ4, LZ4_BEST, gzip, dictionary, first + event, odd user header, trailer with and without index, append, split, + many records, 12-deep nesting, one 40 MB event, zero events, HIPO file + type, buffer dumps) give the manifest event count with the expected layout + and no check; every event's bank tree walks without error. The 7 reject + rows (v4 LE/BE, v4 with dictionary, v1—3) end with the version error. + The test skips when `/data/evio-lib/golden` (or `EVIO_GOLDEN_ROOT`) is absent. +- Corpus (`tests/corpus.rs`, `tests/data/corpus.tsv` from `corpus.yaml`): the + 8 converted v6 files (plain and LZ4) give their record and event counts. +- Raw SRO files of run 791: file 00000 gives 7893 records (the cut tail + included), 86,794 events, `truncated_tail (1967400, 531760, 2)`, + 763,992,122 fADC250 hits in the complete blocks + 17,652 in the two + salvaged frames = 764,009,774, 3,065,574,754 DCRB words, 357,743 empty + payload banks, 0 decode errors; file 00001 gives 7893 records, 86,805 + events, `(1960136, 1939708, 10)`, 764,052,526 hits in the complete blocks + + 87,735 in the ten salvaged frames = 764,140,261, and 3,065,895,268 DCRB + words. These match pyevio and the independent decoders + (`docs/stream_decoding.md`, the per-ROC `+salvage` columns of the SRO + reference tables). On both files `evio-count` also reports one record + error: the cut event of the tail ("event 2 ... declares 176292 bytes, + record data ends at ..."), the same message pyevio keeps in + `Record.errors`; it is the expected trace of the truncation, not a defect. + +Logs of the last run: `/data/pyevio/logs/phase6_rust_tests.log` and +`/data/pyevio/logs/phase6_rust_corpus.log`. + +## Speed (one thread) + +Measured on this host (24 cores, 62 GB) with the raw file +`sro_000791.evio.00000` (15.5 GB) in the page cache, one thread: + +- `evio-count --fadc250`: 3.1 s, 5.0 GB/s, every one of the 764 million hit + words decoded (channel, time, charge, flag) and the 3.8 billion payload + words walked. pyevio decodes hits at about 1 GB/s on one core, and + `pyevio stats` takes 26 s on the same file with 20 workers. +- `evio-count` alone (record scan, event walk by length words): 1.6 s, + 9.5 GB/s. +- Converted v6 files from disk, record scan only: about 3.1 GB/s plain + (1.3 GB/s on a cold first read); LZ4 records 1.3 GB/s of compressed input, + bounded by the safe-Rust LZ4 decoder (`lz4_flex` with `safe-decode`), + which also bounds `--fadc250` on an LZ4 file (11.2 s, 1.07 GB/s of input, + about 1.4 GB/s of decompressed output). + +## Not included + +Writing, random access by record index (the reader is forward-only), +dictionaries and composite data decoding (the bytes are exposed, not +parsed), and the statistics layer of `pyevio.stream_stats`. + +## Streaming differences from pyevio + +pyevio walks the whole block chain at open to tell an evio-library v4 file +from an SRO stream. A forward-only reader cannot look ahead, so a v4 file +whose first block has no bit-info bits yields its first blocks as `sro-8word` +records and returns the version error on the block that sets the last-block +or dictionary bit. The golden test drains the iterator and checks the +terminal error. Likewise, after a record with the last-record bit, bytes that +are no record header end the scan quietly (pyevio records no check there +either), and a record cut by the end of the file after such a record is +reported as a cut tail rather than ignored. diff --git a/rust/evio-stream/src/bin/evio-count.rs b/rust/evio-stream/src/bin/evio-count.rs new file mode 100644 index 0000000..444ad2a --- /dev/null +++ b/rust/evio-stream/src/bin/evio-count.rs @@ -0,0 +1,277 @@ +//! `evio-count FILE|- [--fadc250]`: records, events, trailer, layout and the +//! file checks of a stream, with throughput; `--fadc250` adds the streaming +//! fADC250 totals (frames, ROC banks, hits, other-module words, empty +//! payload banks) with every hit word decoded. + +use std::collections::BTreeMap; +use std::process::ExitCode; +use std::time::Instant; + +use evio_stream::fadc250::{module_name, MODULE_UNKNOWN}; +use evio_stream::{Checks, Error, FrameDecoder, RecordReader}; + +const USAGE: &str = "usage: evio-count FILE|- [--fadc250]\n\ + Reads the stream once and prints records, events, trailer, layout, the file checks\n\ + and the throughput. With --fadc250 every 0xFF60 stream frame is walked and every\n\ + fADC250 hit word decoded; the per-ROC table and the totals follow."; + +#[derive(Default)] +struct Fadc250Totals { + frames: u64, + other_events: u64, + roc_banks: u64, + payload_banks: u64, + empty_payload_banks: u64, + unmapped_payload_banks: u64, + payload_words: u64, + hits: u64, + hits_decoded: u64, + non_fadc_words: u64, + flag_words: u64, + charge_overflow: u64, + charge_sum: u64, + max_time_raw: u16, + errors: u64, + warnings: u64, + frames_with_ais: u64, + frames_with_degenerate_ais: u64, + first_frame: Option, + last_frame: u32, + first_timestamp: u64, + last_timestamp: u64, + error_messages: Vec, + /// Per ROC id: module, hits, other words, empty banks, ROC banks. + per_roc: BTreeMap, + /// Hits and words in the salvaged events of a cut tail. + tail_hits: u64, + tail_frames: u64, +} + +fn run(path: &str, fadc250: bool) -> Result<(), Error> { + let start = Instant::now(); + let mut decoder = FrameDecoder::new(); + let mut totals = Fadc250Totals::default(); + + let visit = |record: &evio_stream::Record| { + if !fadc250 { + return; + } + for event in record.iter_events() { + let Some(frame) = decoder.decode(event) else { + totals.other_events += 1; + continue; + }; + totals.frames += 1; + totals.roc_banks += frame.roc_banks.len() as u64; + totals.payload_banks += frame.n_payload_banks as u64; + totals.empty_payload_banks += frame.n_empty_payload_banks as u64; + totals.unmapped_payload_banks += frame.n_unmapped_payload_banks as u64; + totals.payload_words += frame.n_payload_words; + totals.hits += frame.n_hits; + totals.non_fadc_words += frame.non_fadc_words; + totals.errors += frame.n_errors as u64; + totals.warnings += frame.n_warnings as u64; + if frame.n_ais_entries > 0 { + totals.frames_with_ais += 1; + if frame.n_ais_entries > 1 && frame.n_ais_distinct == 1 { + totals.frames_with_degenerate_ais += 1; + } + } + if totals.first_frame.is_none() { + totals.first_frame = Some(frame.frame_number); + totals.first_timestamp = frame.timestamp; + } + totals.last_frame = frame.frame_number; + totals.last_timestamp = frame.timestamp; + if record.is_truncated { + totals.tail_hits += frame.n_hits; + totals.tail_frames += 1; + } + for message in frame.errors { + if totals.error_messages.len() < 20 { + totals.error_messages.push(format!( + "record {} frame {}: {message}", + record.index, frame.frame_number + )); + } + } + for roc in frame.roc_banks { + let entry = totals + .per_roc + .entry(roc.roc) + .or_insert((MODULE_UNKNOWN, 0, 0, 0, 0)); + if entry.0 == MODULE_UNKNOWN { + entry.0 = roc.module; + } + entry.1 += roc.n_hits; + entry.2 += roc.non_fadc_words; + entry.3 += roc.n_empty_payload_banks as u64; + entry.4 += 1; + } + // Decode every hit word: the checks below depend on each one. + let mut decoded = 0u64; + let mut charge_sum = 0u64; + let mut flags = 0u64; + let mut overflow = 0u64; + let mut max_time = totals.max_time_raw; + for hit in frame.hits() { + decoded += 1; + charge_sum += hit.charge as u64; + flags += hit.flag as u64; + overflow += (hit.charge == 0x1FFF) as u64; + max_time = max_time.max(hit.time_raw); + } + totals.hits_decoded += decoded; + totals.charge_sum += charge_sum; + totals.flag_words += flags; + totals.charge_overflow += overflow; + totals.max_time_raw = max_time; + } + }; + + let checks = if path == "-" { + Checks::scan_with(RecordReader::stdin()?, visit)? + } else { + Checks::scan_with(RecordReader::open(path)?, visit)? + }; + let elapsed = start.elapsed().as_secs_f64(); + + println!("file: {path}"); + println!("layout: {}", checks.layout); + println!("byte order: {}", checks.order); + println!("records: {}", checks.records); + println!("events: {}", checks.events); + println!( + "trailer: {}", + if checks.trailer { "yes" } else { "no" } + ); + match checks.truncated_tail { + Some(t) => println!( + "truncated_tail: declared {} bytes, present {}, salvaged {} events ({}, {}, {})", + t.declared_bytes, + t.present_bytes, + t.salvaged_events, + t.declared_bytes, + t.present_bytes, + t.salvaged_events + ), + None => println!("truncated_tail: none"), + } + match &checks.bad_record_header { + Some(b) => println!("bad_record_header: offset 0x{:X}: {}", b.offset, b.message), + None => println!("bad_record_header: none"), + } + println!("record errors: {} records", checks.records_with_errors); + for message in &checks.error_messages { + println!(" {message}"); + } + println!( + "bytes: {} time {:.2} s {:.2} GB/s", + checks.bytes, + elapsed, + checks.bytes as f64 / 1e9 / elapsed.max(1e-9) + ); + + if fadc250 { + println!(); + println!("fADC250 stream decode (every hit word read)"); + println!("frames: {}", totals.frames); + println!("other events: {}", totals.other_events); + match totals.first_frame { + Some(first) => println!( + "frame range: {first}..{} timestamps {}..{}", + totals.last_frame, totals.first_timestamp, totals.last_timestamp + ), + None => println!("frame range: none"), + } + println!("ROC banks: {}", totals.roc_banks); + println!("payload banks: {}", totals.payload_banks); + println!("empty payload banks: {}", totals.empty_payload_banks); + println!("unmapped payload banks: {}", totals.unmapped_payload_banks); + println!("payload words: {}", totals.payload_words); + println!( + "fADC250 hits: {} (complete records {}, salvaged tail {} in {} frames)", + totals.hits, + totals.hits - totals.tail_hits, + totals.tail_hits, + totals.tail_frames + ); + println!("hits decoded: {}", totals.hits_decoded); + println!("other-module words: {}", totals.non_fadc_words); + println!("flag words (bit 31): {}", totals.flag_words); + println!("charge overflow: {}", totals.charge_overflow); + println!("charge sum: {}", totals.charge_sum); + println!( + "max time_raw: {} ({} ns)", + totals.max_time_raw, + totals.max_time_raw as u32 * 4 + ); + println!( + "AIS: {} frames with an AIS, {} with one value repeated", + totals.frames_with_ais, totals.frames_with_degenerate_ais + ); + println!("decode errors: {}", totals.errors); + println!("decode warnings: {}", totals.warnings); + for message in &totals.error_messages { + println!(" {message}"); + } + let consistent = totals.hits + totals.non_fadc_words == totals.payload_words + && totals.hits == totals.hits_decoded; + println!( + "consistency: hits + other words == payload words, hits decoded == hits: {}", + if consistent { "ok" } else { "FAILED" } + ); + println!(); + println!( + "{:>6} {:>8} {:>10} {:>14} {:>14} {:>12}", + "roc", "module", "ROC banks", "hits", "other words", "empty banks" + ); + for (roc, (module, hits, other, empty, banks)) in &totals.per_roc { + let name = module_name(*module); + println!("{roc:>6} {name:>8} {banks:>10} {hits:>14} {other:>14} {empty:>12}"); + } + println!( + "decode: {:.2} s {:.2} GB/s", + elapsed, + checks.bytes as f64 / 1e9 / elapsed.max(1e-9) + ); + } + Ok(()) +} + +fn main() -> ExitCode { + let mut path = None; + let mut fadc250 = false; + for arg in std::env::args().skip(1) { + match arg.as_str() { + "--fadc250" => fadc250 = true, + "-h" | "--help" => { + println!("{USAGE}"); + return ExitCode::SUCCESS; + } + "-" => path = Some(arg), + a if a.starts_with('-') => { + eprintln!("unknown option {a}\n{USAGE}"); + return ExitCode::from(2); + } + _ => { + if path.is_some() { + eprintln!("one file only\n{USAGE}"); + return ExitCode::from(2); + } + path = Some(arg); + } + } + } + let Some(path) = path else { + eprintln!("{USAGE}"); + return ExitCode::from(2); + }; + match run(&path, fadc250) { + Ok(()) => ExitCode::SUCCESS, + Err(e) => { + eprintln!("evio-count: {e}"); + ExitCode::FAILURE + } + } +} diff --git a/rust/evio-stream/src/bin/evio-dump.rs b/rust/evio-stream/src/bin/evio-dump.rs new file mode 100644 index 0000000..db87f34 --- /dev/null +++ b/rust/evio-stream/src/bin/evio-dump.rs @@ -0,0 +1,333 @@ +//! `evio-dump FILE|- [--record N] [--event M] [--words K]`: the file header +//! and every record header; with `--record N` that record's header in full +//! and its events; with `--event M` the bank tree of event M of record N +//! (tag, type, num, length) with the first K words of each leaf in hex. + +use std::process::ExitCode; + +use evio_stream::{Bank, Error, Record, RecordReader, StructureKind, Words}; + +const USAGE: &str = "usage: evio-dump FILE|- [--record N] [--event M] [--words K]\n\ + Without options: the file header and one line per record header.\n\ + --record N: the full header of record N and its event table.\n\ + --event M: the bank tree of event M of record N (default record 0), with the\n\ + first K words (default 8) of each leaf in hex."; + +struct Options { + path: String, + record: Option, + event: Option, + words: usize, +} + +fn parse_args() -> Result { + let mut path = None; + let mut record = None; + let mut event = None; + let mut words = 8usize; + let mut args = std::env::args().skip(1); + while let Some(arg) = args.next() { + let mut value = |name: &str| -> Result { + let v = args.next().ok_or_else(|| format!("{name} needs a value"))?; + v.parse().map_err(|_| format!("{name}: not a number: {v}")) + }; + match arg.as_str() { + "--record" => record = Some(value("--record")?), + "--event" => event = Some(value("--event")?), + "--words" => words = value("--words")?, + "-h" | "--help" => return Err(String::new()), + "-" => path = Some(arg), + a if a.starts_with('-') => return Err(format!("unknown option {a}")), + _ => { + if path.is_some() { + return Err("one file only".into()); + } + path = Some(arg); + } + } + } + let path = path.ok_or_else(|| "no file given".to_string())?; + Ok(Options { + path, + record, + event, + words, + }) +} + +fn print_file_header(reader: &RecordReader) { + let h = reader.file_header(); + println!("layout: {}", reader.layout()); + println!("byte order: {}", reader.order()); + println!("file type: {}", h.file_type); + if reader.layout() == evio_stream::FileLayout::V6 { + println!("file number: {}", h.file_number); + println!("header length: {} words", h.header_length); + println!("record count: {} (declared)", h.record_count); + println!("index array length: {} bytes", h.index_array_length); + println!("version: {}", h.version); + println!("user header length: {} bytes", h.user_header_length); + println!( + "dictionary / first event / trailer index: {} / {} / {}", + h.has_dictionary, h.has_first_event, h.has_trailer + ); + println!("user register: 0x{:016x}", h.user_register); + println!("trailer position: 0x{:x}", h.trailer_position); + println!( + "user integers: {} {}", + h.user_integer1, h.user_integer2 + ); + } else { + println!( + "version: {} (container headers say {})", + h.version, h.container_version + ); + } + println!(); +} + +fn record_line(record: &Record) { + let h = &record.header; + let mut flags = Vec::new(); + if h.is_last_record { + flags.push("last"); + } + if h.is_trailer() { + flags.push("trailer"); + } + if record.is_truncated { + flags.push("truncated"); + } + if !record.errors.is_empty() { + flags.push("errors"); + } + println!( + "{:>6} 0x{:<12X} {:>9} {:>3} {:>6} {:>6} {:>8} {:>8} {:<20} {}", + record.index, + record.offset, + h.record_length, + h.header_length, + h.event_count, + record.event_count(), + h.compression.name(), + h.record_number, + h.event_type_name(), + flags.join(",") + ); +} + +fn print_record(record: &Record) { + let h = &record.header; + println!("record {} at offset 0x{:X}", record.index, record.offset); + println!( + " record length: {} words ({} bytes)", + h.record_length, + h.record_bytes() + ); + println!(" record number: {}", h.record_number); + println!(" header length: {} words", h.header_length); + println!( + " event count: {} declared, {} found", + h.event_count, + record.event_count() + ); + println!(" index array length: {} bytes", h.index_array_length); + println!(" version: {}", h.version); + println!( + " header type: {} ({})", + h.header_type, + if h.is_trailer() { "trailer" } else { "record" } + ); + println!( + " bit info: 0x{:05X} last {} dictionary {} first event {} event type {}", + h.bit_info, + h.is_last_record, + h.has_dictionary, + h.has_first_event, + h.event_type_name() + ); + println!(" pad1/pad2/pad3: {} {} {}", h.pad1, h.pad2, h.pad3); + println!(" user header length: {} bytes", h.user_header_length); + println!( + " uncompressed length: {} bytes", + h.uncompressed_data_length + ); + println!( + " compression: {} ({} words)", + h.compression.name(), + h.compressed_data_length + ); + println!( + " user registers: 0x{:016x} 0x{:016x}", + h.user_register1, h.user_register2 + ); + println!( + " truncated: {} (declared {} bytes, present {})", + record.is_truncated, record.declared_bytes, record.present_bytes + ); + for e in &record.errors { + println!(" error: {e}"); + } + println!(" events (offset into the record buffer, bytes):"); + for (i, span) in record.events().iter().enumerate() { + let tag = record + .event(i) + .and_then(|w| w.get(1)) + .map(|w| { + format!( + "tag 0x{:04X} type 0x{:02X} num {}", + w >> 16, + (w >> 8) & 0x3F, + w & 0xFF + ) + }) + .unwrap_or_default(); + println!( + " {i:>6} 0x{:<10X} {:>10} {tag}", + span.offset, span.length + ); + } +} + +fn hex_words(words: Words<'_>, limit: usize) -> String { + let mut out: Vec = words + .iter() + .take(limit) + .map(|w| format!("{w:08x}")) + .collect(); + if words.len() > limit { + out.push(format!("... ({} words)", words.len())); + } + out.join(" ") +} + +fn print_tree(bank: &Bank<'_>, depth: usize, words: usize) { + let indent = " ".repeat(depth); + let num = match bank.kind() { + StructureKind::Bank => format!(" num {}", bank.num), + _ => String::new(), + }; + println!( + "{indent}{} tag 0x{:04X} type 0x{:02X} ({}){num} length {} ({} words)", + bank.kind().name(), + bank.tag, + bank.data_type, + bank.type_name(), + bank.length, + bank.total_words() + ); + if bank.is_container() { + for child in bank.children() { + match child { + Ok(child) => print_tree(&child, depth + 1, words), + Err(e) => println!("{indent} ERROR {e}"), + } + } + } else if words > 0 { + println!("{indent} {}", hex_words(bank.data(), words)); + } +} + +fn run(options: &Options) -> Result<(), Error> { + let mut reader = if options.path == "-" { + RecordReaderKind::Stdin(RecordReader::stdin()?) + } else { + RecordReaderKind::File(RecordReader::open(&options.path)?) + }; + match &reader { + RecordReaderKind::File(r) => print_file_header(r), + RecordReaderKind::Stdin(r) => print_file_header(r), + } + let want_record = options.record.or(if options.event.is_some() { + Some(0) + } else { + None + }); + if want_record.is_none() { + println!( + " index offset length hdr events found compress number type flags" + ); + } + loop { + let next = match &mut reader { + RecordReaderKind::File(r) => r.next_record()?, + RecordReaderKind::Stdin(r) => r.next_record()?, + }; + let Some(record) = next else { break }; + match want_record { + None => record_line(&record), + Some(n) if n == record.index => { + print_record(&record); + if let Some(m) = options.event { + println!(); + match record.event(m) { + Some(event) => { + println!("event {m} of record {n}: {} words", event.len()); + match Bank::event(event) { + Ok(bank) => print_tree(&bank, 0, options.words), + Err(e) => println!("ERROR {e}"), + } + } + None => println!( + "record {n} has no event {m} ({} events)", + record.event_count() + ), + } + } + return Ok(()); + } + Some(_) => {} + } + } + let (tail, bad, records) = match &reader { + RecordReaderKind::File(r) => ( + r.truncated_tail(), + r.bad_record_header().cloned(), + r.data_records(), + ), + RecordReaderKind::Stdin(r) => ( + r.truncated_tail(), + r.bad_record_header().cloned(), + r.data_records(), + ), + }; + if let Some(n) = want_record { + println!("no record {n}: the stream holds {records} data records"); + } + if let Some(t) = tail { + println!( + "truncated_tail: declared {} bytes, present {}, salvaged {} events", + t.declared_bytes, t.present_bytes, t.salvaged_events + ); + } + if let Some(b) = bad { + println!("bad_record_header at 0x{:X}: {}", b.offset, b.message); + } + Ok(()) +} + +enum RecordReaderKind { + File(RecordReader), + Stdin(RecordReader>), +} + +fn main() -> ExitCode { + let options = match parse_args() { + Ok(o) => o, + Err(message) if message.is_empty() => { + println!("{USAGE}"); + return ExitCode::SUCCESS; + } + Err(message) => { + eprintln!("{message}\n{USAGE}"); + return ExitCode::from(2); + } + }; + match run(&options) { + Ok(()) => ExitCode::SUCCESS, + Err(e) => { + eprintln!("evio-dump: {e}"); + ExitCode::FAILURE + } + } +} diff --git a/rust/evio-stream/tests/corpus.rs b/rust/evio-stream/tests/corpus.rs new file mode 100644 index 0000000..fe3e1dd --- /dev/null +++ b/rust/evio-stream/tests/corpus.rs @@ -0,0 +1,155 @@ +//! The corpus and SRO rulers (15 GB files; run with `EVIO_CORPUS=1`). +//! +//! `tests/data/corpus.tsv` is generated from +//! `evio-optim/space-evio-lib-23/golden_manifest/corpus.yaml`: the eight +//! converted v6 files (plain and LZ4) with their record and event counts. +//! The raw SRO hardware files of run 791 are checked against the reference +//! measured with pyevio and two independent decoders (`docs/stream_decoding.md`). + +use std::path::Path; + +use evio_stream::{Checks, FileLayout, FrameDecoder, RecordReader}; + +fn enabled() -> bool { + std::env::var("EVIO_CORPUS") + .map(|v| v == "1") + .unwrap_or(false) +} + +struct Stream { + checks: Checks, + frames: u64, + hits: u64, + tail_hits: u64, + non_fadc_words: u64, + empty_payload_banks: u64, + decode_errors: u64, + seconds: f64, +} + +fn scan(path: &Path, fadc250: bool) -> Stream { + let start = std::time::Instant::now(); + let reader = RecordReader::open(path).unwrap(); + let mut decoder = FrameDecoder::new(); + let (mut frames, mut hits, mut tail_hits, mut other, mut empty, mut errors) = + (0, 0, 0, 0, 0, 0); + let checks = Checks::scan_with(reader, |record| { + if !fadc250 { + return; + } + for event in record.iter_events() { + if let Some(frame) = decoder.decode(event) { + frames += 1; + hits += frame.n_hits; + if record.is_truncated { + tail_hits += frame.n_hits; + } + other += frame.non_fadc_words; + empty += frame.n_empty_payload_banks as u64; + errors += frame.n_errors as u64; + } + } + }) + .unwrap(); + Stream { + checks, + frames, + hits, + tail_hits, + non_fadc_words: other, + empty_payload_banks: empty, + decode_errors: errors, + seconds: start.elapsed().as_secs_f64(), + } +} + +#[test] +fn converted_corpus() { + if !enabled() { + eprintln!("EVIO_CORPUS not set, skipping"); + return; + } + for line in include_str!("data/corpus.tsv").lines() { + if line.starts_with('#') || line.trim().is_empty() { + continue; + } + let f: Vec<&str> = line.split('\t').collect(); + let (path, records, events) = ( + f[0], + f[2].parse::().unwrap(), + f[3].parse::().unwrap(), + ); + let s = scan(Path::new(path), false); + eprintln!( + "{path}: {} records, {} events, trailer {}, {:.1} s, {:.2} GB/s", + s.checks.records, + s.checks.events, + s.checks.trailer, + s.seconds, + s.checks.bytes as f64 / 1e9 / s.seconds + ); + assert_eq!(s.checks.layout, FileLayout::V6, "{path}"); + assert_eq!(s.checks.records, records, "{path}: records"); + assert_eq!(s.checks.events, events, "{path}: events"); + assert!(s.checks.is_clean(), "{path}: {:?}", s.checks); + } +} + +#[test] +fn raw_sro_files() { + if !enabled() { + eprintln!("EVIO_CORPUS not set, skipping"); + return; + } + // (path, records incl. the cut tail, events incl. salvaged, (declared, present, salvaged), + // fADC250 hits in the complete blocks) + let expected = [ + ( + "/data/sro_boyarinov_data_2026/sro_000791.evio.00000", + 7893u64, + 86_794u64, + (1_967_400u64, 531_760u64, 2usize), + 763_992_122u64, + Some(764_009_774u64), + ), + ( + "/data/sro_boyarinov_data_2026/sro_000791.evio.00001", + 7893, + 86_805, + (1_960_136, 1_939_708, 10), + 764_052_526, + // Sum of the '+salvage' payload words of the fADC250 ROC ids in + // /data/pyevio/sro_reference/tables.md (independent reference). + Some(764_140_261), + ), + ]; + for (path, records, events, tail, hits_complete, hits_with_salvage) in expected { + let s = scan(Path::new(path), true); + eprintln!( + "{path}: {} records, {} events, tail {:?}, {} frames, {} hits ({} in the tail), {} other words, {} empty banks, {} decode errors, {:.1} s, {:.2} GB/s", + s.checks.records, s.checks.events, s.checks.truncated_tail, s.frames, s.hits, s.tail_hits, + s.non_fadc_words, s.empty_payload_banks, s.decode_errors, s.seconds, + s.checks.bytes as f64 / 1e9 / s.seconds + ); + assert_eq!(s.checks.layout, FileLayout::Sro8Word, "{path}"); + assert_eq!(s.checks.records, records, "{path}: records"); + assert_eq!(s.checks.events, events, "{path}: events"); + let t = s.checks.truncated_tail.expect("cut tail"); + assert_eq!( + (t.declared_bytes, t.present_bytes, t.salvaged_events), + tail, + "{path}: tail" + ); + assert!(s.checks.bad_record_header.is_none(), "{path}"); + assert_eq!(s.frames, events, "{path}: every event is a frame"); + assert_eq!( + s.hits - s.tail_hits, + hits_complete, + "{path}: hits in the complete blocks" + ); + if let Some(total) = hits_with_salvage { + assert_eq!(s.hits, total, "{path}: hits with the salvaged frames"); + } + assert_eq!(s.decode_errors, 0, "{path}: decode errors"); + } +} diff --git a/rust/evio-stream/tests/data/corpus.tsv b/rust/evio-stream/tests/data/corpus.tsv new file mode 100644 index 0000000..572b67e --- /dev/null +++ b/rust/evio-stream/tests/data/corpus.tsv @@ -0,0 +1,10 @@ +# generated from evio-optim golden_manifest/corpus.yaml +# columns: path, compression, records, event_count, salvaged_events +/data/evio-lib/corpus/sro_000791.evio.00000.v6 none 7891 86794 2 +/data/evio-lib/corpus/sro_000791.evio.00000.v6.lz4 lz4 7891 86794 2 +/data/evio-lib/corpus/sro_000791.evio.00001.v6 none 7892 86805 10 +/data/evio-lib/corpus/sro_000791.evio.00001.v6.lz4 lz4 7892 86805 10 +/data/evio-lib/corpus/sro_000791.evio.00002.v6 none 7890 86790 8 +/data/evio-lib/corpus/sro_000791.evio.00002.v6.lz4 lz4 7890 86790 8 +/data/evio-lib/corpus/sro_000791.evio.00003.v6 none 7891 86801 0 +/data/evio-lib/corpus/sro_000791.evio.00003.v6.lz4 lz4 7891 86801 0 diff --git a/rust/evio-stream/tests/data/golden_manifest.tsv b/rust/evio-stream/tests/data/golden_manifest.tsv new file mode 100644 index 0000000..885da6a --- /dev/null +++ b/rust/evio-stream/tests/data/golden_manifest.tsv @@ -0,0 +1,46 @@ +# generated from evio-optim golden_manifest/manifest.yaml (lib_git_sha cbb56c79827268129870a4b89e0682b4bc8cc2df) +# columns: path (below golden_root), expected (v6 | v6-records | reject:), event_count, sha256 +cases/cpp/append_le.evio v6 19 173a00b9fc678fdbfe232b168e4869bd050d22bc7312169b9ab6f04d801d12f2 +cases/cpp/basic_be.evio v6 18 19ada7d0d78dd2f189809d10306111d3705b84b062c8e925859624df84a2e1fd +cases/cpp/basic_le.evio v6 18 e1756f3410a47e7d897c45bee1cb4e7e6346f735eabb4a6a3ad186cab9df3daa +cases/cpp/buffer_evw_dict_le.dump v6-records 18 2ba2b2f3175aebf5afd34be303899b1a3c3c396138b13741c5c7e8f4177b81d9 +cases/cpp/buffer_evw_le.dump v6-records 18 1cd5e47d883b955738905509b36531421b98f4da16ff4a7b14cd1fc3f4c72d97 +cases/cpp/deepnest_le.evio v6 1 47cb4def33b1a2d99296cb1f1e4ab0eb31e356cabc9107c8a87ed61c78ac0308 +cases/cpp/dict_le.evio v6 18 afc0d3acbe59d6488c1159dd30f00a3a77c11a43bfd4ff8ce991e385956a0aa1 +cases/cpp/dictfirst_le.evio v6 18 b0887886dcb57e611cc0f611f3e3f68ed7e1809878185cf8f51373a49d9ae22b +cases/cpp/first_le.evio v6 18 611bbcd7fffcaa5a110a941334252bdf2c1011f1bebb462851bf3fd2b5f9415b +cases/cpp/hipo_le.evio v6 18 ee21bd6492ed394782751c784f68e144b8ce866f1ff7a7c46bafe015c7b61f2d +cases/cpp/hugeev_le.evio v6 1 c7086456947d5b8ea5481bbe3ce7fdb684e410d5822b436e151ef6306fb63fe5 +cases/cpp/lz4_le.evio v6 18 7067998006c8e31342c3a904eca0c8341f446da9ba5dc4d939d5cfba9f699072 +cases/cpp/lz4best_le.evio v6 18 f46e51e2a2c027d3b0a9c088a9104c0dbda85ad7b7c2514f0c9aa391bb2d99dd +cases/cpp/manyrec_le.evio v6 18 f65128d9ebba77e6dd61f6c97293f05985a436101d54c22fce00e9471bebb504 +cases/cpp/v4_be.evio reject:4 18 250c5ba0688bf6fe827daeccd6fea6eaa4441f4328f755d16aac1b64cbd20361 +cases/cpp/v4_le.evio reject:4 18 071ef5512bd25539eea31734bf0ec57dbfcde3ba339937f938d6414ded65c493 +cases/cpp/v4dict_le.evio reject:4 18 83d4eba7a14b2f6876358edbfafb9f7d56ed1336026b66349df55adbaa6ca7d3 +cases/cpp/writer_noidx_le.evio v6 18 f6e22dfd5a8239c3f3e078f41699a61e810536371bf936d7f54d8e02360dc6f0 +cases/cpp/writer_traileridx_le.evio v6 18 46936aa483b2c2fd31bd8939fa0b8179af65e863c6f7269d1a1213ee9cfc576f +cases/cpp/zeroev_le.evio v6 0 8f5677de276c253d3df001a181ba1be43218af85e46d082b219c418fef493fb5 +cases/java/append_le.evio v6 19 173a00b9fc678fdbfe232b168e4869bd050d22bc7312169b9ab6f04d801d12f2 +cases/java/basic_be.evio v6 18 19ada7d0d78dd2f189809d10306111d3705b84b062c8e925859624df84a2e1fd +cases/java/basic_le.evio v6 18 e1756f3410a47e7d897c45bee1cb4e7e6346f735eabb4a6a3ad186cab9df3daa +cases/java/buffer_evw_dict_le.dump v6-records 18 2ba2b2f3175aebf5afd34be303899b1a3c3c396138b13741c5c7e8f4177b81d9 +cases/java/buffer_evw_le.dump v6-records 18 1cd5e47d883b955738905509b36531421b98f4da16ff4a7b14cd1fc3f4c72d97 +cases/java/deepnest_le.evio v6 1 47cb4def33b1a2d99296cb1f1e4ab0eb31e356cabc9107c8a87ed61c78ac0308 +cases/java/dict_le.evio v6 18 afc0d3acbe59d6488c1159dd30f00a3a77c11a43bfd4ff8ce991e385956a0aa1 +cases/java/dictfirst_le.evio v6 18 b0887886dcb57e611cc0f611f3e3f68ed7e1809878185cf8f51373a49d9ae22b +cases/java/first_le.evio v6 18 611bbcd7fffcaa5a110a941334252bdf2c1011f1bebb462851bf3fd2b5f9415b +cases/java/gzip_le.evio v6 18 f1b1408ef757e81660ee2343252c3f6e28b8f0453f4a1607b62fb8ebc5f76d8c +cases/java/hipo_le.evio v6 18 ee21bd6492ed394782751c784f68e144b8ce866f1ff7a7c46bafe015c7b61f2d +cases/java/hugeev_le.evio v6 1 c7086456947d5b8ea5481bbe3ce7fdb684e410d5822b436e151ef6306fb63fe5 +cases/java/lz4_le.evio v6 18 7067998006c8e31342c3a904eca0c8341f446da9ba5dc4d939d5cfba9f699072 +cases/java/lz4best_le.evio v6 18 00143030286895a5fe5d25bba3f4a115f1dc9dda7de0d283906e18bd334b83ce +cases/java/manyrec_le.evio v6 18 f65128d9ebba77e6dd61f6c97293f05985a436101d54c22fce00e9471bebb504 +cases/java/split_le_1.evio.0 v6 102 9d355dbad3a3223323614ac2a6998b68203ebbd272a7ec4b5f412b72e17e4aa6 +cases/java/split_le_1.evio.1 v6 98 5e23e77fcfaee211d669b2b18cd94fcf04d009199c68d9ff4b554f6ba2354ba3 +cases/java/v4_be.evio reject:4 18 250c5ba0688bf6fe827daeccd6fea6eaa4441f4328f755d16aac1b64cbd20361 +cases/java/v4_le.evio reject:4 18 071ef5512bd25539eea31734bf0ec57dbfcde3ba339937f938d6414ded65c493 +cases/java/v4dict_le.evio reject:4 18 83d4eba7a14b2f6876358edbfafb9f7d56ed1336026b66349df55adbaa6ca7d3 +cases/java/writer_noidx_le.evio v6 18 f6e22dfd5a8239c3f3e078f41699a61e810536371bf936d7f54d8e02360dc6f0 +cases/java/writer_traileridx_le.evio v6 18 46936aa483b2c2fd31bd8939fa0b8179af65e863c6f7269d1a1213ee9cfc576f +cases/java/zeroev_le.evio v6 0 8f5677de276c253d3df001a181ba1be43218af85e46d082b219c418fef493fb5 +cases/v13_legacy.evio reject:3 3 a9294a1d0435f623f79d7e2345c1c81e86943858fb4f9b2566908f13bc24485e diff --git a/rust/evio-stream/tests/golden.rs b/rust/evio-stream/tests/golden.rs new file mode 100644 index 0000000..1bbf1fc --- /dev/null +++ b/rust/evio-stream/tests/golden.rs @@ -0,0 +1,256 @@ +//! The golden-set ruler: every row of the evio-optim golden manifest. +//! +//! `tests/data/golden_manifest.tsv` is generated from +//! `evio-optim/space-evio-lib-23/golden_manifest/manifest.yaml` (path, +//! expected layout or `reject:`, event count, sha256). The files +//! live under `EVIO_GOLDEN_ROOT` (default `/data/evio-lib/golden`); the test +//! skips with a note when that directory is absent. +//! +//! For a readable row the layout and the event count must match and no +//! check may fire. For a reject row (evio-library v4, v1—3) the reader must +//! end with `Error::UnsupportedVersion` naming the version, either at open +//! or, for a v4 file whose first block looks like an SRO block, on the block +//! that gives it away. + +use std::path::{Path, PathBuf}; + +use evio_stream::{Bank, Error, FileLayout, RecordReader}; + +struct Row { + path: String, + expected: String, + event_count: u64, +} + +fn rows() -> Vec { + let tsv = include_str!("data/golden_manifest.tsv"); + tsv.lines() + .filter(|l| !l.starts_with('#') && !l.trim().is_empty()) + .map(|l| { + let f: Vec<&str> = l.split('\t').collect(); + Row { + path: f[0].to_string(), + expected: f[1].to_string(), + event_count: f[2].parse().expect("event count"), + } + }) + .collect() +} + +fn golden_root() -> Option { + let root = std::env::var("EVIO_GOLDEN_ROOT").unwrap_or_else(|_| "/data/evio-lib/golden".into()); + let root = PathBuf::from(root); + root.is_dir().then_some(root) +} + +#[derive(Debug)] +struct Outcome { + layout: FileLayout, + events: u64, + declared: u64, + problems: Vec, +} + +/// Drain the reader; return the terminal error if any, and the counts. +fn read_all(path: &Path) -> Result { + let mut reader = RecordReader::open(path)?; + let layout = reader.layout(); + let mut records = 0u64; + let mut events = 0u64; + let mut declared = 0u64; + let mut problems = Vec::new(); + while let Some(record) = reader.next_record()? { + if record.is_trailer() { + assert_eq!(record.event_count(), 0, "a trailer yields no events"); + continue; + } + records += 1; + events += record.event_count() as u64; + declared += record.header.event_count as u64; + problems.extend(record.errors.iter().cloned()); + for (i, event) in record.iter_events().enumerate() { + // Every event is a bank whose length fits its span exactly. + let bank = Bank::event(event) + .unwrap_or_else(|e| panic!("record {} event {i}: {e}", record.index)); + assert_eq!(bank.total_words(), event.len(), "event span == bank length"); + // Walk the whole tree; a bad length is a failure for golden data. + fn walk(bank: &Bank<'_>, errors: &mut Vec) { + for child in bank.children() { + match child { + Ok(c) => walk(&c, errors), + Err(e) => errors.push(e.to_string()), + } + } + } + walk(&bank, &mut problems); + } + reader.recycle(record); + } + if let Some(t) = reader.truncated_tail() { + problems.push(format!("truncated tail {t:?}")); + } + if let Some(b) = reader.bad_record_header() { + problems.push(format!("bad record header {b:?}")); + } + let _ = records; + Ok(Outcome { + layout, + events, + declared, + problems, + }) +} + +#[test] +fn golden_manifest() { + let Some(root) = golden_root() else { + eprintln!("golden root absent, skipping (set EVIO_GOLDEN_ROOT)"); + return; + }; + let rows = rows(); + assert!(rows.len() >= 40, "manifest rows"); + let mut passed = 0; + let mut rejected = 0; + for row in &rows { + let path = root.join(&row.path); + assert!(path.is_file(), "golden file missing: {}", path.display()); + let result = read_all(&path); + if let Some(version) = row.expected.strip_prefix("reject:") { + let version: u8 = version.parse().unwrap(); + match result { + Err(Error::UnsupportedVersion { version: v, detail }) => { + assert_eq!(v, version, "{}: version in the error ({detail})", row.path); + let message = Error::UnsupportedVersion { version: v, detail }.to_string(); + assert!(message.contains(&format!("version {version}")), "{message}"); + assert!(message.contains("evio2xml"), "{message}"); + rejected += 1; + } + other => panic!( + "{}: expected the version {version} error, got {other:?}", + row.path + ), + } + continue; + } + let Outcome { + layout, + events, + declared, + problems, + } = result.unwrap_or_else(|e| panic!("{}: {e}", row.path)); + let expected_layout = match row.expected.as_str() { + "v6" => FileLayout::V6, + "v6-records" => FileLayout::V6Records, + other => panic!("unknown expectation {other}"), + }; + assert_eq!(layout, expected_layout, "{}: layout", row.path); + assert_eq!(events, row.event_count, "{}: events found", row.path); + assert_eq!( + declared, row.event_count, + "{}: events declared by the headers", + row.path + ); + assert!(problems.is_empty(), "{}: {problems:?}", row.path); + passed += 1; + } + eprintln!("golden: {passed} rows read, {rejected} rows rejected as expected"); + assert_eq!(passed + rejected, rows.len()); + assert_eq!(rejected, 7, "v4 (cpp and java, 3 each) and v1-3 rows"); +} + +#[test] +fn golden_from_a_pipe() { + // The reader never seeks: the same counts must come from a non-seekable source. + let Some(root) = golden_root() else { + return; + }; + let path = root.join("cases/cpp/lz4_le.evio"); + let bytes = std::fs::read(&path).unwrap(); + let mut reader = RecordReader::new(std::io::Cursor::new(bytes)).unwrap(); + let mut events = 0; + while let Some(record) = reader.next_record().unwrap() { + events += record.event_count(); + } + assert_eq!(events, 18); + assert!(reader.trailer_seen()); +} + +#[test] +fn truncated_and_garbage_tails() { + let Some(root) = golden_root() else { + return; + }; + let path = root.join("cases/cpp/manyrec_le.evio"); + let bytes = std::fs::read(&path).unwrap(); + // Cut the file inside the body of record 7 (58 words, 2 events): the + // complete events before the cut are kept. (A cut inside a record + // header is a bad_record_header instead, as in pyevio.) + let mut probe = RecordReader::new(std::io::Cursor::new(bytes.clone())).unwrap(); + let cut = loop { + let record = probe.next_record().unwrap().expect("record 7"); + if record.index == 7 { + break (record.offset + record.header.header_bytes() + 100) as usize; + } + }; + let mut reader = RecordReader::new(std::io::Cursor::new(bytes[..cut].to_vec())).unwrap(); + let mut events = 0; + let mut last_truncated = false; + while let Some(record) = reader.next_record().unwrap() { + events += record.event_count(); + last_truncated = record.is_truncated; + } + let tail = reader.truncated_tail().expect("truncated tail"); + assert!(last_truncated); + assert!(tail.present_bytes < tail.declared_bytes); + assert!(events < 18 && events > 0, "{events}"); + // Garbage after the last record: bad_record_header, no panic. + let mut garbage = bytes.clone(); + garbage.extend_from_slice(&[0xAB; 40]); + let mut reader = RecordReader::new(std::io::Cursor::new(garbage)).unwrap(); + let mut events = 0; + while let Some(record) = reader.next_record().unwrap() { + events += record.event_count(); + } + // manyrec ends in a trailer, so the garbage after it is never read. + assert_eq!(events, 18); + // A record with the last-record bit followed by garbage ends quietly, as + // in pyevio (the .dump's one record carries the bit). + let path = root.join("cases/cpp/buffer_evw_le.dump"); + let dump = std::fs::read(&path).unwrap(); + let mut garbage = dump.clone(); + garbage.extend_from_slice(&[0xAB; 40]); + let mut reader = RecordReader::new(std::io::Cursor::new(garbage)).unwrap(); + let mut events = 0; + let mut last_bit = false; + while let Some(record) = reader.next_record().unwrap() { + events += record.event_count(); + last_bit = record.header.is_last_record; + } + assert_eq!(events, 18); + assert!(last_bit); + assert!(reader.bad_record_header().is_none()); + // The same events in an SRO-style 8-word block (no last bit, no index + // array) followed by garbage: bad_record_header names the offset. + let mut probe = RecordReader::new(std::io::Cursor::new(dump)).unwrap(); + let record = probe.next_record().unwrap().unwrap(); + let data = record.data().to_vec(); + let n_events = record.header.event_count; + let mut sro = Vec::new(); + let length_words = 8 + data.len() as u32 / 4; + for word in [length_words, 1, 8, n_events, 0, 4, 0, 0xc0da_0100] { + sro.extend_from_slice(&word.to_le_bytes()); + } + sro.extend_from_slice(&data); + let block_bytes = sro.len() as u64; + sro.extend_from_slice(&[0xAB; 40]); + let mut reader = RecordReader::new(std::io::Cursor::new(sro)).unwrap(); + assert_eq!(reader.layout(), FileLayout::Sro8Word); + let mut events = 0; + while let Some(record) = reader.next_record().unwrap() { + events += record.event_count(); + } + assert_eq!(events, 18); + let bad = reader.bad_record_header().expect("garbage after the block"); + assert_eq!(bad.offset, block_bytes); + assert!(bad.message.contains("no magic number"), "{}", bad.message); +} From c9fbfacd20229e6f65fcf887bfb938e7eed86d18 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:00:13 -0400 Subject: [PATCH 52/65] Name the Records status line and the Structure path line by their job The Records pane's status line and the Structure pane's node-path line kept the ids records-placeholder and structure-placeholder from the app skeleton only because tests/gui/test_app.py read them. They are now records-status and structure-path, in the CSS and the queries of both panes and in the three tests that read them; the comment in records.py that explained the old name is gone. No behavior changes. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/records.py | 7 +++---- pyevio/gui/structure.py | 8 ++++---- tests/gui/test_app.py | 8 ++++---- tests/gui/test_records.py | 4 ++-- tests/gui/test_structure.py | 6 +++--- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/pyevio/gui/records.py b/pyevio/gui/records.py index 519479c..dbfa91d 100644 --- a/pyevio/gui/records.py +++ b/pyevio/gui/records.py @@ -95,7 +95,7 @@ class RecordsPane(Pane): Binding("[", "previous_page", "Previous page"), ] DEFAULT_CSS = """ - RecordsPane #records-placeholder { + RecordsPane #records-status { height: auto; color: $text-muted; } @@ -109,8 +109,7 @@ def __init__(self, session, **kwargs): self.ends_with_trailer = False # the last row of the page is the trailer def compose(self): - # The status line keeps the id of the earlier placeholder so the app tests keep reading it. - yield Static(NO_FILE_TEXT, id="records-placeholder", markup=False) + yield Static(NO_FILE_TEXT, id="records-status", markup=False) yield RecordsTable(cursor_type="row", zebra_stripes=True, id="records-table") def on_mount(self) -> None: @@ -165,7 +164,7 @@ def status_line(self) -> str: return f"rows {first}—{last} of {self.total:,} records{trailer} · Enter opens the record{hint}" def _set_status(self, text: str) -> None: - self.query_one("#records-placeholder", Static).update(text) + self.query_one("#records-status", Static).update(text) @property def has_next_page(self) -> bool: diff --git a/pyevio/gui/structure.py b/pyevio/gui/structure.py index e1ed0f9..9345ed9 100644 --- a/pyevio/gui/structure.py +++ b/pyevio/gui/structure.py @@ -185,7 +185,7 @@ class StructurePane(Pane): height: 1fr; padding: 0 1; } - StructurePane #structure-placeholder { + StructurePane #structure-path { text-style: bold; } StructurePane #structure-errors { @@ -214,7 +214,7 @@ def compose(self): with Horizontal(): yield self._tree with DetailPanel(id="structure-detail"): - yield Static("Open a file to browse its structure.", id="structure-placeholder") + yield Static("Open a file to browse its structure.", id="structure-path") yield Static("", id="structure-fields", markup=False) yield Static("", id="structure-errors", markup=False) yield Static("", id="structure-entries", markup=False) @@ -401,7 +401,7 @@ def _show_detail(self, tree_node: TreeNode, force: bool = False) -> None: self._clear_panel(f"{data['remaining']:,} more children of {data['id'] or 'file'!r} — press Enter to load them") return self.detail = data - self.query_one("#structure-placeholder", Static).update(f"node {data.get('id', '')!r}" if data.get("id") else "node '' (file)") + self.query_one("#structure-path", Static).update(f"node {data.get('id', '')!r}" if data.get("id") else "node '' (file)") self.query_one("#structure-fields", Static).update("\n".join(fields_lines(data))) errors = data.get("errors") or [] self.query_one("#structure-errors", Static).update(Text("\n".join(errors), style="bold red") if errors else "") @@ -439,7 +439,7 @@ def _show_words(self) -> None: self.query_one("#structure-hex-note", Static).update(note) def _clear_panel(self, heading: str) -> None: - self.query_one("#structure-placeholder", Static).update(heading) + self.query_one("#structure-path", Static).update(heading) for widget_id in ("fields", "errors", "entries", "hex-title", "hex", "hex-note"): self.query_one(f"#structure-{widget_id}", Static).update("") diff --git a/tests/gui/test_app.py b/tests/gui/test_app.py index a33a01d..71d0f2c 100644 --- a/tests/gui/test_app.py +++ b/tests/gui/test_app.py @@ -26,7 +26,7 @@ async def test_start_with_a_file_runs_the_analysis_and_fills_the_panes(session, await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") assert "analysis done" in status_text(app) and "3 records" in status_text(app) assert app.query_one(OverviewPane).summary["totals"]["n_hits"] == synthetic["expected_hits"] - assert "4 records" in str(app.query_one("#records-placeholder", Static).render()) + assert "4 records" in str(app.query_one("#records-status", Static).render()) assert error_text(app) == "" assert app.sub_title == str(synthetic["path"].resolve()) @@ -42,7 +42,7 @@ async def test_number_keys_switch_tabs(session, synthetic): assert tabs.active == tab app.show_structure_node("r1") await pilot.pause() - assert tabs.active == "tab-structure" and "'r1'" in str(app.query_one("#structure-placeholder", Static).render()) + assert tabs.active == "tab-structure" and "'r1'" in str(app.query_one("#structure-path", Static).render()) async def test_open_screen_opens_a_typed_path_and_an_unreadable_file_keeps_the_current_one(session, synthetic): @@ -58,7 +58,7 @@ async def test_open_screen_opens_a_typed_path_and_an_unreadable_file_keeps_the_c await pilot_wait(pilot, lambda: not isinstance(app.screen, OpenScreen), what="open screen to close") assert "garbage.evio" in error_text(app) assert session.path == synthetic["path"].resolve() and session.state == "done" - assert app.query_one(RecordsPane) is not None and "4 records" in str(app.query_one("#records-placeholder", Static).render()) + assert app.query_one(RecordsPane) is not None and "4 records" in str(app.query_one("#records-status", Static).render()) # Escape cancels without touching the session. await pilot.press("o") @@ -76,7 +76,7 @@ async def test_start_without_a_file_shows_the_open_screen(session, synthetic): assert "No file open" in status_text(app) app.screen.query_one("#open-path", Input).value = str(synthetic["path"]) await pilot.press("enter") - await pilot_wait(pilot, lambda: app.query_one(StructurePane).query_one("#structure-placeholder", Static).render() is not None + await pilot_wait(pilot, lambda: app.query_one(StructurePane).query_one("#structure-path", Static).render() is not None and session.is_open, what="file to open") await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") assert "analysis done" in status_text(app) diff --git a/tests/gui/test_records.py b/tests/gui/test_records.py index 1a7e699..79a6719 100644 --- a/tests/gui/test_records.py +++ b/tests/gui/test_records.py @@ -13,7 +13,7 @@ def status(app) -> str: - return str(app.query_one("#records-placeholder", Static).render()) + return str(app.query_one("#records-status", Static).render()) def cell_texts(table: RecordsTable, row_key: str) -> list: @@ -66,7 +66,7 @@ async def test_enter_opens_the_record_in_the_structure_tab(session, synthetic): await pilot.pause() tabs = app.query_one("#tabs", TabbedContent) assert tabs.active == "tab-structure" - assert "'r2'" in str(app.query_one("#structure-placeholder", Static).render()) + assert "'r2'" in str(app.query_one("#structure-path", Static).render()) async def test_paging_through_a_file_of_more_than_one_page(tmp_path): diff --git a/tests/gui/test_structure.py b/tests/gui/test_structure.py index 1a05cdb..6ccf47d 100644 --- a/tests/gui/test_structure.py +++ b/tests/gui/test_structure.py @@ -131,7 +131,7 @@ async def test_detail_panel_shows_fields_errors_and_words(session, synthetic): assert pane.detail["id"] == "r1/e0" fields = panel_text(app, "fields") assert "tag 0xFF60 (65,376)" in fields and "kind event" in fields and "structure Bank" in fields - assert panel_text(app, "placeholder") == "node 'r1/e0'" + assert panel_text(app, "path") == "node 'r1/e0'" assert panel_text(app, "errors") == "" words = pane.words_page assert words["record"] == 1 and int(words["words"][0], 16) == event.data["length"] and words["count"] == 64 @@ -182,7 +182,7 @@ async def test_show_node_expands_the_path_and_selects_the_node(session, syntheti record = child_by_id(tree.root, "r1") assert record.is_expanded and tree.cursor_node is child_by_id(record, "r1/e2") assert pane.detail["id"] == "r1/e2" and pane.detail["index"] == 2 - assert panel_text(app, "placeholder") == "node 'r1/e2'" + assert panel_text(app, "path") == "node 'r1/e2'" await pilot_wait(pilot, lambda: child_by_id(record, "r1/e2").data.get("_total") is not None, what="event children") assert ids(child_by_id(record, "r1/e2"))[0] == "r1/e2/b" + format(child_by_id(record, "r1/e2").children[0].data["offset"], "x") @@ -224,7 +224,7 @@ async def test_more_child_pages_the_root_and_show_node_pages_until_present(sessi await pilot.pause() tree.move_cursor(more) await pilot.pause() - assert "101 more" in panel_text(app, "placeholder") + assert "101 more" in panel_text(app, "path") await pilot.press("enter") await pilot.pause() assert len(tree.root.children) == 601 and ids(tree.root)[-1] == "t" and tree.root.children[-1].data["kind"] == "trailer" From 2a1ceeb53bee1aa860d51e84444c1fa78cf97314 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:00:13 -0400 Subject: [PATCH 53/65] Document the console viewer with corpus screenshots docs/console_gui.md describes pyevio gui the way docs/web_viewer.md describes pyevio web: install, start, the shared analysis cache, the keys of every scope, one section per tab, the PNG export and the limitations of character plots; a Known problems section notes that the analysis of an uncached file fails under Textual with more than one worker and gives --workers 1 as the way around it (F63, fixed in the next commit). The screenshots are SVG exports of the app on sro_000791.evio.00000.v6, four at 140x45 and the two Plots shots at 260x50, the width at which the occupancy heatmap prints its counts; tests/gui/make_screenshots.py regenerates them (it analyzes the file outside the app, then drives the pilot). The README lists both viewers in its overview and the CLI block; the changelog gains the pyevio gui entry, the removal of pyevio ui and the move of textual out of the core dependencies. I42. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 3 + README.md | 4 +- docs/console_gui.md | 145 +++++++++ docs/images/console_gui_open.svg | 252 +++++++++++++++ docs/images/console_gui_overview.svg | 249 +++++++++++++++ docs/images/console_gui_plots_file.svg | 323 ++++++++++++++++++++ docs/images/console_gui_plots_roc.svg | 405 +++++++++++++++++++++++++ docs/images/console_gui_records.svg | 245 +++++++++++++++ docs/images/console_gui_structure.svg | 249 +++++++++++++++ tests/gui/make_screenshots.py | 211 +++++++++++++ 10 files changed, 2085 insertions(+), 1 deletion(-) create mode 100644 docs/console_gui.md create mode 100644 docs/images/console_gui_open.svg create mode 100644 docs/images/console_gui_overview.svg create mode 100644 docs/images/console_gui_plots_file.svg create mode 100644 docs/images/console_gui_plots_roc.svg create mode 100644 docs/images/console_gui_records.svg create mode 100644 docs/images/console_gui_structure.svg create mode 100644 tests/gui/make_screenshots.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 60133e5..b587ef2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `pyevio stats FILE [--out FILE.npz] [--workers N] [--rate-bins N] [--tick-ns X] [--records N]`. - `pyevio debug` prints a stream-frame summary for 0xFF60 events and the module, hits and other-module words per ROC bank. - `pyevio web`: a browser viewer for CODA streaming fADC250 files (`docs/web_viewer.md`), and `examples/fadc250_stream_to_parquet.py`, which writes the hits of a file to Parquet. +- `pyevio gui [FILE | FOLDER]`: a console viewer (Textual, optional extra `pyevio[gui]`) with the browser viewer's four tabs in the terminal — file checks and totals, plotext plots at file, ROC and channel level, the paged record table and the structure tree down to hit words with a detail panel of fields and raw words — plus a file-open screen; it reads through the same `pyevio.web` model functions as `pyevio web` and shares its statistics cache (`--cache-dir`, `--workers`), and `s` / `S` save the plots as PNG through matplotlib (`docs/console_gui.md`). - Golden-set harness `tests/golden/test_golden.py` (one test per row of the evio golden manifest, path in `GOLDEN_MANIFEST`) and the SRO corpus tests `tests/golden/test_corpus.py` (`PYEVIO_CORPUS=1`). - Documentation: `docs/stream_decoding.md` (frame layout, hit word, time units, striping, `stream_stats` outputs, file quirks); `docs/evio6_file_structure.md` gains an SRO hardware layout section. @@ -36,10 +37,12 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `RecordHeader.parse()` and `BufferReader` raise without printing hex dumps first. - Packaging: pytest, pyyaml and pyarrow sit in the default `dev` dependency group, so `uv run pytest` works without extras; setuptools package discovery is restricted to `pyevio*`. - `pyevio web` cache key: the file path, size and modification time without the stats version. An entry written by another version is recomputed and overwritten at the same name instead of staying behind as an orphan (F60). +- `textual` leaves the core dependencies: it is installed by the `pyevio[gui]` extra (with `textual-plotext`) only, so the library installs with click, lz4, rich, numpy and matplotlib. ### Removed - `docs/evio_roc_time_slice_bank.md` and `docs/evio_roc_tsb.png`: the bank layout they described does not match SRO data (F41). `docs/specs.md` moves to `docs/history/specs.md` as the pre-fix goal statement. +- The `pyevio ui` command and the `pyevio/ui/` package (a hard-coded sample tree); `pyevio gui` replaces them. ### Fixed diff --git a/README.md b/README.md index 74ea992..70b8a91 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A Python library and command-line tool for reading and inspecting EVIO (Event In - Walking the bank tree of an event (banks, segments, tagsegments) with every length checked against its container - Converting bank data to NumPy arrays - Decoding CODA streaming fADC250 time frames into hit arrays and computing histograms and file checks over a whole file in one parallel pass +- Browsing a file — checks, plots, record table, structure tree — in a browser (`pyevio web`, [docs/web_viewer.md](docs/web_viewer.md)) or in the terminal over SSH (`pyevio gui`, [docs/console_gui.md](docs/console_gui.md)); the two share one statistics cache ## What pyevio reads @@ -171,7 +172,8 @@ pyevio hex run.evio 256 --bytes --endian '<' # the default is big-endian ```bash pyevio ana run.evio --per-record # event tag statistics over the file -pyevio gui run.evio # console viewer (Textual; pip install 'pyevio[gui]') +pyevio gui run.evio # console viewer (Textual), see docs/console_gui.md +pyevio gui /path/to/runs # the same, picking a file from a folder pyevio web /path/to/runs # browser viewer, see docs/web_viewer.md ``` diff --git a/docs/console_gui.md b/docs/console_gui.md new file mode 100644 index 0000000..b52e3c2 --- /dev/null +++ b/docs/console_gui.md @@ -0,0 +1,145 @@ +# Console viewer + +`pyevio gui` opens the same viewer as [`pyevio web`](web_viewer.md) in the terminal: file checks and totals, channel occupancy, rate, charge and timing plots, a record table and a structure tree from the file header down to single fADC hit words. It is a [Textual](https://textual.textualize.io/) app: no server, no browser, no port to forward, so it runs as it is in an SSH session on the node that holds the file. Both viewers read through the same model functions of `pyevio.web` (`report`, `structure`, `jobs`, `cache`; none of them imports FastAPI) and share the statistics cache, so they show the same numbers for the same file and a file analyzed in one opens at once in the other. + +Plots are written for CODA streaming fADC250 files (0xFF60 built time frames). Any other EVIO v6 file shows the record table and the structure tree. + +## Install and start + +The viewer needs Textual and textual-plotext, installed as the optional extra: + +```bash +pip install 'pyevio[gui]' +``` + +```bash +pyevio gui run.evio # open a file +pyevio gui # pick a file in the current folder +pyevio gui /path/to/runs # pick a file in another folder +pyevio gui run.evio --workers 8 --cache-dir /scratch/pyevio-cache +``` + +Without the extra, `pyevio gui` prints `The console viewer needs Textual and textual-plotext: pip install 'pyevio[gui]'` and exits with code 1. The rest of pyevio does not need Textual. + +PNG export (`s` and `S` in the Plots tab) uses matplotlib, which the package installs anyway. + +### Analysis and cache + +Opening a file starts one analysis job (`pyevio stats` on all cores minus two, or `--workers N`) in a background thread; the status line under the header shows the records done, the time left and a progress bar, and the Overview and Plots tabs fill when it finishes. The Records and Structure tabs read the file directly and work while the analysis runs. Opening another file cancels the running job. + +Results are cached as `.npz` under `~/.cache/pyevio/stats` (or `--cache-dir DIR`), keyed by the file path, size and modification time, the same cache `pyevio web` writes and reads: a second open of an unchanged file, in either viewer, is immediate, and the status line says `cached`. An entry written by an older statistics version is recomputed and overwritten in place. The cache folder can be deleted at any time. + +### Over SSH + +Run `pyevio gui` on the node that holds the file; the terminal is all it needs. Textual uses the full terminal size, so a larger window shows more rows, more tree lines and finer plots (see [Limitations](#limitations) for what the plots need). `pyevio gui` has no `--port`, no token and no network interface: it is one process reading one file. + +## Keys + +The footer lists the keys of the active tab. Everything in the footer also works with the mouse: tabs, the selection boxes of the Plots tab, tree nodes, table rows and scrolling. Ctrl+P opens Textual's command palette. + +**Everywhere** + +| key | action | +|---|---| +| `o` | open a file (the open screen) | +| `1` `2` `3` `4` | Overview, Plots, Records, Structure | +| `q` | quit | + +**Open screen** (`o`, or the start without a file) + +| key | action | +|---|---| +| Enter | in the path field: open the typed file, or re-root the tree at the typed folder; in the tree: open the selected file | +| Tab | move between the path field and the tree | +| Backspace | with the tree focused: go to the parent folder (in the path field it deletes a character) | +| Ctrl+A | with the tree focused: list every file, not only EVIO names (in the path field it moves the cursor home) | +| Escape | cancel, keep the current file | + +The tree lists folders and files whose names look like EVIO files; dot files are hidden. A file pyevio cannot read (not EVIO, an EVIO v4 file) is refused with the reason in the status line, and the current file stays open. + +**Records** + +| key | action | +|---|---| +| Up, Down, PageUp, PageDown | move the row cursor; past the last or first row of the page the next or previous page loads | +| `]` `[` | next and previous page of 500 records | +| Enter | open the record in the Structure tab | + +**Structure** + +| key | action | +|---|---| +| Up, Down | move between tree nodes; the detail panel follows | +| Enter | expand or collapse the node; on a `… N more` row, load the next page of children | +| Space | expand or collapse the node | +| `n` `p` | next and previous window of 64 raw words in the detail panel | + +**Plots** + +| key | action | +|---|---| +| `f` `r` `c` | file, ROC or channel level | +| `]` `[` | next and previous ROC | +| `}` `{` | next and previous port of the ROC | +| `+` `-` | next and previous channel; past channel 15 the next port's channel 0 follows (`=` also steps forward) | +| Tab | move the focus to the next plot or selection box | +| `s` | save the focused plot (else the first) as a PNG in the working directory | +| `S` | save every plot of the current level | + +`]` and `[` page the record table in the Records tab and step the ROC in the Plots tab; the keys of a tab are active only while that tab is shown. + +## What it shows + +The header names the file; the status line shows the analysis state (`analyzing 1,234 of 7,891 records, 20 s left`, `analysis done (7,891 records, cached)`) and, in red, the last error. Errors also pop up as a notification for a few seconds. + +### Overview + +Totals (records, events, stream frames, hits, hit rate, hits per frame, duration and live time, modules with their word counts, decode errors and warnings with the first message), "what stands out" (the error and warn checks, then the first decode messages; `all checks pass` otherwise), the checks table with the status coloured, the file facts (header layout, byte order, record counts declared and scanned, trailer position as the file header stores it, the record-scan checks in words) and one row per ROC with its modules, ports, hits, other-module words and empty banks. The pane scrolls; the screenshot shows its top. + +![Overview tab](images/console_gui_overview.svg) + +### Plots + +All histograms come from `pyevio stats`; the pane draws the bins it receives with [plotext](https://github.com/piccolomo/plotext) and rebuilds them on every resize. The row of selection boxes above the plots sets the level, the ROC, the port and the channel; the keys set the same things and the boxes follow. + +**File:** hits per frame, total hit rate over time (seconds from the first frame; empty bins are frames without hits or missing frames) and the occupancy heatmap of hits per ROC and payload port. A dash marks a port the ROC's 0x41 map does not list; the counts are printed in the cells when they fit (see [Limitations](#limitations)). + +![File-level plots](images/console_gui_plots_file.svg) + +**ROC:** the port × channel occupancy of the ROC, its hit rate over time, charge spectrum and hit time within the frame. + +![Per-ROC plots](images/console_gui_plots_roc.svg) + +**Channel:** hit rate, charge spectrum and time in frame of one channel; `+` and `-` step through the channels of the ROC port by port. + +The heatmap colour ramp is square-root scaled, as in the browser, so a few hot channels do not flatten the rest. + +### Records + +A paged table of the record headers: index, offset, size, events declared and found, header type, compression, last-record bit, index array, truncation, header quirks and walk errors; problem cells are red, quirks yellow. One page of 500 rows is loaded at a time, so a file of a million records costs one page of strings. The line above the table says which rows are shown; the trailer is the last row of the last page. Enter opens the record in the Structure tab. + +![Records tab](images/console_gui_records.svg) + +### Structure + +Left, the tree pyevio builds: file → records and trailer → events → banks and segments → hit words. Children load one page of 500 when a node is expanded; a page short of the total ends with a `… N more (press Enter to load)` row. Inside a stream frame the nodes are labeled by role as in the browser: stream info with its time-slice and aggregation-info (AIS) segments, ROC banks with ROC id and stream, ROC stream info with the payload-port map, payload banks with port, module and hit count, and the decoded hits (`hit 3 — ch 3 t 1232 ns q 14 `, with `FLAG` when bit 31 is set). Records with walk errors say so in their label. + +Right, the highlighted node: its id, every field of its header, its walk errors in red, the decoded payload-port map when it has one, and a hex dump of its raw words, 64 per window (`n` / `p`), eight per line with the byte offset of the line first. Record headers are read at their file offset; events and banks from their record's buffer, with a note when that buffer is a decompressed LZ4 or gzip record. Hits have fields but no words. + +![Structure tab](images/console_gui_structure.svg) + +## PNG export + +`s` writes the focused plot (the one with the highlighted border; Tab moves it) as a PNG in the current working directory, `S` every plot of the level. The name is the file's stem, the histogram and the selection: `sro_000791.evio.00000_hits_per_frame.png`, `sro_000791.evio.00000_charge_roc7_port1_ch3.png`. A notification shows the path. The PNGs are drawn by matplotlib with the Agg backend, so they work on a node without a display, at the histogram's full binning: the charge spectrum gets a logarithmic y axis, the occupancy a Blues colour map with the square-root scale, the counts in the cells, grey cells for unmapped ports and a colour bar. + +## Limitations + +- Plots have character resolution: a histogram with more bins than the plot is wide is rebinned to fit (the counts add up, the rate is averaged over the frames of the merged bins), and a plot narrower than 16 columns or lower than 6 rows stays blank. The PNG export keeps every bin. +- The charge spectrum has a linear y axis in the terminal; the PNG uses a logarithmic one, as the browser does. +- The counts in the occupancy heatmap are printed only when every count of the plot fits in its cell with a margin. With 16 ports or channels across and counts in the millions (`10.6M`, five characters) that takes a plot about 125 columns wide, i.e. a terminal of about 260 columns in the 2 × 2 grid; the screenshots above are at 260 × 50. Narrower, the cells show the colour only; the dash of an unmapped port is always shown. +- The detail column of the Structure tab cannot take the focus (a focusable widget inside a hidden tab would pull Textual back to that tab, see `pyevio/gui/structure.py`); it scrolls with the mouse wheel only. The tree and the record table scroll with the keys. +- The step keys of the Plots tab (`]` `[` `}` `{` `+` `-`) are not listed in the footer; the hint line next to the selection boxes lists them. + +## Known problems + +- The analysis of a file that is not in the cache fails with `ValueError: bad value(s) in fds_to_keep` when it runs with more than one worker (observed with Textual 8.2.8 and Python 3.12): Textual replaces `sys.stderr` while the app runs, and the multiprocessing resource tracker cannot start without a real stderr. Until this is fixed, run `pyevio gui FILE --workers 1` (one process, slower), or analyze the file in `pyevio web` or an earlier `pyevio gui --workers 1` run first: the cache is shared, so the viewer then opens it at once. diff --git a/docs/images/console_gui_open.svg b/docs/images/console_gui_open.svg new file mode 100644 index 0000000..6644804 --- /dev/null +++ b/docs/images/console_gui_open.svg @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +Overvi╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +━━━━━━━│Open an EVIO file — type a path and press Enter, or pick one below│━━━━━━━ +▼ file│▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎│ +├── ▼ │▊/data/evio-lib/corpus▎│ +│   ├─│▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎│ +│   │ ││ +│   │ │📂 corpus│ +│   │ │├── 📄 sro_000791.evio.00000.v6│ +│   │ │├── 📄 sro_000791.evio.00000.v6.lz4│ +│   │ │├── 📄 sro_000791.evio.00001.v6│ +│   │ │├── 📄 sro_000791.evio.00001.v6.lz4│ +│   │ │├── 📄 sro_000791.evio.00002.v6│ +│   │ │├── 📄 sro_000791.evio.00002.v6.lz4│ +│   │ │├── 📄 sro_000791.evio.00003.v6│ +│   │ │└── 📄 sro_000791.evio.00003.v6.lz4│ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ next +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ ││ +│   │ │Enter opens · Backspace goes to the parent folder · Ctrl+A shows every file · Escape cancels│ +│   │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +│   ├── ▶ event 1 — tag 0xFF60 stream frame, 45347 words   │ +▋│ + n Next words  p Previous words  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/docs/images/console_gui_overview.svg b/docs/images/console_gui_overview.svg new file mode 100644 index 0000000..fd35e3a --- /dev/null +++ b/docs/images/console_gui_overview.svg @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +╸━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +/data/evio-lib/corpus/sro_000791.evio.00000.v6 — analysis from cache, stats version 3 + +Totals +  records               7,891 + 1 trailer +  events                86,794 (86,794 stream frames, 0 other, 0 out of bounds) +  fADC250 hits          764,009,774 +  hit rate              134,316,473.3 Hz +  hits per frame        8,802.564 +  duration / live time  22.752 s / 5.688 s +  modules               fADC250 (764,009,774 words), DCRB (3,065,574,754 words) +  decode errors         0 +  decode warnings       0 + +What stands out +all checks pass + +Checks                                                                                                                                   +┏━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃check                   ┃ status ┃ value  ┃ detail                                                                                    ┃ +┡━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ +│header layout           │ info   │ v6     │ EVIO, version 6                                                                           │ +│trailer                 │ ok     │ yes    │                                                                                           │▃▃ +│record errors           │ ok     │ 0      │ records whose event walk stopped early                                                    │ +│events found            │ ok     │ 86,794 │ headers declare 86794                                                                     │ +│last-record bit         │ info   │ 0      │ records with the last-record bit set                                                      │ +│compressed records      │ info   │ 0      │                                                                                           │ +│records without index   │ info   │ 0      │                                                                                           │ +│out-of-bounds events    │ ok     │ 0      │ events whose range runs past the file                                                     │ +│stream frames           │ info   │ 86,794 │ of 86794 events; 0 other                                                                  │ +│frame stride            │ info   │ 4      │ most common frame-number step (4 = one stripe of a 4-way run)                             │ +│missing frames          │ ok     │ 0      │ counted in steps of the stride                                                            │ +│duplicate frames        │ ok     │ 0      │                                                                                           │ +│out-of-order frames     │ ok     │ 0      │                                                                                           │ +│timestamp-step outliers │ ok     │ 0      │ median step 65536 ticks                                                                   │ +│decode errors           │ ok     │ 0      │                                                                                           │ +│decode warnings         │ ok     │ 0      │                                                                                           │ +│flag words              │ ok     │ 0      │ hit words with bit 31 set                                                                 │ +│unmapped payload banks  │ ok     │ 0      │ ports absent from the 0x41 payload map, decoded as fADC250                                │ +│AIS entries identical   │ info   │ 86,794 │ of 86794 frames with an aggregation info segment: the segment repeats one stream's entry  │ +│                        │        │        │ in every slot; it does not list the streams                                               │ + o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/docs/images/console_gui_plots_file.svg b/docs/images/console_gui_plots_file.svg new file mode 100644 index 0000000..ab8ab0c --- /dev/null +++ b/docs/images/console_gui_plots_file.svg @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ +▊File▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all +▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ +╭─ Hits per frame — file ──────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — file ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│30k┤│││150M┤││ +││││││⠤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣀⣀⣀⣠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣠⠤⣄⣠⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤││ +││█████││││││ +││█████││││││ +││█████││││││ +│20k┤█████│││100M┤││ +││█████││││││ +││█████││││││ +││█████████││││││ +│10k┤█████████│││ 50M┤││ +││█████████││││││ +││█████████││││││ +││█████████████││││││ +││█████████████││││││ +│  0┤                                                                                                █████████████████████████│││   0┤││ +│└┬───────────────────────┬────────────────────────┬───────────────────────┬───────────────────────┬───────────────────────┘││└┬─────────────────────────┬──────────────────────────┬─────────────────────────┬─────────────────────────┬───────────────┘│ +│02000400060008000││05101520│ +│frameshits per frame││hit rate (Hz)time since the first frame (s)│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Occupancy (ROC × port) — file ──────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│ ROC 7┤█964k████1.33M██2.11M██762k████905k███1.02M██2.06M███1.01M██2.07M███730k███857k███1.42M███2.43M████0████2.1M██████0███││ +││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ ROC 9┤█1.66M███372k███1.26M██824k████935k███1.14M██678k████1.38M██1.66M█████–████1.51M████–█████2.95M████–████1.88M█████–███││ +│ROC 25┤█917k████804k███1.8M███281k████1.01M██666k███1.55M███970k███1.05M███858k███578k███1.96M███1.54M████0████2.55M█████0███││ +│ROC 27┤█1.67M███373k███1.26M██813k████946k███1.11M██591k████1.53M██1.59M█████–████1.58M████–█████3.15M████–████1.92M█████–███││ +│ROC 29┤█23.2M███25.7M██22.8M██26.2M███11.7M██21.6M██10.5M███22.1M██48.4M█████–████71.1M████–█████38.1M████–████36.9M█████–███││ +│ROC 44┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ROC 45┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +│ROC 46┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +│ROC 53┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +│ROC 54┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +│ROC 55┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ +││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ROC 84┤█24.3M████24M███22.7M██25.2M███10.6M██23.1M██9.52M███22.6M██45.3M█████–████52.1M████–██████39M█████–█████38M██████–███││ +│└───┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬───┘│ +│12345678910111213141516│ +│ROCpayload port│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ + f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/docs/images/console_gui_plots_roc.svg b/docs/images/console_gui_plots_roc.svg new file mode 100644 index 0000000..78c2375 --- /dev/null +++ b/docs/images/console_gui_plots_roc.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ +▊ROC▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all +▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ +╭─ Occupancy (port × channel) — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — ROC 7 ────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│ port 1┤█49.1k█████0████66.6k██73.7k██42.6k███72.7k██64.6k██70.8k███66.2k██87.6k██41.9k███56.9k██52.4k██110k███57.7k███51.6k█│││4M┤││ +│ port 2┤█88.1k███62.5k██80.9k██84.8k██77.1k███75.8k██65.4k██85.7k███102k███102k███78.4k███71.3k██90.6k██114k███82.4k███71.5k█││││⣀⣀⢀⣀⡀⢀⣀⡀⢀⣀⡀⣀⣀⣀⡀⣀⣀⢀⣀⡀⣀⣀⣀⡀⢀⣀⡀⢀⣀⡀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀││ +│ port 3┤█147k████143k███145k███110k███283k████279k███190k███235k████324k███242k███14.7k█████0██████0██████0██████0███████0███││││⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠈⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠁⠈⠉⠉⠉⠉⠁││ +│ port 4┤█57.7k███112k███84.3k██103k███1.83k███11.3k██20.8k██17.6k███19.5k██32.3k██40.7k███62.8k██57.2k██46.2k██50.2k███44.9k█│││3M┤││ +│ port 5┤██17k████20.9k██48.3k██17.6k██47.8k███47.9k██37.9k██41.1k███51.3k██75.1k██82.8k███92.5k██55.7k██102k███77.6k███89.4k█││││││ +│ port 6┤█40.3k████45k███48.7k██52.7k██56.7k███50.6k███94k███58.9k███52.5k██63.6k██71.1k███97.9k██62.5k██66.9k██70.4k███87.6k█││││││ +│ port 7┤█256k████270k███259k███241k███259k████275k███234k███188k████14.1k██1.89k██4.94k███5.25k██8.39k██13.3k██17.9k███11.6k█││││││ +│ port 9┤█955kk███139k███78.9k██84.1k██110kk███126k███145k███97.1k███143k███121kk██278kk███173kk██202kk██101k███105kk███214kk█│││2M┤││ +│port 10┤█23.4k███24.4k██35.6k██34.1k██39.4k███34.4k██37.3k██42.8k███44.2k██46.5k██48.8k███55.8k██65.8k██57.1k██70.5k███70.2k█││││││ +│port 11┤█131k████144k███163k█████0█████749████5.01k██1.95k██11.9k███18.6k██32.7k██48.7k███56.1k██49.5k██65.8k██53.2k███75.4k█││││││ +│port 12┤█80.7k███97.6k██128k███93.9k██193k████117k███105k███130k████168k███181k███131k██████0██████0██████0██████0███████0███│││1M┤││ +│port 13┤█157k████111k███123k███131k███165k████172k███136k███184k████142k███141k███152k████173k███173k███152k███165k████146k██││││││ +│port 14┤███0███████0██████0██████0██████0███████0██████0██████0███████0██████0██████0███████0██████0██████0██████0███████0███││││││ +│port 15┤███0█████51.9k██61.2k██58.2k██179k████215k███196k███204k████161k███192k███128k████188k███89.9k██151k███111k████109k██││││││ +│port 16┤███0███████0██████0██████0██████0███████0██████0██████0███████0██████0██████0███████0██████0██████0██████0███████0███│││ 0┤││ +│└───┬───────┬──────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬──────┬───────┬───┘││└┬──────────────────────────┬──────────────────────────┬─────────────────────────┬──────────────────────────┬───────────────┘│ +│0123456789101112131415││05101520│ +│payload portchannel││hit rate (Hz)time since the first frame (s)│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Charge — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Time in frame — ROC 7 ───────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│20M┤│││400k┤││ +││███││││││ +││███││││││ +│15M┤███│││300k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│10M┤███│││200k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ 5M┤███│││100k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│  0┤██████████████████████████████████                                                                                       │││   0┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│└┬────────────────────────────┬─────────────────────────────┬────────────────────────────┬────────────────────────────┬───┘││└┬────────────────────────────────────┬───────────────────────────────────┬────────────────────────────────────┬──────────┘│ +│02000400060008000││020k40k60k│ +│hitscharge (13-bit ADC units)││hitsns from the frame start│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ + f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/docs/images/console_gui_records.svg b/docs/images/console_gui_records.svg new file mode 100644 index 0000000..89df9b0 --- /dev/null +++ b/docs/images/console_gui_records.svg @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━━━━━━━━╸━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +rows 0—499 of 7,892 records  ·  Enter opens the record  ·  ] next page  [ previous page + #    offset      size (B)   events decl / found  type  compression  last-record bit  index  truncated  header quirk  errors  +   0  0x00000038  2,028,000  11 / 11              0     none         —                44 B   —          —             —       +   1  0x001EF218  1,984,692  11 / 11              0     none         —                44 B   —          —             —       +   2  0x003D3ACC  1,995,068  11 / 11              0     none         —                44 B   —          —             —      ▇▇ +   3  0x005BAC08  1,973,420  11 / 11              0     none         —                44 B   —          —             —       +   4  0x0079C8B4  1,970,972  11 / 11              0     none         —                44 B   —          —             —       +   5  0x0097DBD0  1,995,460  11 / 11              0     none         —                44 B   —          —             —       +   6  0x00B64E94  1,996,516  11 / 11              0     none         —                44 B   —          —             —       +   7  0x00D4C578  1,969,436  11 / 11              0     none         —                44 B   —          —             —       +   8  0x00F2D294  1,966,640  11 / 11              0     none         —                44 B   —          —             —       +   9  0x0110D4C4  1,973,984  11 / 11              0     none         —                44 B   —          —             —       +  10  0x012EF3A4  1,956,088  11 / 11              0     none         —                44 B   —          —             —       +  11  0x014CCC9C  1,953,812  11 / 11              0     none         —                44 B   —          —             —       +  12  0x016A9CB0  1,975,084  11 / 11              0     none         —                44 B   —          —             —       +  13  0x0188BFDC  1,955,728  11 / 11              0     none         —                44 B   —          —             —       +  14  0x01A6976C  1,988,448  11 / 11              0     none         —                44 B   —          —             —       +  15  0x01C4EECC  1,983,492  11 / 11              0     none         —                44 B   —          —             —       +  16  0x01E332D0  1,944,884  11 / 11              0     none         —                44 B   —          —             —       +  17  0x0200E004  1,994,800  11 / 11              0     none         —                44 B   —          —             —       +  18  0x021F5034  1,973,148  11 / 11              0     none         —                44 B   —          —             —       +  19  0x023D6BD0  1,957,604  11 / 11              0     none         —                44 B   —          —             —       +  20  0x025B4AB4  1,956,204  11 / 11              0     none         —                44 B   —          —             —       +  21  0x02792420  1,952,712  11 / 11              0     none         —                44 B   —          —             —       +  22  0x0296EFE8  1,945,124  11 / 11              0     none         —                44 B   —          —             —       +  23  0x02B49E0C  1,999,924  11 / 11              0     none         —                44 B   —          —             —       +  24  0x02D32240  1,970,052  11 / 11              0     none         —                44 B   —          —             —       +  25  0x02F131C4  1,980,108  11 / 11              0     none         —                44 B   —          —             —       +  26  0x030F6890  1,990,636  11 / 11              0     none         —                44 B   —          —             —       +  27  0x032DC87C  1,976,200  11 / 11              0     none         —                44 B   —          —             —       +  28  0x034BF004  1,975,888  11 / 11              0     none         —                44 B   —          —             —       +  29  0x036A1654  2,015,524  11 / 11              0     none         —                44 B   —          —             —       +  30  0x0388D778  1,960,308  11 / 11              0     none         —                44 B   —          —             —       +  31  0x03A6C0EC  1,976,624  11 / 11              0     none         —                44 B   —          —             —       +  32  0x03C4EA1C  1,967,952  11 / 11              0     none         —                44 B   —          —             —       +  33  0x03E2F16C  1,974,444  11 / 11              0     none         —                44 B   —          —             —       +  34  0x04011218  1,956,644  11 / 11              0     none         —                44 B   —          —             —       +  35  0x041EED3C  1,980,808  11 / 11              0     none         —                44 B   —          —             —       +  36  0x043D26C4  1,966,092  11 / 11              0     none         —                44 B   —          —             —       +  37  0x045B26D0  1,928,136  11 / 11              0     none         —                44 B   —          —             —       + ] Next page  [ Previous page  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/docs/images/console_gui_structure.svg b/docs/images/console_gui_structure.svg new file mode 100644 index 0000000..5d2110a --- /dev/null +++ b/docs/images/console_gui_structure.svg @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyevio + + + + + + + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▼ file — v6, 7891 records + trailer│node 'r0/e0/b120/b128/b140' +├── ▼ record 0 — 11 events, 2,028,000 B│kind          bank +│   ├── ▼ event 0 — tag 0xFF60 stream frame, 44956 words▁▁│structure     Segment +│   │   ├── ▶ stream info — tag 0xFF31  type 0x20  num 0  3│tag           0x0041 (65) +│   │   ├── ▼ ROC bank 44 stream 1 — tag 0x002C  type 0x10 │data_type     0x05 +│   │   │   ├── ▼ ROC stream info — tag 0xFF30  type 0x20  │num           — +│   │   │   │   ├── time slice — tag 0x0031  type 0x01  3 w│pad           2 +│   │   │   │   └── payload-port map — tag 0x0041  type 0x0│length        4 +│   │   │   ├── payload port 3 — tag 0x0003  type 0x00  num│offset        0x0140 (320) +│   │   │   ├── payload port 5 — tag 0x0005  type 0x00  num│size          20 +│   │   │   ├── payload port 7 — tag 0x0007  type 0x00  num│type_name     Unknown +│   │   │   ├── payload port 9 — tag 0x0009  type 0x00  num│is_container  no +│   │   │   ├── payload port 11 — tag 0x000B  type 0x00  nu│role          payload_map +│   │   │   ├── payload port 13 — tag 0x000D  type 0x00  nu│ +│   │   │   └── payload port 15 — tag 0x000F  type 0x00  nu│payload-port map +│   │   ├── ▶ ROC bank 44 stream 2 — tag 0x002C  type 0x10 │entry  port  module id  module +│   │   ├── ▶ ROC bank 45 stream 1 — tag 0x002D  type 0x10 │    0     3          1  DCRB +│   │   ├── ▶ ROC bank 45 stream 2 — tag 0x002D  type 0x10 │    1     5          1  DCRB +│   │   ├── ▶ ROC bank 46 stream 1 — tag 0x002E  type 0x10 │    2     7          1  DCRB +│   │   ├── ▶ ROC bank 46 stream 2 — tag 0x002E  type 0x10 │    3     9          1  DCRB +│   │   ├── ▶ ROC bank 53 stream 1 — tag 0x0035  type 0x10 │    4    11          1  DCRB +│   │   ├── ▶ ROC bank 53 stream 2 — tag 0x0035  type 0x10 │    5    13          1  DCRB +│   │   ├── ▶ ROC bank 54 stream 1 — tag 0x0036  type 0x10 │    6    15          1  DCRB +│   │   ├── ▶ ROC bank 54 stream 2 — tag 0x0036  type 0x10 │ +│   │   ├── ▶ ROC bank 55 stream 1 — tag 0x0037  type 0x10 │raw words +│   │   ├── ▶ ROC bank 55 stream 2 — tag 0x0037  type 0x10 │0x00000140  41850004 01850183 01890187 018d018b 0000018f +│   │   ├── ▶ ROC bank 7 stream 1 — tag 0x0007  type 0x10  │words 0–4 of 5, little-endian, offsets in the buffer of record 0  (n: next +│   │   ├── ▶ ROC bank 7 stream 2 — tag 0x0007  type 0x10  │64 words, p: previous) +│   │   ├── ▶ ROC bank 9 stream 1 — tag 0x0009  type 0x10  │ +│   │   ├── ▶ ROC bank 9 stream 2 — tag 0x0009  type 0x10  │ +│   │   ├── ▶ ROC bank 84 stream 1 — tag 0x0054  type 0x10 │ +│   │   ├── ▶ ROC bank 84 stream 2 — tag 0x0054  type 0x10 │ +│   │   ├── ▶ ROC bank 25 stream 1 — tag 0x0019  type 0x10 │ +│   │   ├── ▶ ROC bank 25 stream 2 — tag 0x0019  type 0x10 │ +│   │   ├── ▶ ROC bank 27 stream 1 — tag 0x001B  type 0x10 │ +│   │   ├── ▶ ROC bank 27 stream 2 — tag 0x001B  type 0x10 │ +│   │   ├── ▶ ROC bank 29 stream 1 — tag 0x001D  type 0x10 │ +│   │   └── ▶ ROC bank 29 stream 2 — tag 0x001D  type 0x10 │ +│   ├── ▶ event 1 — tag 0xFF60 stream frame, 45347 words│ +▋│ + n Next words  p Previous words  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + diff --git a/tests/gui/make_screenshots.py b/tests/gui/make_screenshots.py new file mode 100644 index 0000000..d1c7dfd --- /dev/null +++ b/tests/gui/make_screenshots.py @@ -0,0 +1,211 @@ +"""Regenerate the console viewer screenshots of docs/console_gui.md as SVG files. + +Not a test (pytest ignores the name). Run from the repository root: + + uv run python tests/gui/make_screenshots.py [FILE] [--out docs/images] [--size 140x45] [--plots-size 260x50] + +FILE defaults to the SRO corpus file; when it is unreadable the synthetic +stream file of the tests is written to a temporary folder and used instead. +The two Plots shots are taken at ``--plots-size``: the occupancy heatmap prints +its counts only when every count fits in its cell, which with 16 cells across +and counts in the millions takes a terminal of about 260 columns. + +The analysis runs before the app starts, through the session alone, and its +result goes to the default cache (``~/.cache/pyevio/stats``), so the app loads +it at once and a second run or ``pyevio web`` reuses it. (Under Textual the +worker pool of the analysis does not start; see "Known problems" in +docs/console_gui.md.) + +The app is driven headless through Textual's pilot, as the tests do, and each +screen is exported with ``App.export_screenshot(simplify=True)``: the SVG +holds the terminal cells as text, so it can be grepped for what it shows. +""" +import argparse +import asyncio +import sys +import tempfile +import time +from pathlib import Path + +from textual.widgets import Tree + +HERE = Path(__file__).resolve().parent +TESTS_DIR = HERE.parent +if str(TESTS_DIR) not in sys.path: + sys.path.insert(0, str(TESTS_DIR)) + +from pyevio.gui.app import OpenScreen, PyEvioGui # noqa: E402 +from pyevio.gui.session import Session # noqa: E402 + +CORPUS_FILE = Path("/data/evio-lib/corpus/sro_000791.evio.00000.v6") +DEFAULT_OUT = TESTS_DIR.parent / "docs" / "images" +ANALYSIS_TIMEOUT_S = 300 +PREFIX = "console_gui_" + + +def ensure_cached(path: Path) -> None: + """Run the analysis outside Textual (where its worker pool starts) so the app finds it in the cache.""" + session = Session() + session.open(path) + try: + deadline = time.monotonic() + ANALYSIS_TIMEOUT_S + while session.state not in ("done", "error", "cancelled"): + if time.monotonic() > deadline: + raise TimeoutError(f"the analysis of {path} did not finish in {ANALYSIS_TIMEOUT_S} s") + progress = session.progress() + print(f"\ranalyzing {progress['records_done']:,} of {progress['records_total']:,} records", end="", flush=True) + time.sleep(0.5) + progress = session.progress() + if progress["state"] != "done": + raise RuntimeError(f"the analysis of {path} ended in state {progress['state']}: {progress['error']}") + source = "from cache" if progress["cached"] else "done in {:.0f} s".format(progress["elapsed_s"]) + print(f"\ranalysis {source}") + finally: + try: + session.close() + except BufferError: + pass + + +async def wait_for(pilot, predicate, timeout_s, what): + deadline = time.monotonic() + timeout_s + while not predicate(): + if time.monotonic() > deadline: + raise TimeoutError(f"{what} did not happen in {timeout_s} s") + await pilot.pause(0.1) + + +async def settle(pilot, n=3): + for _ in range(n): + await pilot.pause(0.1) + + +def save(app, out_dir: Path, name: str) -> Path: + path = out_dir / f"{PREFIX}{name}.svg" + path.write_text(app.export_screenshot(simplify=True), encoding="utf-8") + print(f"{path} {path.stat().st_size / 1024:.0f} KB") + return path + + +def first_child(node, **match): + """The first child whose data has every ``match`` item.""" + for child in node.children: + data = child.data or {} + if all(data.get(key) == value for key, value in match.items()): + return child + return None + + +async def open_app(path: Path, size: tuple): + session = Session() # the default cache dir, shared with pyevio web + app = PyEvioGui(session, start_path=path) + pilot_cm = app.run_test(size=size) + pilot = await pilot_cm.__aenter__() + await wait_for(pilot, lambda: session.state == "done", 60, "the cached analysis") + await wait_for(pilot, lambda: app.overview.summary is not None, 30, "stats_ready") + await settle(pilot) + return app, pilot, pilot_cm, session + + +async def close_app(pilot_cm, session) -> None: + await pilot_cm.__aexit__(None, None, None) + try: + session.close() + except BufferError: + pass + + +async def shoot_main(path: Path, out_dir: Path, size: tuple) -> None: + """Overview, Records, Structure and the open screen at ``size``.""" + app, pilot, pilot_cm, session = await open_app(path, size) + try: + save(app, out_dir, "overview") + + await pilot.press("3") + await settle(pilot) + save(app, out_dir, "records") + + # Structure: the first stream frame of record 0 expanded, its first ROC bank and ROC stream info expanded, + # the cursor on the payload-port map so the detail panel shows the fields, the decoded map and the raw words. + await pilot.press("4") + await settle(pilot) + tree = app.query_one("#structure-tree", Tree) + app.structure.show_node("r0/e0") + await wait_for(pilot, lambda: tree.cursor_node.data.get("_total") is not None, 30, "the frame's children") + frame = tree.cursor_node + roc_bank = first_child(frame, role="roc_bank") + if roc_bank is not None: + app.structure.show_node(roc_bank.data["id"]) + await wait_for(pilot, lambda: roc_bank.data.get("_total") is not None, 30, "the ROC bank's children") + info = first_child(roc_bank, role="roc_stream_info") + if info is not None: + app.structure.show_node(info.data["id"]) + await wait_for(pilot, lambda: info.data.get("_total") is not None, 30, "the ROC stream info's children") + payload_map = first_child(info, role="payload_map") + if payload_map is not None: + app.structure.show_node(payload_map.data["id"]) + await settle(pilot) + save(app, out_dir, "structure") + + # The open screen, rooted at the file's folder. + await pilot.press("o") + await wait_for(pilot, lambda: isinstance(app.screen, OpenScreen), 10, "the open screen") + await settle(pilot) + save(app, out_dir, "open") + await pilot.press("escape") + await settle(pilot) + finally: + await close_app(pilot_cm, session) + + +async def shoot_plots(path: Path, out_dir: Path, size: tuple) -> None: + """The Plots tab at file level and at ROC level, at ``size``.""" + app, pilot, pilot_cm, session = await open_app(path, size) + try: + await pilot.press("2") + await settle(pilot) + save(app, out_dir, "plots_file") + await pilot.press("r") + await settle(pilot) + save(app, out_dir, "plots_roc") + finally: + await close_app(pilot_cm, session) + + +def parse_size(text: str) -> tuple: + columns, rows = (int(part) for part in text.lower().split("x")) + return columns, rows + + +def run(path: Path, out_dir: Path, size: tuple, plots_size: tuple) -> None: + print(f"file: {path}") + ensure_cached(path) + asyncio.run(shoot_main(path, out_dir, size)) + asyncio.run(shoot_plots(path, out_dir, plots_size)) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("file", nargs="?", default=str(CORPUS_FILE)) + parser.add_argument("--out", default=str(DEFAULT_OUT)) + parser.add_argument("--size", default="140x45", help="terminal columns x rows (default 140x45)") + parser.add_argument("--plots-size", default="260x50", help="terminal size of the two Plots shots (default 260x50)") + args = parser.parse_args() + out_dir = Path(args.out) + out_dir.mkdir(parents=True, exist_ok=True) + size, plots_size = parse_size(args.size), parse_size(args.plots_size) + + path = Path(args.file) + if path.is_file(): + run(path, out_dir, size, plots_size) + return + print(f"{path} is not readable; using the synthetic stream file of the tests", file=sys.stderr) + from test_stream_stats import write_synthetic_file + + with tempfile.TemporaryDirectory() as folder: + synthetic, _, _ = write_synthetic_file(Path(folder) / "synthetic.evio") + run(Path(synthetic), out_dir, size, plots_size) + + +if __name__ == "__main__": + main() From bd43176c24f5b3e35608f48f5eeeeabf9dae5dff Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:08:02 -0400 Subject: [PATCH 54/65] Start the multiprocessing services before Textual captures stderr In the real `pyevio gui`, the analysis of a file that was not in the cache failed with "ValueError: bad value(s) in fds_to_keep" whenever it ran with more than one worker, which is the default. Textual replaces sys.stderr with an object whose fileno() is -1 while the app runs; the multiprocessing resource tracker passes sys.stderr.fileno() to the process it spawns on first use, and fork_exec rejects the -1. The web server never captures stderr, so neither it nor the pilot tests (one worker) showed it. stream_stats.start_worker_services() starts the resource tracker and the forkserver once; `pyevio gui` calls it before the app starts, and compute_stream_stats calls it before creating its pool, pointing sys.stderr at the process's original stderr for the start when the current one has no usable descriptor. A regression test runs a fresh interpreter with a captured stderr and two workers; the "Known problems" section the documentation had to carry is gone. F63. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- docs/console_gui.md | 3 --- pyevio/cli/gui.py | 2 ++ pyevio/stream_stats.py | 31 +++++++++++++++++++++++++++++++ tests/test_stream_stats.py | 25 +++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/docs/console_gui.md b/docs/console_gui.md index b52e3c2..1109a9c 100644 --- a/docs/console_gui.md +++ b/docs/console_gui.md @@ -140,6 +140,3 @@ Right, the highlighted node: its id, every field of its header, its walk errors - The detail column of the Structure tab cannot take the focus (a focusable widget inside a hidden tab would pull Textual back to that tab, see `pyevio/gui/structure.py`); it scrolls with the mouse wheel only. The tree and the record table scroll with the keys. - The step keys of the Plots tab (`]` `[` `}` `{` `+` `-`) are not listed in the footer; the hint line next to the selection boxes lists them. -## Known problems - -- The analysis of a file that is not in the cache fails with `ValueError: bad value(s) in fds_to_keep` when it runs with more than one worker (observed with Textual 8.2.8 and Python 3.12): Textual replaces `sys.stderr` while the app runs, and the multiprocessing resource tracker cannot start without a real stderr. Until this is fixed, run `pyevio gui FILE --workers 1` (one process, slower), or analyze the file in `pyevio web` or an earlier `pyevio gui --workers 1` run first: the cache is shared, so the viewer then opens it at once. diff --git a/pyevio/cli/gui.py b/pyevio/cli/gui.py index 55d4c44..bee8505 100644 --- a/pyevio/cli/gui.py +++ b/pyevio/cli/gui.py @@ -23,7 +23,9 @@ def gui_command(path, cache_dir, workers): click.echo(INSTALL_HINT, err=True) sys.exit(1) from pyevio.gui.session import Session + from pyevio.stream_stats import start_worker_services + start_worker_services() # before Textual captures stderr: the resource tracker needs a real one to start (F63) target = Path(path) session = Session(cache_dir=Path(cache_dir) if cache_dir else None, workers=workers) app = PyEvioGui(session, start_path=target if target.is_file() else None, start_dir=target if target.is_dir() else target.parent) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index d35c223..e84f2cc 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -22,9 +22,11 @@ Trailer records (header type 3) are skipped; events whose range runs past the file are counted, never read. """ +import io import json import multiprocessing import os +import sys import struct import time from dataclasses import dataclass, field, asdict, fields @@ -293,6 +295,34 @@ def merge(self, other: "Accumulator") -> None: _worker_file: Optional[EvioFile] = None +def start_worker_services() -> None: + """Start the forkserver and the multiprocessing resource tracker, with a real stderr if the current one has none. + + The resource tracker hands ``sys.stderr.fileno()`` to the process it spawns. A program that + captures stderr (Textual replaces it with an object whose ``fileno()`` is -1 while the app + runs) makes that spawn fail with ``ValueError: bad value(s) in fds_to_keep`` on the first + pool (F63). Both services start once per process and stay up, so ``pyevio gui`` calls this + before the app starts; ``compute_stream_stats`` calls it too, pointing ``sys.stderr`` at the + process's original stderr for the few milliseconds the start takes when the current one is + unusable. Harmless when the services already run. + """ + from multiprocessing import forkserver, resource_tracker + + try: + usable = sys.stderr is not None and sys.stderr.fileno() >= 0 + except (AttributeError, OSError, ValueError, io.UnsupportedOperation): + usable = False + captured, original = sys.stderr, sys.__stderr__ + if not usable and original is not None: + sys.stderr = original + try: + resource_tracker.ensure_running() + forkserver.ensure_running() + finally: + if not usable and original is not None: + sys.stderr = captured + + def _init_worker(path: str) -> None: global _worker_file _worker_file = EvioFile(path) @@ -490,6 +520,7 @@ def compute_stream_stats(path: str, workers: Optional[int] = None, rate_bins: in records_done = 0 # forkserver: a forked copy of a multi-threaded parent (numpy, pytest) may deadlock; workers re-import pyevio instead. context = multiprocessing.get_context("forkserver") + start_worker_services() # Leaving the `with` block (also by StatsCancelled) terminates the workers. with context.Pool(workers, initializer=_init_worker, initargs=(path,)) as pool: for start, end, result in pool.imap_unordered(_process_range, tasks): diff --git a/tests/test_stream_stats.py b/tests/test_stream_stats.py index f86f323..fcb0ddc 100644 --- a/tests/test_stream_stats.py +++ b/tests/test_stream_stats.py @@ -191,3 +191,28 @@ def test_corpus_first_200_records_match_decoder(): rate = stats.rate_hz() weighted_mean = (rate * stats.frames_per_rate_bin).sum() / stats.frames_per_rate_bin.sum() assert np.isclose(weighted_mean, stats.n_hits / stats.live_time_s, rtol=1e-9) + + +def test_pool_starts_under_a_captured_stderr(tmp_path): + """F63: Textual replaces sys.stderr with an object whose fileno() is -1; the resource tracker's spawn then failed. + + Runs in a fresh interpreter because the tracker and the forkserver start once per process: + this pytest process has them running already, so the failure cannot show here. + """ + import subprocess + import sys + + path, expected_hits, _ = write_synthetic_file(tmp_path / "synthetic.evio") + script = tmp_path / "captured_stderr.py" + script.write_text( + "import io, sys\n" + "from pyevio import stream_stats\n" + "class Capture(io.TextIOBase):\n" + " def write(self, s): return len(s)\n" + " def fileno(self): return -1\n" + "if __name__ == '__main__':\n" + " sys.stderr = Capture()\n" + f" print(stream_stats.compute_stream_stats({str(path)!r}, workers=2).n_hits)\n" + ) + result = subprocess.run([sys.executable, str(script)], capture_output=True, text=True, timeout=120) + assert result.returncode == 0 and result.stdout.strip() == str(expected_hits), result.stdout + result.stderr From 84ab87fc16fb0f1f11a87e4ba708bdd693abf935 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:08:02 -0400 Subject: [PATCH 55/65] Console viewer: honest open-screen hint, "scanning" status before the record count The open screen's hint promised Backspace and Ctrl+A unconditionally, but the path input has the focus at start and binds both keys itself; they reach the screen only with the tree focused. The hint says so. While the analysis still scans the record headers, the status strip said "analyzing 0 of 0 records"; it says "scanning the records" until the total is known. A test predicate whose first clause was always true now waits on the session alone. F66, F67. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- pyevio/gui/app.py | 5 ++++- tests/gui/test_app.py | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pyevio/gui/app.py b/pyevio/gui/app.py index 15db356..3c3b556 100644 --- a/pyevio/gui/app.py +++ b/pyevio/gui/app.py @@ -79,7 +79,7 @@ def compose(self) -> ComposeResult: yield Label("Open an EVIO file — type a path and press Enter, or pick one below") yield Input(value=str(self.root), placeholder="path to a file or folder", id="open-path") yield EvioDirectoryTree(self.root, id="open-tree") - yield Label("Enter opens · Backspace goes to the parent folder · Ctrl+A shows every file · Escape cancels", id="open-hint") + yield Label("Enter opens · in the tree (Tab): Backspace goes to the parent folder, Ctrl+A shows every file · Escape cancels", id="open-hint") def reroot(self, folder: Path) -> None: self.root = folder @@ -278,6 +278,9 @@ def _poll(self) -> None: if progress["error"]: self.show_error(progress["error"]) return + if not progress["records_total"]: + status.show(f"{name} — scanning the records…", None) + return eta = f", {progress['eta_s']:.0f} s left" if progress["eta_s"] else "" status.show(f"{name} — analyzing {progress['records_done']:,} of {progress['records_total']:,} records{eta}", progress["fraction"]) diff --git a/tests/gui/test_app.py b/tests/gui/test_app.py index 71d0f2c..8d5f248 100644 --- a/tests/gui/test_app.py +++ b/tests/gui/test_app.py @@ -9,7 +9,6 @@ from pyevio.gui.app import OpenScreen, PyEvioGui, StatusStrip # noqa: E402 from pyevio.gui.overview import OverviewPane # noqa: E402 from pyevio.gui.records import RecordsPane # noqa: E402 -from pyevio.gui.structure import StructurePane # noqa: E402 def status_text(app): @@ -76,7 +75,6 @@ async def test_start_without_a_file_shows_the_open_screen(session, synthetic): assert "No file open" in status_text(app) app.screen.query_one("#open-path", Input).value = str(synthetic["path"]) await pilot.press("enter") - await pilot_wait(pilot, lambda: app.query_one(StructurePane).query_one("#structure-path", Static).render() is not None - and session.is_open, what="file to open") + await pilot_wait(pilot, lambda: session.is_open, what="file to open") await pilot_wait(pilot, lambda: app.query_one(OverviewPane).summary is not None, what="stats_ready") assert "analysis done" in status_text(app) From 43d4a4d3d6431a86666d3e892d1b5f47088897d3 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:13:53 -0400 Subject: [PATCH 56/65] Add rust/evio-tui, a minimal terminal viewer, in a cargo workspace rust/ becomes a workspace of evio-stream and evio-tui; the lock file moves to the root and the release profile (debug = 1) moves with it, the only place cargo reads profiles from. The library's code and dependencies are unchanged. evio-tui FILE scans the file on a background thread with RecordReader and lists the records as they arrive, with the full header of the selected one and the checks in the status line; Enter opens a record by seeking a fresh reader to the offset noted in the scan (a record header starts every record in both the v6 and the SRO layouts, so no layout hint is needed) and lists its events; Enter again shows the bank tree and the words of an event, and f the fADC250 frame summary. State, formatting and the tree are separate from the drawing and are what the tests drive: unit tests, TestBackend renders of the golden files, and a harness on the corpus files (record 7000 opens in under a millisecond on the converted and the raw file). The rich viewers stay in Python (D27). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- rust/Cargo.lock | 1793 ++++++++++++++++++++++++++ rust/Cargo.toml | 9 + rust/evio-stream/Cargo.lock | 71 - rust/evio-stream/Cargo.toml | 5 +- rust/evio-tui/Cargo.toml | 14 + rust/evio-tui/src/access.rs | 33 + rust/evio-tui/src/format.rs | 381 ++++++ rust/evio-tui/src/lib.rs | 23 + rust/evio-tui/src/main.rs | 122 ++ rust/evio-tui/src/scan.rs | 170 +++ rust/evio-tui/src/state.rs | 612 +++++++++ rust/evio-tui/src/tree.rs | 178 +++ rust/evio-tui/src/ui.rs | 345 +++++ rust/evio-tui/tests/corpus_access.rs | 209 +++ rust/evio-tui/tests/render.rs | 178 +++ 15 files changed, 4069 insertions(+), 74 deletions(-) create mode 100644 rust/Cargo.lock create mode 100644 rust/Cargo.toml delete mode 100644 rust/evio-stream/Cargo.lock create mode 100644 rust/evio-tui/Cargo.toml create mode 100644 rust/evio-tui/src/access.rs create mode 100644 rust/evio-tui/src/format.rs create mode 100644 rust/evio-tui/src/lib.rs create mode 100644 rust/evio-tui/src/main.rs create mode 100644 rust/evio-tui/src/scan.rs create mode 100644 rust/evio-tui/src/state.rs create mode 100644 rust/evio-tui/src/tree.rs create mode 100644 rust/evio-tui/src/ui.rs create mode 100644 rust/evio-tui/tests/corpus_access.rs create mode 100644 rust/evio-tui/tests/render.rs diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 0000000..dbf06d9 --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,1793 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + +[[package]] +name = "cc" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "compact_str" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.13.2", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csscolorparser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" +dependencies = [ + "lab", + "phf", +] + +[[package]] +name = "darling" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 3.0.8", +] + +[[package]] +name = "darling_macro" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +dependencies = [ + "darling_core", + "quote", + "syn 3.0.8", +] + +[[package]] +name = "deltae" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "either" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", +] + +[[package]] +name = "evio-stream" +version = "0.1.0" +dependencies = [ + "flate2", + "lz4_flex", +] + +[[package]] +name = "evio-tui" +version = "0.1.0" +dependencies = [ + "crossterm", + "evio-stream", + "ratatui", +] + +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set", + "regex", +] + +[[package]] +name = "filedescriptor" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" +dependencies = [ + "libc", + "thiserror 1.0.69", + "winapi", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" + +[[package]] +name = "finl_unicode" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bb028c8b4148c9ee0cca68fcd9add6044e81d3619f48577ddf13a263d047a2" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indoc" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a37b2691796cffeb8a8cd305ac66e65841559f147f4e63231d0eafa4db5384d1" +dependencies = [ + "rustversion", +] + +[[package]] +name = "instability" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3b5acc1e2fd9375041a388da33d1eb8aed5f7a8c0dd3543e3ea2805adfbe20" +dependencies = [ + "darling", + "indoc", + "proc-macro2", + "quote", + "syn 3.0.8", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "kasuari" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +dependencies = [ + "hashbrown 0.16.1", + "portable-atomic", + "thiserror 2.0.21", +] + +[[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + +[[package]] +name = "lazy_static" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" + +[[package]] +name = "libc" +version = "0.2.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "line-clipping" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e752191d037c44ad111a8caa762921926658402f01cc1253f7bef2020ece4f5e" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "lru" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9ac18847474e638e3702b76c65d4eb93428471a74778ef0f1be711717f89b5" +dependencies = [ + "hashbrown 0.17.1", +] + +[[package]] +name = "lz4_flex" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" + +[[package]] +name = "mac_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0581a75c45969c63afd2bb87b1d8b25cfcc556c7a918cf9bb13b0fe8d2381" +dependencies = [ + "nix 0.31.3", + "windows-sys", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memmem" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.13.2", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags 2.13.2", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "palette" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64" +dependencies = [ + "approx", + "libm", + "palette_derive", + "palette_math", +] + +[[package]] +name = "palette_derive" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "palette_math" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12" +dependencies = [ + "libm", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pest" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa" +dependencies = [ + "memchr", + "psm", + "stacker", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 3.0.8", +] + +[[package]] +name = "pest_meta" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1" +dependencies = [ + "pest", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "powerfmt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "ratatui" +version = "0.30.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3274ba0a2c5e1bcad2a2005d20f4dc59dad26b2eb0940fb094500dba4099d57d" +dependencies = [ + "instability", + "ratatui-core", + "ratatui-crossterm", + "ratatui-macros", + "ratatui-termina", + "ratatui-termwiz", + "ratatui-widgets", + "serde", +] + +[[package]] +name = "ratatui-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c" +dependencies = [ + "bitflags 2.13.2", + "compact_str", + "critical-section", + "hashbrown 0.17.1", + "itertools", + "kasuari", + "lru", + "palette", + "serde", + "strum", + "thiserror 2.0.21", + "unicode-segmentation", + "unicode-truncate", + "unicode-width", +] + +[[package]] +name = "ratatui-crossterm" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567584a3b0e6a8203c23de40b4861497266725eb5363dbfd18a1edd603cca9f0" +dependencies = [ + "cfg-if", + "crossterm", + "instability", + "ratatui-core", +] + +[[package]] +name = "ratatui-macros" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7dc68daa7498a43e4d68e0eb078427e10c38fbcfbb1e42d955f1fa2140d814" +dependencies = [ + "ratatui-core", + "ratatui-widgets", +] + +[[package]] +name = "ratatui-termina" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0bf912d9e66f057a759d92e386a280ea886b352ab757d6ac4d653c7ed2c43c2" +dependencies = [ + "instability", + "ratatui-core", + "termina", +] + +[[package]] +name = "ratatui-termwiz" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf03e0380b7744054d6cb74224fe3adf062a029754933f575ca1e3b4c2ce977" +dependencies = [ + "ratatui-core", + "termwiz", +] + +[[package]] +name = "ratatui-widgets" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1" +dependencies = [ + "bitflags 2.13.2", + "hashbrown 0.17.1", + "indoc", + "instability", + "itertools", + "line-clipping", + "ratatui-core", + "serde", + "strum", + "time", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags 2.13.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.8", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "stacker" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01016da373cd8f7ef12624f796309f5c31ba8d646dd08856c02cd741d823c622" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "termina" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e" +dependencies = [ + "bitflags 2.13.2", + "parking_lot", + "rustix", + "signal-hook", + "windows-sys", +] + +[[package]] +name = "terminfo" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" +dependencies = [ + "fnv", + "nom", + "phf", + "phf_codegen", +] + +[[package]] +name = "termios" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" +dependencies = [ + "libc", +] + +[[package]] +name = "termwiz" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" +dependencies = [ + "anyhow", + "base64", + "bitflags 2.13.2", + "fancy-regex", + "filedescriptor", + "finl_unicode", + "fixedbitset", + "hex", + "lazy_static", + "libc", + "log", + "memmem", + "nix 0.29.0", + "num-derive", + "num-traits", + "ordered-float", + "pest", + "pest_derive", + "phf", + "sha2", + "signal-hook", + "siphasher", + "terminfo", + "termios", + "thiserror 1.0.69", + "ucd-trie", + "unicode-segmentation", + "vtparse", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-color-types", + "wezterm-dynamic", + "wezterm-input-types", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl 2.0.21", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.8", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde_core", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicode-ident" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "unicode-truncate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" +dependencies = [ + "itertools", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" +dependencies = [ + "atomic", + "getrandom 0.4.3", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vtparse" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.8", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wezterm-bidi" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" +dependencies = [ + "log", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-blob-leases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" +dependencies = [ + "getrandom 0.3.4", + "mac_address", + "sha2", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "wezterm-color-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" +dependencies = [ + "csscolorparser", + "deltae", + "lazy_static", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-dynamic" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" +dependencies = [ + "log", + "ordered-float", + "strsim", + "thiserror 1.0.69", + "wezterm-dynamic-derive", +] + +[[package]] +name = "wezterm-dynamic-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-input-types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" +dependencies = [ + "bitflags 1.3.2", + "euclid", + "lazy_static", + "serde", + "wezterm-dynamic", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..ddd5256 --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] +resolver = "2" +members = ["evio-stream", "evio-tui"] + +# Cargo reads profiles from the workspace root only (a member's profile is +# ignored with a warning), so evio-stream's release profile lives here. +[profile.release] +# Line tables for `perf`; no effect on speed. +debug = 1 diff --git a/rust/evio-stream/Cargo.lock b/rust/evio-stream/Cargo.lock deleted file mode 100644 index cd4b7f4..0000000 --- a/rust/evio-stream/Cargo.lock +++ /dev/null @@ -1,71 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "cfg-if" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" - -[[package]] -name = "crc32fast" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "evio-stream" -version = "0.1.0" -dependencies = [ - "flate2", - "lz4_flex", -] - -[[package]] -name = "flate2" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" -dependencies = [ - "crc32fast", - "miniz_oxide", - "zlib-rs", -] - -[[package]] -name = "lz4_flex" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" - -[[package]] -name = "miniz_oxide" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "simd-adler32" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" - -[[package]] -name = "zlib-rs" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" diff --git a/rust/evio-stream/Cargo.toml b/rust/evio-stream/Cargo.toml index 3a129e2..6ea98af 100644 --- a/rust/evio-stream/Cargo.toml +++ b/rust/evio-stream/Cargo.toml @@ -14,6 +14,5 @@ lz4_flex = { version = "0.11", default-features = false, features = ["std", "saf # gzip (and zlib) decompression for records with compression type 3. flate2 = "1.1" -[profile.release] -# Line tables for `perf`; no effect on speed. -debug = 1 +# The release profile (debug = 1 for `perf`) is set in the workspace root +# Cargo.toml, the only place cargo reads profiles from. diff --git a/rust/evio-tui/Cargo.toml b/rust/evio-tui/Cargo.toml new file mode 100644 index 0000000..cb776e4 --- /dev/null +++ b/rust/evio-tui/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "evio-tui" +version = "0.1.0" +edition = "2021" +description = "Minimal terminal viewer for EVIO v6 files and JLab SRO streams" +license = "MIT" +publish = false + +[dependencies] +evio-stream = { path = "../evio-stream" } +# Terminal drawing (widgets, buffers, the test backend). +ratatui = "0.30" +# Raw mode, the alternate screen and key events. +crossterm = "0.29" diff --git a/rust/evio-tui/src/access.rs b/rust/evio-tui/src/access.rs new file mode 100644 index 0000000..2041ee6 --- /dev/null +++ b/rust/evio-tui/src/access.rs @@ -0,0 +1,33 @@ +//! Random access to one record of a file. +//! +//! The library reader is forward-only, but every layout it reads starts +//! each record with a record header: a 14-word v6 header (which a fresh +//! reader takes for the `v6-records` layout) or an 8-word SRO block header +//! (`sro-8word`). So a file seeked to a record offset noted during the scan +//! and handed to [`RecordReader::new`] yields that record first, with no +//! layout hint and no second pass over the file. + +use std::fs::File; +use std::io::{Seek, SeekFrom}; +use std::path::Path; + +use evio_stream::{Record, RecordReader}; + +/// Read the record whose header starts at `offset`. The returned record's +/// own `index` and `offset` are relative to the fresh reader (0); callers +/// keep the scan's numbers. +pub fn load_record(path: &Path, offset: u64) -> Result { + let mut file = File::open(path).map_err(|e| format!("open {}: {e}", path.display()))?; + file.seek(SeekFrom::Start(offset)) + .map_err(|e| format!("seek to 0x{offset:X}: {e}"))?; + let mut reader = + RecordReader::new(file).map_err(|e| format!("no record header at 0x{offset:X}: {e}"))?; + match reader.next_record() { + Ok(Some(record)) => Ok(record), + Ok(None) => Err(match reader.bad_record_header() { + Some(bad) => format!("no record at 0x{offset:X}: {}", bad.message), + None => format!("no record at 0x{offset:X}"), + }), + Err(e) => Err(format!("record at 0x{offset:X}: {e}")), + } +} diff --git a/rust/evio-tui/src/format.rs b/rust/evio-tui/src/format.rs new file mode 100644 index 0000000..3c2e85f --- /dev/null +++ b/rust/evio-tui/src/format.rs @@ -0,0 +1,381 @@ +//! Text for every cell, line and panel the screens show. Nothing here +//! touches the terminal, so unit tests check the strings directly. + +use evio_stream::bank::data_type; +use evio_stream::fadc250::{module_name, STREAM_EVENT_TAG}; +use evio_stream::{Frame, StructureKind}; + +use crate::scan::{RecordSummary, ScanStart}; +use crate::state::{EventRow, ScanProgress}; +use crate::tree::{TreeItem, TreeRow}; + +/// Words shown per hex row. +pub const HEX_WORDS_PER_ROW: usize = 8; + +/// Column titles of the records table; see [`record_cells`]. +pub const RECORD_COLUMNS: [&str; 9] = [ + "index", "offset", "bytes", "type", "events", "found", "compress", "trunc", "errors", +]; + +/// Column titles of the events table; see [`event_cells`]. +pub const EVENT_COLUMNS: [&str; 6] = ["event", "words", "tag", "type", "num", "note"]; + +/// Column titles of the bank tree table; see [`tree_cells`]. +pub const TREE_COLUMNS: [&str; 6] = ["structure", "tag", "type", "num", "length", "words"]; + +/// `1.23 GB`, `456.7 MB`, `12.3 kB`, `99 B`. +pub fn human_bytes(bytes: u64) -> String { + let b = bytes as f64; + if bytes >= 1_000_000_000 { + format!("{:.2} GB", b / 1e9) + } else if bytes >= 1_000_000 { + format!("{:.1} MB", b / 1e6) + } else if bytes >= 1_000 { + format!("{:.1} kB", b / 1e3) + } else { + format!("{bytes} B") + } +} + +/// The cells of one records-table row. +pub fn record_cells(s: &RecordSummary) -> [String; 9] { + let h = &s.header; + [ + s.index.to_string(), + format!("0x{:X}", s.offset), + s.declared_bytes().to_string(), + s.kind_name().to_string(), + h.event_count.to_string(), + s.events_found.to_string(), + h.compression.name(), + if s.is_truncated { "yes" } else { "" }.to_string(), + if s.error_count > 0 { + s.error_count.to_string() + } else { + String::new() + }, + ] +} + +/// The side panel of a record: every header field. +pub fn record_header_lines(s: &RecordSummary) -> Vec { + let h = &s.header; + let mut lines = vec![ + format!("record {} at 0x{:X}", s.index, s.offset), + format!( + "record length {} words ({} bytes)", + h.record_length, + s.declared_bytes() + ), + format!("present {} bytes", s.present_bytes), + format!("record number {}", h.record_number), + format!("header length {} words", h.header_length), + format!("header type {} ({})", h.header_type, s.kind_name()), + format!("version {}", h.version), + format!( + "events {} declared, {} found", + h.event_count, s.events_found + ), + format!("index array {} bytes", h.index_array_length), + format!("user header {} bytes", h.user_header_length), + format!("uncompressed {} bytes", h.uncompressed_data_length), + format!( + "compression {} ({} words)", + h.compression.name(), + h.compressed_data_length + ), + format!("bit info 0x{:05X}", h.bit_info), + format!("event type {}", h.event_type_name()), + format!( + "last / dict / first {} / {} / {}", + h.is_last_record, h.has_dictionary, h.has_first_event + ), + format!("pad1/2/3 {} {} {}", h.pad1, h.pad2, h.pad3), + format!("user register 1 0x{:016x}", h.user_register1), + format!("user register 2 0x{:016x}", h.user_register2), + format!("truncated {}", s.is_truncated), + ]; + if s.error_count > 0 { + lines.push(format!("errors {}", s.error_count)); + for e in &s.errors { + lines.push(format!(" {e}")); + } + } + lines +} + +/// The file line under the title: layout, byte order, file type. +pub fn file_line(start: Option<&ScanStart>) -> String { + match start { + Some(s) => { + let h = &s.file_header; + let mut line = format!( + "layout {} byte order {} file type {}", + s.layout, s.order, h.file_type + ); + if h.header_length > 0 { + line.push_str(&format!( + " records declared {} dict {} first event {} trailer index {}", + h.record_count, h.has_dictionary, h.has_first_event, h.has_trailer + )); + } + line + } + None => "opening...".to_string(), + } +} + +/// The status line: progress while the scan runs, the checks once it ends. +pub fn status_line(scan: &ScanProgress) -> String { + if let Some(failed) = &scan.failed { + return format!("scan failed: {failed}"); + } + let elapsed = scan.elapsed_s(); + let rate = scan.bytes as f64 / 1e9 / elapsed.max(1e-9); + let base = format!( + "{} {} events {} {elapsed:.2} s {rate:.2} GB/s", + scan.records_label(), + scan.events, + human_bytes(scan.bytes) + ); + match &scan.end { + None => format!("scanning: {base}"), + Some(end) => { + let mut parts = vec![format!("done: {base}")]; + parts.push(format!( + "trailer {}", + if end.trailer { "yes" } else { "no" } + )); + match end.truncated_tail { + Some(t) => parts.push(format!( + "truncated_tail ({}, {}, {})", + t.declared_bytes, t.present_bytes, t.salvaged_events + )), + None => parts.push("truncated_tail none".into()), + } + match &end.bad_record_header { + Some(b) => parts.push(format!( + "bad_record_header at 0x{:X}: {}", + b.offset, b.message + )), + None => parts.push("bad_record_header none".into()), + } + if let Some(e) = &end.error { + parts.push(format!("reader error: {e}")); + } + parts.join(" ") + } + } +} + +/// The cells of one events-table row. +pub fn event_cells(e: &EventRow) -> [String; 6] { + let note = if !e.header_ok { + "no bank header" + } else if e.tag == STREAM_EVENT_TAG { + "stream frame" + } else { + "" + }; + [ + e.index.to_string(), + e.words.to_string(), + format!("0x{:04X}", e.tag), + format!("0x{:02X} {}", e.data_type, data_type::name(e.data_type)), + e.num.to_string(), + note.to_string(), + ] +} + +/// The cells of one bank-tree row, and whether the row is an error. +pub fn tree_cells(row: &TreeRow) -> ([String; 6], bool) { + let indent = " ".repeat(row.depth); + match &row.item { + TreeItem::Node { + kind, + tag, + data_type: dt, + num, + length, + total_words, + .. + } => ( + [ + format!("{indent}{}", kind.name()), + format!("0x{tag:04X}"), + format!("0x{dt:02X} {}", data_type::name(*dt)), + match kind { + StructureKind::Bank => num.to_string(), + _ => String::new(), + }, + length.to_string(), + total_words.to_string(), + ], + false, + ), + TreeItem::Error { start, message } => ( + [ + format!("{indent}ERROR word {start}: {message}"), + String::new(), + String::new(), + String::new(), + String::new(), + String::new(), + ], + true, + ), + } +} + +/// Hex rows of `words`, [`HEX_WORDS_PER_ROW`] per row, the word offset of +/// each row at the left (`first_word` is the offset of `words[0]`). +pub fn hex_lines(first_word: usize, words: &[u32]) -> Vec { + words + .chunks(HEX_WORDS_PER_ROW) + .enumerate() + .map(|(i, chunk)| { + let offset = first_word + i * HEX_WORDS_PER_ROW; + let hex: Vec = chunk.iter().map(|w| format!("{w:08x}")).collect(); + format!("{offset:>6} {}", hex.join(" ")) + }) + .collect() +} + +/// The fADC250 frame summary of one stream event, as text. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct FrameSummary { + pub lines: Vec, + pub errors: Vec, + pub warnings: Vec, +} + +/// Summarize a decoded frame: frame number, timestamp, totals, the per-ROC +/// table, then the decoder's error and warning messages. +pub fn frame_summary(frame: &Frame<'_>) -> FrameSummary { + let mut lines = vec![ + format!( + "frame {} timestamp {} (0x{:X})", + frame.frame_number, frame.timestamp, frame.timestamp + ), + format!( + "ROC banks {} payload banks {} empty {} unmapped {}", + frame.roc_banks.len(), + frame.n_payload_banks, + frame.n_empty_payload_banks, + frame.n_unmapped_payload_banks + ), + format!( + "fADC250 hits {} other-module words {} payload words {}", + frame.n_hits, frame.non_fadc_words, frame.n_payload_words + ), + format!( + "AIS entries {} ({} distinct) errors {} warnings {}", + frame.n_ais_entries, frame.n_ais_distinct, frame.n_errors, frame.n_warnings + ), + format!( + "{:>5} {:>6} {:>8} {:>8} {:>6} {:>10} {:>12}", + "roc", "stream", "module", "payload", "empty", "hits", "other words" + ), + ]; + for roc in frame.roc_banks { + lines.push(format!( + "{:>5} {:>6} {:>8} {:>8} {:>6} {:>10} {:>12}", + roc.roc, + roc.stream, + module_name(roc.module), + roc.n_payload_banks, + roc.n_empty_payload_banks, + roc.n_hits, + roc.non_fadc_words + )); + } + FrameSummary { + lines, + errors: frame.errors.to_vec(), + warnings: frame.warnings.to_vec(), + } +} + +/// The one-screen key help. +pub const HELP_LINES: [&str; 15] = [ + "evio-tui keys", + "", + " Up/Down, PgUp/PgDn move the selection", + " Home/End, g/G first / last row", + " Enter (or Right) open the record / the event", + " Esc (or Left, Backspace) back one level (closes the frame view first)", + " Ctrl-C quit, like q", + " n / p next / previous 64 words of the selected structure", + " f fADC250 frame summary of a stream event (tag 0xFF60)", + " ? this help", + " q quit", + "", + "Screens: records of the file (the scan fills the list while it runs),", + "events of one record (read from the file at the record's offset),", + "the bank tree and words of one event.", +]; + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn bytes_and_hex() { + assert_eq!(human_bytes(12), "12 B"); + assert_eq!(human_bytes(1_500), "1.5 kB"); + assert_eq!(human_bytes(2_500_000), "2.5 MB"); + assert_eq!(human_bytes(15_550_062_464), "15.55 GB"); + let lines = hex_lines(16, &[1, 2, 3, 4, 5, 6, 7, 8, 9]); + assert_eq!(lines.len(), 2); + assert_eq!( + lines[0], + " 16 00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008" + ); + assert_eq!(lines[1], " 24 00000009"); + assert!(hex_lines(0, &[]).is_empty()); + } + + #[test] + fn event_and_tree_cells() { + let e = EventRow { + index: 3, + words: 7, + tag: 0xFF60, + data_type: 0x10, + num: 0, + header_ok: true, + }; + let cells = event_cells(&e); + assert_eq!(cells[2], "0xFF60"); + assert_eq!(cells[3], "0x10 banks"); + assert_eq!(cells[5], "stream frame"); + let row = TreeRow { + depth: 2, + item: TreeItem::Error { + start: 9, + message: "too long".into(), + }, + }; + let (cells, is_error) = tree_cells(&row); + assert!(is_error); + assert_eq!(cells[0], " ERROR word 9: too long"); + let row = TreeRow { + depth: 1, + item: TreeItem::Node { + kind: StructureKind::Segment, + tag: 0x32, + data_type: 1, + num: 0, + length: 3, + start: 4, + total_words: 4, + is_container: false, + }, + }; + let (cells, is_error) = tree_cells(&row); + assert!(!is_error); + assert_eq!(cells[0], " Segment"); + assert_eq!(cells[3], ""); + assert_eq!(cells[5], "4"); + } +} diff --git a/rust/evio-tui/src/lib.rs b/rust/evio-tui/src/lib.rs new file mode 100644 index 0000000..f63e5fe --- /dev/null +++ b/rust/evio-tui/src/lib.rs @@ -0,0 +1,23 @@ +//! A minimal terminal viewer for EVIO v6 files and JLab SRO streams, built +//! on the `evio-stream` reader: a fast way to look inside a file from a +//! terminal, nothing more. +//! +//! The binary `evio-tui FILE` scans the file on a background thread +//! ([`scan`]) and shows the records as they are found, opens one record by +//! seeking to its offset ([`access`]), lists its events, and shows the bank +//! tree and the words of one event, with the fADC250 frame summary of a +//! stream frame. +//! +//! Modules: [`state`] (what is shown and selected; keys), [`format`] (the +//! text of every cell and panel), [`tree`] (the flattened bank tree), and +//! [`ui`] (drawing with ratatui). Everything but `ui` runs without a +//! terminal. + +#![forbid(unsafe_code)] + +pub mod access; +pub mod format; +pub mod scan; +pub mod state; +pub mod tree; +pub mod ui; diff --git a/rust/evio-tui/src/main.rs b/rust/evio-tui/src/main.rs new file mode 100644 index 0000000..3cae40b --- /dev/null +++ b/rust/evio-tui/src/main.rs @@ -0,0 +1,122 @@ +//! `evio-tui FILE`: a minimal terminal viewer for EVIO v6 files and SRO +//! streams. The file is scanned on a background thread while the records +//! list fills; Enter opens a record, then an event; `?` lists the keys. + +use std::io; +use std::path::PathBuf; +use std::process::ExitCode; +use std::sync::mpsc::Receiver; +use std::time::Duration; + +use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; +use ratatui::DefaultTerminal; + +use evio_tui::scan::{self, ScanMessage}; +use evio_tui::state::{App, Key}; +use evio_tui::ui; + +const USAGE: &str = "usage: evio-tui FILE\n\ + Shows the records of an EVIO v6 file or SRO stream, the events of a record and the\n\ + bank tree and words of an event. Keys: ? for help, q to quit.\n\ + Standard input is not supported: the viewer opens records by seeking to their offset."; + +/// How long one loop iteration waits for a key before redrawing. +const TICK: Duration = Duration::from_millis(50); + +fn main() -> ExitCode { + let mut path = None; + for arg in std::env::args_os().skip(1) { + let text = arg.to_string_lossy().into_owned(); + match text.as_str() { + "-h" | "--help" => { + println!("{USAGE}"); + return ExitCode::SUCCESS; + } + "-" => { + eprintln!("evio-tui: standard input is not supported; random access to records needs a file.\n{USAGE}"); + return ExitCode::from(2); + } + a if a.starts_with('-') => { + eprintln!("unknown option {a}\n{USAGE}"); + return ExitCode::from(2); + } + _ => { + if path.is_some() { + eprintln!("one file only\n{USAGE}"); + return ExitCode::from(2); + } + path = Some(PathBuf::from(arg)); + } + } + } + let Some(path) = path else { + eprintln!("{USAGE}"); + return ExitCode::from(2); + }; + // Open once before taking the terminal so a missing or unsupported + // file is reported on stderr, not as an empty screen. + if let Err(e) = evio_stream::RecordReader::open(&path) { + eprintln!("evio-tui: {}: {e}", path.display()); + return ExitCode::FAILURE; + } + + let rx = scan::spawn(path.clone()); + let mut app = App::new(path); + let mut terminal = ratatui::init(); + let result = run(&mut terminal, &mut app, &rx); + ratatui::restore(); + match result { + Ok(()) => ExitCode::SUCCESS, + Err(e) => { + eprintln!("evio-tui: {e}"); + ExitCode::FAILURE + } + } +} + +/// The loop: drain the scan channel, draw, wait up to one tick for a key. +fn run( + terminal: &mut DefaultTerminal, + app: &mut App, + rx: &Receiver, +) -> io::Result<()> { + loop { + // Empty and Disconnected both end the drain; a finished scan + // thread has already sent its last message. + while let Ok(message) = rx.try_recv() { + app.apply(message); + } + terminal.draw(|frame| ui::draw(frame, app))?; + if event::poll(TICK)? { + if let Event::Key(key) = event::read()? { + if key.kind == KeyEventKind::Press { + if let Some(key) = map_key(key) { + app.key(key); + } + } + } + } + if app.quit { + return Ok(()); + } + } +} + +/// Translate a crossterm key press; `None` for keys the viewer ignores. +fn map_key(key: KeyEvent) -> Option { + Some(match key.code { + KeyCode::Up => Key::Up, + KeyCode::Down => Key::Down, + KeyCode::PageUp => Key::PageUp, + KeyCode::PageDown => Key::PageDown, + KeyCode::Home => Key::Home, + KeyCode::End => Key::End, + KeyCode::Enter => Key::Enter, + KeyCode::Esc => Key::Esc, + KeyCode::Backspace | KeyCode::Left => Key::Esc, + KeyCode::Right => Key::Enter, + KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => Key::Char('q'), + KeyCode::Char(c) => Key::Char(c), + _ => return None, + }) +} diff --git a/rust/evio-tui/src/scan.rs b/rust/evio-tui/src/scan.rs new file mode 100644 index 0000000..5fc521f --- /dev/null +++ b/rust/evio-tui/src/scan.rs @@ -0,0 +1,170 @@ +//! The background scan: the whole file streamed once from the start with +//! [`RecordReader`], one small [`RecordSummary`] per record sent over a +//! channel so the user interface never waits on the file. +//! +//! [`scan`] is synchronous and takes the sender; [`spawn`] runs it on a +//! thread. Tests call `scan` inline and drain the receiver. + +use std::path::{Path, PathBuf}; +use std::sync::mpsc::{self, Receiver, Sender}; +use std::thread; +use std::time::Instant; + +use evio_stream::{ + BadRecordHeader, ByteOrder, FileHeader, FileLayout, Record, RecordHeader, RecordReader, + TruncatedTail, +}; + +/// Record error messages kept per summary (the count is always exact). +pub const MAX_ERRORS_KEPT: usize = 4; + +/// What one record looked like when the scan passed it. The full header is +/// kept (it is small) so the side panel needs no second look at the file. +#[derive(Clone, Debug)] +pub struct RecordSummary { + /// Position in the stream, from 0 (the trailer included). + pub index: usize, + /// Byte offset of the record header in the file. + pub offset: u64, + pub header: RecordHeader, + /// Bytes of the record present in the file, header included. + pub present_bytes: u64, + /// Events found (the complete ones for a cut tail). + pub events_found: usize, + pub is_truncated: bool, + /// Record errors (event walk, decompression); see [`error_count`](Self::error_count). + pub errors: Vec, + pub error_count: usize, + /// Bytes the scan had consumed after this record. + pub bytes_read: u64, +} + +impl RecordSummary { + /// Summarize a record just read by a reader that has consumed + /// `bytes_read` bytes so far. + pub fn new(record: &Record, bytes_read: u64) -> RecordSummary { + RecordSummary { + index: record.index, + offset: record.offset, + header: record.header.clone(), + present_bytes: record.present_bytes, + events_found: record.event_count(), + is_truncated: record.is_truncated, + errors: record + .errors + .iter() + .take(MAX_ERRORS_KEPT) + .cloned() + .collect(), + error_count: record.errors.len(), + bytes_read, + } + } + + /// Byte length the header declares for the record. + pub fn declared_bytes(&self) -> u64 { + self.header.record_bytes() + } + + /// "trailer" or "record". + pub fn kind_name(&self) -> &'static str { + if self.header.is_trailer() { + "trailer" + } else { + "record" + } + } +} + +/// What the first bytes of the file said. +#[derive(Clone, Debug)] +pub struct ScanStart { + pub layout: FileLayout, + pub order: ByteOrder, + pub file_header: FileHeader, +} + +/// How the scan ended. +#[derive(Clone, Debug)] +pub struct ScanEnd { + pub truncated_tail: Option, + pub bad_record_header: Option, + pub trailer: bool, + /// Data records read (the trailer excluded). + pub data_records: u64, + pub bytes: u64, + pub elapsed_s: f64, + /// Set when the reader returned an error (an evio-library v4 file that + /// revealed itself late, an I/O error); the records before it stand. + pub error: Option, +} + +/// One message from the scan. +#[derive(Clone, Debug)] +pub enum ScanMessage { + Started(ScanStart), + Record(RecordSummary), + Finished(ScanEnd), + /// The file could not be opened as EVIO; nothing else follows. + Failed(String), +} + +/// Stream `path` from the start and send one message per record. Returns +/// when the file ends, when the reader fails or when the receiver is gone. +pub fn scan(path: &Path, tx: &Sender) { + let start = Instant::now(); + let mut reader = match RecordReader::open(path) { + Ok(reader) => reader, + Err(e) => { + let _ = tx.send(ScanMessage::Failed(e.to_string())); + return; + } + }; + let started = ScanStart { + layout: reader.layout(), + order: reader.order(), + file_header: reader.file_header().clone(), + }; + if tx.send(ScanMessage::Started(started)).is_err() { + return; + } + let mut error = None; + loop { + match reader.next_record() { + Ok(Some(record)) => { + let summary = RecordSummary::new(&record, reader.bytes_read()); + let delivered = tx.send(ScanMessage::Record(summary)).is_ok(); + reader.recycle(record); + if !delivered { + return; + } + } + Ok(None) => break, + Err(e) => { + error = Some(e.to_string()); + break; + } + } + } + let end = ScanEnd { + truncated_tail: reader.truncated_tail(), + bad_record_header: reader.bad_record_header().cloned(), + trailer: reader.trailer_seen(), + data_records: reader.data_records(), + bytes: reader.bytes_read(), + elapsed_s: start.elapsed().as_secs_f64(), + error, + }; + let _ = tx.send(ScanMessage::Finished(end)); +} + +/// Run [`scan`] on a background thread. Dropping the receiver ends the +/// thread at its next record. +pub fn spawn(path: PathBuf) -> Receiver { + let (tx, rx) = mpsc::channel(); + thread::Builder::new() + .name("evio-scan".into()) + .spawn(move || scan(&path, &tx)) + .expect("spawn the scan thread"); + rx +} diff --git a/rust/evio-tui/src/state.rs b/rust/evio-tui/src/state.rs new file mode 100644 index 0000000..ff66a91 --- /dev/null +++ b/rust/evio-tui/src/state.rs @@ -0,0 +1,612 @@ +//! What is shown and what is selected: the state machine behind the +//! screens, with no terminal in sight. +//! +//! [`App`] takes scan messages ([`App::apply`]) and keys ([`App::key`]). +//! Opening a record reads it from the file ([`crate::access`]); everything +//! else is bookkeeping, so tests drive the whole flow with keys. + +use std::path::{Path, PathBuf}; +use std::time::Instant; + +use evio_stream::fadc250::STREAM_EVENT_TAG; +use evio_stream::{FrameDecoder, Record}; + +use crate::access; +use crate::format::{frame_summary, FrameSummary}; +use crate::scan::{RecordSummary, ScanEnd, ScanMessage, ScanStart}; +use crate::tree::{flatten, TreeRow}; + +/// Words shown at once of the selected structure. +pub const WORDS_PER_PAGE: usize = 64; + +/// A key press, independent of the terminal library. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Key { + Up, + Down, + PageUp, + PageDown, + Home, + End, + Enter, + Esc, + Char(char), +} + +/// Which screen is shown. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Screen { + Records, + Events, + Event, + Help, +} + +/// Selection and scroll of one list. `height` is the number of rows the +/// last draw had room for; the drawing code sets it before it reads +/// `first`. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub struct ListCursor { + pub selected: usize, + /// First visible row. + pub first: usize, + pub len: usize, + pub height: usize, +} + +impl ListCursor { + /// A list of `len` rows, the first selected. + pub fn new(len: usize) -> ListCursor { + ListCursor { + selected: 0, + first: 0, + len, + height: 0, + } + } + + /// Set the row count; the selection is clamped. + pub fn set_len(&mut self, len: usize) { + self.len = len; + self.clamp(); + } + + /// Set the rows the view has room for; the window follows the selection. + pub fn set_height(&mut self, height: usize) { + self.height = height.max(1); + self.clamp(); + } + + /// Move the selection by `delta` rows, clamped to the list. + pub fn move_by(&mut self, delta: isize) { + let target = self.selected as isize + delta; + self.selected = target.clamp(0, self.len.saturating_sub(1) as isize) as usize; + self.clamp(); + } + + /// Select `index` (clamped). + pub fn select(&mut self, index: usize) { + self.selected = index; + self.clamp(); + } + + /// Select the last row. + pub fn select_last(&mut self) { + self.select(self.len.saturating_sub(1)); + } + + /// Apply a navigation key; `true` when it was one. + pub fn navigate(&mut self, key: Key) -> bool { + let page = self.height.max(1) as isize; + match key { + Key::Up => self.move_by(-1), + Key::Down => self.move_by(1), + Key::PageUp => self.move_by(-page), + Key::PageDown => self.move_by(page), + Key::Home | Key::Char('g') => self.select(0), + Key::End | Key::Char('G') => self.select_last(), + _ => return false, + } + true + } + + /// Rows visible: `first..first + height`, clipped to the list. + pub fn visible(&self) -> std::ops::Range { + let end = (self.first + self.height.max(1)).min(self.len); + self.first.min(end)..end + } + + /// Selected row relative to `first`, for the drawing code. + pub fn selected_in_view(&self) -> Option { + (self.len > 0 && self.selected >= self.first).then(|| self.selected - self.first) + } + + fn clamp(&mut self) { + if self.len == 0 { + self.selected = 0; + self.first = 0; + return; + } + self.selected = self.selected.min(self.len - 1); + let height = self.height.max(1); + if self.selected < self.first { + self.first = self.selected; + } else if self.selected >= self.first + height { + self.first = self.selected + 1 - height; + } + self.first = self.first.min(self.len.saturating_sub(height)); + } +} + +/// Progress of the scan as the messages arrive. +#[derive(Debug)] +pub struct ScanProgress { + pub start: Option, + /// Every record seen, the trailer included (it is a row of the list). + pub records: Vec, + /// Data records seen so far (the trailer excluded, as `evio-count` counts). + pub data_records: u64, + /// True once the trailer record has arrived. + pub trailer_seen: bool, + /// Events found so far. + pub events: u64, + /// Bytes consumed so far. + pub bytes: u64, + pub end: Option, + /// Set when the file could not be opened as EVIO. + pub failed: Option, + started_at: Instant, +} + +impl ScanProgress { + fn new() -> ScanProgress { + ScanProgress { + start: None, + records: Vec::new(), + data_records: 0, + trailer_seen: false, + events: 0, + bytes: 0, + end: None, + failed: None, + started_at: Instant::now(), + } + } + + /// `"7891 records + trailer"`, `"7893 records"`: the data record count + /// with the trailer named separately. + pub fn records_label(&self) -> String { + format!( + "{} records{}", + self.data_records, + if self.trailer_seen { " + trailer" } else { "" } + ) + } + + /// Seconds the scan has run, frozen at its end. + pub fn elapsed_s(&self) -> f64 { + match &self.end { + Some(end) => end.elapsed_s, + None => self.started_at.elapsed().as_secs_f64(), + } + } + + /// True once the scan has finished or failed. + pub fn is_done(&self) -> bool { + self.end.is_some() || self.failed.is_some() + } +} + +/// One row of the events table. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct EventRow { + pub index: usize, + /// Length of the event in words. + pub words: usize, + pub tag: u16, + pub data_type: u8, + pub num: u8, + /// False when the event is too short for a bank header. + pub header_ok: bool, +} + +impl EventRow { + fn new(index: usize, record: &Record) -> EventRow { + let words = record.event(index); + let header = words.and_then(|w| w.get(1)); + match (words, header) { + (Some(w), Some(h)) => EventRow { + index, + words: w.len(), + tag: (h >> 16) as u16, + data_type: ((h >> 8) & 0x3F) as u8, + num: (h & 0xFF) as u8, + header_ok: true, + }, + _ => EventRow { + index, + words: words.map(|w| w.len()).unwrap_or(0), + tag: 0, + data_type: 0, + num: 0, + header_ok: false, + }, + } + } + + /// True for a CODA stream frame (tag 0xFF60). + pub fn is_stream_frame(&self) -> bool { + self.header_ok && self.tag == STREAM_EVENT_TAG + } +} + +/// The record held in memory: the one whose events are shown. +#[derive(Debug)] +pub struct LoadedRecord { + /// Index and offset from the scan (the record's own are relative to + /// the reader that read it). + pub index: usize, + pub offset: u64, + pub record: Record, + pub events: Vec, +} + +/// The event whose tree is shown. +#[derive(Debug)] +pub struct EventView { + pub event_index: usize, + pub rows: Vec, + /// First word of the hex window, relative to the selected structure. + pub word_window: usize, + /// The frame summary, decoded on `f`; `None` for a non-frame event. + pub frame: Option, + pub show_frame: bool, +} + +/// The whole application state. +#[derive(Debug)] +pub struct App { + path: PathBuf, + pub screen: Screen, + help_from: Screen, + pub scan: ScanProgress, + pub records: ListCursor, + pub loaded: Option, + pub events: ListCursor, + pub tree: ListCursor, + pub view: Option, + /// A one-line message for the status area (a failed load, say). + pub message: Option, + pub quit: bool, +} + +impl App { + /// State for `path` before any scan message. + pub fn new(path: impl Into) -> App { + App { + path: path.into(), + screen: Screen::Records, + help_from: Screen::Records, + scan: ScanProgress::new(), + records: ListCursor::new(0), + loaded: None, + events: ListCursor::new(0), + tree: ListCursor::new(0), + view: None, + message: None, + quit: false, + } + } + + /// The file shown. + pub fn path(&self) -> &Path { + &self.path + } + + /// Take one scan message in. + pub fn apply(&mut self, message: ScanMessage) { + match message { + ScanMessage::Started(start) => self.scan.start = Some(start), + ScanMessage::Record(summary) => { + if summary.header.is_trailer() { + self.scan.trailer_seen = true; + } else { + self.scan.data_records += 1; + self.scan.events += summary.events_found as u64; + } + self.scan.bytes = summary.bytes_read; + self.scan.records.push(summary); + self.records.set_len(self.scan.records.len()); + } + ScanMessage::Finished(end) => { + self.scan.bytes = end.bytes; + self.scan.end = Some(end); + } + ScanMessage::Failed(e) => self.scan.failed = Some(e), + } + } + + /// Take one key in. + pub fn key(&mut self, key: Key) { + self.message = None; + if key == Key::Char('q') { + self.quit = true; + return; + } + if key == Key::Char('?') { + if self.screen == Screen::Help { + self.screen = self.help_from; + } else { + self.help_from = self.screen; + self.screen = Screen::Help; + } + return; + } + match self.screen { + Screen::Help => { + if key == Key::Esc { + self.screen = self.help_from; + } + } + Screen::Records => { + if !self.records.navigate(key) && key == Key::Enter { + self.open_selected_record(); + } + } + Screen::Events => { + if self.events.navigate(key) { + return; + } + match key { + Key::Enter => self.open_selected_event(), + Key::Esc => self.screen = Screen::Records, + _ => {} + } + } + Screen::Event => { + if self.tree.navigate(key) { + if let Some(view) = &mut self.view { + view.word_window = 0; + } + return; + } + match key { + Key::Esc => { + let frame_shown = self.view.as_ref().is_some_and(|v| v.show_frame); + if frame_shown { + if let Some(view) = &mut self.view { + view.show_frame = false; + } + } else { + self.screen = Screen::Events; + } + } + Key::Char('n') => self.scroll_words(1), + Key::Char('p') => self.scroll_words(-1), + Key::Char('f') => self.toggle_frame(), + _ => {} + } + } + } + } + + /// The record summary under the cursor. + pub fn selected_record(&self) -> Option<&RecordSummary> { + self.scan.records.get(self.records.selected) + } + + /// The event row under the cursor of the loaded record. + pub fn selected_event(&self) -> Option<&EventRow> { + self.loaded.as_ref()?.events.get(self.events.selected) + } + + /// The tree row under the cursor. + pub fn selected_tree_row(&self) -> Option<&TreeRow> { + self.view.as_ref()?.rows.get(self.tree.selected) + } + + /// Read the selected record from the file and show its events. + pub fn open_selected_record(&mut self) { + let Some(summary) = self.selected_record() else { + return; + }; + let (index, offset) = (summary.index, summary.offset); + match access::load_record(&self.path, offset) { + Ok(record) => { + let events = (0..record.event_count()) + .map(|i| EventRow::new(i, &record)) + .collect::>(); + self.events = ListCursor::new(events.len()); + self.loaded = Some(LoadedRecord { + index, + offset, + record, + events, + }); + self.view = None; + self.screen = Screen::Events; + } + Err(e) => self.message = Some(format!("record {index}: {e}")), + } + } + + /// Build the bank tree of the selected event and show it. + pub fn open_selected_event(&mut self) { + let Some(loaded) = &self.loaded else { + return; + }; + let Some(row) = loaded.events.get(self.events.selected) else { + return; + }; + let event_index = row.index; + let Some(words) = loaded.record.event(event_index) else { + return; + }; + let rows = flatten(words); + self.tree = ListCursor::new(rows.len()); + self.view = Some(EventView { + event_index, + rows, + word_window: 0, + frame: None, + show_frame: false, + }); + self.screen = Screen::Event; + } + + /// The hex window of the selected structure: the absolute word offset + /// of its first word and up to [`WORDS_PER_PAGE`] words. For an error + /// row, the words from the offending word to the end of the event. + pub fn selected_words(&self) -> Option<(usize, Vec)> { + let view = self.view.as_ref()?; + let row = view.rows.get(self.tree.selected)?; + let event = self.loaded.as_ref()?.record.event(view.event_index)?; + let start = row.start(); + let end = match row.total_words() { + Some(total) => (start + total).min(event.len()), + None => event.len(), + }; + let first = (start + view.word_window).min(end); + let last = (first + WORDS_PER_PAGE).min(end); + let words = event.slice(first, last)?.to_vec(); + Some((first, words)) + } + + /// Words of the selected structure beyond the current window. + pub fn words_after_window(&self) -> usize { + let Some(view) = &self.view else { + return 0; + }; + let Some(row) = view.rows.get(self.tree.selected) else { + return 0; + }; + let Some(event) = self + .loaded + .as_ref() + .and_then(|l| l.record.event(view.event_index)) + else { + return 0; + }; + let start = row.start(); + let end = match row.total_words() { + Some(total) => (start + total).min(event.len()), + None => event.len(), + }; + (end - start.min(end)).saturating_sub(view.word_window + WORDS_PER_PAGE) + } + + fn scroll_words(&mut self, direction: isize) { + let more = self.words_after_window(); + let Some(view) = &mut self.view else { + return; + }; + if direction > 0 { + if more > 0 { + view.word_window += WORDS_PER_PAGE; + } + } else { + view.word_window = view.word_window.saturating_sub(WORDS_PER_PAGE); + } + } + + /// Show or hide the fADC250 frame summary of the shown event. A + /// non-frame event gets a message instead. + pub fn toggle_frame(&mut self) { + let Some(loaded) = &self.loaded else { + return; + }; + let Some(view) = &mut self.view else { + return; + }; + if view.show_frame { + view.show_frame = false; + return; + } + if view.frame.is_none() { + let Some(words) = loaded.record.event(view.event_index) else { + return; + }; + let mut decoder = FrameDecoder::new(); + match decoder.decode(words) { + Some(frame) => view.frame = Some(frame_summary(&frame)), + None => { + self.message = Some(format!( + "event {} is no stream frame (tag 0x{:04X} expected)", + view.event_index, STREAM_EVENT_TAG + )); + return; + } + } + } + view.show_frame = true; + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn cursor_scrolls_with_the_selection() { + let mut c = ListCursor::new(100); + c.set_height(10); + assert_eq!(c.visible(), 0..10); + c.navigate(Key::Down); + assert_eq!(c.selected, 1); + c.navigate(Key::PageDown); + assert_eq!(c.selected, 11); + assert_eq!(c.visible(), 2..12); + assert_eq!(c.selected_in_view(), Some(9)); + c.navigate(Key::End); + assert_eq!(c.selected, 99); + assert_eq!(c.visible(), 90..100); + c.navigate(Key::Char('g')); + assert_eq!(c.visible(), 0..10); + c.navigate(Key::Up); + assert_eq!(c.selected, 0); + c.navigate(Key::Char('G')); + c.navigate(Key::PageUp); + assert_eq!(c.selected, 89); + assert!(!c.navigate(Key::Enter)); + // shrinking the list clamps the selection and the window + c.set_len(5); + assert_eq!(c.selected, 4); + assert_eq!(c.visible(), 0..5); + c.set_len(0); + assert_eq!(c.selected_in_view(), None); + // a list that grows while the cursor sits at the top stays put + c.set_len(50); + assert_eq!(c.visible(), 0..10); + } + + #[test] + fn help_and_quit_from_anywhere() { + let mut app = App::new("/nonexistent"); + assert_eq!(app.screen, Screen::Records); + app.key(Key::Char('?')); + assert_eq!(app.screen, Screen::Help); + app.key(Key::Esc); + assert_eq!(app.screen, Screen::Records); + app.key(Key::Char('?')); + app.key(Key::Char('?')); + assert_eq!(app.screen, Screen::Records); + // Enter with nothing scanned does nothing; Esc stays + app.key(Key::Enter); + app.key(Key::Esc); + assert_eq!(app.screen, Screen::Records); + assert!(!app.quit); + app.key(Key::Char('q')); + assert!(app.quit); + } + + #[test] + fn scan_messages_fill_the_list() { + let mut app = App::new("/nonexistent"); + app.apply(ScanMessage::Failed("not evio".into())); + assert!(app.scan.is_done()); + assert!(crate::format::status_line(&app.scan).contains("not evio")); + // a failed open then Enter: a message, no screen change + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Records); + } +} diff --git a/rust/evio-tui/src/tree.rs b/rust/evio-tui/src/tree.rs new file mode 100644 index 0000000..2129517 --- /dev/null +++ b/rust/evio-tui/src/tree.rs @@ -0,0 +1,178 @@ +//! The bank tree of one event flattened into owned rows. +//! +//! An event is small, so the whole tree is walked at once with +//! [`Bank::event`] and [`Bank::children`]; every level is a row with its +//! depth. A length that does not fit its container ends that container's +//! walk with an [`TreeItem::Error`] row at the offending word. + +use evio_stream::{Bank, StructureKind, Words}; + +/// One row of the flattened tree. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct TreeRow { + /// Nesting depth, 0 for the event bank. + pub depth: usize, + pub item: TreeItem, +} + +/// A structure, or the walk error that stopped a container. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum TreeItem { + Node { + kind: StructureKind, + tag: u16, + data_type: u8, + num: u8, + /// The length field: words after the length word. + length: u32, + /// Word offset of the structure inside the event. + start: usize, + /// Header words plus the words that follow (length + 1). + total_words: usize, + is_container: bool, + }, + Error { + /// Word offset inside the event where the bad structure starts. + start: usize, + message: String, + }, +} + +impl TreeRow { + /// Word offset of the row's structure inside the event. + pub fn start(&self) -> usize { + match &self.item { + TreeItem::Node { start, .. } | TreeItem::Error { start, .. } => *start, + } + } + + /// Words the row covers: the whole structure, or nothing known for an + /// error (`None`). + pub fn total_words(&self) -> Option { + match &self.item { + TreeItem::Node { total_words, .. } => Some(*total_words), + TreeItem::Error { .. } => None, + } + } + + /// True for an error row. + pub fn is_error(&self) -> bool { + matches!(self.item, TreeItem::Error { .. }) + } +} + +/// Flatten the bank tree of `event` (the words of one event). +pub fn flatten(event: Words<'_>) -> Vec { + let mut rows = Vec::new(); + match Bank::event(event) { + Ok(bank) => walk(&bank, 0, 0, &mut rows), + Err(e) => rows.push(TreeRow { + depth: 0, + item: TreeItem::Error { + start: e.word, + message: e.message, + }, + }), + } + rows +} + +fn walk(bank: &Bank<'_>, depth: usize, start: usize, rows: &mut Vec) { + rows.push(TreeRow { + depth, + item: TreeItem::Node { + kind: bank.kind(), + tag: bank.tag, + data_type: bank.data_type, + num: bank.num, + length: bank.length, + start, + total_words: bank.total_words(), + is_container: bank.is_container(), + }, + }); + if !bank.is_container() { + return; + } + let data_start = start + bank.kind().header_words(); + let mut pos = 0; + for child in bank.children() { + match child { + Ok(child) => { + walk(&child, depth + 1, data_start + pos, rows); + pos += child.total_words(); + } + // The iterator reports the word relative to the parent's data. + Err(e) => rows.push(TreeRow { + depth: depth + 1, + item: TreeItem::Error { + start: data_start + e.word, + message: e.message, + }, + }), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use evio_stream::ByteOrder; + + fn le(words: &[u32]) -> Vec { + words.iter().flat_map(|w| w.to_le_bytes()).collect() + } + + #[test] + fn flattens_every_level_with_offsets() { + // bank of banks: [ bank of segments: [ segment len 2 ], leaf uint32 len 1 ] + let bytes = le(&[ + 9, + 0xFF60_1000, + 4, + 0xFF31_2000, + 0x3201_0002, + 11, + 22, + 2, + 0x0001_0100, + 99, + ]); + let rows = flatten(Words::new(&bytes, ByteOrder::Little)); + assert_eq!(rows.len(), 4); + assert_eq!(rows[0].depth, 0); + assert_eq!(rows[0].start(), 0); + assert_eq!(rows[0].total_words(), Some(10)); + assert_eq!(rows[1].depth, 1); + assert_eq!(rows[1].start(), 2); + assert_eq!(rows[2].depth, 2); + assert_eq!(rows[2].start(), 4); + assert_eq!(rows[2].total_words(), Some(3)); + match &rows[2].item { + TreeItem::Node { kind, tag, .. } => { + assert_eq!(*kind, StructureKind::Segment); + assert_eq!(*tag, 0x32); + } + other => panic!("segment expected, got {other:?}"), + } + assert_eq!(rows[3].depth, 1); + assert_eq!(rows[3].start(), 7); + assert!(rows.iter().all(|r| !r.is_error())); + } + + #[test] + fn bad_length_becomes_an_error_row() { + // first child fine (2 words), second declares 10 words inside a 5-word parent + let bytes = le(&[5, 0x0001_1000, 1, 0x0002_0100, 10, 0x0003_0100]); + let rows = flatten(Words::new(&bytes, ByteOrder::Little)); + assert_eq!(rows.len(), 3); + assert!(rows[2].is_error()); + assert_eq!(rows[2].depth, 1); + // the second child starts at word 2 (header) + 2 (first child) = 4 + assert_eq!(rows[2].start(), 4); + // too short for a bank header + let rows = flatten(Words::new(&bytes[..4], ByteOrder::Little)); + assert_eq!(rows.len(), 1); + assert!(rows[0].is_error()); + } +} diff --git a/rust/evio-tui/src/ui.rs b/rust/evio-tui/src/ui.rs new file mode 100644 index 0000000..e5e1e50 --- /dev/null +++ b/rust/evio-tui/src/ui.rs @@ -0,0 +1,345 @@ +//! Drawing the screens with ratatui. This is the only module that knows +//! about widgets; it reads the [`App`] state, tells each list how many rows +//! fit, and renders only the visible rows. + +use ratatui::layout::{Constraint, Layout, Rect}; +use ratatui::style::{Color, Modifier, Style}; +use ratatui::text::Line; +use ratatui::widgets::{Block, Cell, Paragraph, Row, Table, TableState, Wrap}; +use ratatui::Frame; + +use crate::format::{ + event_cells, file_line, hex_lines, record_cells, record_header_lines, status_line, tree_cells, + EVENT_COLUMNS, HELP_LINES, RECORD_COLUMNS, TREE_COLUMNS, +}; +use crate::state::{App, ListCursor, Screen}; + +/// Terminals narrower than this draw the records table without the header +/// side panel. +const SIDE_PANEL_MIN_WIDTH: u16 = 100; + +/// Draw the current screen. +pub fn draw(frame: &mut Frame, app: &mut App) { + let [title, body, status, hint] = Layout::vertical([ + Constraint::Length(1), + Constraint::Min(3), + Constraint::Length(1), + Constraint::Length(1), + ]) + .areas(frame.area()); + + let screen_name = match app.screen { + Screen::Records => "records", + Screen::Events => "events", + Screen::Event => "event", + Screen::Help => "help", + }; + let title_line = Line::from(format!( + "evio-tui {} [{screen_name}]", + app.path().display() + )) + .style(Style::new().add_modifier(Modifier::BOLD)); + frame.render_widget(Paragraph::new(title_line), title); + + match app.screen { + Screen::Records => draw_records(frame, app, body), + Screen::Events => draw_events(frame, app, body), + Screen::Event => draw_event(frame, app, body), + Screen::Help => draw_help(frame, body), + } + + let status_text = match &app.message { + Some(message) => Line::from(message.clone()).style(Style::new().fg(Color::Red)), + None => Line::from(status_line(&app.scan)), + }; + frame.render_widget(Paragraph::new(status_text), status); + + let keys = match app.screen { + Screen::Records => "Enter open record arrows/PgUp/PgDn/Home/End/g/G move ? help q quit", + Screen::Events => "Enter open event Esc back arrows move ? help q quit", + Screen::Event => "n/p words f frame summary Esc back arrows move ? help q quit", + Screen::Help => "Esc or ? back q quit", + }; + frame.render_widget( + Paragraph::new(Line::from(keys).style(Style::new().fg(Color::DarkGray))), + hint, + ); +} + +/// Rows of a bordered table with a header row. +fn table_rows_available(area: Rect) -> usize { + area.height.saturating_sub(3) as usize +} + +/// Render the visible window of a list as a table. +fn render_table( + frame: &mut Frame, + area: Rect, + title: String, + columns: &[&str], + widths: &[Constraint], + cursor: &ListCursor, + rows: Vec>, +) { + let header = Row::new(columns.iter().map(|c| Cell::from(*c))) + .style(Style::new().add_modifier(Modifier::UNDERLINED)); + let table = Table::new(rows, widths) + .header(header) + .block(Block::bordered().title(title)) + .row_highlight_style(Style::new().add_modifier(Modifier::REVERSED)); + let mut state = TableState::new().with_selected(cursor.selected_in_view()); + frame.render_stateful_widget(table, area, &mut state); +} + +fn cells(values: &[String]) -> Vec> { + values.iter().cloned().map(Cell::from).collect() +} + +fn draw_records(frame: &mut Frame, app: &mut App, body: Rect) { + let (table_area, panel) = if body.width >= SIDE_PANEL_MIN_WIDTH { + let [left, right] = + Layout::horizontal([Constraint::Min(60), Constraint::Length(50)]).areas(body); + (left, Some(right)) + } else { + (body, None) + }; + app.records.set_height(table_rows_available(table_area)); + let visible = app.records.visible(); + let rows: Vec> = app.scan.records[visible] + .iter() + .map(|s| { + let row = Row::new(cells(&record_cells(s))); + if s.error_count > 0 || s.is_truncated { + row.style(Style::new().fg(Color::Red)) + } else { + row + } + }) + .collect(); + let widths = [ + Constraint::Length(7), + Constraint::Length(13), + Constraint::Length(10), + Constraint::Length(7), + Constraint::Length(7), + Constraint::Length(7), + Constraint::Length(8), + Constraint::Length(5), + Constraint::Length(6), + ]; + let title = format!(" {} ", app.scan.records_label()); + render_table( + frame, + table_area, + title, + &RECORD_COLUMNS, + &widths, + &app.records, + rows, + ); + + if let Some(panel) = panel { + let mut lines = vec![file_line(app.scan.start.as_ref()), String::new()]; + match app.selected_record() { + Some(s) => lines.extend(record_header_lines(s)), + None => lines.push("no record yet".into()), + } + let text: Vec = lines.into_iter().map(Line::from).collect(); + frame.render_widget( + Paragraph::new(text) + .block(Block::bordered().title(" header ")) + .wrap(Wrap { trim: false }), + panel, + ); + } +} + +fn draw_events(frame: &mut Frame, app: &mut App, body: Rect) { + let Some(loaded) = &app.loaded else { + frame.render_widget( + Paragraph::new("no record loaded").block(Block::bordered()), + body, + ); + return; + }; + app.events.set_height(table_rows_available(body)); + let visible = app.events.visible(); + let rows: Vec> = loaded.events[visible] + .iter() + .map(|e| { + let row = Row::new(cells(&event_cells(e))); + if !e.header_ok { + row.style(Style::new().fg(Color::Red)) + } else { + row + } + }) + .collect(); + let widths = [ + Constraint::Length(7), + Constraint::Length(10), + Constraint::Length(8), + Constraint::Length(18), + Constraint::Length(5), + Constraint::Min(14), + ]; + let title = format!( + " record {} at 0x{:X}: {} events, {} bytes{} ", + loaded.index, + loaded.offset, + loaded.events.len(), + loaded.record.present_bytes, + if loaded.record.errors.is_empty() { + String::new() + } else { + format!(", {} errors", loaded.record.errors.len()) + } + ); + let cursor = app.events; + render_table(frame, body, title, &EVENT_COLUMNS, &widths, &cursor, rows); +} + +fn draw_event(frame: &mut Frame, app: &mut App, body: Rect) { + let (Some(loaded), Some(view)) = (&app.loaded, &app.view) else { + frame.render_widget( + Paragraph::new("no event opened").block(Block::bordered()), + body, + ); + return; + }; + let [tree_area, panel] = + Layout::vertical([Constraint::Percentage(55), Constraint::Min(6)]).areas(body); + app.tree.set_height(table_rows_available(tree_area)); + let visible = app.tree.visible(); + let rows: Vec> = view.rows[visible] + .iter() + .map(|r| { + let (values, is_error) = tree_cells(r); + let row = Row::new(cells(&values)); + if is_error { + row.style(Style::new().fg(Color::Red)) + } else { + row + } + }) + .collect(); + let widths = [ + Constraint::Min(24), + Constraint::Length(8), + Constraint::Length(18), + Constraint::Length(5), + Constraint::Length(10), + Constraint::Length(8), + ]; + let event_words = loaded + .record + .event(view.event_index) + .map(|w| w.len()) + .unwrap_or(0); + let title = format!( + " record {} event {}: {} words, {} structures ", + loaded.index, + view.event_index, + event_words, + view.rows.len() + ); + let cursor = app.tree; + render_table( + frame, + tree_area, + title, + &TREE_COLUMNS, + &widths, + &cursor, + rows, + ); + + if view.show_frame { + if let Some(summary) = &view.frame { + let mut lines: Vec = summary.lines.iter().cloned().map(Line::from).collect(); + for e in &summary.errors { + lines.push(Line::from(format!("error: {e}")).style(Style::new().fg(Color::Red))); + } + for w in &summary.warnings { + lines.push( + Line::from(format!("warning: {w}")).style(Style::new().fg(Color::Yellow)), + ); + } + frame.render_widget( + Paragraph::new(lines) + .block(Block::bordered().title(" fADC250 frame (f/Esc closes) ")), + panel, + ); + return; + } + } + let (title, lines) = match app.selected_words() { + Some((first, words)) => { + let more = app.words_after_window(); + let title = format!( + " words {}..{} of the selected structure{} ", + first, + first + words.len(), + if more > 0 { + format!(", {more} more (n/p)") + } else { + String::new() + } + ); + (title, hex_lines(first, &words)) + } + None => ( + " words ".to_string(), + vec!["no structure selected".to_string()], + ), + }; + let text: Vec = lines.into_iter().map(Line::from).collect(); + frame.render_widget( + Paragraph::new(text).block(Block::bordered().title(title)), + panel, + ); +} + +fn draw_help(frame: &mut Frame, body: Rect) { + let text: Vec = HELP_LINES.iter().map(|l| Line::from(*l)).collect(); + frame.render_widget( + Paragraph::new(text) + .block(Block::bordered().title(" help ")) + .wrap(Wrap { trim: false }), + body, + ); +} + +/// The text of a rendered buffer, one string per row (trailing spaces +/// kept), for tests with ratatui's `TestBackend`. +pub fn buffer_lines(buffer: &ratatui::buffer::Buffer) -> Vec { + let area = *buffer.area(); + (area.top()..area.bottom()) + .map(|y| { + (area.left()..area.right()) + .filter_map(|x| buffer.cell((x, y)).map(|c| c.symbol().to_string())) + .collect() + }) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + use ratatui::backend::TestBackend; + use ratatui::Terminal; + + #[test] + fn draws_an_empty_app_and_help() { + let mut app = App::new("/nowhere/run.evio"); + let mut terminal = Terminal::new(TestBackend::new(80, 12)).unwrap(); + terminal.draw(|f| draw(f, &mut app)).unwrap(); + let text = buffer_lines(terminal.backend().buffer()).join("\n"); + assert!(text.contains(" 0 records ")); + assert!(text.contains("scanning:")); + app.key(crate::state::Key::Char('?')); + terminal.draw(|f| draw(f, &mut app)).unwrap(); + let text = buffer_lines(terminal.backend().buffer()).join("\n"); + assert!(text.contains("evio-tui keys")); + } +} diff --git a/rust/evio-tui/tests/corpus_access.rs b/rust/evio-tui/tests/corpus_access.rs new file mode 100644 index 0000000..0a45c54 --- /dev/null +++ b/rust/evio-tui/tests/corpus_access.rs @@ -0,0 +1,209 @@ +//! The headless harness on the big files: the converted v6 corpus file +//! (15.5 GB, `v6` layout) and the raw SRO stream (`sro-8word`). Each test +//! scans the file inline, times the scan, opens record 7000 by its offset +//! through the state machine, times that, and checks the events, the bank +//! tree and the frame summary. Skipped when the file is absent. Run with +//! `--nocapture` to see the timings. + +use std::path::Path; +use std::sync::mpsc; +use std::time::Instant; + +use evio_tui::scan::{self, ScanMessage}; +use evio_tui::state::{App, Key, Screen}; +use evio_tui::tree::TreeItem; + +const CORPUS_V6: &str = "/data/evio-lib/corpus/sro_000791.evio.00000.v6"; +const RAW_SRO: &str = "/data/sro_boyarinov_data_2026/sro_000791.evio.00000"; + +struct Expect { + layout: &'static str, + records: usize, + events: u64, + trailer: bool, + salvaged: Option, + record_7000_offset: u64, +} + +fn drive(path: &str, expect: &Expect) { + let path = Path::new(path); + if !path.is_file() { + eprintln!("skipped: {} is absent", path.display()); + return; + } + let (tx, rx) = mpsc::channel(); + let t0 = Instant::now(); + scan::scan(path, &tx); + drop(tx); + let scan_s = t0.elapsed().as_secs_f64(); + let mut app = App::new(path); + let mut messages = 0usize; + for message in rx { + messages += 1; + app.apply(message); + } + let end = app.scan.end.clone().expect("the scan finished"); + println!( + "{}: scan {scan_s:.2} s, {} records, {} events, {:.2} GB/s, {messages} messages", + path.display(), + app.scan.records.len(), + app.scan.events, + end.bytes as f64 / 1e9 / end.elapsed_s + ); + assert_eq!( + app.scan.start.as_ref().unwrap().layout.name(), + expect.layout + ); + assert_eq!(app.scan.records.len(), expect.records); + assert_eq!(app.scan.events, expect.events); + assert_eq!(end.trailer, expect.trailer); + assert_eq!( + end.truncated_tail.map(|t| t.salvaged_events), + expect.salvaged + ); + assert!(end.bad_record_header.is_none()); + assert!(end.error.is_none(), "{:?}", end.error); + + // record 7000: select it and open it through the state machine + app.records.select(7000); + let summary = app.selected_record().unwrap().clone(); + assert_eq!(summary.index, 7000); + assert_eq!(summary.offset, expect.record_7000_offset); + assert_eq!(summary.header.record_number, 7001); + let t1 = Instant::now(); + app.key(Key::Enter); + let open_s = t1.elapsed().as_secs_f64(); + assert_eq!(app.screen, Screen::Events, "{:?}", app.message); + let loaded = app.loaded.as_ref().unwrap(); + assert_eq!(loaded.index, 7000); + assert_eq!(loaded.offset, summary.offset); + assert_eq!(loaded.record.header.record_number, 7001); + assert_eq!(loaded.events.len(), summary.events_found); + assert_eq!(loaded.events.len(), 11); + assert!(loaded.events.iter().all(|e| e.is_stream_frame())); + println!( + "record 7000 at 0x{:X}: opened in {:.4} s ({} bytes, {} events)", + loaded.offset, + open_s, + loaded.record.present_bytes, + loaded.events.len() + ); + assert!(open_s < 1.0, "opening record 7000 took {open_s} s"); + + // the tree of event 0 walks without an error; the frame summary has hits + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Event); + let view = app.view.as_ref().unwrap(); + let errors = view.rows.iter().filter(|r| r.is_error()).count(); + assert_eq!(errors, 0); + // depth 1 holds the SIB (tag 0xFF31) and the ROC banks + let depth1: Vec = view + .rows + .iter() + .filter(|r| r.depth == 1) + .filter_map(|r| match r.item { + TreeItem::Node { tag, .. } => Some(tag), + TreeItem::Error { .. } => None, + }) + .collect(); + assert_eq!(depth1.first(), Some(&0xFF31)); + assert!(depth1.len() >= 2, "{depth1:?}"); + let (first, words) = app.selected_words().unwrap(); + assert_eq!(first, 0); + assert_eq!(words.len(), 64); + assert_eq!(words[1] >> 16, 0xFF60); + app.key(Key::Char('n')); + let (first, _) = app.selected_words().unwrap(); + assert_eq!(first, 64); + app.key(Key::Char('p')); + assert_eq!(app.selected_words().unwrap().0, 0); + app.key(Key::Char('f')); + let view = app.view.as_ref().unwrap(); + assert!(view.show_frame); + let frame = view.frame.as_ref().unwrap(); + println!("frame summary: {}", frame.lines.join(" | ")); + assert!(frame.lines[0].starts_with("frame ")); + assert!(frame.lines[2].contains("fADC250 hits")); + assert!(frame.lines.len() > 5, "per-ROC rows expected"); + assert!(frame.errors.is_empty(), "{:?}", frame.errors); + app.key(Key::Esc); + assert!(!app.view.as_ref().unwrap().show_frame); + assert_eq!(app.screen, Screen::Event); + + // the last record opens too (the cut tail of the raw file, the trailer + // of the converted one) + app.key(Key::Esc); + app.key(Key::Esc); + assert_eq!(app.screen, Screen::Records); + app.key(Key::End); + let last = app.selected_record().unwrap().clone(); + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Events, "{:?}", app.message); + let loaded = app.loaded.as_ref().unwrap(); + assert_eq!(loaded.index, last.index); + assert_eq!(loaded.events.len(), last.events_found); + assert_eq!(loaded.record.is_truncated, last.is_truncated); + println!( + "last record {} at 0x{:X}: {} events, truncated {}", + last.index, + last.offset, + loaded.events.len(), + loaded.record.is_truncated + ); +} + +#[test] +fn converted_v6_corpus_file() { + drive( + CORPUS_V6, + &Expect { + layout: "v6", + records: 7892, + events: 86794, + trailer: true, + salvaged: None, + record_7000_offset: 0x3364DC560, + }, + ); +} + +#[test] +fn raw_sro_stream() { + drive( + RAW_SRO, + &Expect { + layout: "sro-8word", + records: 7893, + events: 86794, + trailer: false, + salvaged: Some(2), + record_7000_offset: 0x33610BA10, + }, + ); +} + +/// The scan runs on its own thread and the receiver drains as messages +/// come: the first records arrive long before the end. +#[test] +fn background_scan_streams_records() { + let path = Path::new(CORPUS_V6); + if !path.is_file() { + eprintln!("skipped: {} is absent", path.display()); + return; + } + let t0 = Instant::now(); + let rx = scan::spawn(path.to_path_buf()); + let mut app = App::new(path); + let mut first_record_at = None; + for message in rx { + if first_record_at.is_none() && matches!(message, ScanMessage::Record(_)) { + first_record_at = Some(t0.elapsed().as_secs_f64()); + } + app.apply(message); + } + let total = t0.elapsed().as_secs_f64(); + let first = first_record_at.unwrap(); + println!("first record after {first:.4} s, scan done after {total:.2} s"); + assert!(app.scan.is_done()); + assert!(first < total / 2.0); +} diff --git a/rust/evio-tui/tests/render.rs b/rust/evio-tui/tests/render.rs new file mode 100644 index 0000000..81712aa --- /dev/null +++ b/rust/evio-tui/tests/render.rs @@ -0,0 +1,178 @@ +//! The screens drawn into ratatui's `TestBackend` for the small golden files +//! (`/data/evio-lib/golden`, read-only; skipped when absent): the records +//! screen text after a full scan, then the events and the event screens +//! driven by keys. + +use std::path::{Path, PathBuf}; +use std::sync::mpsc; + +use ratatui::backend::TestBackend; +use ratatui::Terminal; + +use evio_tui::scan::{self, ScanMessage}; +use evio_tui::state::{App, Key, Screen}; +use evio_tui::ui; + +fn golden(name: &str) -> Option { + let root = std::env::var_os("EVIO_GOLDEN_ROOT") + .map(PathBuf::from) + .unwrap_or_else(|| PathBuf::from("/data/evio-lib/golden")); + let path = root.join("cases/cpp").join(name); + if path.is_file() { + Some(path) + } else { + eprintln!("skipped: {} is absent", path.display()); + None + } +} + +/// Scan `path` inline and feed every message to a new `App`. +fn scanned_app(path: &Path) -> App { + let (tx, rx) = mpsc::channel(); + scan::scan(path, &tx); + drop(tx); + let mut app = App::new(path); + let mut finished = false; + for message in rx { + finished |= matches!(message, ScanMessage::Finished(_)); + app.apply(message); + } + assert!(finished, "the scan must end with Finished"); + app +} + +fn screen_text(terminal: &mut Terminal, app: &mut App) -> String { + terminal.draw(|f| ui::draw(f, app)).unwrap(); + ui::buffer_lines(terminal.backend().buffer()).join("\n") +} + +#[test] +fn records_screen_of_basic_le() { + let Some(path) = golden("basic_le.evio") else { + return; + }; + let mut app = scanned_app(&path); + assert_eq!(app.scan.records.len(), 2); + assert_eq!(app.scan.events, 18); + let end = app.scan.end.as_ref().unwrap(); + assert!(end.trailer); + assert!(end.truncated_tail.is_none()); + assert!(end.bad_record_header.is_none()); + + let mut terminal = Terminal::new(TestBackend::new(140, 30)).unwrap(); + let text = screen_text(&mut terminal, &mut app); + // the title, the table header, the two record rows and the status line + assert!(text.contains("basic_le.evio"), "{text}"); + assert!(text.contains("[records]"), "{text}"); + assert!(text.contains(" 1 records + trailer "), "{text}"); + assert!(text.contains(" index "), "{text}"); + assert!(text.contains("0x38"), "{text}"); + assert!(text.contains(" 752 "), "{text}"); + assert!(text.contains("record "), "{text}"); + assert!(text.contains("18"), "{text}"); + assert!(text.contains("0x328"), "{text}"); + assert!(text.contains("trailer"), "{text}"); + assert!(text.contains("none"), "{text}"); + // the side panel shows the selected record's header fields + assert!(text.contains("layout v6"), "{text}"); + assert!(text.contains("record number 1"), "{text}"); + assert!(text.contains("index array 72 bytes"), "{text}"); + // the status line shows the finished scan and the checks + assert!( + text.contains("done: 1 records + trailer 18 events"), + "{text}" + ); + assert!(text.contains("trailer yes"), "{text}"); + assert!(text.contains("truncated_tail none"), "{text}"); + assert!(text.contains("bad_record_header none"), "{text}"); + + // a narrow terminal drops the side panel but keeps the table + let mut narrow = Terminal::new(TestBackend::new(80, 12)).unwrap(); + let text = screen_text(&mut narrow, &mut app); + assert!(text.contains("0x38"), "{text}"); + assert!(!text.contains("record number"), "{text}"); +} + +#[test] +fn events_and_event_screens_of_lz4_le() { + let Some(path) = golden("lz4_le.evio") else { + return; + }; + let mut app = scanned_app(&path); + assert_eq!(app.scan.records.len(), 2); + assert_eq!(app.scan.records[0].header.compression.name(), "lz4"); + let mut terminal = Terminal::new(TestBackend::new(120, 30)).unwrap(); + let text = screen_text(&mut terminal, &mut app); + assert!(text.contains("lz4"), "{text}"); + + // Enter opens record 0: 18 events read from the file at offset 0x38 + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Events, "{:?}", app.message); + let loaded = app.loaded.as_ref().unwrap(); + assert_eq!(loaded.index, 0); + assert_eq!(loaded.offset, 0x38); + assert_eq!(loaded.events.len(), 18); + assert_eq!(loaded.record.header.record_number, 1); + let text = screen_text(&mut terminal, &mut app); + assert!(text.contains("[events]"), "{text}"); + assert!(text.contains("record 0 at 0x38: 18 events"), "{text}"); + assert!(text.contains("0x0101"), "{text}"); + assert!(text.contains("0x01 uint32"), "{text}"); + + // event 16 (tag 0x010E, a bank of banks): the tree has more than one row + app.key(Key::End); + app.key(Key::Up); + assert_eq!(app.selected_event().unwrap().tag, 0x010E); + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Event); + let view = app.view.as_ref().unwrap(); + assert_eq!(view.event_index, 16); + assert!(view.rows.len() > 1, "{:?}", view.rows); + assert!(view.rows.iter().all(|r| !r.is_error()), "{:?}", view.rows); + let text = screen_text(&mut terminal, &mut app); + assert!(text.contains("[event]"), "{text}"); + assert!(text.contains("Bank"), "{text}"); + assert!(text.contains("0x010E"), "{text}"); + assert!(text.contains("words 0.."), "{text}"); + // the first hex row starts at word 0 with the length word of the event + assert!(text.contains(" 0 00000007"), "{text}"); + + // f on a non-frame event leaves a message, not a frame panel + app.key(Key::Char('f')); + assert!(app + .message + .as_deref() + .unwrap_or("") + .contains("no stream frame")); + assert!(!app.view.as_ref().unwrap().show_frame); + + // Esc walks back: event -> events -> records + app.key(Key::Esc); + assert_eq!(app.screen, Screen::Events); + app.key(Key::Esc); + assert_eq!(app.screen, Screen::Records); + + // the trailer opens too: a record with no events + app.key(Key::End); + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Events, "{:?}", app.message); + assert_eq!(app.loaded.as_ref().unwrap().events.len(), 0); + assert!(app.loaded.as_ref().unwrap().record.is_trailer()); + app.key(Key::Enter); + assert_eq!(app.screen, Screen::Events); +} + +#[test] +fn a_missing_file_fails_the_scan() { + let (tx, rx) = mpsc::channel(); + scan::scan(Path::new("/nonexistent/run.evio"), &tx); + drop(tx); + let messages: Vec = rx.iter().collect(); + assert_eq!(messages.len(), 1); + assert!(matches!(messages[0], ScanMessage::Failed(_))); + let mut app = App::new("/nonexistent/run.evio"); + app.apply(messages[0].clone()); + let mut terminal = Terminal::new(TestBackend::new(100, 10)).unwrap(); + let text = screen_text(&mut terminal, &mut app); + assert!(text.contains("scan failed"), "{text}"); +} From 65d607428cb5415a3bed39f6bd88b4fb4518cb1c Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:13:53 -0400 Subject: [PATCH 57/65] Document evio-tui in rust/README.md Describe the workspace, the viewer's screens and keys, how random access works without a library change, the measured timings from the logged run, and the workspace-wide test commands. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- rust/README.md | 105 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 96 insertions(+), 9 deletions(-) diff --git a/rust/README.md b/rust/README.md index 9b92522..bc375d3 100644 --- a/rust/README.md +++ b/rust/README.md @@ -1,9 +1,11 @@ # evio-stream: a streaming EVIO v6 reader in Rust -`rust/evio-stream` is a read-only, streaming reader for the files pyevio -reads, written against the same format references -(`docs/evio6_file_structure.md`, `docs/stream_decoding.md`) and checked -against the same rulers. It is a library with two command-line tools. +`rust/` is a cargo workspace of two crates: `evio-stream`, a read-only, +streaming reader for the files pyevio reads, written against the same +format references (`docs/evio6_file_structure.md`, +`docs/stream_decoding.md`) and checked against the same rulers, a library +with two command-line tools; and `evio-tui`, a minimal terminal viewer on +top of it (see [evio-tui](#evio-tui-a-minimal-terminal-viewer) below). What it reads: @@ -92,13 +94,96 @@ words, AIS counts, decode errors, a per-ROC table. the bank tree of event M of record N (tag, type, num, length) with the first K words of each leaf in hex. +## evio-tui: a minimal terminal viewer + +``` +cd rust +cargo build --release +target/release/evio-tui FILE +``` + +`rust/evio-tui` is a fast way to look inside a file from a terminal, +nothing more; the rich viewers are the Python ones (`pyevio gui`, +`pyevio web`). It is built on `ratatui` and `crossterm` (the only +dependencies beyond `evio-stream`). Three screens, one level deeper each: + +- **Records.** A background thread streams the file from the start with + `RecordReader` and sends one small summary per record over a channel; the + list fills while the scan runs and the interface never waits on the file. + One row per record: index, offset, bytes, record or trailer, events + declared and found, compression, truncated, error count (rows with errors + or a cut tail in red). The side panel (terminals 100 columns and wider) + shows every header field of the selected record and the file line + (layout, byte order, file type, declared record count, dictionary, first + event, trailer index). The status line shows records, events, bytes, + seconds and GB/s while the scan runs, then the checks: trailer, + `truncated_tail (declared, present, salvaged)`, `bad_record_header`. +- **Events of a record.** Enter opens the selected record: index, length in + words, tag, data type, num, and "stream frame" for tag 0xFF60. One record + is in memory at a time. +- **Bank tree and words of an event.** Enter opens the selected event: one + row per bank, segment or tagsegment at every level (kind, tag, type, num, + length, total words), a `WalkError` in red where a length was bad. The + panel below shows the selected structure's first 64 words in hex, 8 per + row with the word offset at the left; `n`/`p` move the window. For a + stream frame `f` shows the `FrameDecoder` summary: frame number, + timestamp, ROC and payload bank counts, hits, other-module words, AIS, a + per-ROC table (module, payload banks, empty, hits, other words), and the + decoder's errors (red) and warnings (yellow). + +Keys: arrows, PgUp/PgDn, Home/End, `g`/`G` move; Enter (or Right) opens; +Esc (or Left, Backspace) goes back one level (it closes the frame panel +first); `n`/`p` next/previous 64 words; `f` frame summary; `?` one-screen +help; `q` or Ctrl-C quits from anywhere. +Standard input is not supported: the viewer opens records by seeking to +their offset, so `evio-tui -` prints a message and exits. + +Random access: the library reader is forward-only, but every layout starts +each record with a record header, so opening a record seeks a fresh file +handle to the offset noted during the scan and starts a new +`RecordReader::new` there: a 14-word v6 header is taken for the +`v6-records` layout, an 8-word SRO block header for `sro-8word`, and the +first record read is the one wanted. No layout hint and no library change +were needed; `evio-tui/tests/corpus_access.rs` checks it on the converted +corpus file and on the raw SRO stream (record 7000 of each, the trailer and +the cut tail), and `tests/render.rs` draws the screens into ratatui's +`TestBackend` for the golden files. + +Measured on this host, one thread, by the harness in +`tests/corpus_access.rs` (`--test-threads=1`; the logged run is +`/data/pyevio/logs/phase6_rust_tui_tests.log`): + +- `sro_000791.evio.00000.v6` (15.5 GB, `v6`): scan 1.66 s, 9.35 GB/s with + the file in the page cache, 7891 records + trailer (the list has one row + per record, the trailer included, and the status line names the trailer + separately so the count matches `evio-count`), 86,794 events; the first + record message arrives 1 ms after the thread starts; record 7000 (offset + 0x3364DC560, 1.9 MB, 11 stream frames) opens in 0.3 ms. +- Raw `sro_000791.evio.00000` (15.5 GB, `sro-8word`): 7893 records (the cut + tail included), 86,794 events, `truncated_tail (1967400, 531760, 2)`; + record 7000 (offset 0x33610BA10) opens in 0.4 ms; the cut tail opens with + its 2 salvaged events. The scan took 1.59 s (9.80 GB/s) with the file in + the page cache and 4.97 s (3.13 GB/s) in the logged run, where part of it + had been evicted by the scans before it. + +Opening a record is a seek plus one record read, so it costs the same at +record 0 and at record 7000; a 64 MB gzip record would take as long as its +decompression. + +Code layout: `scan` (the thread and its messages), `access` (seek and read +one record), `state` (what is shown and selected, the keys), `format` (the +text of every cell and panel), `tree` (the flattened bank tree), `ui` (the +only module that draws). Everything but `ui` runs without a terminal, and +the state machine is what the tests drive. + ## Rulers and tests ``` -cd rust/evio-stream -cargo test --release # unit tests + the golden manifest +cd rust +cargo test --release --workspace # both crates: unit, golden, render, corpus harness +cargo fmt --all --check && cargo clippy --all-targets -- -D warnings +cd evio-stream EVIO_CORPUS=1 cargo test --release --test corpus -- --nocapture # 140 GB, minutes -cargo fmt --check && cargo clippy --all-targets -- -D warnings ``` - Golden set (`tests/golden.rs`, `tests/data/golden_manifest.tsv` generated @@ -127,7 +212,8 @@ cargo fmt --check && cargo clippy --all-targets -- -D warnings `Record.errors`; it is the expected trace of the truncation, not a defect. Logs of the last run: `/data/pyevio/logs/phase6_rust_tests.log` and -`/data/pyevio/logs/phase6_rust_corpus.log`. +`/data/pyevio/logs/phase6_rust_corpus.log`; the workspace run with +evio-tui: `/data/pyevio/logs/phase6_rust_tui_tests.log`. ## Speed (one thread) @@ -148,7 +234,8 @@ Measured on this host (24 cores, 62 GB) with the raw file ## Not included -Writing, random access by record index (the reader is forward-only), +Writing, random access by record index in the library (the reader is +forward-only; evio-tui seeks to offsets it noted in its own scan), dictionaries and composite data decoding (the bytes are exposed, not parsed), and the statistics layer of `pyevio.stream_stats`. From cfda04a9313f4e4bde51dc78091e4c1da7810d01 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:14:32 -0400 Subject: [PATCH 58/65] Point the README and the changelog at the Rust workspace One paragraph in the README overview and one changelog line name rust/evio-stream (the streaming reader, its tools and the rulers it passes) and rust/evio-tui, and say they are independent of the Python wheel; rust/README.md holds the details. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 1 + README.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b587ef2..0715683 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Added +- `rust/`: a cargo workspace beside the Python package. `evio-stream` is a streaming, read-only EVIO v6 reader library over any `std::io::Read` (v6 files, bare record streams and the SRO 8-word block stream, both byte orders, LZ4/LZ4_BEST/gzip records, checked bank walk, fADC250 frame walk) with the `evio-count` and `evio-dump` tools; it reproduces the golden manifest, the corpus and the SRO reference numbers and decodes every hit of a 15.5 GB raw file in about 3 s on one thread. `evio-tui` is a minimal terminal viewer on top of it (records, events, bank tree and words, frame summary). See `rust/README.md`. Not part of the Python wheel. - File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). - Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check, `pyevio debug` prints the messages and the Parquet example prints them to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. - `pyevio stats` prints the decode warnings and the AIS check (frames with an aggregation info segment, frames whose segment repeats one entry), the same checks the viewer shows (F61). diff --git a/README.md b/README.md index 70b8a91..5d07588 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ A Python library and command-line tool for reading and inspecting EVIO (Event In - Decoding CODA streaming fADC250 time frames into hit arrays and computing histograms and file checks over a whole file in one parallel pass - Browsing a file — checks, plots, record table, structure tree — in a browser (`pyevio web`, [docs/web_viewer.md](docs/web_viewer.md)) or in the terminal over SSH (`pyevio gui`, [docs/console_gui.md](docs/console_gui.md)); the two share one statistics cache +The repository also holds [`rust/`](rust/README.md), a cargo workspace with `evio-stream`, a streaming read-only EVIO v6 reader in Rust that passes the same golden and SRO rulers (about 3 s for every hit of a 15.5 GB raw file on one thread), its `evio-count` and `evio-dump` tools, and `evio-tui`, a minimal terminal viewer. It is independent of the Python package. + ## What pyevio reads | file | how it is read | From b4165fda3feb477cab979312b1399f72307e6379 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:36:38 -0400 Subject: [PATCH 59/65] Console plots: exact heatmap cells, equal rows, log charge axis The occupancy heatmap of the console viewer is now laid out by the pane as a Rich text instead of a plotext matrix_plot. F64: at the screenshot size plotext's canvas had 15 lines for 16 ports, merged two ports onto one line and overstruck their centred text() labels (93.6k under 55k read 955kk); every count is now written into its own cell. F65: cells are a whole number of lines and columns with the leftovers as margins, so all rows and columns are the same size; a plot lower than its row count pairs rows as half blocks, lower than half says what it needs. F68: the charge spectrum draws log10(1 + count) with ticks at the real counts (1, 10, 100, 1k, ...) and the label "hits (log)", since plotext's own log scale raises on empty bins and reads ylim in log units; the PNG export is unchanged. Tests for the three cases, docs updated, the two plots screenshots regenerated. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- docs/console_gui.md | 8 +- docs/images/console_gui_plots_file.svg | 301 ++++++++----------- docs/images/console_gui_plots_roc.svg | 383 ++++++++----------------- pyevio/gui/plots.py | 228 +++++++++++---- tests/gui/make_screenshots.py | 6 +- tests/gui/test_plots.py | 126 +++++++- 6 files changed, 556 insertions(+), 496 deletions(-) diff --git a/docs/console_gui.md b/docs/console_gui.md index 1109a9c..6a397e2 100644 --- a/docs/console_gui.md +++ b/docs/console_gui.md @@ -106,13 +106,13 @@ All histograms come from `pyevio stats`; the pane draws the bins it receives wit ![File-level plots](images/console_gui_plots_file.svg) -**ROC:** the port × channel occupancy of the ROC, its hit rate over time, charge spectrum and hit time within the frame. +**ROC:** the port × channel occupancy of the ROC, its hit rate over time, charge spectrum and hit time within the frame. The charge spectrum has a logarithmic y axis (`hits (log)`), as in the browser and the PNG: the bars are drawn at log10(1 + count), so empty bins stay at zero, and the ticks are labelled with the real counts (`1`, `10`, `100`, `1k`, …). ![Per-ROC plots](images/console_gui_plots_roc.svg) **Channel:** hit rate, charge spectrum and time in frame of one channel; `+` and `-` step through the channels of the ROC port by port. -The heatmap colour ramp is square-root scaled, as in the browser, so a few hot channels do not flatten the rest. +The heatmap is laid out by the pane itself, not by plotext: every row is the same whole number of lines and every column the same whole number of columns, the lines and columns left over are margins, and each count is written into its own cell. Its colour ramp is square-root scaled, as in the browser, so a few hot channels do not flatten the rest. In a plot lower than it has rows (16 ports in the 14 lines of a 40-line terminal) two rows share a line as half blocks, the upper row the colour of the `▀` and the lower one its background, and every other row is labelled; in one lower than half its rows the plot says how many lines it needs. ### Records @@ -135,8 +135,8 @@ Right, the highlighted node: its id, every field of its header, its walk errors ## Limitations - Plots have character resolution: a histogram with more bins than the plot is wide is rebinned to fit (the counts add up, the rate is averaged over the frames of the merged bins), and a plot narrower than 16 columns or lower than 6 rows stays blank. The PNG export keeps every bin. -- The charge spectrum has a linear y axis in the terminal; the PNG uses a logarithmic one, as the browser does. -- The counts in the occupancy heatmap are printed only when every count of the plot fits in its cell with a margin. With 16 ports or channels across and counts in the millions (`10.6M`, five characters) that takes a plot about 125 columns wide, i.e. a terminal of about 260 columns in the 2 × 2 grid; the screenshots above are at 260 × 50. Narrower, the cells show the colour only; the dash of an unmapped port is always shown. +- The occupancy heatmap needs one line per row under its three bottom lines (axis, tick labels, titles), or half a line per row with the rows paired as half blocks: 16 ports take a plot 19 lines high (a terminal of about 50 lines in the 2 × 2 grid) for one row per line and 11 lines for the paired rows, below which the plot says how many lines it needs. +- The counts in the occupancy heatmap are printed only when every count of the plot fits in its cell with a column to spare on each side. With 16 ports or channels across and counts in the millions (`10.6M`, five characters) that takes cells seven columns wide, a plot about 120 columns wide, i.e. a terminal of about 250 columns in the 2 × 2 grid; the screenshots above are at 260 × 50. Narrower, the cells show the colour only, but the dash of an unmapped port is always printed while each row has a line of its own; with the rows paired an unmapped port is grey only. - The detail column of the Structure tab cannot take the focus (a focusable widget inside a hidden tab would pull Textual back to that tab, see `pyevio/gui/structure.py`); it scrolls with the mouse wheel only. The tree and the record table scroll with the keys. - The step keys of the Plots tab (`]` `[` `}` `{` `+` `-`) are not listed in the footer; the hint line next to the selection boxes lists them. diff --git a/docs/images/console_gui_plots_file.svg b/docs/images/console_gui_plots_file.svg index ab8ab0c..c62e398 100644 --- a/docs/images/console_gui_plots_file.svg +++ b/docs/images/console_gui_plots_file.svg @@ -19,305 +19,252 @@ font-weight: 700; } - .terminal-1864608335-matrix { + .terminal-2815671264-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1864608335-title { + .terminal-2815671264-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1864608335-r1 { fill: #c5c8c6 } -.terminal-1864608335-r2 { fill: #e0e0e0 } -.terminal-1864608335-r3 { fill: #a0a3a6 } -.terminal-1864608335-r4 { fill: #797979 } -.terminal-1864608335-r5 { fill: #262626 } -.terminal-1864608335-r6 { fill: #0178d4 } -.terminal-1864608335-r7 { fill: #121212 } -.terminal-1864608335-r8 { fill: #191919 } -.terminal-1864608335-r9 { fill: #7f7f7f } -.terminal-1864608335-r10 { fill: #a0a0a0 } -.terminal-1864608335-r11 { fill: #fea62b } -.terminal-1864608335-r12 { fill: #45505a } -.terminal-1864608335-r13 { fill: #1f6fb5 } -.terminal-1864608335-r14 { fill: #273c5a } -.terminal-1864608335-r15 { fill: #f0f0f0 } -.terminal-1864608335-r16 { fill: #29405e } -.terminal-1864608335-r17 { fill: #2c4564 } -.terminal-1864608335-r18 { fill: #263a57 } -.terminal-1864608335-r19 { fill: #263c59 } -.terminal-1864608335-r20 { fill: #273d5a } -.terminal-1864608335-r21 { fill: #253a57 } -.terminal-1864608335-r22 { fill: #263b59 } -.terminal-1864608335-r23 { fill: #2d4767 } -.terminal-1864608335-r24 { fill: #1c2a44 } -.terminal-1864608335-r25 { fill: #2a4261 } -.terminal-1864608335-r26 { fill: #233552 } -.terminal-1864608335-r27 { fill: #283f5d } -.terminal-1864608335-r28 { fill: #263b58 } -.terminal-1864608335-r29 { fill: #273c59 } -.terminal-1864608335-r30 { fill: #283e5c } -.terminal-1864608335-r31 { fill: #253956 } -.terminal-1864608335-r32 { fill: #5a5a5a } -.terminal-1864608335-r33 { fill: #29415f } -.terminal-1864608335-r34 { fill: #2f4a6a } -.terminal-1864608335-r35 { fill: #2b4462 } -.terminal-1864608335-r36 { fill: #2b4362 } -.terminal-1864608335-r37 { fill: #223450 } -.terminal-1864608335-r38 { fill: #2a4160 } -.terminal-1864608335-r39 { fill: #273d5b } -.terminal-1864608335-r40 { fill: #243855 } -.terminal-1864608335-r41 { fill: #2b4463 } -.terminal-1864608335-r42 { fill: #2a415f } -.terminal-1864608335-r43 { fill: #2d4867 } -.terminal-1864608335-r44 { fill: #283e5b } -.terminal-1864608335-r45 { fill: #2a4260 } -.terminal-1864608335-r46 { fill: #2f4b6b } -.terminal-1864608335-r47 { fill: #5184af } -.terminal-1864608335-r48 { fill: #5389b4 } -.terminal-1864608335-r49 { fill: #5084ae } -.terminal-1864608335-r50 { fill: #548ab5 } -.terminal-1864608335-r51 { fill: #416a90 } -.terminal-1864608335-r52 { fill: #4f81ab } -.terminal-1864608335-r53 { fill: #3f678c } -.terminal-1864608335-r54 { fill: #4f82ac } -.terminal-1864608335-r55 { fill: #68acde } -.terminal-1864608335-r56 { fill: #141414 } -.terminal-1864608335-r57 { fill: #78c8ff } -.terminal-1864608335-r58 { fill: #5f9ecd } -.terminal-1864608335-r59 { fill: #5e9ccb } -.terminal-1864608335-r60 { fill: #5286b1 } -.terminal-1864608335-r61 { fill: #5186b1 } -.terminal-1864608335-r62 { fill: #5083ae } -.terminal-1864608335-r63 { fill: #5388b3 } -.terminal-1864608335-r64 { fill: #40678c } -.terminal-1864608335-r65 { fill: #3e6488 } -.terminal-1864608335-r66 { fill: #5083ad } -.terminal-1864608335-r67 { fill: #65a8d9 } -.terminal-1864608335-r68 { fill: #6bb1e4 } -.terminal-1864608335-r69 { fill: #609fcf } -.terminal-1864608335-r70 { fill: #ffa62b;font-weight: bold } -.terminal-1864608335-r71 { fill: #495259 } + .terminal-2815671264-r1 { fill: #c5c8c6 } +.terminal-2815671264-r2 { fill: #e0e0e0 } +.terminal-2815671264-r3 { fill: #a0a3a6 } +.terminal-2815671264-r4 { fill: #797979 } +.terminal-2815671264-r5 { fill: #262626 } +.terminal-2815671264-r6 { fill: #0178d4 } +.terminal-2815671264-r7 { fill: #121212 } +.terminal-2815671264-r8 { fill: #191919 } +.terminal-2815671264-r9 { fill: #7f7f7f } +.terminal-2815671264-r10 { fill: #a0a0a0 } +.terminal-2815671264-r11 { fill: #fea62b } +.terminal-2815671264-r12 { fill: #45505a } +.terminal-2815671264-r13 { fill: #1f6fb5 } +.terminal-2815671264-r14 { fill: #999999 } +.terminal-2815671264-r15 { fill: #f0f0f0 } +.terminal-2815671264-r16 { fill: #141414 } +.terminal-2815671264-r17 { fill: #ffa62b;font-weight: bold } +.terminal-2815671264-r18 { fill: #495259 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - pyevio + pyevio - - - - ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 -sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) -OverviewPlotsRecordsStructure -━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ -▊File▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all -▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ -╭─ Hits per frame — file ──────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — file ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ -│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ -│30k┤│││150M┤││ -││││││⠤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣀⣀⣀⣠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣠⠤⣄⣠⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤││ -││█████││││││ -││█████││││││ -││█████││││││ -│20k┤█████│││100M┤││ -││█████││││││ -││█████││││││ -││█████████││││││ -│10k┤█████████│││ 50M┤││ -││█████████││││││ -││█████████││││││ -││█████████████││││││ -││█████████████││││││ -│  0┤                                                                                                █████████████████████████│││   0┤││ -│└┬───────────────────────┬────────────────────────┬───────────────────────┬───────────────────────┬───────────────────────┘││└┬─────────────────────────┬──────────────────────────┬─────────────────────────┬─────────────────────────┬───────────────┘│ -│02000400060008000││05101520│ -│frameshits per frame││hit rate (Hz)time since the first frame (s)│ -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ -╭─ Occupancy (ROC × port) — file ──────────────────────────────────────────────────────────────────────────────────────────────╮ -│┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ -│ ROC 7┤█964k████1.33M██2.11M██762k████905k███1.02M██2.06M███1.01M██2.07M███730k███857k███1.42M███2.43M████0████2.1M██████0███││ -││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│ ROC 9┤█1.66M███372k███1.26M██824k████935k███1.14M██678k████1.38M██1.66M█████–████1.51M████–█████2.95M████–████1.88M█████–███││ -│ROC 25┤█917k████804k███1.8M███281k████1.01M██666k███1.55M███970k███1.05M███858k███578k███1.96M███1.54M████0████2.55M█████0███││ -│ROC 27┤█1.67M███373k███1.26M██813k████946k███1.11M██591k████1.53M██1.59M█████–████1.58M████–█████3.15M████–████1.92M█████–███││ -│ROC 29┤█23.2M███25.7M██22.8M██26.2M███11.7M██21.6M██10.5M███22.1M██48.4M█████–████71.1M████–█████38.1M████–████36.9M█████–███││ -│ROC 44┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│ROC 45┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -│ROC 46┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -│ROC 53┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -│ROC 54┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -│ROC 55┤███–███████–██████0██████0███████0██████0██████0███████0██████0███████0██████0██████0███████0██████0██████0███████0███││ -││██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│ROC 84┤█24.3M████24M███22.7M██25.2M███10.6M██23.1M██9.52M███22.6M██45.3M█████–████52.1M████–██████39M█████–█████38M██████–███││ -│└───┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬───┘│ -│12345678910111213141516│ -│ROCpayload port│ -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ - f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ +▊File▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all +▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ +╭─ Hits per frame — file ──────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — file ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│30k┤│││150M┤││ +││││││⠤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣀⣀⣀⣠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⣄⣠⠤⣄⣠⢤⣀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤││ +││█████││││││ +││█████││││││ +││█████││││││ +│20k┤█████│││100M┤││ +││█████││││││ +││█████││││││ +││█████████││││││ +│10k┤█████████│││ 50M┤││ +││█████████││││││ +││█████████││││││ +││█████████████││││││ +││█████████████││││││ +│  0┤                                                                                                █████████████████████████│││   0┤││ +│└┬───────────────────────┬────────────────────────┬───────────────────────┬───────────────────────┬───────────────────────┘││└┬─────────────────────────┬──────────────────────────┬─────────────────────────┬─────────────────────────┬───────────────┘│ +│02000400060008000││05101520│ +│frameshits per frame││hit rate (Hz)time since the first frame (s)│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Occupancy (ROC × port) — file ──────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +││││ +│ROC 7┤964k1.33M2.11M762k905k1.02M2.06M1.01M2.07M730k857k1.42M2.43M02.1M0││ +│ROC 9┤1.66M372k1.26M824k935k1.14M678k1.38M1.66M–1.51M–2.95M–1.88M–││ +│ROC 25┤917k804k1.8M281k1.01M666k1.55M970k1.05M858k578k1.96M1.54M02.55M0││ +│ROC 27┤1.67M373k1.26M813k946k1.11M591k1.53M1.59M–1.58M–3.15M–1.92M–││ +│ROC 29┤23.2M25.7M22.8M26.2M11.7M21.6M10.5M22.1M48.4M–71.1M–38.1M–36.9M–││ +│ROC 44┤––00000000000000││ +│ROC 45┤––00000000000000││ +│ROC 46┤––00000000000000││ +│ROC 53┤––00000000000000││ +│ROC 54┤––00000000000000││ +│ROC 55┤––00000000000000││ +│ROC 84┤24.3M24M22.7M25.2M10.6M23.1M9.52M22.6M45.3M–52.1M–39M–38M–││ +││││ +││││ +│└──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┘│ +│12345678910111213141516│ +│ROCpayload port│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ + f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette diff --git a/docs/images/console_gui_plots_roc.svg b/docs/images/console_gui_plots_roc.svg index 78c2375..3547bd7 100644 --- a/docs/images/console_gui_plots_roc.svg +++ b/docs/images/console_gui_plots_roc.svg @@ -19,387 +19,252 @@ font-weight: 700; } - .terminal-575710889-matrix { + .terminal-994786451-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-575710889-title { + .terminal-994786451-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-575710889-r1 { fill: #c5c8c6 } -.terminal-575710889-r2 { fill: #e0e0e0 } -.terminal-575710889-r3 { fill: #a0a3a6 } -.terminal-575710889-r4 { fill: #797979 } -.terminal-575710889-r5 { fill: #262626 } -.terminal-575710889-r6 { fill: #0178d4 } -.terminal-575710889-r7 { fill: #121212 } -.terminal-575710889-r8 { fill: #191919 } -.terminal-575710889-r9 { fill: #7f7f7f } -.terminal-575710889-r10 { fill: #a0a0a0 } -.terminal-575710889-r11 { fill: #fea62b } -.terminal-575710889-r12 { fill: #45505a } -.terminal-575710889-r13 { fill: #40688d } -.terminal-575710889-r14 { fill: #f0f0f0 } -.terminal-575710889-r15 { fill: #1c2a44 } -.terminal-575710889-r16 { fill: #467299 } -.terminal-575710889-r17 { fill: #48759d } -.terminal-575710889-r18 { fill: #3d6388 } -.terminal-575710889-r19 { fill: #457198 } -.terminal-575710889-r20 { fill: #47749b } -.terminal-575710889-r21 { fill: #467199 } -.terminal-575710889-r22 { fill: #4c7ca5 } -.terminal-575710889-r23 { fill: #3d6387 } -.terminal-575710889-r24 { fill: #436c92 } -.terminal-575710889-r25 { fill: #416a8f } -.terminal-575710889-r26 { fill: #5286b1 } -.terminal-575710889-r27 { fill: #436d93 } -.terminal-575710889-r28 { fill: #41698f } -.terminal-575710889-r29 { fill: #4c7ca6 } -.terminal-575710889-r30 { fill: #446f96 } -.terminal-575710889-r31 { fill: #4a79a1 } -.terminal-575710889-r32 { fill: #4b7ba4 } -.terminal-575710889-r33 { fill: #49779f } -.terminal-575710889-r34 { fill: #49769e } -.terminal-575710889-r35 { fill: #5083ad } -.terminal-575710889-r36 { fill: #4978a0 } -.terminal-575710889-r37 { fill: #47749c } -.terminal-575710889-r38 { fill: #4d7ea7 } -.terminal-575710889-r39 { fill: #5288b3 } -.terminal-575710889-r40 { fill: #4a7aa2 } -.terminal-575710889-r41 { fill: #1f6fb5 } -.terminal-575710889-r42 { fill: #5a95c2 } -.terminal-575710889-r43 { fill: #5993c0 } -.terminal-575710889-r44 { fill: #5a94c1 } -.terminal-575710889-r45 { fill: #72bef3 } -.terminal-575710889-r46 { fill: #141414 } -.terminal-575710889-r47 { fill: #71bdf2 } -.terminal-575710889-r48 { fill: #62a3d3 } -.terminal-575710889-r49 { fill: #6ab1e3 } -.terminal-575710889-r50 { fill: #78c8ff } -.terminal-575710889-r51 { fill: #6bb3e6 } -.terminal-575710889-r52 { fill: #304c6c } -.terminal-575710889-r53 { fill: #5287b2 } -.terminal-575710889-r54 { fill: #4b7ba3 } -.terminal-575710889-r55 { fill: #233652 } -.terminal-575710889-r56 { fill: #2d4867 } -.terminal-575710889-r57 { fill: #335273 } -.terminal-575710889-r58 { fill: #314f70 } -.terminal-575710889-r59 { fill: #335172 } -.terminal-575710889-r60 { fill: #395c7f } -.terminal-575710889-r61 { fill: #3d6286 } -.terminal-575710889-r62 { fill: #457096 } -.terminal-575710889-r63 { fill: #436c93 } -.terminal-575710889-r64 { fill: #3f668b } -.terminal-575710889-r65 { fill: #40688e } -.terminal-575710889-r66 { fill: #3e658a } -.terminal-575710889-r67 { fill: #314e6f } -.terminal-575710889-r68 { fill: #40678c } -.terminal-575710889-r69 { fill: #3f678c } -.terminal-575710889-r70 { fill: #3b6084 } -.terminal-575710889-r71 { fill: #3d6287 } -.terminal-575710889-r72 { fill: #41698e } -.terminal-575710889-r73 { fill: #48769e } -.terminal-575710889-r74 { fill: #4a7aa3 } -.terminal-575710889-r75 { fill: #4d7ea8 } -.terminal-575710889-r76 { fill: #426c92 } -.terminal-575710889-r77 { fill: #4977a0 } -.terminal-575710889-r78 { fill: #4c7da6 } -.terminal-575710889-r79 { fill: #3c6286 } -.terminal-575710889-r80 { fill: #40678d } -.terminal-575710889-r81 { fill: #4e7fa9 } -.terminal-575710889-r82 { fill: #436d94 } -.terminal-575710889-r83 { fill: #457097 } -.terminal-575710889-r84 { fill: #4f81ab } -.terminal-575710889-r85 { fill: #6eb7ea } -.terminal-575710889-r86 { fill: #70baef } -.terminal-575710889-r87 { fill: #6eb7eb } -.terminal-575710889-r88 { fill: #6bb2e5 } -.terminal-575710889-r89 { fill: #71bbf0 } -.terminal-575710889-r90 { fill: #6ab0e3 } -.terminal-575710889-r91 { fill: #62a2d2 } -.terminal-575710889-r92 { fill: #2f4b6b } -.terminal-575710889-r93 { fill: #273e5b } -.terminal-575710889-r94 { fill: #283e5c } -.terminal-575710889-r95 { fill: #2b4362 } -.terminal-575710889-r96 { fill: #2f4a6a } -.terminal-575710889-r97 { fill: #324f70 } -.terminal-575710889-r98 { fill: #4d7fa9 } -.terminal-575710889-r99 { fill: #5993c1 } -.terminal-575710889-r100 { fill: #548ab5 } -.terminal-575710889-r101 { fill: #4e80aa } -.terminal-575710889-r102 { fill: #5c98c6 } -.terminal-575710889-r103 { fill: #548bb7 } -.terminal-575710889-r104 { fill: #5185b0 } -.terminal-575710889-r105 { fill: #2c4665 } -.terminal-575710889-r106 { fill: #2b4563 } -.terminal-575710889-r107 { fill: #2d4767 } -.terminal-575710889-r108 { fill: #2e4a6a } -.terminal-575710889-r109 { fill: #325071 } -.terminal-575710889-r110 { fill: #304d6d } -.terminal-575710889-r111 { fill: #426b91 } -.terminal-575710889-r112 { fill: #3c6185 } -.terminal-575710889-r113 { fill: #558db9 } -.terminal-575710889-r114 { fill: #548bb6 } -.terminal-575710889-r115 { fill: #71bcf1 } -.terminal-575710889-r116 { fill: #5f9dcc } -.terminal-575710889-r117 { fill: #65a7d8 } -.terminal-575710889-r118 { fill: #4f82ac } -.terminal-575710889-r119 { fill: #5084af } -.terminal-575710889-r120 { fill: #67aadc } -.terminal-575710889-r121 { fill: #355476 } -.terminal-575710889-r122 { fill: #355577 } -.terminal-575710889-r123 { fill: #3a5e82 } -.terminal-575710889-r124 { fill: #3a5d81 } -.terminal-575710889-r125 { fill: #3a5e81 } -.terminal-575710889-r126 { fill: #3b6083 } -.terminal-575710889-r127 { fill: #3e6489 } -.terminal-575710889-r128 { fill: #4e81ab } -.terminal-575710889-r129 { fill: #568dba } -.terminal-575710889-r130 { fill: #63a4d4 } -.terminal-575710889-r131 { fill: #5389b4 } -.terminal-575710889-r132 { fill: #5084ae } -.terminal-575710889-r133 { fill: #568eba } -.terminal-575710889-r134 { fill: #5e9ccb } -.terminal-575710889-r135 { fill: #61a0d0 } -.terminal-575710889-r136 { fill: #578fbb } -.terminal-575710889-r137 { fill: #558bb7 } -.terminal-575710889-r138 { fill: #5e9bca } -.terminal-575710889-r139 { fill: #5890bd } -.terminal-575710889-r140 { fill: #61a1d1 } -.terminal-575710889-r141 { fill: #5992bf } -.terminal-575710889-r142 { fill: #5b96c4 } -.terminal-575710889-r143 { fill: #5f9dcd } -.terminal-575710889-r144 { fill: #5f9ecd } -.terminal-575710889-r145 { fill: #446f95 } -.terminal-575710889-r146 { fill: #609fcf } -.terminal-575710889-r147 { fill: #67abdc } -.terminal-575710889-r148 { fill: #64a5d6 } -.terminal-575710889-r149 { fill: #65a8d9 } -.terminal-575710889-r150 { fill: #5d99c8 } -.terminal-575710889-r151 { fill: #5186b1 } -.terminal-575710889-r152 { fill: #ffa62b;font-weight: bold } -.terminal-575710889-r153 { fill: #495259 } + .terminal-994786451-r1 { fill: #c5c8c6 } +.terminal-994786451-r2 { fill: #e0e0e0 } +.terminal-994786451-r3 { fill: #a0a3a6 } +.terminal-994786451-r4 { fill: #797979 } +.terminal-994786451-r5 { fill: #262626 } +.terminal-994786451-r6 { fill: #0178d4 } +.terminal-994786451-r7 { fill: #121212 } +.terminal-994786451-r8 { fill: #191919 } +.terminal-994786451-r9 { fill: #7f7f7f } +.terminal-994786451-r10 { fill: #a0a0a0 } +.terminal-994786451-r11 { fill: #fea62b } +.terminal-994786451-r12 { fill: #45505a } +.terminal-994786451-r13 { fill: #999999 } +.terminal-994786451-r14 { fill: #f0f0f0 } +.terminal-994786451-r15 { fill: #141414 } +.terminal-994786451-r16 { fill: #1f6fb5 } +.terminal-994786451-r17 { fill: #ffa62b;font-weight: bold } +.terminal-994786451-r18 { fill: #495259 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - pyevio + pyevio - - - - ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 -sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) -OverviewPlotsRecordsStructure -━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ -▊ROC▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all -▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ -╭─ Occupancy (port × channel) — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — ROC 7 ────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ -│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ -│ port 1┤█49.1k█████0████66.6k██73.7k██42.6k███72.7k██64.6k██70.8k███66.2k██87.6k██41.9k███56.9k██52.4k██110k███57.7k███51.6k█│││4M┤││ -│ port 2┤█88.1k███62.5k██80.9k██84.8k██77.1k███75.8k██65.4k██85.7k███102k███102k███78.4k███71.3k██90.6k██114k███82.4k███71.5k█││││⣀⣀⢀⣀⡀⢀⣀⡀⢀⣀⡀⣀⣀⣀⡀⣀⣀⢀⣀⡀⣀⣀⣀⡀⢀⣀⡀⢀⣀⡀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀││ -│ port 3┤█147k████143k███145k███110k███283k████279k███190k███235k████324k███242k███14.7k█████0██████0██████0██████0███████0███││││⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠈⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠁⠈⠉⠉⠉⠉⠁││ -│ port 4┤█57.7k███112k███84.3k██103k███1.83k███11.3k██20.8k██17.6k███19.5k██32.3k██40.7k███62.8k██57.2k██46.2k██50.2k███44.9k█│││3M┤││ -│ port 5┤██17k████20.9k██48.3k██17.6k██47.8k███47.9k██37.9k██41.1k███51.3k██75.1k██82.8k███92.5k██55.7k██102k███77.6k███89.4k█││││││ -│ port 6┤█40.3k████45k███48.7k██52.7k██56.7k███50.6k███94k███58.9k███52.5k██63.6k██71.1k███97.9k██62.5k██66.9k██70.4k███87.6k█││││││ -│ port 7┤█256k████270k███259k███241k███259k████275k███234k███188k████14.1k██1.89k██4.94k███5.25k██8.39k██13.3k██17.9k███11.6k█││││││ -│ port 9┤█955kk███139k███78.9k██84.1k██110kk███126k███145k███97.1k███143k███121kk██278kk███173kk██202kk██101k███105kk███214kk█│││2M┤││ -│port 10┤█23.4k███24.4k██35.6k██34.1k██39.4k███34.4k██37.3k██42.8k███44.2k██46.5k██48.8k███55.8k██65.8k██57.1k██70.5k███70.2k█││││││ -│port 11┤█131k████144k███163k█████0█████749████5.01k██1.95k██11.9k███18.6k██32.7k██48.7k███56.1k██49.5k██65.8k██53.2k███75.4k█││││││ -│port 12┤█80.7k███97.6k██128k███93.9k██193k████117k███105k███130k████168k███181k███131k██████0██████0██████0██████0███████0███│││1M┤││ -│port 13┤█157k████111k███123k███131k███165k████172k███136k███184k████142k███141k███152k████173k███173k███152k███165k████146k██││││││ -│port 14┤███0███████0██████0██████0██████0███████0██████0██████0███████0██████0██████0███████0██████0██████0██████0███████0███││││││ -│port 15┤███0█████51.9k██61.2k██58.2k██179k████215k███196k███204k████161k███192k███128k████188k███89.9k██151k███111k████109k██││││││ -│port 16┤███0███████0██████0██████0██████0███████0██████0██████0███████0██████0██████0███████0██████0██████0██████0███████0███│││ 0┤││ -│└───┬───────┬──────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬──────┬───────┬───┘││└┬──────────────────────────┬──────────────────────────┬─────────────────────────┬──────────────────────────┬───────────────┘│ -│0123456789101112131415││05101520│ -│payload portchannel││hit rate (Hz)time since the first frame (s)│ -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ -╭─ Charge — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Time in frame — ROC 7 ───────────────────────────────────────────────────────────────────────────────────────────────────────╮ -│┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ -│20M┤│││400k┤││ -││███││││││ -││███││││││ -│15M┤███│││300k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│10M┤███│││200k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│ 5M┤███│││100k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -││███││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│  0┤██████████████████████████████████                                                                                       │││   0┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ -│└┬────────────────────────────┬─────────────────────────────┬────────────────────────────┬────────────────────────────┬───┘││└┬────────────────────────────────────┬───────────────────────────────────┬────────────────────────────────────┬──────────┘│ -│02000400060008000││020k40k60k│ -│hitscharge (13-bit ADC units)││hitsns from the frame start│ -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ - f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette + + + + ⭘pyevio — /data/evio-lib/corpus/sro_000791.evio.00000.v6 +sro_000791.evio.00000.v6 — analysis done (7,891 records, cached) +OverviewPlotsRecordsStructure +━━━━━━━━━━╸━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎ +▊ROC▼▎▊ROC 7 (fADC250)▼▎▊port 1▼▎▊ch 0▼▎f/r/c level · ]/[ ROC · }/{ port · +/- channel · Tab next plot · s save PNG · S save all +▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎ +╭─ Occupancy (port × channel) — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────╮╭─ Hit rate — ROC 7 ────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│port 1┤49.1k066.6k73.7k42.6k72.7k64.6k70.8k66.2k87.6k41.9k56.9k52.4k110k57.7k51.6k│││┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│port 2┤88.1k62.5k80.9k84.8k77.1k75.8k65.4k85.7k102k102k78.4k71.3k90.6k114k82.4k71.5k│││4M┤││ +│port 3┤147k143k145k110k283k279k190k235k324k242k14.7k00000││││⣀⣀⢀⣀⡀⢀⣀⡀⢀⣀⡀⣀⣀⣀⡀⣀⣀⢀⣀⡀⣀⣀⣀⡀⢀⣀⡀⢀⣀⡀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀││ +│port 4┤57.7k112k84.3k103k1.83k11.3k20.8k17.6k19.5k32.3k40.7k62.8k57.2k46.2k50.2k44.9k││││⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠈⠉⠉⠉⠉⠉⠉⠉⠉⠁⠈⠉⠁⠈⠉⠉⠉⠉⠁││ +│port 5┤17k20.9k48.3k17.6k47.8k47.9k37.9k41.1k51.3k75.1k82.8k92.5k55.7k102k77.6k89.4k│││3M┤││ +│port 6┤40.3k45k48.7k52.7k56.7k50.6k94k58.9k52.5k63.6k71.1k97.9k62.5k66.9k70.4k87.6k││││││ +│port 7┤256k270k259k241k259k275k234k188k14.1k1.89k4.94k5.25k8.39k13.3k17.9k11.6k││││││ +│port 8┤93.6k144k119k95.7k82.4k157k122k107k010.2k13.8k9.18k11.1k13k19.1k15.8k││││││ +│port 9┤55k39k78.9k84.1k110k126k145k97.1k143k121k278k173k202k101k105k214k│││2M┤││ +│port 10┤23.4k24.4k35.6k34.1k39.4k34.4k37.3k42.8k44.2k46.5k48.8k55.8k65.8k57.1k70.5k70.2k││││││ +│port 11┤131k144k163k07495.01k1.95k11.9k18.6k32.7k48.7k56.1k49.5k65.8k53.2k75.4k││││││ +│port 12┤80.7k97.6k128k93.9k193k117k105k130k168k181k131k00000│││1M┤││ +│port 13┤157k111k123k131k165k172k136k184k142k141k152k173k173k152k165k146k││││││ +│port 14┤0000000000000000││││││ +│port 15┤051.9k61.2k58.2k179k215k196k204k161k192k128k188k89.9k151k111k109k││││││ +│port 16┤0000000000000000│││ 0┤││ +│└─────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┘││└┬──────────────────────────┬──────────────────────────┬─────────────────────────┬──────────────────────────┬───────────────┘│ +│0123456789101112131415││05101520│ +│payload portchannel││hit rate (Hz)time since the first frame (s)│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Charge — ROC 7 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮╭─ Time in frame — ROC 7 ───────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐││┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ +│100M┤│││400k┤││ +││███││││││ +│ 10M┤███││││││ +│  1M┤███│││300k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││█████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│100k┤███████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ 10k┤████████████│││200k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││████████████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│  1k┤████████████████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│ 100┤███████████████████████│││100k┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││███████████████████████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│  10┤█████████████████████████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│   1┤██████████████████████████████████││││█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +││█████████████████████████████████                                                                                       │││   0┤█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████││ +│└┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬───┘││└┬────────────────────────────────────┬───────────────────────────────────┬────────────────────────────────────┬──────────┘│ +│02000400060008000││020k40k60k│ +│hits (log)charge (13-bit ADC units)││hitsns from the frame start│ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ + f File  r ROC  c Channel  s Save PNG  S Save all  o Open  1 Overview  2 Plots  3 Records  4 Structure  q Quit ▏^p palette diff --git a/pyevio/gui/plots.py b/pyevio/gui/plots.py index 426ee7d..eeba608 100644 --- a/pyevio/gui/plots.py +++ b/pyevio/gui/plots.py @@ -18,10 +18,21 @@ Each plot holds only the histogram dict and rebuilds its plotext figure in ``render``, so a resize or the focus border redraws it at the new size; the dicts are lists of numbers, never a view of the file. + +The occupancy heatmap is not a plotext figure: :func:`render_heatmap` lays the +cells out as a Rich text itself, a whole number of lines per row and of columns +per cell, so every row is the same height and every printed count is exact. +plotext's ``matrix_plot`` resamples the matrix onto its canvas and, when the +canvas is lower than the matrix has rows, merges rows: two ports then share a +line, and their ``text()`` labels, centred on different lengths, overstrike each +other (``93.6k`` under ``55k`` read ``955kk``). """ +import math from pathlib import Path from typing import Optional +from rich.color import Color +from rich.style import Style from rich.text import Text from textual import events, on from textual.binding import Binding @@ -49,6 +60,10 @@ DEAD_CELL = (90, 90, 90) TEXT_LIGHT, TEXT_DARK = (240, 240, 240), (20, 20, 20) MIN_PLOT_WIDTH, MIN_PLOT_HEIGHT = 16, 6 +HEATMAP_OVERHEAD = 3 # lines under the cells: the x axis, its tick labels, the axis titles +HALF_BLOCK = "▀" # two rows on one line: the upper row is the glyph's colour, the lower one its background +DEAD_LABEL = "–" +PAD = Style(dim=True) # blanks before a visible run, as a run of their own (see render_heatmap) def heat_color(value: float, maximum: float) -> tuple: @@ -62,6 +77,143 @@ def text_color_on(background: tuple) -> tuple: return TEXT_DARK if luminance > 150 else TEXT_LIGHT +def cell_style(foreground: tuple, background: Optional[tuple] = None) -> Style: + return Style(color=Color.from_rgb(*foreground), bgcolor=Color.from_rgb(*background) if background else None) + + +def heatmap_layout(grid: dict, width: int, height: int) -> dict: + """Where the cells of ``grid`` go in a plot of ``width`` × ``height`` characters; ``fits`` is False when they cannot. + + The row labels and the axis take the left columns, the right frame the last one; + the three lines under the cells are the axis, its tick labels and the axis titles. + Each cell is ``cell_w`` columns by ``cell_h`` lines, whole numbers, and the + leftover columns and lines are margins (one spare line is the top frame), so + every row has the same height and every column the same width. When the lines + are fewer than the rows but at least half as many, ``halves`` is set: two rows + share a line, drawn as half blocks, and the counts are not printed. + """ + rows, cols = len(grid["rows"]), len(grid["cols"]) + label_w = max(len(label) for label in grid["rows"]) + canvas_w, canvas_h = width - label_w - 2, height - HEATMAP_OVERHEAD + halves = canvas_h < rows + lines_needed = -(-rows // 2) if halves else rows + if canvas_w < cols or canvas_h < lines_needed: + return {"fits": False, "min_width": cols + label_w + 2, "min_height": -(-rows // 2) + HEATMAP_OVERHEAD} + cell_w, cell_h = canvas_w // cols, 1 if halves else canvas_h // rows + spare_w, spare_h = canvas_w - cell_w * cols, canvas_h - cell_h * lines_needed + top_frame = spare_h >= 1 + top_margin = (spare_h - top_frame) // 2 + left_margin = spare_w // 2 + longest = max((len(format_compact(value)) for row, dead_row in zip(grid["values"], grid["dead"]) + for value, is_dead in zip(row, dead_row) if not is_dead), default=0) + longest_col_label = max(len(label) for label in grid["cols"]) + return {"fits": True, "label_w": label_w, "canvas_w": canvas_w, "canvas_h": canvas_h, "cell_w": cell_w, "cell_h": cell_h, + "halves": halves, "top_frame": top_frame, "top_margin": top_margin, + "bottom_margin": spare_h - top_frame - top_margin, "left_margin": left_margin, + "with_values": not halves and longest + 2 <= cell_w, # a margin of a column on each side + "x_step": max(1, -(-(longest_col_label + 2) // cell_w))} # tick labels that do not touch + + +def render_heatmap(grid: dict, width: int, height: int) -> Text: + """The occupancy ``grid`` (of :func:`occupancy_grid`) as ``height`` lines of ``width`` characters. + + The cells are coloured by the square-root ramp, unmapped ports grey with a dash, + and the counts are printed in the cells when the longest one fits with a margin + (see :func:`heatmap_layout`). A plot too small for the rows and columns says so. + """ + if grid["empty"] == "no stream frames": + return Text(grid["empty"], style="dim") + layout = heatmap_layout(grid, width, height) + if not layout["fits"]: + return Text(f"{len(grid['rows'])} × {len(grid['cols'])} cells need a plot of {layout['min_width']} × {layout['min_height']}; " + f"this one is {width} × {height}", style="dim") + rows, cols = len(grid["rows"]), len(grid["cols"]) + label_w, canvas_w, cell_w, cell_h = layout["label_w"], layout["canvas_w"], layout["cell_w"], layout["cell_h"] + maximum = max((value for row, dead_row in zip(grid["values"], grid["dead"]) + for value, is_dead in zip(row, dead_row) if not is_dead), default=0) + colors = [[DEAD_CELL if is_dead else heat_color(value, maximum) for value, is_dead in zip(row, dead_row)] + for row, dead_row in zip(grid["values"], grid["dead"])] + # Blanks before a visible run get a style of their own (PAD): the SVG screenshots give every run its own x, and some + # SVG renderers (rsvg) drop the non-breaking spaces at the start of a run, which would shift the run left. + left = " " * layout["left_margin"] + right = " " * (canvas_w - layout["left_margin"] - cell_w * cols) + + def line_with(label: Optional[str], axis_char: str) -> Text: + """A line's start: the row label (or blanks) right-justified, the axis character, the left margin.""" + line = Text() + if label is None: + line.append(" " * label_w, style=PAD) + else: + line.append(" " * (label_w - len(label)), style=PAD) + line.append(label) + line.append(axis_char) + line.append(left, style=PAD) + return line + + def cell(text: str, row_i: int, col_i: int) -> list: + background = colors[row_i][col_i] + pad, label = Style(bgcolor=Color.from_rgb(*background)), cell_style(text_color_on(background), background) + before = (cell_w - len(text)) // 2 + return [(" " * before, pad), (text, label), (" " * (cell_w - before - len(text)), pad)] + + def blank() -> Text: + line = line_with(None, "│") + line.append(" " * (canvas_w - layout["left_margin"]), style=PAD) + line.append("│") + return line + + lines = [] + if layout["top_frame"]: + lines.append(Text.assemble((" " * label_w, PAD), "┌" + "─" * canvas_w + "┐")) + lines += [blank() for _ in range(layout["top_margin"])] + if layout["halves"]: + for line_i in range(-(-rows // 2)): + upper, lower = 2 * line_i, 2 * line_i + 1 + line = line_with(grid["rows"][upper], "┤") + for col_i in range(cols): + below = colors[lower][col_i] if lower < rows else None + line.append(HALF_BLOCK * cell_w, style=cell_style(colors[upper][col_i], below)) + line.append(right, style=PAD) + line.append("│") + lines.append(line) + else: + for row_i, (row, dead_row) in enumerate(zip(grid["values"], grid["dead"])): + for line_i in range(cell_h): + labelled = line_i == (cell_h - 1) // 2 + line = line_with(grid["rows"][row_i], "┤") if labelled else line_with(None, "│") + for col_i, (value, is_dead) in enumerate(zip(row, dead_row)): + text = "" + if labelled and (is_dead or layout["with_values"]): + text = DEAD_LABEL if is_dead else format_compact(value) + for part, style in cell(text, row_i, col_i): + line.append(part, style=style) + line.append(right, style=PAD) + line.append("│") + lines.append(line) + lines += [blank() for _ in range(layout["bottom_margin"])] + # The axis with a tick under the centre of every labelled column, the tick labels centred on their cells, the titles. + axis = ["─"] * canvas_w + ticks = Text.assemble((" " * (label_w + 1), PAD)) + column = 0 # the next free column of the tick-label line, from the canvas start + for col_i in range(0, cols, layout["x_step"]): + start = layout["left_margin"] + col_i * cell_w + axis[start + (cell_w - 1) // 2] = "┬" + label = grid["cols"][col_i] + label_start = start + (cell_w - len(label)) // 2 # centred on the cell, wider than it when the cell is narrow + if label_start < column or label_start + len(label) > canvas_w: + continue # no room: the label is left out whole, never cut to a wrong number + ticks.append(" " * (label_start - column), style=PAD) + ticks.append(label) + column = label_start + len(label) + lines.append(Text.assemble((" " * label_w, PAD), "└" + "".join(axis) + "┘")) + lines.append(ticks) + title_start = max(len(grid["row_title"]) + 1, label_w + 1 + canvas_w // 2 - len(grid["col_title"]) // 2) + lines.append(Text.assemble(grid["row_title"], (" " * (title_start - len(grid["row_title"])), PAD), grid["col_title"])) + text = Text("\n").join(lines) + text.no_wrap, text.overflow = True, "crop" + return text + + class ReleaseFocusOnHide: """Give the focus up when hidden, instead of passing it to a sibling. @@ -116,6 +268,8 @@ def render(self): if width < MIN_PLOT_WIDTH or height < MIN_PLOT_HEIGHT: return Text("") try: + if self.hist["name"] == "occupancy": + return render_heatmap(occupancy_grid(self.hist), width, height) self.plt.clear_figure() empty = self._build(width, height) if empty: @@ -126,15 +280,25 @@ def render(self): # ---------------------------------------------------------------- building the plotext figure def _build(self, width: int, height: int) -> Optional[str]: - """Draw ``self.hist`` into ``self.plt``; returns the reason when there is nothing to draw.""" + """Draw the one-dimensional ``self.hist`` into ``self.plt``; returns the reason when there is nothing to draw.""" hist = self.hist - if hist["name"] == "occupancy": - return self._build_heatmap(occupancy_grid(hist), width, height) data = series(rebin(hist, max(8, width - 12))) if data["empty"]: return data["empty"] plt = self.plt edges, values = data["edges"], data["values"] + y_label = data["y_label"] + if data["log_y"]: + # The charge spectrum, logarithmic as in the browser and the PNG. Not plotext's own log scale: it takes the + # log of every value and raises on the empty bins, and reads ``ylim`` in log units. log10(1 + count) keeps + # empty bins at zero height; the ticks sit at the real counts 1, 10, 100, ... and are labelled with them. + top_count = max(values) + values = [math.log10(1 + value) if value > 0 else 0.0 for value in values] + decades = max(0, math.ceil(math.log10(top_count))) + step = max(1, -(-(decades + 1) // max(2, (height - 4) * 2 // 3))) # fewer ticks than the canvas has lines + tick_counts = [10 ** power for power in range(0, decades + 1, step)] + y_ticks, y_labels = [math.log10(1 + count) for count in tick_counts], [format_compact(count) for count in tick_counts] + y_label += " (log)" if hist["name"] == "rate": xs, ys = [], [] for i, value in enumerate(values): # a step line: the bin's value from its left edge to its right one @@ -145,65 +309,27 @@ def _build(self, width: int, height: int) -> Optional[str]: centers = [(edges[i] + edges[i + 1]) / 2 for i in range(len(values))] plt.bar(centers, values, width=1, color=SERIES_COLOR) top = max(values) - if hist["name"] != "rate" and top <= 4: + if data["log_y"]: + top = max(top, y_ticks[-1]) + elif hist["name"] != "rate" and top <= 4: y_ticks = list(range(int(top) + 1)) # counts: whole numbers only + y_labels = tick_labels(y_ticks) else: y_ticks = nice_ticks(0, top, 4) if y_ticks and y_ticks[-1] < top: y_ticks.append(round(y_ticks[-1] + (y_ticks[1] - y_ticks[0] if len(y_ticks) > 1 else top), 12)) + y_labels = tick_labels(y_ticks) + if y_ticks: + top = y_ticks[-1] x_ticks = [tick for tick in nice_ticks(edges[0], edges[-1], 5) if edges[0] <= tick <= edges[-1]] plt.xlim(edges[0], edges[-1]) - plt.ylim(0, y_ticks[-1] if y_ticks else top) + plt.ylim(0, top) if x_ticks: plt.xticks(x_ticks, tick_labels(x_ticks)) if y_ticks: - plt.yticks(y_ticks, tick_labels(y_ticks)) + plt.yticks(y_ticks, y_labels) plt.xlabel(data["x_label"]) - plt.ylabel(data["y_label"]) - return None - - def _build_heatmap(self, grid: dict, width: int, height: int) -> Optional[str]: - """Each cell as a block of plotext matrix points, so the heatmap fills the widget; ``–`` marks unmapped ports.""" - if grid["empty"] == "no stream frames": - return grid["empty"] - plt = self.plt - rows, cols = len(grid["rows"]), len(grid["cols"]) - maximum = max((value for row, dead_row in zip(grid["values"], grid["dead"]) - for value, is_dead in zip(row, dead_row) if not is_dead), default=0) - # The matrix is at least as large as the canvas (one point per cell or more), so plotext leaves no gaps - # between the blocks; the canvas is the widget minus the tick labels, the frame and the axis titles. - block_w = max(1, -(-width // cols)) - block_h = max(1, -(-height // rows)) - colors = [[DEAD_CELL if is_dead else heat_color(value, maximum) - for value, is_dead in zip(row, dead_row)] for row, dead_row in zip(grid["values"], grid["dead"])] - matrix = [] - for row in colors: - line = [color for color in row for _ in range(block_w)] - matrix += [line] * block_h - plt.matrix_plot(matrix) - total_rows = rows * block_h - x_centers = [col_i * block_w + (block_w - 1) / 2 for col_i in range(cols)] - y_centers = [(total_rows - 1) - row_i * block_h - (block_h - 1) / 2 for row_i in range(rows)] - chars_per_cell = max(1, (width - 10) // cols) # about one block's width in terminal columns - x_step = max(1, -(-4 // chars_per_cell)) # at least four columns per tick label - plt.xticks([x for i, x in enumerate(x_centers) if i % x_step == 0], - [label for i, label in enumerate(grid["cols"]) if i % x_step == 0]) - plt.yticks(y_centers, grid["rows"]) - plt.xlabel(grid["col_title"]) - plt.ylabel(grid["row_title"]) - # The counts are printed in the cells when every one of them fits with a margin; the dash of an unmapped - # port always fits. - longest = max((len(format_compact(value)) for row, dead_row in zip(grid["values"], grid["dead"]) - for value, is_dead in zip(row, dead_row) if not is_dead), default=0) - with_values = longest + 1 < chars_per_cell - for row_i, (row, dead_row) in enumerate(zip(grid["values"], grid["dead"])): - for col_i, (value, is_dead) in enumerate(zip(row, dead_row)): - if not is_dead and not with_values: - continue - label = "–" if is_dead else format_compact(value) - background = colors[row_i][col_i] - plt.text(label, x_centers[col_i], y_centers[row_i], color=text_color_on(background), background=background, - alignment="center") + plt.ylabel(y_label) return None diff --git a/tests/gui/make_screenshots.py b/tests/gui/make_screenshots.py index d1c7dfd..848063b 100644 --- a/tests/gui/make_screenshots.py +++ b/tests/gui/make_screenshots.py @@ -7,8 +7,10 @@ FILE defaults to the SRO corpus file; when it is unreadable the synthetic stream file of the tests is written to a temporary folder and used instead. The two Plots shots are taken at ``--plots-size``: the occupancy heatmap prints -its counts only when every count fits in its cell, which with 16 cells across -and counts in the millions takes a terminal of about 260 columns. +its counts only when every count fits in its cell with a column to spare, which +with 16 cells across and counts in the millions takes a terminal of about 250 +columns, and it draws one line per row (16 ports) only in a plot 19 lines high, +i.e. a terminal of about 50 lines. The analysis runs before the app starts, through the session alone, and its result goes to the default cache (``~/.cache/pyevio/stats``), so the app loads diff --git a/tests/gui/test_plots.py b/tests/gui/test_plots.py index d97d634..f2e2c2c 100644 --- a/tests/gui/test_plots.py +++ b/tests/gui/test_plots.py @@ -1,4 +1,6 @@ -"""The Plots tab: the three levels, the keys, a ROC without hits, the PNG save.""" +"""The Plots tab: the three levels, the keys, a ROC without hits, the PNG save; the heatmap and the log charge axis.""" +import re + import pytest textual = pytest.importorskip("textual") @@ -6,9 +8,12 @@ from conftest import pilot_wait # noqa: E402 from pyevio.gui.app import PyEvioGui # noqa: E402 -from pyevio.gui.plots import HistogramPlot, PlotsPane # noqa: E402 +from pyevio.gui.export import format_compact, occupancy_grid # noqa: E402 +from pyevio.gui.plots import HistogramPlot, PlotsPane, render_heatmap # noqa: E402 PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n" +ANSI = re.compile(r"\x1b\[[0-9;]*m") +SCREENSHOT_PLOT = (127, 19) # the size of one plot in the 2 × 2 grid of the 260 × 50 screenshots async def open_plots(app, pilot): @@ -54,7 +59,7 @@ async def test_roc_level_has_four_plots_named_after_the_roc(session, synthetic): assert all("ROC 7" in title for title in titles) charge = pane.plots[2] assert charge.hist["selection"]["roc"] == 7 and sum(charge.hist["counts"]) > 0 - assert "charge (13-bit ADC units)" in rendered(charge) + assert "charge (13-bit ADC units)" in rendered(charge) and "hits (log)" in rendered(charge) assert "channel" in rendered(pane.plots[0]) and "port 1" in rendered(pane.plots[0]) assert str(app.query_one("#status-error").render()) == "" @@ -146,6 +151,121 @@ async def test_s_saves_a_png_and_notifies(session, synthetic, tmp_path, monkeypa assert pane.level == "channel" +# ---------------------------------------------------------------- the heatmap and the log charge axis, without an app +def occupancy_dict(counts: list, ports: list, dead_ports: tuple = (), roc: int = 7) -> dict: + """A ROC-level occupancy dict (as ``pyevio.web.report.histogram`` returns it) of ``counts[port][channel]``.""" + module_id = [[255 if port in dead_ports else 2 for port in ports]] + return {"name": "occupancy", "rocs": [roc], "ports": ports, "channels": len(counts[0]), "module_id": module_id, + "counts": counts, "y_unit": "hits", "selection": {"roc": roc, "port": None, "ch": None}} + + +def row_lines(text: str, labels: list) -> dict: + """The line index of every row label, as ``{label: line}``; a label must be on exactly one line.""" + lines = text.split("\n") + found = {} + for label in labels: + hits = [index for index, line in enumerate(lines) if re.match(r" *" + re.escape(label) + "┤", line)] + assert len(hits) == 1, f"{label!r} on lines {hits}" + found[label] = hits[0] + return found + + +def test_heatmap_prints_every_count_once_and_intact(): + """F64: 16 ports in 16 lines, counts whose compact forms overstruck each other under plotext (93.6k under 55k read 955kk).""" + ports = list(range(1, 17)) + counts = [[(port * 16 + channel) * 613 + (0 if (port + channel) % 7 else -(port * 16 + channel) * 613) + for channel in range(16)] for port in ports] + counts[7][0], counts[8][0], counts[7][1], counts[8][1] = 93600, 55000, 144000, 39000 + hist = occupancy_dict(counts, ports) + text = render_heatmap(occupancy_grid(hist), *SCREENSHOT_PLOT).plain + lines = text.split("\n") + assert len(lines) == SCREENSHOT_PLOT[1] and max(len(line) for line in lines) <= SCREENSHOT_PLOT[0] + rows = row_lines(text, [f"port {port}" for port in ports]) + for port, row in zip(ports, counts): + cells = lines[rows[f"port {port}"]].split("┤", 1)[1].rstrip("│").split() + assert cells == [format_compact(value) for value in row], f"port {port}" + assert "955kk" not in text and "kk" not in text + assert lines[-1].startswith("payload port") and "channel" in lines[-1] + for channel in range(16): + assert f" {channel} " in f" {lines[-2]} " + + +def test_heatmap_rows_and_columns_are_all_the_same_size(): + """F65: 13 rows at the screenshot size and at a taller one; the dash of an unmapped port is always printed.""" + ports = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] + counts = [[(port * 16 + channel) * 1000 for channel in range(16)] for port in ports] + hist = occupancy_dict(counts, ports, dead_ports=(4, 11)) + labels = [f"port {port}" for port in ports] + for width, height in (SCREENSHOT_PLOT, (126, 19), (126, 45), (80, 30)): + text = render_heatmap(occupancy_grid(hist), width, height).plain + lines = text.split("\n") + assert len(lines) == height and max(len(line) for line in lines) <= width, (width, height) + rows = row_lines(text, labels) + steps = {rows[labels[i + 1]] - rows[labels[i]] for i in range(len(labels) - 1)} + assert len(steps) == 1, (width, height, steps) + axis = next(line for line in lines if "└" in line) + ticks = [index for index, char in enumerate(axis) if char == "┬"] + assert len({ticks[i + 1] - ticks[i] for i in range(len(ticks) - 1)}) == 1, (width, height, ticks) + dashes = [line for line in lines if line.startswith(" port 4┤") or line.startswith("port 11┤")] + assert len(dashes) == 2 and all(line.count("–") == 16 for line in dashes), (width, height) + tall = render_heatmap(occupancy_grid(hist), 126, 45).plain + assert row_lines(tall, labels)[labels[1]] - row_lines(tall, labels)[labels[0]] == 3 # 42 lines // 13 rows + + +def test_heatmap_too_low_for_its_rows_shares_lines_or_says_so(): + ports = list(range(1, 17)) + hist = occupancy_dict([[port * 10 + channel for channel in range(16)] for port in ports], ports) + text = render_heatmap(occupancy_grid(hist), 56, 14).plain # one plot of the 120 × 40 test terminal: 11 lines for 16 rows + lines = text.split("\n") + assert len(lines) == 14 and "▀" in text and " port 1┤" in text and "port 15┤" in text and "port 16" not in text + assert all("▀" * 2 in line for line in lines if "┤" in line) + small = render_heatmap(occupancy_grid(hist), 40, 8).plain + assert "need a plot of" in small and "▀" not in small + # Narrow cells: the tick labels that fit are whole channel numbers (never "12" cut to "1"), evenly thinned. + for width in (36, 44, 50, 70): + lines = render_heatmap(occupancy_grid(hist), width, 14).plain.split("\n") + labels = lines[-2].split() + assert len(labels) >= 4 and all(label in [str(channel) for channel in range(16)] for label in labels), (width, labels) + steps = {int(labels[i + 1]) - int(labels[i]) for i in range(len(labels) - 1)} + assert len(steps) == 1, (width, labels) + + +def charge_render(hist: dict, width: int, height: int) -> str: + """The charge plot as plotext draws it, the way ``HistogramPlot.render`` does but without an app.""" + plot = HistogramPlot() + plot.hist = hist + plot.plt.clear_figure() + empty = plot._build(width, height) + assert empty is None + plot.plt.plotsize(width, height) + plot.plt._set_size(width, height) + return ANSI.sub("", plot.plt.build()) + + +def test_charge_spectrum_is_logarithmic_with_power_of_ten_ticks(): + """F68: the terminal charge plot reads like the browser's: log y, ticks labelled with the real counts.""" + edges = list(range(0, 8193, 64)) + counts = [0] * 128 + counts[0], counts[1], counts[2], counts[10], counts[20], counts[40] = 20_000_000, 2_000_000, 50_000, 300, 7, 1 + hist = {"name": "charge", "counts": counts, "edges": edges, "x_unit": "charge (13-bit ADC units)", "y_unit": "hits", + "selection": {"roc": 7, "port": None, "ch": None}} + text = charge_render(hist, *SCREENSHOT_PLOT) + tick_labels = [line.split("┤")[0].strip() for line in text.split("\n") if "┤" in line] + powers = {format_compact(10 ** power) for power in range(12)} + assert len(tick_labels) >= 4 and all(label in powers for label in tick_labels), tick_labels + assert "1" in tick_labels and "10M" in tick_labels and "hits (log)" in text + # The bars: the full-scale first bin fills the canvas (column 0), the empty upper half of the spectrum draws nothing. + lines = [line for line in text.split("\n") if "│" in line or "┤" in line] + column = lambda line, x: line.split("┤" if "┤" in line else "│", 1)[1][x] # noqa: E731 + heights = {x: sum(column(line, x) != " " for line in lines) for x in (0, 100)} + assert heights[0] >= 12 and heights[100] == 0, heights + # Zero bins (plotext's own log scale raises on them) and a one-count spectrum draw without an error. + for sparse in ([0, 5, 0, 0, 1000, 0], [0, 0, 1, 0]): + hist = dict(hist, counts=sparse, edges=list(range(len(sparse) + 1))) + assert "cannot draw" not in charge_render(hist, 60, 12) + assert "hits (log)" in charge_render(hist, 60, 12) + + async def test_file_closed_clears_the_plots(session, synthetic): app = PyEvioGui(session, start_path=synthetic["path"]) async with app.run_test(size=(120, 40)) as pilot: From 901ae79efc121dae801e1d66c569eb372e194b0f Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Sun, 11 Oct 2026 19:40:52 -0400 Subject: [PATCH 60/65] Changelog: finding range to F68, start_worker_services entry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The header still said F1—F62 while the ledger runs to F68, and the new public function behind the F63 fix had no entry. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0715683..6fd81b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,13 @@ # Changelog -All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F62) refer to the project's defect ledger. +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F68) refer to the project's defect ledger. ## [Unreleased] ### Added - `rust/`: a cargo workspace beside the Python package. `evio-stream` is a streaming, read-only EVIO v6 reader library over any `std::io::Read` (v6 files, bare record streams and the SRO 8-word block stream, both byte orders, LZ4/LZ4_BEST/gzip records, checked bank walk, fADC250 frame walk) with the `evio-count` and `evio-dump` tools; it reproduces the golden manifest, the corpus and the SRO reference numbers and decodes every hit of a 15.5 GB raw file in about 3 s on one thread. `evio-tui` is a minimal terminal viewer on top of it (records, events, bank tree and words, frame summary). See `rust/README.md`. Not part of the Python wheel. +- `stream_stats.start_worker_services()`: starts the multiprocessing forkserver and resource tracker early, so a program that captures stderr (Textual replaces it with an object whose `fileno()` is -1) can still run the parallel analysis; `compute_stream_stats` calls it too (F63). - File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). - Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check, `pyevio debug` prints the messages and the Parquet example prints them to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. - `pyevio stats` prints the decode warnings and the AIS check (frames with an aggregation info segment, frames whose segment repeats one entry), the same checks the viewer shows (F61). From 0cc297b95095246cb3c45f8336c1c95c3e886c3c Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Mon, 12 Oct 2026 08:32:09 -0400 Subject: [PATCH 61/65] Remove ledger ids and workspace jargon from code, tests and the changelog F69: comments, docstrings, two test names, pyproject.toml and CHANGELOG.md cited finding, question and decision numbers (F15, Q2, D4, I17), phase names and paths under the untracked space/ workspace. A reader of the repository cannot resolve them. Every site now states the fact itself; the changelog entries stand without numbers. Gate: uv run pytest -q, 237 passed, 5 skipped. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 86 ++++++++++++++-------------- pyevio/cli/gui.py | 2 +- pyevio/cli/stats.py | 2 +- pyevio/decoders/fadc250_stream.py | 8 +-- pyevio/stream_stats.py | 8 +-- pyevio/web/report.py | 2 +- pyproject.toml | 4 +- tests/golden/test_corpus.py | 7 +-- tests/golden/test_golden.py | 16 +++--- tests/gui/test_plots.py | 6 +- tests/test_bank_scanning.py | 4 +- tests/test_cli.py | 22 +++---- tests/test_fadc250_stream.py | 10 ++-- tests/test_fadc250_stream_example.py | 10 ++-- tests/test_record_scanning.py | 20 +++---- tests/test_sro_layout.py | 10 ++-- tests/test_stream_stats.py | 10 ++-- tests/web/test_viewer.py | 6 +- tests/web/test_web_api.py | 14 ++--- tests/web/test_web_auth.py | 2 +- tests/web/test_web_corpus.py | 4 +- tests/web/test_web_sro.py | 6 +- 22 files changed, 128 insertions(+), 131 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fd81b3..1d88687 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,16 @@ # Changelog -All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Finding numbers (F1—F68) refer to the project's defect ledger. +All notable changes to pyevio are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] ### Added - `rust/`: a cargo workspace beside the Python package. `evio-stream` is a streaming, read-only EVIO v6 reader library over any `std::io::Read` (v6 files, bare record streams and the SRO 8-word block stream, both byte orders, LZ4/LZ4_BEST/gzip records, checked bank walk, fADC250 frame walk) with the `evio-count` and `evio-dump` tools; it reproduces the golden manifest, the corpus and the SRO reference numbers and decodes every hit of a 15.5 GB raw file in about 3 s on one thread. `evio-tui` is a minimal terminal viewer on top of it (records, events, bank tree and words, frame summary). See `rust/README.md`. Not part of the Python wheel. -- `stream_stats.start_worker_services()`: starts the multiprocessing forkserver and resource tracker early, so a program that captures stderr (Textual replaces it with an object whose `fileno()` is -1) can still run the parallel analysis; `compute_stream_stats` calls it too (F63). -- File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot (F15). -- Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check, `pyevio debug` prints the messages and the Parquet example prints them to stderr (F58, F59). Stats version 3: caches written by versions 1 and 2 are recomputed. -- `pyevio stats` prints the decode warnings and the AIS check (frames with an aggregation info segment, frames whose segment repeats one entry), the same checks the viewer shows (F61). +- `stream_stats.start_worker_services()`: starts the multiprocessing forkserver and resource tracker early, so a program that captures stderr (Textual replaces it with an object whose `fileno()` is -1) can still run the parallel analysis; `compute_stream_stats` calls it too. +- File check "AIS entries identical": the decoder counts the aggregation info segment entries and distinct values per frame; `stream_stats` and the viewer Overview report frames whose AIS repeats one stream's entry in every slot. +- Decode warnings: a malformed SIB segment after the time slice segment (an AIS whose length runs past the SIB end, or with no entries) touches no hit, so the decoder counts it in `warnings` / `warning_messages` (per frame and in total) instead of `errors`; `StreamHits.validate()` passes, `stream_stats` carries the totals, the viewer shows a "decode warnings" check, `pyevio debug` prints the messages and the Parquet example prints them to stderr. Stats version 3: caches written by versions 1 and 2 are recomputed. +- `pyevio stats` prints the decode warnings and the AIS check (frames with an aggregation info segment, frames whose segment repeats one entry), the same checks the viewer shows. - Reading of JLab SRO hardware streams: files with no file header and 8-word block headers whose version word is 4 with no bit-info bits open natively as `EvioFile.header_layout == "sro-8word"`. The whole header chain is checked at open; an evio-library v4 file (a header with the last-record or dictionary bit, or a 14-word header) raises the version error instead. `FileHeader.layout`, `FileHeader.container_version`, `FileHeader.for_sro_stream()`, `RecordHeader.is_sro_block_word()`. - Reading of bare EVIO v6 record streams (an evio writer buffer dump, 14-word record headers with no file header) as `EvioFile.header_layout == "v6-records"`; `EvioFile.record_header_problem(offset)` names what is wrong with a record header; `pyevio info` prints the layout and the file checks. - Compressed records: LZ4, LZ4_BEST and gzip records are decompressed on first access. `Record.buffer` holds the index array, user header and events (the file mmap for an uncompressed record, the decompressed bytes otherwise); `Record.release()` drops the buffer; `Record.compression_type`. @@ -30,7 +30,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Changed - `EvioFile.record_count`, `get_record()`, `get_records()` and `iter_records()` cover data records only. The trailer record is `EvioFile.trailer` (or `None`) and yields no events. `stream_stats.n_records` counts data records, `n_trailer_records` the trailer. -- `Bank.size`, `Bank.data_length` and `Bank.end_offset` count the length word plus the words that follow it (see F38 under Fixed); `Bank.to_numpy()` returns one more element per leaf bank than before and uses the file byte order. +- `Bank.size`, `Bank.data_length` and `Bank.end_offset` count the length word plus the words that follow it (see "leaf banks lost their last word" under Fixed); `Bank.to_numpy()` returns one more element per leaf bank than before and uses the file byte order. - Event offsets of a compressed record (`Record.get_event_offsets()`, `Record.scan_events()`) index `Record.buffer`. Code that read event bytes from `evio_file.mm` must read from `record.buffer`. - `EvioFile` caches one `Record` (the last accessed) instead of every record. - `EvioFile.__exit__` propagates the `BufferError` that `close()` raises while a numpy view of the mmap is alive; `__del__` stays silent. @@ -38,48 +38,48 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `examples/fadc250_stream_to_parquet.py`: a `stream` column, `port` widened to `uint16`, hits sorted by (frame, event index, t_ns) and frames by (frame, event index), `DECODER_VERSION` "2"; event bytes come from `record.buffer` and no `Event` objects are kept. - `RecordHeader.parse()` and `BufferReader` raise without printing hex dumps first. - Packaging: pytest, pyyaml and pyarrow sit in the default `dev` dependency group, so `uv run pytest` works without extras; setuptools package discovery is restricted to `pyevio*`. -- `pyevio web` cache key: the file path, size and modification time without the stats version. An entry written by another version is recomputed and overwritten at the same name instead of staying behind as an orphan (F60). +- `pyevio web` cache key: the file path, size and modification time without the stats version. An entry written by another version is recomputed and overwritten at the same name instead of staying behind as an orphan. - `textual` leaves the core dependencies: it is installed by the `pyevio[gui]` extra (with `textual-plotext`) only, so the library installs with click, lz4, rich, numpy and matplotlib. ### Removed -- `docs/evio_roc_time_slice_bank.md` and `docs/evio_roc_tsb.png`: the bank layout they described does not match SRO data (F41). `docs/specs.md` moves to `docs/history/specs.md` as the pre-fix goal statement. +- `docs/evio_roc_time_slice_bank.md` and `docs/evio_roc_tsb.png`: the bank layout they described does not match SRO data. `docs/specs.md` moves to `docs/history/specs.md` as the pre-fix goal statement. - The `pyevio ui` command and the `pyevio/ui/` package (a hard-coded sample tree); `pyevio gui` replaces them. ### Fixed -- F38 — leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. -- F3 — trailer records produced phantom events past the end of the file: the trailer's record index was read as event lengths. -- F4 — LZ4, LZ4_BEST and gzip records were read as uncompressed bytes and produced garbage events. -- F5 — an event or bank length that ran past its record or the file was trusted; corrupt data raised deep inside numpy or struct calls. Every length is checked against its container and an overrun ends the walk with a recorded error. -- F6 — a truncated final record, garbage after the last record, or a second file header (two files concatenated) was accepted as a record. Record headers are validated before use and a problem ends the scan with a `bad_record_header` check. -- F7 — `with EvioFile(...)` leaked the mmap and the file descriptor silently while a numpy view was alive. -- F8 — a dictionary or first event of odd length shifted every event: the user header length is stored padded to whole words. -- F9 — v4 and v1—3 files failed with a generic "Unsupported EVIO version" error. -- F39 — HIPO files (file type id `HIPO`) were rejected. -- F43 — `EvioFile.get_event()` raised on every call (a 2-tuple unpacked into four names); `pyevio event` by global index failed with it. -- F45 — children of a bank of segments or tagsegments were read as two-word banks: the first segment word of a streaming frame's stream info bank was taken for a length, and the walk stopped with an entry in `Bank.errors` and no children. -- F49 — `pyevio event N --record R` looked the event up by global index instead of its index within the record. -- F2 — SRO hardware files (8-word block headers, version word 4, no file header) could not be opened. -- F10 — two bank-scanning tests failed on `main` because their fixtures declared lengths that disagreed with their byte sizes; corrected to EVIO length semantics. -- F37 — `uv run` and `pip install` could not build the package: setuptools auto-discovery picked up a second top-level directory as a package. -- F40 — `pyevio debug` printed "Error accessing event" for every event (it called a method `Record` does not have) and skipped every payload bank with two or more hits. -- F44 — `pyevio debug` displayed bank extents one word short. -- F16 — the hit-word layout and the frame walk existed in five copies (viewer, Parquet example, `pyevio debug`, two analysis examples) that had drifted apart; the Parquet example and `pyevio debug` call the shared decoder. The viewer's copy and `examples/analyze_evio_data.py` / `examples/analyze_roc_data2.py` remain. -- F17 — the Parquet example crashed (`IndexError`) when the last ROC bank of a frame had no children or ended in an empty payload bank. -- F19 — the example's `validate()` checked a `uint16` column against 65,536, which could never fail, with `assert`, which `python -O` removes; the raw 14-bit time field is checked and `ValueError` raised. -- F20 — duplicate frame numbers interleaved the hits of both copies in the Parquet output, so the per-frame hit ranges pointed at the wrong rows. -- F42 — every crate was decoded as fADC250, so DCRB channel masks became bogus hits; the module type comes from the payload map. -- F13 (decoder and statistics side) — fixed caps of 8 ROCs and 64 boards dropped crates silently; each crate sends two ROC banks per frame, so 12 crates make 24. The decoder and `stream_stats` have no caps: histogram axes grow with the data, both streams of a crate merge by ROC id, and the stream identity (ROC bank num mask) is kept per hit. The viewer's own caps remain. -- F14 — empty payload banks (length 1, num 1) and payload data type 0x00 were treated as anomalies. -- F11 — a file of a 4-way striped run reported 3 of every 4 frames missing, and time was computed from frame numbers; the stride is read from the data and time from timestamps. -- F12 — the frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. -- F28 (binning) — rate histograms binned from frame 0 to the last frame, so a later stripe squeezed into the right edge and partial last bins read low; `stream_stats` bins from the first to the last timestamp and normalizes by the frames each bin covers. -- F48 — the Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. -- F47 — every command printed a traceback for a file pyevio cannot read (an EVIO v4 file, a file without the magic number); the message goes to stderr with exit code 1. -- F50 — `pyevio event` and `pyevio debug` printed the offsets of a compressed record as if they were file offsets; a note names them as offsets in the decompressed record buffer, and `pyevio event --hexdump` reads the event from that buffer. -- F51 — `pyevio --version` printed 0.1.0; it prints `pyevio.__version__`. -- F52 — the `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. -- F53 — `pyevio event N` by global index printed `Record #None`; it prints the record the event lives in. -- F54 — `pyevio dump --record R` with R out of range printed the message and exited 0; it is a parameter error (exit code 2). The `--hexdump` title of `pyevio event` lost a stray `)`. -- Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. (Fixed before the defect ledger existed; no finding number.) +- leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. +- trailer records produced phantom events past the end of the file: the trailer's record index was read as event lengths. +- LZ4, LZ4_BEST and gzip records were read as uncompressed bytes and produced garbage events. +- an event or bank length that ran past its record or the file was trusted; corrupt data raised deep inside numpy or struct calls. Every length is checked against its container and an overrun ends the walk with a recorded error. +- a truncated final record, garbage after the last record, or a second file header (two files concatenated) was accepted as a record. Record headers are validated before use and a problem ends the scan with a `bad_record_header` check. +- `with EvioFile(...)` leaked the mmap and the file descriptor silently while a numpy view was alive. +- a dictionary or first event of odd length shifted every event: the user header length is stored padded to whole words. +- v4 and v1—3 files failed with a generic "Unsupported EVIO version" error. +- HIPO files (file type id `HIPO`) were rejected. +- `EvioFile.get_event()` raised on every call (a 2-tuple unpacked into four names); `pyevio event` by global index failed with it. +- children of a bank of segments or tagsegments were read as two-word banks: the first segment word of a streaming frame's stream info bank was taken for a length, and the walk stopped with an entry in `Bank.errors` and no children. +- `pyevio event N --record R` looked the event up by global index instead of its index within the record. +- SRO hardware files (8-word block headers, version word 4, no file header) could not be opened. +- two bank-scanning tests failed on `main` because their fixtures declared lengths that disagreed with their byte sizes; corrected to EVIO length semantics. +- `uv run` and `pip install` could not build the package: setuptools auto-discovery picked up a second top-level directory as a package. +- `pyevio debug` printed "Error accessing event" for every event (it called a method `Record` does not have) and skipped every payload bank with two or more hits. +- `pyevio debug` displayed bank extents one word short. +- the hit-word layout and the frame walk existed in five copies (viewer, Parquet example, `pyevio debug`, two analysis examples) that had drifted apart; the Parquet example and `pyevio debug` call the shared decoder. The viewer's copy and `examples/analyze_evio_data.py` / `examples/analyze_roc_data2.py` remain. +- the Parquet example crashed (`IndexError`) when the last ROC bank of a frame had no children or ended in an empty payload bank. +- the example's `validate()` checked a `uint16` column against 65,536, which could never fail, with `assert`, which `python -O` removes; the raw 14-bit time field is checked and `ValueError` raised. +- duplicate frame numbers interleaved the hits of both copies in the Parquet output, so the per-frame hit ranges pointed at the wrong rows. +- every crate was decoded as fADC250, so DCRB channel masks became bogus hits; the module type comes from the payload map. +- Decoder and statistics: fixed caps of 8 ROCs and 64 boards dropped crates silently; each crate sends two ROC banks per frame, so 12 crates make 24. The decoder and `stream_stats` have no caps: histogram axes grow with the data, both streams of a crate merge by ROC id, and the stream identity (ROC bank num mask) is kept per hit. The viewer's own caps remain. +- empty payload banks (length 1, num 1) and payload data type 0x00 were treated as anomalies. +- a file of a 4-way striped run reported 3 of every 4 frames missing, and time was computed from frame numbers; the stride is read from the data and time from timestamps. +- the frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. +- Rate histograms binned from frame 0 to the last frame, so a later stripe squeezed into the right edge and partial last bins read low; `stream_stats` bins from the first to the last timestamp and normalizes by the frames each bin covers. +- the Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. +- every command printed a traceback for a file pyevio cannot read (an EVIO v4 file, a file without the magic number); the message goes to stderr with exit code 1. +- `pyevio event` and `pyevio debug` printed the offsets of a compressed record as if they were file offsets; a note names them as offsets in the decompressed record buffer, and `pyevio event --hexdump` reads the event from that buffer. +- `pyevio --version` printed 0.1.0; it prints `pyevio.__version__`. +- the `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. +- `pyevio event N` by global index printed `Record #None`; it prints the record the event lives in. +- `pyevio dump --record R` with R out of range printed the message and exited 0; it is a parameter error (exit code 2). The `--hexdump` title of `pyevio event` lost a stray `)`. +- Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. diff --git a/pyevio/cli/gui.py b/pyevio/cli/gui.py index bee8505..64c28c5 100644 --- a/pyevio/cli/gui.py +++ b/pyevio/cli/gui.py @@ -25,7 +25,7 @@ def gui_command(path, cache_dir, workers): from pyevio.gui.session import Session from pyevio.stream_stats import start_worker_services - start_worker_services() # before Textual captures stderr: the resource tracker needs a real one to start (F63) + start_worker_services() # before Textual captures stderr: the resource tracker needs a real one to start target = Path(path) session = Session(cache_dir=Path(cache_dir) if cache_dir else None, workers=workers) app = PyEvioGui(session, start_path=target if target.is_file() else None, start_dir=target if target.is_dir() else target.parent) diff --git a/pyevio/cli/stats.py b/pyevio/cli/stats.py index 76cd592..adc2ab8 100644 --- a/pyevio/cli/stats.py +++ b/pyevio/cli/stats.py @@ -35,7 +35,7 @@ def print_stats_summary(console, stats): totals.add_row("Hit rate", f"{stats.n_hits / stats.live_time_s / 1e6:,.2f} MHz of live time (fADC250)") totals.add_row("Decode errors", f"{stats.errors:,}" + (f" — first: {stats.error_messages[0]}" if stats.error_messages else "")) totals.add_row("Decode warnings", f"{stats.warnings:,}" + (f" — first: {stats.warning_messages[0]}" if stats.warning_messages else "")) - # F15: the SRO hardware fills every AIS slot with one stream's entry; the same check the viewer shows. + # The SRO hardware fills every AIS slot with one stream's entry; the same check the viewer shows. totals.add_row("AIS", f"{stats.frames_with_ais:,} frames with an aggregation info segment, " f"{stats.frames_with_degenerate_ais:,} repeat one entry in every slot") totals.add_row("Wall time", f"{stats.wall_seconds:.1f} s with {stats.workers} workers for " diff --git a/pyevio/decoders/fadc250_stream.py b/pyevio/decoders/fadc250_stream.py index 9945330..577776a 100644 --- a/pyevio/decoders/fadc250_stream.py +++ b/pyevio/decoders/fadc250_stream.py @@ -7,8 +7,7 @@ memory map, and the CLI, the examples and the web server call this module. Frame layout, measured on /data/evio-lib/corpus/sro_000791.evio.00000.v6 -(record 0), described in the evio-optim SRO notes and in the PHASE0 SRO -reference report (space/reports/phase0_sro_reference.md):: +(record 0):: event bank tag 0xFF60, type 0x10 (bank of banks), num 0 SIB tag 0xFF31, type 0x20 (bank of segments) @@ -54,8 +53,9 @@ Evidence: every earlier decoder in this repository, the viewer and the independent greenfield SRO parser agree on the bit positions and on the 4 ns tick, the fADC250 sample period (250 MSPS). 2^14 ticks × 4 ns = -65,536 ns equals the 65,536-tick timestamp step per frame in the SRO notes -only if the timestamp tick is 1 ns, which is open (question Q2):: +65,536 ns equals the 65,536-tick timestamp step per frame only if the +timestamp tick is 1 ns. The tick length is unconfirmed, so ``stream_stats`` +keeps it as the ``tick_ns`` knob:: bit 31 flag, never set in the SRO data (Jon Zarling's decoder skips such words) bits 30—17 time in 4 ns ticks from the frame start (14 bits, 0—16383) diff --git a/pyevio/stream_stats.py b/pyevio/stream_stats.py index e84f2cc..fda21c0 100644 --- a/pyevio/stream_stats.py +++ b/pyevio/stream_stats.py @@ -120,7 +120,7 @@ def scan_frames(evio_file: EvioFile, max_records: Optional[int] = None) -> Frame n_other += 1 continue rows.append((record_i, event_i, words[5], words[6] | (words[7] << 32))) - # EvioFile.record_count covers data records only (D12); the trailer is a separate + # EvioFile.record_count covers data records only; the trailer is a separate # attribute and counts as seen once the scan has covered the whole file. if record_limit == evio_file.record_count and evio_file.trailer is not None: n_trailers += 1 @@ -301,7 +301,7 @@ def start_worker_services() -> None: The resource tracker hands ``sys.stderr.fileno()`` to the process it spawns. A program that captures stderr (Textual replaces it with an object whose ``fileno()`` is -1 while the app runs) makes that spawn fail with ``ValueError: bad value(s) in fds_to_keep`` on the first - pool (F63). Both services start once per process and stay up, so ``pyevio gui`` calls this + pool. Both services start once per process and stay up, so ``pyevio gui`` calls this before the app starts; ``compute_stream_stats`` calls it too, pointing ``sys.stderr`` at the process's original stderr for the few milliseconds the start takes when the current one is unusable. Harmless when the services already run. @@ -350,7 +350,7 @@ def _decode_records(evio_file: EvioFile, record_range, events_before_record: np. if record_type(record) == RECORD_TYPE_TRAILER: continue # Event offsets point into record.buffer: the mmap for a plain record, the - # decompressed bytes for an LZ4/gzip record (F4). Never read them from the mmap. + # decompressed bytes for an LZ4/gzip record. Never read them from the mmap. buffer = record.buffer for offset, length in record.get_event_offsets()[:record.header.event_count]: if offset + length <= len(buffer): @@ -398,7 +398,7 @@ class StreamStats: warnings: int # malformed SIB segments after the TSS (no hit depends on them) warning_messages: List[str] frames_with_ais: int # frames whose SIB holds an aggregation info segment (0x42) - frames_with_degenerate_ais: int # of those, frames whose entries all hold one value (F15) + frames_with_degenerate_ais: int # of those, frames whose entries all hold one value checks: FrameChecks rocs: np.ndarray ports: np.ndarray diff --git a/pyevio/web/report.py b/pyevio/web/report.py index 031cfa8..e31bf0c 100644 --- a/pyevio/web/report.py +++ b/pyevio/web/report.py @@ -91,7 +91,7 @@ def row(name, status, value, detail=""): row("flag words", "warn" if stats.n_flag_words else "ok", stats.n_flag_words, "hit words with bit 31 set"), row("unmapped payload banks", "warn" if stats.n_unmapped_payload_banks else "ok", stats.n_unmapped_payload_banks, "ports absent from the 0x41 payload map, decoded as fADC250"), - # F15: the SRO hardware fills every AIS slot with one stream's entry. The decoder never uses the AIS + # The SRO hardware fills every AIS slot with one stream's entry. The decoder never uses the AIS # to find ROC banks, so the repetition costs nothing; the row makes it visible. row("AIS entries identical", "info" if stats.frames_with_degenerate_ais else "ok", stats.frames_with_degenerate_ais, f"of {stats.frames_with_ais} frames with an aggregation info segment: the segment repeats one stream's entry " diff --git a/pyproject.toml b/pyproject.toml index 8e70335..2c3d4b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,8 +49,8 @@ build-backend = "setuptools.build_meta" [tool.setuptools.dynamic] version = {attr = "pyevio.__version__"} -# Only the library is a package; docs/, examples/, space/ and tests/ sit -# beside it in a flat layout and must not be discovered as packages. +# Only the library is a package; docs/, examples/, tests/ and any other +# top-level folder sit beside it in a flat layout and must not be discovered as packages. [tool.setuptools.packages.find] include = ["pyevio*"] diff --git a/tests/golden/test_corpus.py b/tests/golden/test_corpus.py index 7d8d8b4..827904d 100644 --- a/tests/golden/test_corpus.py +++ b/tests/golden/test_corpus.py @@ -26,7 +26,7 @@ ``EvioFile.record_count`` equals ``records``, the record header event-count sum equals ``event_count``, and no event from ``Record.scan_events`` extends past the end of the file. Rows that fail today carry -``xfail(strict=True)`` with the finding number. +``xfail(strict=True)`` with the reason. """ import os @@ -53,9 +53,8 @@ with open(MANIFEST_PATH) as manifest_file: MANIFEST = yaml.safe_load(manifest_file) -# Failures by compression kind. Empty since PHASE1 fixed F3 (trailer counted -# as a record; its index read as events) and F4 (LZ4 records walked as -# uncompressed bytes). A new entry carries the finding number. +# Failures by compression kind. Empty: every row passes. A new entry maps the +# compression kind to the reason the row fails. XFAIL_BY_COMPRESSION = {} diff --git a/tests/golden/test_golden.py b/tests/golden/test_golden.py index 5ee930a..a58a4fe 100644 --- a/tests/golden/test_golden.py +++ b/tests/golden/test_golden.py @@ -34,14 +34,14 @@ ``"v6-records"`` and checked like the v6 rows (the dictionary in the record user header of ``buffer_evw_dict_le.dump`` is skipped, not read). 3. v4 and v1—3 rows: ``EvioFile`` raises ``ValueError`` whose message names - the detected version and points at the evio tools (the F9 contract, see + the detected version and points at the evio tools (see ``assert_unsupported_version_message``). 4. v6 rows: the header event-count sum equals the manifest count, the events found by ``Record.scan_events`` number the same, and no event extends past the end of the file. -Rows that fail today carry ``xfail(strict=True)`` with the finding number -from the findings ledger, so a fix flips the test loudly. +Rows that fail today carry ``xfail(strict=True)`` with the reason, so a fix +flips the test loudly. """ import hashlib @@ -72,7 +72,7 @@ # EVIO version each legacy row carries in word 5 of its first block header. -# These rows must fail with the F9 message instead of being read. +# These rows must fail with the unsupported-version message instead of being read. LEGACY_VERSION = { "v4_le.evio": 4, "v4_be.evio": 4, @@ -80,10 +80,8 @@ "v13_legacy.evio": 3, } -# Failures by case name, decided by running every row with pyevio. Empty -# since PHASE1 fixed F3 (trailer index read as events), F4 (compressed -# records), F9 (version message for legacy files) and F39 (HIPO file type -# id). A new entry carries the finding number. +# Failures by case name, decided by running every row with pyevio. Empty: +# every row passes. A new entry maps the case name to the reason the row fails. XFAIL_BY_CASE = {} @@ -107,7 +105,7 @@ def sha256_of(path): def assert_unsupported_version_message(message, version): - """The F9 contract for files pyevio does not read. + """The message contract for files pyevio does not read. The message names the detected EVIO version ("version 4") and tells the reader where to go: an evio tool (evio2xml, eviocopy) or the evio diff --git a/tests/gui/test_plots.py b/tests/gui/test_plots.py index f2e2c2c..ef37bdb 100644 --- a/tests/gui/test_plots.py +++ b/tests/gui/test_plots.py @@ -171,7 +171,7 @@ def row_lines(text: str, labels: list) -> dict: def test_heatmap_prints_every_count_once_and_intact(): - """F64: 16 ports in 16 lines, counts whose compact forms overstruck each other under plotext (93.6k under 55k read 955kk).""" + """16 ports in 16 lines, counts whose compact forms overstruck each other under plotext (93.6k under 55k read 955kk).""" ports = list(range(1, 17)) counts = [[(port * 16 + channel) * 613 + (0 if (port + channel) % 7 else -(port * 16 + channel) * 613) for channel in range(16)] for port in ports] @@ -191,7 +191,7 @@ def test_heatmap_prints_every_count_once_and_intact(): def test_heatmap_rows_and_columns_are_all_the_same_size(): - """F65: 13 rows at the screenshot size and at a taller one; the dash of an unmapped port is always printed.""" + """13 rows at the screenshot size and at a taller one; the dash of an unmapped port is always printed.""" ports = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] counts = [[(port * 16 + channel) * 1000 for channel in range(16)] for port in ports] hist = occupancy_dict(counts, ports, dead_ports=(4, 11)) @@ -243,7 +243,7 @@ def charge_render(hist: dict, width: int, height: int) -> str: def test_charge_spectrum_is_logarithmic_with_power_of_ten_ticks(): - """F68: the terminal charge plot reads like the browser's: log y, ticks labelled with the real counts.""" + """The terminal charge plot reads like the browser's: log y, ticks labelled with the real counts.""" edges = list(range(0, 8193, 64)) counts = [0] * 128 counts[0], counts[1], counts[2], counts[10], counts[20], counts[40] = 20_000_000, 2_000_000, 50_000, 300, 7, 1 diff --git a/tests/test_bank_scanning.py b/tests/test_bank_scanning.py index 93e37d3..2b29c56 100644 --- a/tests/test_bank_scanning.py +++ b/tests/test_bank_scanning.py @@ -277,7 +277,7 @@ def test_real_world_event_structure(self, tmp_path): assert all(c.tag != 0x000F for c in children + roc_children) def test_sro_event_segments_are_one_word_structures(self): - """The SIB of an SRO stream frame holds segments (1-word headers), typed by the parent (F45). + """The SIB of an SRO stream frame holds segments (1-word headers), typed by the parent. Layout as the hardware writes it: event 0xFF60 (bank of banks) -> SIB 0xFF31 (bank of segments: TSS 0x32 with frame, ts_lo, ts_hi; AIS @@ -346,7 +346,7 @@ def test_segment_walk_stops_at_overrun(self): assert len(bank.errors) == 1 and "Segment at 0x10 declares 500 words" in bank.errors[0] def test_bank_clamped_to_limit(self): - """A bank whose length passes the given limit is clamped there and says so (F5).""" + """A bank whose length passes the given limit is clamped there and says so.""" bank_bytes = evio_bank(0x0101, Bank.TYPE_UINT32, 0x01, struct.pack(""]) def test_ais_entries_are_counted_identical_and_distinct(endian): """The decoder counts the AIS entries and their distinct values per frame; it never walks the AIS for ROC banks.""" @@ -224,8 +224,8 @@ def test_non_stream_event_is_not_an_error(): assert frame.n_hits == 0 and frame.errors == 0 -def test_last_roc_bank_without_children_i17(): - """F17: the Parquet example crashed on a frame whose last ROC bank has no children (length 1).""" +def test_last_roc_bank_without_children(): + """The Parquet example crashed on a frame whose last ROC bank has no children (length 1).""" words = stream_frame(FRAME_NUMBER, TIMESTAMP, [ roc_bank(7, 1, FRAME_NUMBER, TIMESTAMP, [(1, HITS_A)]), bank(7, 0x10, 0x22, []), @@ -404,7 +404,7 @@ def word(i): return sums -# Module per crate in run 791 as the PHASE0 reference report records it (independent of the decoder's map parsing). +# Module per crate in run 791, determined independently of the decoder's map parsing. REFERENCE_FADC_ROCIDS = {7, 9, 25, 27, 29, 84} REFERENCE_DCRB_ROCIDS = {44, 45, 46, 53, 54, 55} @@ -451,5 +451,5 @@ def test_corpus_record0_hits_match_payload_word_sums(): assert fs.non_fadc_words_per_port(hits.non_fadc_banks) == {k: v for k, v in expected_dcrb_per_port.items() if v} assert hits.non_fadc_words == sum(expected_dcrb_per_port.values()) == 400_546 assert hits.n_hits + hits.non_fadc_words == hits.n_payload_words == 499_660 - # F15: every AIS lists 24 slots holding one value (one stream's entry repeated). + # Every AIS lists 24 slots holding one value (one stream's entry repeated). assert hits.frames["n_ais_entries"].tolist() == [24] * 11 and hits.frames["n_ais_distinct"].tolist() == [1] * 11 diff --git a/tests/test_fadc250_stream_example.py b/tests/test_fadc250_stream_example.py index 001f0b6..f2d54e3 100644 --- a/tests/test_fadc250_stream_example.py +++ b/tests/test_fadc250_stream_example.py @@ -1,9 +1,9 @@ """The Parquet example and `pyevio debug` on a synthetic streaming file. Both callers use pyevio.decoders.fadc250_stream; these tests pin that the -example survives the F17 frame shape (a last ROC bank without children), +example survives a frame whose last ROC bank has no children, sorts hits by (frame, event, t_ns) so duplicate frames keep valid hit -ranges (F20), and that the debug command decodes a stream frame. +ranges, and that the debug command decodes a stream frame. """ import importlib.util import struct @@ -42,10 +42,10 @@ def make_record(number, events): def write_stream_file(path): - """Two records: frame 100 (two hits, F17 shape), a non-stream event, then frame 100 again and frame 104.""" + """Two records: frame 100 (two hits, last ROC bank childless), a non-stream event, then frame 100 again and frame 104.""" frame_100_a = stream_frame(100, 1000, [ roc_bank(7, 1, 100, 1000, [(1, [hit_word(2, 50, 10), hit_word(2, 30, 20)])]), - bank(7, 0x10, 0x22, []), # F17: last ROC bank has no children + bank(7, 0x10, 0x22, []), # Last ROC bank has no children ]) other = bank(0xFF50, 0x10, 0, bank(1, 1, 0, [1, 2])) frame_100_b = stream_frame(100, 1000, [roc_bank(9, 2, 100, 1000, [(2, [hit_word(4, 40, 30)]), (4, [])])]) @@ -57,7 +57,7 @@ def write_stream_file(path): return str(path) -def test_example_decode_handles_i17_and_duplicate_frames(tmp_path): +def test_example_decode_handles_childless_roc_bank_and_duplicate_frames(tmp_path): example = load_example() hits, frames, stats, stream_hits = example.decode(write_stream_file(tmp_path / "stream.evio")) checks = example.validate(stream_hits, frames) diff --git a/tests/test_record_scanning.py b/tests/test_record_scanning.py index 105c28f..36f5d65 100644 --- a/tests/test_record_scanning.py +++ b/tests/test_record_scanning.py @@ -96,7 +96,7 @@ def test_stops_at_last_record_before_non_record_data(tmp_path): @pytest.mark.parametrize("with_index", [False, True]) def test_trailer_is_not_a_data_record(tmp_path, with_index): - """The trailer is exposed as `trailer`; its index never yields events (F3).""" + """The trailer is exposed as `trailer`; its index never yields events.""" records = [make_record(1, [make_event(2), make_event(3)], last=False, with_index=True), make_record(2, [make_event(1)], last=False, with_index=True)] trailer = make_trailer(3, records, with_index) @@ -134,7 +134,7 @@ def test_event_count_bounded_by_index_and_data_end(tmp_path): def test_file_without_file_header_names_its_version(tmp_path): - """A bare v4 block chain is refused with the version in the message (F9). + """A bare v4 block chain is refused with the version in the message. Word 5 carries the v4 last-block bit (0x204, as the evio writers set it); an all-zero bit-info would be the SRO hardware shape, which pyevio reads. @@ -148,7 +148,7 @@ def test_file_without_file_header_names_its_version(tmp_path): def test_hipo_file_type_id_in_ascii_byte_order(tmp_path): - """HIPO writers store the type id bytes "HIPO" in order whatever the byte order (F39).""" + """HIPO writers store the type id bytes "HIPO" in order whatever the byte order.""" records = [make_record(1, [make_event(1)], last=True, with_index=True)] header = b"HIPO" + struct.pack("<13I", 1, 14, 1, 0, 6, 0, MAGIC, 0, 0, 0, 0, 0, 0) path = tmp_path / "hipo.evio" @@ -160,7 +160,7 @@ def test_hipo_file_type_id_in_ascii_byte_order(tmp_path): def test_user_header_lengths_are_padded_to_words(tmp_path): - """Odd user header lengths at file level (7) and record level (5) shift nothing (F8).""" + """Odd user header lengths at file level (7) and record level (5) shift nothing.""" records = [make_record(1, [make_event(2), make_event(3)], last=True, with_index=True, user_header=b"abcde")] with EvioFile(write_file(tmp_path / "padded.evio", records, user_header=b"1234567"), ) as f: assert f.first_record_offset == 56 + 8 @@ -174,7 +174,7 @@ def test_user_header_lengths_are_padded_to_words(tmp_path): @pytest.mark.parametrize("compression", [1, 2, 3], ids=["lz4", "lz4best", "gzip"]) def test_compressed_record_events_are_read_from_the_decompressed_buffer(tmp_path, compression): - """Events of an LZ4, LZ4_BEST or gzip record come from Record.buffer; offsets are into it (F4).""" + """Events of an LZ4, LZ4_BEST or gzip record come from Record.buffer; offsets are into it.""" events = [make_event(2), make_event(3), make_event(1)] records = [make_record(1, events, last=False, with_index=True, user_header=b"xyz", compression=compression), make_record(2, [make_event(4)], last=True, with_index=True)] @@ -199,7 +199,7 @@ def test_compressed_record_events_are_read_from_the_decompressed_buffer(tmp_path def test_truncated_final_record_keeps_complete_events(tmp_path): - """A final record cut by EOF keeps its complete events and becomes a check (F5, D4).""" + """A final record cut by EOF keeps its complete events and becomes a check.""" events = [make_event(2), make_event(3), make_event(5)] whole = make_record(2, events, last=False, with_index=False) cut = whole[:len(whole) - 12] # the last event loses its tail @@ -231,7 +231,7 @@ def test_record_with_zero_header_length_ends_the_scan(tmp_path): def test_garbage_after_a_record_ends_the_scan(tmp_path): - """Bytes that are no record header stop the record scan with a check (F5).""" + """Bytes that are no record header stop the record scan with a check.""" records = [make_record(1, [make_event(1)], last=False, with_index=True)] with EvioFile(write_file(tmp_path / "garbage.evio", records, trailer=b"\xff" * 40)) as f: assert f.record_count == 1 @@ -240,7 +240,7 @@ def test_garbage_after_a_record_ends_the_scan(tmp_path): def test_root_bank_never_reads_past_its_event(tmp_path): - """An event whose bank length word overruns the event is clamped and reported (F5).""" + """An event whose bank length word overruns the event is clamped and reported.""" event = bytearray(make_event(2)) struct.pack_into(" 0 and summary["records"]["count"] == progress["records_total"] rows = client.get(f"/api/files/{opened['file_id']}/records", params={"from": 7880, "count": 100}).json() assert rows["total"] == summary["records"]["count"] + 1 and rows["rows"][-1]["is_trailer"] diff --git a/tests/web/test_web_sro.py b/tests/web/test_web_sro.py index 6efa361..1cd895d 100644 --- a/tests/web/test_web_sro.py +++ b/tests/web/test_web_sro.py @@ -1,8 +1,8 @@ """Raw SRO smoke: a JLab hardware file (8-word record headers, truncated tail) opens through the API. -Runs with ``PYEVIO_SRO=1`` or ``PYEVIO_CORPUS=1``. Reference numbers: PHASE0 SRO -reference and PHASE1 (space/reports): 7,893 records of which the last is -truncated, 86,794 events (2 salvaged from the tail), 764,009,774 fADC250 hits. +Runs with ``PYEVIO_SRO=1`` or ``PYEVIO_CORPUS=1``. Reference numbers, measured +independently of pyevio: 7,893 records of which the last is truncated, 86,794 +events (2 salvaged from the tail), 764,009,774 fADC250 hits. """ import os import time From 088156a82e023ff17508cf733d9185209b05cc13 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Mon, 12 Oct 2026 08:32:09 -0400 Subject: [PATCH 62/65] Rust README: the golden manifest has 44 rows, 37 readable The test prints "37 rows read, 7 rows rejected"; the README claimed 46 and 39. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- rust/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/README.md b/rust/README.md index bc375d3..f03953b 100644 --- a/rust/README.md +++ b/rust/README.md @@ -187,7 +187,7 @@ EVIO_CORPUS=1 cargo test --release --test corpus -- --nocapture # 140 GB, minu ``` - Golden set (`tests/golden.rs`, `tests/data/golden_manifest.tsv` generated - from the evio-optim `manifest.yaml`): all 46 rows pass. 39 readable rows + from the evio-optim `manifest.yaml`): all 44 rows pass. 37 readable rows (C++ and Java writers: plain LE/BE, LZ4, LZ4_BEST, gzip, dictionary, first event, odd user header, trailer with and without index, append, split, many records, 12-deep nesting, one 40 MB event, zero events, HIPO file From 928b8d06fa54cd08eae0d3de67c06fc52416640a Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Mon, 12 Oct 2026 08:33:36 -0400 Subject: [PATCH 63/65] Changelog: capitalize the Fixed entries that lost their id prefix Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d88687..3ca0eec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,38 +48,38 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change ### Fixed -- leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. -- trailer records produced phantom events past the end of the file: the trailer's record index was read as event lengths. +- Leaf banks lost their last word: `Bank` counted the length word as part of the declared length, so every `to_numpy()` and child walk stopped one word short. +- Trailer records produced phantom events past the end of the file: the trailer's record index was read as event lengths. - LZ4, LZ4_BEST and gzip records were read as uncompressed bytes and produced garbage events. -- an event or bank length that ran past its record or the file was trusted; corrupt data raised deep inside numpy or struct calls. Every length is checked against its container and an overrun ends the walk with a recorded error. -- a truncated final record, garbage after the last record, or a second file header (two files concatenated) was accepted as a record. Record headers are validated before use and a problem ends the scan with a `bad_record_header` check. +- An event or bank length that ran past its record or the file was trusted; corrupt data raised deep inside numpy or struct calls. Every length is checked against its container and an overrun ends the walk with a recorded error. +- A truncated final record, garbage after the last record, or a second file header (two files concatenated) was accepted as a record. Record headers are validated before use and a problem ends the scan with a `bad_record_header` check. - `with EvioFile(...)` leaked the mmap and the file descriptor silently while a numpy view was alive. -- a dictionary or first event of odd length shifted every event: the user header length is stored padded to whole words. +- A dictionary or first event of odd length shifted every event: the user header length is stored padded to whole words. - v4 and v1—3 files failed with a generic "Unsupported EVIO version" error. - HIPO files (file type id `HIPO`) were rejected. - `EvioFile.get_event()` raised on every call (a 2-tuple unpacked into four names); `pyevio event` by global index failed with it. -- children of a bank of segments or tagsegments were read as two-word banks: the first segment word of a streaming frame's stream info bank was taken for a length, and the walk stopped with an entry in `Bank.errors` and no children. +- Children of a bank of segments or tagsegments were read as two-word banks: the first segment word of a streaming frame's stream info bank was taken for a length, and the walk stopped with an entry in `Bank.errors` and no children. - `pyevio event N --record R` looked the event up by global index instead of its index within the record. - SRO hardware files (8-word block headers, version word 4, no file header) could not be opened. -- two bank-scanning tests failed on `main` because their fixtures declared lengths that disagreed with their byte sizes; corrected to EVIO length semantics. +- Two bank-scanning tests failed on `main` because their fixtures declared lengths that disagreed with their byte sizes; corrected to EVIO length semantics. - `uv run` and `pip install` could not build the package: setuptools auto-discovery picked up a second top-level directory as a package. - `pyevio debug` printed "Error accessing event" for every event (it called a method `Record` does not have) and skipped every payload bank with two or more hits. - `pyevio debug` displayed bank extents one word short. -- the hit-word layout and the frame walk existed in five copies (viewer, Parquet example, `pyevio debug`, two analysis examples) that had drifted apart; the Parquet example and `pyevio debug` call the shared decoder. The viewer's copy and `examples/analyze_evio_data.py` / `examples/analyze_roc_data2.py` remain. -- the Parquet example crashed (`IndexError`) when the last ROC bank of a frame had no children or ended in an empty payload bank. -- the example's `validate()` checked a `uint16` column against 65,536, which could never fail, with `assert`, which `python -O` removes; the raw 14-bit time field is checked and `ValueError` raised. -- duplicate frame numbers interleaved the hits of both copies in the Parquet output, so the per-frame hit ranges pointed at the wrong rows. -- every crate was decoded as fADC250, so DCRB channel masks became bogus hits; the module type comes from the payload map. +- The hit-word layout and the frame walk existed in five copies (viewer, Parquet example, `pyevio debug`, two analysis examples) that had drifted apart; the Parquet example and `pyevio debug` call the shared decoder. The viewer's copy and `examples/analyze_evio_data.py` / `examples/analyze_roc_data2.py` remain. +- The Parquet example crashed (`IndexError`) when the last ROC bank of a frame had no children or ended in an empty payload bank. +- The example's `validate()` checked a `uint16` column against 65,536, which could never fail, with `assert`, which `python -O` removes; the raw 14-bit time field is checked and `ValueError` raised. +- Duplicate frame numbers interleaved the hits of both copies in the Parquet output, so the per-frame hit ranges pointed at the wrong rows. +- Every crate was decoded as fADC250, so DCRB channel masks became bogus hits; the module type comes from the payload map. - Decoder and statistics: fixed caps of 8 ROCs and 64 boards dropped crates silently; each crate sends two ROC banks per frame, so 12 crates make 24. The decoder and `stream_stats` have no caps: histogram axes grow with the data, both streams of a crate merge by ROC id, and the stream identity (ROC bank num mask) is kept per hit. The viewer's own caps remain. -- empty payload banks (length 1, num 1) and payload data type 0x00 were treated as anomalies. -- a file of a 4-way striped run reported 3 of every 4 frames missing, and time was computed from frame numbers; the stride is read from the data and time from timestamps. -- the frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. +- Empty payload banks (length 1, num 1) and payload data type 0x00 were treated as anomalies. +- A file of a 4-way striped run reported 3 of every 4 frames missing, and time was computed from frame numbers; the stride is read from the data and time from timestamps. +- The frame period and the timestamp tick were guessed from `timestamp / frame` of the first frame; the period is the median timestamp step per frame and the tick length is a knob. - Rate histograms binned from frame 0 to the last frame, so a later stripe squeezed into the right edge and partial last bins read low; `stream_stats` bins from the first to the last timestamp and normalizes by the frames each bin covers. -- the Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. -- every command printed a traceback for a file pyevio cannot read (an EVIO v4 file, a file without the magic number); the message goes to stderr with exit code 1. +- The Parquet example, `stream_stats` and `pyevio debug` read event bytes from the file mmap, which is wrong for compressed records, and the example kept mmap views past the `with` block. +- Every command printed a traceback for a file pyevio cannot read (an EVIO v4 file, a file without the magic number); the message goes to stderr with exit code 1. - `pyevio event` and `pyevio debug` printed the offsets of a compressed record as if they were file offsets; a note names them as offsets in the decompressed record buffer, and `pyevio event --hexdump` reads the event from that buffer. - `pyevio --version` printed 0.1.0; it prints `pyevio.__version__`. -- the `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. +- The `pyevio FILE` shortcut for `pyevio info FILE` never ran (click resolves the command name first); the dead branch is removed and `pyevio` with no arguments prints the help. - `pyevio event N` by global index printed `Record #None`; it prints the record the event lives in. - `pyevio dump --record R` with R out of range printed the message and exited 0; it is a parameter error (exit code 2). The `--hexdump` title of `pyevio event` lost a stray `)`. - Files that set the last-record bit on every record showed 1 record and 0 events; the scan continues while another record header follows, and records without an event index are walked by the length word of each event bank. From b60f2bf1e143f97e1c30f383a117c8e3fd6748c4 Mon Sep 17 00:00:00 2001 From: Dmitry Romanov Date: Mon, 12 Oct 2026 21:55:13 -0400 Subject: [PATCH 64/65] pyevio web FILE opens the file at start; serve a tab icon `pyevio web` takes a file as well as a folder: the file's folder is served and the printed URL carries ?open=, which the page opens on load. The empty page says so. A favicon.svg is linked from the page and served at /favicon.ico too, so a browser's first request no longer logs a 404. Tests: the path split (folder vs file), /favicon.ico and /favicon.svg answer 200 with SVG, and a Playwright page with ?open= shows the file without a click. Gate: 240 passed, 5 skipped. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01XDaEfG6VfRLmUbbHW3Uit5 --- CHANGELOG.md | 2 +- README.md | 1 + docs/web_viewer.md | 1 + pyevio/cli/web.py | 14 ++++++++------ pyevio/web/app.js | 3 +++ pyevio/web/app.py | 32 ++++++++++++++++++++++++++++---- pyevio/web/favicon.svg | 8 ++++++++ pyevio/web/index.html | 3 ++- tests/test_cli.py | 2 +- tests/web/test_viewer.py | 12 ++++++++++++ tests/web/test_web_api.py | 8 ++++++++ tests/web/test_web_auth.py | 8 ++++++++ 12 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 pyevio/web/favicon.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ca0eec..7dee91f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ All notable changes to pyevio are listed here. The format follows [Keep a Change - `pyevio.stream_stats`: one parallel pass over a streaming file to rate, charge, time-in-frame, occupancy and hits-per-frame histograms, empty banks and other-module words per port, and frame checks (stride, missing and duplicate frames, out-of-order frames, timestamp-step outliers). `StreamStats` round-trips through `.npz` with a version field; the timestamp tick length is the knob `tick_ns`. - `pyevio stats FILE [--out FILE.npz] [--workers N] [--rate-bins N] [--tick-ns X] [--records N]`. - `pyevio debug` prints a stream-frame summary for 0xFF60 events and the module, hits and other-module words per ROC bank. -- `pyevio web`: a browser viewer for CODA streaming fADC250 files (`docs/web_viewer.md`), and `examples/fadc250_stream_to_parquet.py`, which writes the hits of a file to Parquet. +- `pyevio web`: a browser viewer for CODA streaming fADC250 files (`docs/web_viewer.md`), and `examples/fadc250_stream_to_parquet.py`, which writes the hits of a file to Parquet. `pyevio web FILE` serves the file's folder and opens the file at once; the page has a tab icon, so browsers no longer log a 404 for `/favicon.ico`. - `pyevio gui [FILE | FOLDER]`: a console viewer (Textual, optional extra `pyevio[gui]`) with the browser viewer's four tabs in the terminal — file checks and totals, plotext plots at file, ROC and channel level, the paged record table and the structure tree down to hit words with a detail panel of fields and raw words — plus a file-open screen; it reads through the same `pyevio.web` model functions as `pyevio web` and shares its statistics cache (`--cache-dir`, `--workers`), and `s` / `S` save the plots as PNG through matplotlib (`docs/console_gui.md`). - Golden-set harness `tests/golden/test_golden.py` (one test per row of the evio golden manifest, path in `GOLDEN_MANIFEST`) and the SRO corpus tests `tests/golden/test_corpus.py` (`PYEVIO_CORPUS=1`). - Documentation: `docs/stream_decoding.md` (frame layout, hit word, time units, striping, `stream_stats` outputs, file quirks); `docs/evio6_file_structure.md` gains an SRO hardware layout section. diff --git a/README.md b/README.md index 5d07588..82c58c7 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,7 @@ pyevio ana run.evio --per-record # event tag statistics over the file pyevio gui run.evio # console viewer (Textual), see docs/console_gui.md pyevio gui /path/to/runs # the same, picking a file from a folder pyevio web /path/to/runs # browser viewer, see docs/web_viewer.md +pyevio web run.evio # the same, opening this file at once ``` ## Development diff --git a/docs/web_viewer.md b/docs/web_viewer.md index 0e8956f..0a2936d 100644 --- a/docs/web_viewer.md +++ b/docs/web_viewer.md @@ -15,6 +15,7 @@ pip install 'pyevio[web]' ```bash pyevio web # serve the current folder pyevio web /path/to/runs # serve another folder +pyevio web /path/to/run.evio # serve the file's folder and open the file at once pyevio web /path/to/runs --port 9000 --no-browser --workers 8 --cache-dir /scratch/pyevio-cache ``` diff --git a/pyevio/cli/web.py b/pyevio/cli/web.py index 9f80aaf..84382db 100644 --- a/pyevio/cli/web.py +++ b/pyevio/cli/web.py @@ -4,18 +4,20 @@ @click.command(name="web") -@click.argument("root", type=click.Path(exists=True, file_okay=False), default=".") +@click.argument("path", type=click.Path(exists=True), default=".") @click.option("--port", "-p", default=8765, show_default=True, help="Port on 127.0.0.1") @click.option("--no-browser", is_flag=True, help="Do not open a browser tab") @click.option("--cache-dir", type=click.Path(file_okay=False), default=None, help="Where analysis results (.npz) are cached (default: ~/.cache/pyevio/stats)") @click.option("--workers", "-w", type=int, default=None, help="Worker processes for the analysis (default: cores minus two)") @click.option("--verbose", "-v", is_flag=True, help="Log every request") -def web_command(root, port, no_browser, cache_dir, workers, verbose): - """Browse EVIO files under ROOT in a web page: checks, plots, records and structure. +def web_command(path, port, no_browser, cache_dir, workers, verbose): + """Browse EVIO files in a web page: checks, plots, records and structure. - The server listens on 127.0.0.1 and prints a URL with a one-time token; only - files under ROOT (default: the current folder) can be opened. + PATH is a folder to browse (default: the current folder) or a file: then its + folder is served and the page opens the file at once. The server listens on + 127.0.0.1 and prints a URL with a one-time token; only files under the served + folder can be opened. """ try: from pyevio.web.app import serve @@ -23,4 +25,4 @@ def web_command(root, port, no_browser, cache_dir, workers, verbose): from pyevio.web import INSTALL_HINT click.echo(INSTALL_HINT, err=True) sys.exit(1) - serve(root, port, open_browser=not no_browser, cache_dir=cache_dir, workers=workers, verbose=verbose) + serve(path, port, open_browser=not no_browser, cache_dir=cache_dir, workers=workers, verbose=verbose) diff --git a/pyevio/web/app.js b/pyevio/web/app.js index 0334201..7857822 100644 --- a/pyevio/web/app.js +++ b/pyevio/web/app.js @@ -15,6 +15,8 @@ const $ = id => document.getElementById(id); // The token comes from the URL `pyevio web` printed (?token=…) and goes out as the X-Token header on every // /api call: static files need none, and API URLs stay free of secrets in logs and bookmarks. const TOKEN = new URLSearchParams(location.search).get('token') || ''; +// `pyevio web path/to/file` adds ?open=; the page opens it on load. +const START_FILE = new URLSearchParams(location.search).get('open') || ''; class ApiError extends Error { constructor(status, message) { @@ -608,6 +610,7 @@ function init() { return; } guarded(() => browse('')); + if (START_FILE) guarded(() => openFile(START_FILE)); } init(); diff --git a/pyevio/web/app.py b/pyevio/web/app.py index 0ca7e47..f90aa41 100644 --- a/pyevio/web/app.py +++ b/pyevio/web/app.py @@ -7,7 +7,8 @@ import logging import webbrowser from pathlib import Path -from typing import Optional +from typing import Optional, Tuple +from urllib.parse import quote from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError @@ -22,6 +23,7 @@ log = logging.getLogger("pyevio.web") STATIC_SUFFIXES = (".html", ".js", ".css", ".svg", ".png", ".ico") +START_FILE_QUERY_PARAM = "open" # the page opens this file (relative to the served root) on load; app.js reads it def create_app(root: Path, token: str, cache_dir: Optional[Path] = None, stats_workers: Optional[int] = None) -> FastAPI: @@ -71,6 +73,11 @@ async def not_accessible(request: Request, error: OSError): def index(): return FileResponse(INDEX_HTML) + @app.get("/favicon.ico", include_in_schema=False) + def favicon(): + """Browsers ask for /favicon.ico before the page names its icon; serve the SVG there as well.""" + return FileResponse(WEB_DIR / "favicon.svg", media_type="image/svg+xml") + @app.get("/{asset_name}", include_in_schema=False) def asset(asset_name: str): """Files beside index.html (scripts, styles); nothing outside the package folder.""" @@ -83,15 +90,32 @@ def asset(asset_name: str): return app -def serve(root: str = ".", port: int = 8765, open_browser: bool = True, cache_dir: Optional[str] = None, +def served_root_and_start_file(path: Path) -> Tuple[Path, Optional[str]]: + """Split the command-line PATH: a folder is served as is; a file's folder is served and the file opens at start. + + Returns the folder to serve and the file name relative to it (``None`` for a folder). + """ + path = Path(path).expanduser().resolve() + if path.is_dir(): + return path, None + return path.parent, path.name + + +def serve(path: str = ".", port: int = 8765, open_browser: bool = True, cache_dir: Optional[str] = None, workers: Optional[int] = None, verbose: bool = False) -> None: - """Serve the viewer on 127.0.0.1 until Ctrl+C; prints the URL that carries the token.""" + """Serve the viewer on 127.0.0.1 until Ctrl+C; prints the URL that carries the token. + + ``path`` is the folder to serve, or a file: then its folder is served and the page opens the file. + """ import uvicorn logging.basicConfig(level=logging.DEBUG if verbose else logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s") token = new_token() - app = create_app(Path(root), token, Path(cache_dir) if cache_dir else None, workers) + root, start_file = served_root_and_start_file(Path(path)) + app = create_app(root, token, Path(cache_dir) if cache_dir else None, workers) url = f"http://127.0.0.1:{port}/?{TOKEN_QUERY_PARAM}={token}" + if start_file: + url += f"&{START_FILE_QUERY_PARAM}={quote(start_file)}" # flush: with stdout redirected to a file (ssh session logs), the URL must appear before uvicorn blocks. print(f"pyevio web: {url}\nFiles under: {app.state.root}\nCache: {app.state.registry.cache.directory}\n(Ctrl+C to stop)", flush=True) if open_browser: diff --git a/pyevio/web/favicon.svg b/pyevio/web/favicon.svg new file mode 100644 index 0000000..201bb1d --- /dev/null +++ b/pyevio/web/favicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/pyevio/web/index.html b/pyevio/web/index.html index 0f28c40..74d2fbf 100644 --- a/pyevio/web/index.html +++ b/pyevio/web/index.html @@ -4,6 +4,7 @@ pyevio web viewer + @@ -26,7 +27,7 @@

    pyevio viewer

    No file open
    -
    Pick a file in the folder browser. The server reads and analyzes it; this page shows the result.
    +
    Pick a file in the folder browser, or start the server with pyevio web path/to/file. The server reads and analyzes the file; this page shows the result.
    diff --git a/tests/test_cli.py b/tests/test_cli.py index 6c62a4e..0c43548 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,7 +12,7 @@ # Every command that opens its file with EvioFile, with the arguments it needs after the # file; the group converts the EvioFile error for all of them. Absent on purpose: -# ``hex`` dumps raw bytes of any file, ``gui`` is an interactive textual app, ``web`` takes a directory. +# ``hex`` dumps raw bytes of any file, ``gui`` and ``web`` are interactive viewers that start a loop. FILE_COMMANDS = { "info": [], "dump": [], diff --git a/tests/web/test_viewer.py b/tests/web/test_viewer.py index e0feb9f..9e19635 100644 --- a/tests/web/test_viewer.py +++ b/tests/web/test_viewer.py @@ -216,3 +216,15 @@ def test_second_open_replaces_the_first(page, served_root): show_tab(page, "overview") assert page.inner_text(".tile[data-key=n_frames] .v") == "0" assert page.inner_text("#stFile") == served_root["golden"] + + +def test_start_file_in_the_url_opens_on_load(browser, server, served_root): + """``pyevio web FILE`` puts ?open=FILE in the URL; the page opens it without a click.""" + page = browser.new_page(viewport={"width": 1280, "height": 900}) + try: + page.goto(f"{server}/?token={TOKEN}&open={served_root['synthetic']}") + page.wait_for_selector("body[data-file-id]", timeout=LOAD_TIMEOUT_MS) + assert page.inner_text("#stFile") == served_root["synthetic"] + assert page.get_attribute("#browser", "hidden") is not None + finally: + page.close() diff --git a/tests/web/test_web_api.py b/tests/web/test_web_api.py index d5863a8..1066597 100644 --- a/tests/web/test_web_api.py +++ b/tests/web/test_web_api.py @@ -350,3 +350,11 @@ def test_truncated_tail_is_a_file_check(client, served_root): rows = client.get(f"/api/files/{file_id}/records").json()["rows"] assert rows[-1]["is_truncated"] and rows[-1]["events_found"] < rows[-1]["event_count"] assert summary["totals"]["n_frames"] == summary["records"]["events_found"] - 1 # minus the non-stream event + + +def test_command_line_path_splits_into_root_and_start_file(served_root): + """``pyevio web FILE`` serves the file's folder and names the file; a folder is served as is.""" + from pyevio.web.app import served_root_and_start_file + root = served_root["root"] + assert served_root_and_start_file(root) == (root.resolve(), None) + assert served_root_and_start_file(root / "runs" / "synthetic.evio") == ((root / "runs").resolve(), "synthetic.evio") diff --git a/tests/web/test_web_auth.py b/tests/web/test_web_auth.py index ba30956..d3d4791 100644 --- a/tests/web/test_web_auth.py +++ b/tests/web/test_web_auth.py @@ -47,6 +47,14 @@ def test_asset_route_stays_inside_the_package(client): assert client.get("/..%2F..%2Fpyproject.toml").status_code in (403, 404) +def test_favicon_is_served_at_both_names(client): + """Browsers ask for /favicon.ico before the page names its icon; both answers are the same SVG.""" + for name in ("/favicon.ico", "/favicon.svg"): + response = client.get(name) + assert response.status_code == 200 and response.headers["content-type"].startswith("image/svg+xml"), name + assert response.content.lstrip().startswith(b" Date: Mon, 12 Oct 2026 21:58:29 -0400 Subject: [PATCH 65/65] Version bump --- pyevio/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyevio/__init__.py b/pyevio/__init__.py index 2d986db..a67d4ac 100644 --- a/pyevio/__init__.py +++ b/pyevio/__init__.py @@ -13,5 +13,4 @@ from pyevio.utils import make_hex_dump -__version__ = "0.2.0" - +__version__ = "1.0.0"

    3xf`x#zLI^K)bul0yJR>h#3J#L} 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 {SW5D!*9j*k&S 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 x{eJW$XMEh{@R59D`}Z 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

    Lk29&!_s)v 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 Tqn$uuwrYAXwEQB`eFz3lIE# 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 CH1Q(< literal 376751 zcmeFZbyQSe|38YNgwoxeQi@U%Bc&(;0uquUDInc7(p@5;q<~0w=g{5V-Q7Jicl+G+ z37_w8t$Ww~_kQOOapCdIIs5GW-tSkPz&G+QuuV|GRx51BQ zT+(F}6g-rdQsQr&5_V?Mzl})Iq8%*a2)gXoanz;Bpl{X%u-#L7OO$@DBTaPo&K(={!pM`;ewh`sw zzt4gn8U7yS+aIUtc<~VB^&jV1Vf^3A`D=*&cXa-lK9S)8Tz`!V_{nDEa>mId$hNUL z{GQXt&+lGp=GyxD`aZ3&d_tu)>g__h0Jfpldw7RnG$D7qq+I=xfyQ8V$>F^}X)PS!HDbV~<>sJQ%GjCjO%(IpPOuYZSK2pD} zfD378@Rzs`XOW4Bu+|Mq!ovjXm8rP_lYl8GnJy(jX5GT~ru1;G3wrym;@eEchmGy4 zQATp)Tvs)Z|GjF6^fT*Wn1n3PZ`AOlEfr|c#axI;f`SG-8iLQnDC$qj>4Hq%w||mH5crPI&l;B*HH8v-F*B<*Q=gmvVIM4B|nVZU0`z ziaiH{2ayBMJ&aCbKj1NqqvY)uyl$8)GucnW+}^`XH9^HB=v0zo|D#}h_-x!S;pLSS zP`LRv&BINRA+|#*_|DF(d;_?}!hIfTNtqa#1ct3YiUASo9rU}HdDjKW$uPPg#RwBa z*7x5->Q*!4cCKXyM-(X2c&&N=7zb1lcZv|?avL_D)T4;k)x6}ct&{NzYBcwVqy~q; zC`L+26Y2fC0kvp{cA!81pL2S?Fp#g*q%RiJ{n1vjU`}tt)8o{2!V)oivRlx^gsy>au&P%Ih!gS zylUfzwVCnyvPvp&$?M-=sN<|ii=tD!(jO6lx0u@V{c$wsJA(VyXS)#FwGc$Qz`PqF zeUTMJ?|e^my+2tE$^urF>1ah!q2qpiiE+Q*^;xa6ZhyQ$K@@h9sB5|P@^iPTD%*7) ztxBuYtunjKA)~$oA+s?~>0pvP^&&4A40b?3)llbpp08a)UJpYubd&D1tDa9Wp{HiC}_RZ6ECp8o}2;hOw8Ry=pG8=)cN)PV-~r%kd6e8I>a_! zD&k~VLG0!L^-hv6I^Gq0w_@HOi~Q_hQLI-q1oTzE;>5n zhde|GEu@}~r;%N~+`P)8_vVtF<1O3%jrMrHw%OnkBRpq z_s2#`|6yw+MIlKf^8RR!8ei?teX7ll&Zvx&MfFTw7)>gyNgq6)f_EinpKp0%4eFxS zKDAnSZ=SX9yOXV1VKJJmlJO#3XKkaP@oZN(TQzU4#JFH#A!AL=a=t$5k$w#4yW(!> z;nOYba0cK9@im6h6Or8$(H5Bl8Z3k1O&vvH^ z#^{P&ms&b!s%(Xv$HDDjn{AEdF^ZI%jpzT8o4+qWl|v=$P%Givb-dPVt$%wQ4AzrR zQ?DJ4%S^ULbh)*wZ;tzs!K6G%9`5ho|M-D%d^T-KImW3|YjAO(=i$*u15>ZI`<~XH zrBfHTm~PY?_pcEOdJk@YzSg;WwL3N$Lb^GeaedH?tL1VX$@n6M8=LYWukG6F{kn0^ znO(J9b?1#Y6Ynz(yJMWU^M<_GT#kd8T}EGOJ}_>Ag+s0!F8LNkKSs4!Xg*R2dtwbg zq?Ra+cUbHk9ypg}wS3Dkd6*;4h^W0Pg_1yzPoSG`K9`#twMV{An#Bhe$xMx7a#SV~ES-~S$>;~sQLG9qvBN)K zKDL;d2qa`p%l`~H6cS1Ky9BJzKau5DFYMTp1^?Owh5>PNiIo_v!)H?Nj)Wr_>eF9E z+wh^d9j#)ucD9EdNqX|_u>RB>-A85P|>j|M2vdQn|Qyr=(mSGEr{ zoS(A)40QQ)h2{CqWOpYTIqy$efj$4D)$Twwl?sd5yLGSdtf}T1Y<_q@kUutJNb(mfDl}>jOI+K(+AbK) zQqG8hj^(~XMM9tmx1pb%sAyPUI1Y)^UO@dLQWon#)g&g0%vR+KyIp58xK!`%Dm*nO zf+)Epq|| zBRTBjzP*W}<*QT5>+}6&A=`3<_C!&-ERvF;Mytx^WmG*`5{31iup^=-=nIRSYQEOH zDk`cQqKt*5*8AUi4Y`$m7CsbmyEq6U=IBophAuYwf|6%2R*SeY12d|EphEU4TZQS#%u@)Y~1)Z;ReF1;>Q)ck>ciuPw&62eO&{S{rgFE^q7tcS_ z3r=X^!HWtrY4!^Rn~-!<+a})B%-p+T18&9CI}Gy(1fnS^Uck~~zFr&l>ur|O$DyB! zu&aR-=)tHA4Y(cBzZaRon2`TAW%aGKuNs7do0;U5LxcM48$6q`Pd6>Zj48Uvk?sO`4g1aRDkQ7uy9dz}QIE zy-k%mB<6_Gu6IjU&fwn4EH^n!p+~88Jx^-%_TQMtFulF(0Y@t}JO8-eN4?xuhNQxl zpIlF_5ICQnt2&kz*vNfXfM-7|DyVqha4hhBi4ZUmAzkf%AGBpQkuzficb zUX7=>US!!Grc1$J3Du#xHZ2eLToDEP&Q4^OL}`?h?3%p)A?w{ zFUEA=g8P7;d}SUDtxU5SZQ=k(%G-zP{p{ncuwaj-2tJ$;4cynN!*veq=8 zWGhg#ZYHDx2{3VgaFM!(&6bn>JaA?wxPmEfNl!gHsc2m(x$YB%aCIGMo^^W<;$h@&x){>A{NB~l7cx6>>qWx8 z(ytY3yn)tRjh?3ol#uyg*psKnksRdoqoB1)dTReFPh4cbFR^AVDQwaF<_ec(ol5oV?-eI0Vs1^~P|m)kB&NW_!&K1mlDQOYWntuxQ-j`1 z-23?zTUH|g1dz+0iBSp-xU_s*HM2F23i14{T2d(+rc4tfE-^1Yu0QH&-RaoYI#GRjw9uxfW2>U?u?Snq!Aqq!`uZG5mmzuXQB z3a2Ib3&~2eJ#pzqDXi!5H-|-c=cpCTR9HgdNCqFMml%ce)L&@j15kq%w?o3M^;2UI zRNIl1X41=})hOr^s%8bw_GTonVRn_R@g}TPIyfBkqdvYbqgdAZ5@qv{r{iEIBmI17 zM61;bbmUBCZ8Khfzv||JWhc?UD=~s!Ec4U44a_{ey$YK0wopp&O;FvpFpoNJ?WbAr zN5U>A^WX}2+1OnEm;$RoOn z9bsfw);5y4YA0*C56N4j#r^oCCG(v3Yggn$y=N1ocYQ@@%WkH6J~{f-BgtNo^_XnLD;#egmrD>N z7k{xhvN5Rd!!eXD>+dyuAWh1n!)xyMjm=cziqEjCHrCUuQOlYAzXTAJp64pAxPDD2ek~$9eynNpRKV zaOS_@U=W7mUM&XCW(Kd@)d~BQ&?@8(zS&rAC<&yLtt&HcfZ~DKXm;@Xy!w|Uo(4~D zXhdD!BEGXL{~FHdUmzU#397ks*`)7%(!nN9h+A(Q-&Nx8txbz(T7G}FMlDA*v7r7+ zLmKK!GPN^qiBb;-NY0d5jJ7xBYNKGlZ@mSPAZV>5_!&*fZM;aoeU##I7afP{D-;bK zy~2Fbbfv@cRIV6coM&n0GgZevcTKPglr!onFbI<$>$mlUi8lcNHT-boQZUYi;u5iH+8ctZ&zb8%-sioPoRg0G z-}BJTZY^?-Zu(^8ixEJbV_9dH*DXxNGFD~f_nvotFK>JD5I;v#^Oc7V`IlDmVG(7}ye97G+*In(rXyO6w_pSo# zxE{+1&jt(IZG445Q}$+E8N32Qu0fl|;6=Zd(Wb{=<9bfh)Vy{I_Ut^h0*kTSwq)e_ zye5DL1-jl#ujX?!*)>W75cDjoCH+&H>`_hBsRk2;i}DODL!jaV?tocquuu=RnSyAj zsnpW1z+&J>y_I%2jc6~&@oKmK9ot+|XT?Dt(~ zy|B}CKqsTfwHzCl1`8x$&VE;dhWLK%m3Bn5cdLR-{-4b_Rtx3IO{l?=ZHFD$m z$WTT$^kYdv>k^~=&TniQH*-*A9SN7%*T*d>a>a^ijs~@3^Ygm)QL|OHu~!kHl*nKU z27=s}K@3jR_})wLD@E~?O}WoMkRLhK}lpsVffd6Cz|?`H~J-D z>#jZ1ps9iYtbYS`LI)se34cANokgy-$eQf zk`1B{7uNe*tKu7tE$(z52q`Un!{uG=C+Z(`EmHGrM5Y_>U?JWjebk^?;eig4&j1s| zXgPPgui|pILbq2u_x9a;bjZ z$=U2WdMo*%o>vO`gEM0QO<#Vgbs|ACbOMF z=M8`mDuC$}(tP+Kf=&2zQHeA8sr^(}M~_^5{cwr#IbbgVI0&N=HQJf5Ui)OT)+1yw z^R3A@_~QDSeznwMb__3Ww)|5(h0x@^5fPX3y)@ktz)+6mL52zj$Mu#(scpTS1#^J3~lB<#Jj;W?)b35lN7E3IxWt4LKS6a zn1}nQl>PNNt;zIRREi{e4m~dHde3!oCvamYRr& zBA?tO0O*nOuIz0Vsjc9W!s&x4X_apd&3)_$r0(my;yNcQ`*qa;?#-9^FnoeV+W~P(~_@75eqAG4V81hxxRUudM^0 z-{L7E1Pkhc^l00<8`VMWAu3thOsc(2ZeoqTwo~~yQ*R=TvT7KuC6rn=^fp}lJCV)e zf-kE)%L($pD$=;ev2vTc>jHo&DZd=^&y8RaxJ}aOxt~JyEaowW^%fdOG!*n`kIp5I0qegG@f_#yuC>($Ey6 zUJCcClOaoQ0vQMnKhEGvCm}v*iw&sF@(F^Ay#n)Zu9b6CdqJ~J=CIZhNXQ_Pr{V4+ zLBvco^t#ChQ;{_jkokI)KI?$K4&}uiG=V~)Baj|KEZu6mca^vGuEB=0F;3?`SMRO~ z5A-f~I{W}f3z*4}jg_x7>HGp3qx+$V#752h_)sdBh^ z^`IU45~)EvB9&GYg18-L02b_nSe0h|@4P(KVVQl!;^N|dbG+G-2WPuHVyb-mIr4Nx z`bdE=vq%PC@JKx2ie@7QVa@)y%3PxXwvPLV4@}*lX~!JT@*4n

3xf`x#zLI^K)bul0yJR>h#3J#L} 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 x{eJW$XMEh{@R59D`}Z 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