Skip to content

Commit d04f36b

Browse files
eeelieayalagjhenryiiipre-commit-ci[bot]
authored
feat: textual-update (#115)
* refactor: moving old tui files to new directory * refactor: reverting Header and Footer to textual versions * WIP: Working browser with placeholder plots * Worked on quit w/Dump * fix: Minor cleanup * feat: Added Content Switcher to plot view * style: now using css to style browser.py * feat: added TreeWidget * WIP: working on implementing tree view * Tree and Panel/Error communication working * feat: light/dark mode * WIP: quit with dump * fix: quit with dump Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * fix: include error in quit with dump Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * style: cleaning up browser.css [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: proper folder nesting Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * chore: make Ruff happy Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * fix: typing updated and impl cleanup Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * fix: address one TODO Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * Apply suggestions from code review * style: make pylint happy Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Jose <jayala@princeton.edu> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 2fd1db3 commit d04f36b

File tree

18 files changed

+549
-558
lines changed

18 files changed

+549
-558
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ celerybeat.pid
106106

107107
# Environments
108108
.env
109-
.venv
109+
.venv*
110110
env/
111111
venv/
112112
ENV/

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ repos:
2929
hooks:
3030
- id: mypy
3131
files: src
32-
additional_dependencies: [rich>=12, click>=8.1.1, hist, numpy, textual==0.1.17]
32+
additional_dependencies: [rich>=12, click>=8.1.1, hist, numpy, textual>0.13]
3333

3434
- repo: https://github.com/codespell-project/codespell
3535
rev: v2.2.4

README.md

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -103,66 +103,66 @@ uproot-browser tree ../scikit-hep-testdata/src/skhep_testdata/data/uproot-Event.
103103
📁 uproot-Event.root
104104
┣━━ ❓ <unnamed> TProcessID
105105
┣━━ 🌴 T (1000)
106-
━━ 🍁 event Event
107-
┃ ┣━━ 🍁 TObject (group of fUniqueID:uint32_t, fBits:uint8_t)
108-
┃ ┣━━ 🍁 fBits uint8_t
109-
━━ 🍁 fUniqueID uint32_t
110-
┃ ┣━━ 🍁 fClosestDistance unknown[]
111-
┃ ┣━━ 🍁 fEventName char*
112-
┃ ┣━━ 🍁 fEvtHdr EventHeader
113-
┃ ┣━━ 🍁 fEvtHdr.fDate int32_t
114-
┃ ┣━━ 🍁 fEvtHdr.fEvtNum int32_t
115-
━━ 🍁 fEvtHdr.fRun int32_t
116-
┃ ┣━━ 🍁 fFlag uint32_t
117-
┃ ┣━━ 🍁 fH TH1F
118-
┃ ┣━━ 🍁 fHighPt TRefArray*
119-
┃ ┣━━ 🍁 fIsValid bool
120-
┃ ┣━━ 🍁 fLastTrack TRef
121-
┃ ┣━━ 🍁 fMatrix[4][4] float[4][4]
122-
┃ ┣━━ 🍁 fMeasures[10] int32_t[10]
123-
┃ ┣━━ 🍁 fMuons TRefArray*
124-
┃ ┣━━ 🍁 fNseg int32_t
125-
┃ ┣━━ 🍁 fNtrack int32_t
126-
┃ ┣━━ 🍁 fNvertex uint32_t
127-
┃ ┣━━ 🍁 fTemperature float
128-
┃ ┣━━ 🍁 fTracks TClonesArray*
129-
┃ ┣━━ 🍃 fTracks.fBits uint8_t[]
130-
┃ ┣━━ 🍃 fTracks.fBx Float16_t[]
131-
┃ ┣━━ 🍃 fTracks.fBy Float16_t[]
132-
┃ ┣━━ 🍃 fTracks.fCharge Double32_t[]
133-
┃ ┣━━ 🍃 fTracks.fMass2 Float16_t[]
134-
┃ ┣━━ 🍃 fTracks.fMeanCharge float[]
135-
┃ ┣━━ 🍃 fTracks.fNpoint int32_t[]
136-
┃ ┣━━ 🍃 fTracks.fNsp uint32_t[]
137-
┃ ┣━━ 🍁 fTracks.fPointValue unknown[][]
138-
┃ ┣━━ 🍃 fTracks.fPx float[]
139-
┃ ┣━━ 🍃 fTracks.fPy float[]
140-
┃ ┣━━ 🍃 fTracks.fPz float[]
141-
┃ ┣━━ 🍃 fTracks.fRandom float[]
142-
┃ ┣━━ 🍃 fTracks.fTArray[3] float[][3]
143-
┃ ┣━━ 🍁 fTracks.fTriggerBits.fAllBits uint8_t[][]
144-
┃ ┣━━ 🍃 fTracks.fTriggerBits.fBits uint8_t[]
145-
┃ ┣━━ 🍃 fTracks.fTriggerBits.fNbits uint32_t[]
146-
┃ ┣━━ 🍃 fTracks.fTriggerBits.fNbytes uint32_t[]
147-
┃ ┣━━ 🍃 fTracks.fTriggerBits.fUniqueID uint32_t[]
148-
┃ ┣━━ 🍃 fTracks.fUniqueID uint32_t[]
149-
┃ ┣━━ 🍃 fTracks.fValid int16_t[]
150-
┃ ┣━━ 🍃 fTracks.fVertex[3] Double32_t[][3]
151-
┃ ┣━━ 🍃 fTracks.fXfirst Float16_t[]
152-
┃ ┣━━ 🍃 fTracks.fXlast Float16_t[]
153-
┃ ┣━━ 🍃 fTracks.fYfirst Float16_t[]
154-
┃ ┣━━ 🍃 fTracks.fYlast Float16_t[]
155-
┃ ┣━━ 🍃 fTracks.fZfirst Float16_t[]
156-
━━ 🍃 fTracks.fZlast Float16_t[]
157-
┃ ┣━━ 🍁 fTriggerBits TBits
158-
┃ ┣━━ 🍁 fTriggerBits.TObject (group of fTriggerBits.fUniqueID:uint32_t, fTriggerBits.fBits:uint8_t)
159-
┃ ┣━━ 🍁 fTriggerBits.fBits uint8_t
160-
━━ 🍁 fTriggerBits.fUniqueID uint32_t
161-
┃ ┣━━ 🍃 fTriggerBits.fAllBits uint8_t[]
162-
┃ ┣━━ 🍁 fTriggerBits.fNbits uint32_t
163-
━━ 🍁 fTriggerBits.fNbytes uint32_t
164-
┃ ┣━━ 🍁 fType[20] int8_t[20]
165-
┃ ┗━━ 🍁 fWebHistogram TRef
106+
━━ 🌿 event Event
107+
┣━━ 🌿 TObject (group of fUniqueID:uint32_t, fBits:uint32_t)
108+
┣━━ 🍁 fBits uint32_t
109+
┃ ┗━━ 🍁 fUniqueID uint32_t
110+
┣━━ 🍁 fClosestDistance unknown[]
111+
┣━━ 🍁 fEventName char*
112+
┣━━ 🌿 fEvtHdr EventHeader
113+
┣━━ 🍁 fEvtHdr.fDate int32_t
114+
┣━━ 🍁 fEvtHdr.fEvtNum int32_t
115+
┃ ┗━━ 🍁 fEvtHdr.fRun int32_t
116+
┣━━ 🍁 fFlag uint32_t
117+
┣━━ 🍁 fH TH1F
118+
┣━━ 🍁 fHighPt TRefArray*
119+
┣━━ 🍁 fIsValid bool
120+
┣━━ 🍁 fLastTrack TRef
121+
┣━━ 🍁 fMatrix[4][4] float[4][4]
122+
┣━━ 🍁 fMeasures[10] int32_t[10]
123+
┣━━ 🍁 fMuons TRefArray*
124+
┣━━ 🍁 fNseg int32_t
125+
┣━━ 🍁 fNtrack int32_t
126+
┣━━ 🍁 fNvertex uint32_t
127+
┣━━ 🍁 fTemperature float
128+
┣━━ 🌿 fTracks TClonesArray*
129+
┣━━ 🍃 fTracks.fBits uint32_t[]
130+
┣━━ 🍃 fTracks.fBx Float16_t[]
131+
┣━━ 🍃 fTracks.fBy Float16_t[]
132+
┣━━ 🍃 fTracks.fCharge Double32_t[]
133+
┣━━ 🍃 fTracks.fMass2 Float16_t[]
134+
┣━━ 🍃 fTracks.fMeanCharge float[]
135+
┣━━ 🍃 fTracks.fNpoint int32_t[]
136+
┣━━ 🍃 fTracks.fNsp uint32_t[]
137+
┣━━ 🍁 fTracks.fPointValue unknown[][]
138+
┣━━ 🍃 fTracks.fPx float[]
139+
┣━━ 🍃 fTracks.fPy float[]
140+
┣━━ 🍃 fTracks.fPz float[]
141+
┣━━ 🍃 fTracks.fRandom float[]
142+
┣━━ 🍃 fTracks.fTArray[3] float[][3]
143+
┣━━ 🍁 fTracks.fTriggerBits.fAllBits uint8_t[][]
144+
┣━━ 🍃 fTracks.fTriggerBits.fBits uint32_t[]
145+
┣━━ 🍃 fTracks.fTriggerBits.fNbits uint32_t[]
146+
┣━━ 🍃 fTracks.fTriggerBits.fNbytes uint32_t[]
147+
┣━━ 🍃 fTracks.fTriggerBits.fUniqueID uint32_t[]
148+
┣━━ 🍃 fTracks.fUniqueID uint32_t[]
149+
┣━━ 🍃 fTracks.fValid int16_t[]
150+
┣━━ 🍃 fTracks.fVertex[3] Double32_t[][3]
151+
┣━━ 🍃 fTracks.fXfirst Float16_t[]
152+
┣━━ 🍃 fTracks.fXlast Float16_t[]
153+
┣━━ 🍃 fTracks.fYfirst Float16_t[]
154+
┣━━ 🍃 fTracks.fYlast Float16_t[]
155+
┣━━ 🍃 fTracks.fZfirst Float16_t[]
156+
┃ ┗━━ 🍃 fTracks.fZlast Float16_t[]
157+
┣━━ 🌿 fTriggerBits TBits
158+
┣━━ 🌿 fTriggerBits.TObject (group of fTriggerBits.fUniqueID:uint32_t, fTriggerBits.fBits:uint32_t)
159+
┃ ┃ ┣━━ 🍁 fTriggerBits.fBits uint32_t
160+
┃ ┃ ┗━━ 🍁 fTriggerBits.fUniqueID uint32_t
161+
┣━━ 🍃 fTriggerBits.fAllBits uint8_t[]
162+
┣━━ 🍁 fTriggerBits.fNbits uint32_t
163+
┃ ┗━━ 🍁 fTriggerBits.fNbytes uint32_t
164+
┣━━ 🍁 fType[20] int8_t[20]
165+
┗━━ 🍁 fWebHistogram TRef
166166
┣━━ 📊 hstat TH1F (100)
167167
┗━━ 📊 htime TH1F (10)
168168
```

pyproject.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ dependencies = [
4545
"uproot >=4.2.1",
4646
"plotext >=5.2.2",
4747
"hist >=2.4",
48-
"textual >=0.1.17,<0.2.0",
48+
"textual >=0.13.0",
4949
]
5050

5151
[project.optional-dependencies]
@@ -116,7 +116,8 @@ messages_control.disable = [
116116
"missing-function-docstring",
117117
"missing-module-docstring",
118118
"duplicate-code",
119-
"unused-argument", # Handed by Ruff
119+
"unused-argument", # Handled by Ruff
120+
"wrong-import-position", # Handled by Ruff
120121
]
121122

122123
[tool.ruff]

src/uproot_browser/__main__.py

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
from __future__ import annotations
66

7-
import asyncio
87
import functools
98
import os
109
from pathlib import Path
1110
from typing import Any, Callable
1211

1312
import click
14-
import rich
1513
import uproot
1614

1715
from ._version import version as __version__
@@ -97,31 +95,20 @@ def plot(filename: str, iterm: bool) -> None:
9795

9896
@main.command()
9997
@click.argument("filename")
100-
@click.option(
101-
"--logging", is_flag=True, help="Write log information to the textual.log file."
102-
)
103-
def browse(filename: str, logging: bool) -> None:
98+
def browse(filename: str) -> None:
10499
"""
105100
Display a TUI.
106101
"""
107-
import uproot_browser.tui # pylint: disable=import-outside-toplevel
102+
import uproot_browser.dirs # pylint: disable=import-outside-toplevel
103+
import uproot_browser.tui.browser # pylint: disable=import-outside-toplevel
108104

109105
fname = uproot_browser.dirs.filename(filename)
110106

111-
# Run the uproot-browser TUI
112-
async def amain() -> list[Any]:
113-
app = uproot_browser.tui.Browser(
114-
title="uproot-browser",
115-
path=Path(fname),
116-
log="textual.log" if logging else None,
117-
)
118-
await app.process_messages()
119-
return app.results
120-
121-
results = asyncio.run(amain())
107+
app = uproot_browser.tui.browser.Browser(
108+
path=Path(fname),
109+
)
122110

123-
for result in results:
124-
rich.print(result)
111+
app.run()
125112

126113

127114
if __name__ == "__main__":

src/uproot_browser/dirs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def selections(select: str) -> tuple[str, ...]:
2121
return tuple(select.split(":")[1:])
2222

2323

24-
def apply_selection(tree: Any, select: Iterable[str]) -> Iterable[Any]:
24+
def apply_selection(tree: Any, selection: Iterable[str]) -> Iterable[Any]:
2525
"""
2626
Apply a colon-separated selection to an uproot tree. Slashes are handled by uproot.
2727
"""
28-
for sel in select:
28+
for sel in selection:
2929
tree = tree[sel]
3030
yield tree

src/uproot_browser/footer.py

Lines changed: 0 additions & 65 deletions
This file was deleted.

src/uproot_browser/header.py

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)