diff --git a/evidence/native-layer-acquisition-20261004/SCOPE.md b/evidence/native-layer-acquisition-20261004/SCOPE.md new file mode 100644 index 0000000000..780883c152 --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/SCOPE.md @@ -0,0 +1,118 @@ +# One layer inheritance decision in Widget, one native traversal + +Same finished checkout normally joined Text51/main2fac. Source first: Widget.layers +and Compositor._arrange_root.get_layers independently choose the outermost authored +layer declaration. The compositor additionally maintains inherited_layers for every +visited node and recursive resolver custody until the scene completes. + +Extend existing Widget behavior to resolve its authored declaration against the +original inherited order. Public layers and native layout traversal use that same +behavior. Carry original resolved order through existing add_widget/arrange_widget, +removing the recursive get_layers algorithm, per-pass inheritance map and duplicate +public selection. Preserve subtree key order, external-root ancestry, explicit empty +and default layer declarations, custom layers property behavior, detached nodes, +placement order, capture/projection lifetime and custom override context. + +No new cache/map/type/flag/registry, no Toad edits, WT/env/native copy or film. +NRA Package AST covers entire native/Toad/tools roots before editing; omissions +and dynamic limitations explicit. Original420 ProfileTrace arrangement activation +is source context, not callcounts/CPU time/dominance. Batch affected native sanity +last, then one changed joined installed journey owned by Heisenberg; no unchanged +51 capture or physical speed claim. Full performance remains active. + +## Published implementation and final native controls + +Production `6b4326827d9258875f973af61390dee746966c81`: Widget and Compositor, +54 added / 27 deleted lines against merged51. Existing Widget owns +`_inherit_layer_order`; public `layers` and the native tree traversal consume +it. `_get_layer_order` acquires external-root ancestry once, using the original +Widget/App boundary and traversal order. The transient optional tuple means +an actually absent authored declaration, retaining the original optional +contract; it is not a new durable/runtime state or mirror. Explicit empty and +duplicate tuples are preserved exactly by the public property. Native rank +mapping is a derived synchronous resource, projected only when a declaration +is reached and shared through descendants. Custom `layers` overrides remain +local arrangement policy, preserving the original raw inherited key semantics. + +Deleted the independent compositor resolver and recursion, all its callers, +per-widget inherited-order registry and completion cleanup; deleted public +Widget's separate declaration-choice loop. Original subtree key rank snapshot, +scene map, clip/placement/capture publication and custom property dispatch +remain their existing contracts. No new class/map/cache/state field. Root +public acquisition still requires inspecting ancestry to find the outermost +source; its temporary ordered ancestor sequence is not a semantic registry. + +Whole roots before: native249/26 relevant sites, Toad288/0, tools41/0, +zero omissions. Native after249/31 sites, zero omissions; sole authored +inheritance choice is Widget._inherit_layer_order. Added sites are shared +owner methods and traversal parameters, not independent decisions. Full search +has no get_layers declaration/caller in current source; original GC control +now names the actual two recursive arrangement closures. Other `.layers` +reads are Styles declarations or Compositor front-to-back order, semantically +separate resources. Dynamic external overrides are not resolved by AST. + +Final batched native controls: **21 passed in 1.94s**, real App/compositor and +subtree resources, covering outermost inheritance/change, custom property, +empty/duplicate public names, detached Widget default/declaration, nested +capture with external ancestor, clipping/scroll/retention/invalidation, and +recursive closure release without GC. No production changes after this batch; +no old51/420 controls or film repeated. Resource warning with12.3GiB available +RAM supported this single short existing-dependency process; no memory caps, +new environment, native copies, installed writes or provider calls. + +**Source-qualified draft; installed changed-path qualification pending** the +next meaningful joined Heisenberg workflow. No CPU gain, dominance, smoothness, +physical FPS or 144Hz claim. Existing 51/420 original evidence remains frozen. + +## Original joined422 installed qualification + +**Scoped installed Ready for review**, using corrected native53a52e5b/wheela805 +which includes this unchanged52source. Original installed App contracts passed +retained A/B/A/editorUndo/shellclose, native left/right pointer+slider sidebar +controls, rapidcoldPageDown/End and bounded preparation/runway. Original physical +seven input checks and drag/scroll/Up/Down/reverse/End completed. + +The actual raw journey **FAILED** at peer click: the target was clipped outside +the captured roster after sidebar-up, although sidebar-down showed it. No16warm +or full physical A/B/A/Undo/IRC pass. Both raw completed flags remainFALSE; no +replay, new movie or oracle relaxation. Original owner identity unchanged; owned +cleanup remaining/errors empty; transferredUI custody/encoder255 preserved. +All14original keeper hashes matched; source proof records exact339Core/319Toad/ +266Text/3Diff files, Core611d416/native2ea/SDK.12.1/normal69. + +Heis reviewed actualUp52.7559..53.5559DURING originalUI; Down/reverseAFTER. +Kepler personally reviewed18-8SIDEBAR32.2385..33.0385 while sameUI alive, +notUp; earlier personal-up filenames are corrected by original live_review +phase. Selected bands show painted body/chrome with repeatedpositions/stepped +movement. Up writer23.05median/63.44p95/205.67worstms; Down13.22/27.12/ +222.82; observer-inclusiveCPU76.06/64.23%, unmatched workloads. No causal +gain/smoothness/FPS/144Hz claim. Last10s idle zero viewport churn is separate +from full idle marker18.60%UI. Fullnativeperformance remainsactive. + +F0 main normally integrated WITHOUT native source change. Required Debt ratchet +must pass before merge; this installed receipt cannot waive any growth. Full +native suite remainsdeferred. Existing holder/code imports handed back toSchF1; +no ongoing borrowed package/App/client/native claim from this qualification. + +## F0 correction: one source fold and one carried resource + +Parent's original packaged ratchet against main919 reported Compositor +7 and +Widget +20. This supersedes the earlier source-qualified assessment; original +installed422 evidence does not waive growth and remains unchanged. + +Widget._get_layer_order now folds supplied original sources in native leaf-to-root +order, keeping the last (outermost) authored declaration. Public layers supplies +its lazy ancestry; root acquisition supplies the same traversal; descendant +admission supplies its one local source only while no ancestor declaration owns +rank order. The same behavior handles explicit empty orders and the Widget/App +boundary. Public duplicate names remain exact; rank projection preserves their +last ordinal. Custom layers property dispatch remains local arrangement policy. + +Deleted _inherit_layer_order, the temporary ancestry list/reverse walk and every +layer_names parameter/caller. Native traversal carries only the original derived +rank mapping; cache keys snapshot that resource. No new type, registry, map, +compatibility path or policy change. The corrected property documentation describes +the actual outermost contract; no unrelated class behavior is removed to offset +metrics. Relative main919, Widget has no class-span growth and Compositor shrinks +by two lines. Before/after packaged ratchet and changed App controls remain the +final required confirmation, not a source-only Ready claim. diff --git a/evidence/native-layer-acquisition-20261004/SCOPED-READY.json b/evidence/native-layer-acquisition-20261004/SCOPED-READY.json new file mode 100644 index 0000000000..ef08677b0e --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/SCOPED-READY.json @@ -0,0 +1,276 @@ +{ + "status": "SCOPED_INSTALLED_READY_FOR_REVIEW; required Debt ratchet remains a merge gate", + "scope": "Native52 layer inheritance/traversal resource + Native53 ordered rule publication/repaint intent, from original joined422 installed App and completed physical input/sidebar phases", + "qualified_textual_head": "a52e5b122b09e6414f8adb1fa04995ac9ad6961b", + "qualified_toad_head": "9138bc6a3fb2d5e7d5fa517f139272a900192a50", + "qualified_core_head": "d41601c16d74e9e3e4195b6527fb218b8fe14af9", + "native_manifest": "2ea0a4d4ff2e362864c156e4b11642775b3f2a96e7f01522b346b6f6d9526936", + "source_receipt": "/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001/evidence/session-native-custody-owner-20261004/SCOPED-READY.json", + "source_receipt_sha256": "feec53af541b617ceef802ff43eb1c9e58d7f58632da6873665e5ef763a4d9db", + "installed_app_checks": { + "blank_ABA_editor_Undo_shell_shutdown": true, + "left_right_sidebar_pointer_drag_slider_hover_collapse": true, + "rapid_PageDown_End_cold_tail_frame_editor_Undo": true, + "runway_configuration_reversal_End_resource_bounds": true + }, + "physical_input_checks": { + "input_remains_focused": true, + "original_editor_window_and_mode": true, + "draft_and_caret_preserved": true, + "input_pageup_moves_history": true, + "input_pagedown_moves_history": true, + "input_pageup_reaches_original_window": true, + "input_pagedown_reaches_original_window": true + }, + "raw_completed": false, + "raw_capture_completed": false, + "raw_error": "CalledProcessError: Command '['xdotool', 'exec', '--sync', '/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001/.artifacts/runtime-native-style22-20261002/bin/python', '/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001/tools/performance/click_history.py', '--target', 'thread', '--state', 'phase-switch-b-state.pickle', '--name', 'nra-domain-mapping']' returned non-zero exit status 1.", + "warm_physical_A_B_A": "NOT REACHED; peer clipped outside captured roster, no16warm/wholejourneyPASS", + "cleanup": { + "remaining": [], + "errors": [] + }, + "original_owner_before": { + "root": "/var/tmp/agent-comms-live-20260927-wzjtqhza", + "mode": "existing_thread", + "name": "nra-architecture", + "identity": { + "pid": 288457, + "start_time": 55741087 + }, + "original_owner_alive": true + }, + "original_owner_after": { + "root": "/var/tmp/agent-comms-live-20260927-wzjtqhza", + "mode": "existing_thread", + "name": "nra-architecture", + "identity": { + "pid": 288457, + "start_time": 55741087 + }, + "original_owner_alive": true + }, + "raw_keepers": [ + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/receipt.json", + "sha256": "c9f6a898c17a72fc36b35d47a120c9136ad5cb960f0870ab0acab68840f6ec1b" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/events.jsonl", + "sha256": "4441bdd91b3e2afc16a99dde49f1b723d4c085da8fd88fadd4e65f3fe5571873" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/driver.log", + "sha256": "ebeac2499364f2a891ad9dc0c99163f2db35f51566b1f042619703a3c44516d1" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/actions.xdo", + "sha256": "bf1d93b1d1d91671c2f89a97952061edd2e4cd95dfcdfa0fdc420516b3ccad58" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/frame-delivery.json", + "sha256": "90ab1a66340ddf86190cc7cea801ece0951e9734d9361b49a1047dfe70c657af" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/frame-delivery.svg", + "sha256": "5d3330a21692b4640178eb57696856b4e6778cb8b2f1038ef84d94bcf25b92a6" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/cpu-profile.json", + "sha256": "362b75eee34353df45af684ab74e9f3bb230bc44a582282a1c72d5610627dbdc" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/profile-review.json", + "sha256": "af9b68db4d6229a0d0d5001e6e6c103106933c70438d46611712a0350529411d" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/profile-launch.json", + "sha256": "0644e38dd12f11351cfc61c59b11b2899264f18f09820d0a2382633554ca8d90" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/phase-input-held-up-done-state.pickle", + "sha256": "13835ffd1245a9d65b06993564ed60f8a3eb1c5c36afea6c6774b05263d590f9" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/phase-switch-b-state.pickle", + "sha256": "3f65f07f95d20fe961041bc5c8a0828b026fb39f9d80573db0286707143b604b" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/live-29-14-frames.png", + "sha256": "108904c16d7b2b8e7492ba091585e386d7a189bca586ef32b3d87be1189c22f0" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/live-36-19-frames.png", + "sha256": "bf557e7e15ace19a62d241f95975a87eb984316144126830438bac79ff776261" + }, + { + "path": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/live-54-29-frames.png", + "sha256": "365359ae640c3ab843a5b53b09f8fb83720875ffcbde41ec2de49db3c1533500" + } + ], + "writer_phases": [ + { + "action": "input-held-up", + "intervals": { + "count": 50, + "median_ms": 23.05, + "p95_ms": 63.44, + "p99_ms": 198.57, + "max_ms": 205.67 + }, + "writer_receipts": 51 + }, + { + "action": "input-held-down", + "intervals": { + "count": 108, + "median_ms": 13.22, + "p95_ms": 27.12, + "p99_ms": 39.38, + "max_ms": 222.82 + }, + "writer_receipts": 109 + }, + { + "action": "up", + "intervals": { + "count": 131, + "median_ms": 11.76, + "p95_ms": 27.13, + "p99_ms": 38.48, + "max_ms": 124.65 + }, + "writer_receipts": 132 + }, + { + "action": "down", + "intervals": { + "count": 124, + "median_ms": 12.68, + "p95_ms": 26.58, + "p99_ms": 30.55, + "max_ms": 114.11 + }, + "writer_receipts": 125 + }, + { + "action": "reverse", + "intervals": { + "count": 147, + "median_ms": 10.11, + "p95_ms": 23.17, + "p99_ms": 40.79, + "max_ms": 106.02 + }, + "writer_receipts": 148 + }, + { + "action": "end", + "intervals": { + "count": 6, + "median_ms": 485.34, + "p95_ms": 501.7, + "p99_ms": 501.7, + "max_ms": 503.43 + }, + "writer_receipts": 7 + }, + { + "action": "sidebar-scroll-down", + "intervals": { + "count": 14, + "median_ms": 11.69, + "p95_ms": 95.48, + "p99_ms": 95.48, + "max_ms": 99.11 + }, + "writer_receipts": 15 + }, + { + "action": "sidebar-scroll-up", + "intervals": { + "count": 11, + "median_ms": 4.53, + "p95_ms": 102.56, + "p99_ms": 102.56, + "max_ms": 103.37 + }, + "writer_receipts": 12 + } + ], + "motion_review": { + "during": { + "phase": "input-held-up", + "frames": "/home/ts/.cache/agent-scratch/session422-sidebar-native53-public-20261004-01/capture/live-29-14-frames.png", + "interval": [ + 52.75589658, + 53.55589658 + ], + "before": { + "monotonic_ns": 563947734770750, + "phase": "before-personal-Up-view", + "identities": [ + { + "pid": 1747649, + "expected_birth": "56383659", + "actual_birth": "56383659", + "state": "S", + "same_birth_alive": true + }, + { + "pid": 1748988, + "expected_birth": "56384474", + "actual_birth": "56384474", + "state": "S", + "same_birth_alive": true + } + ] + }, + "after": { + "monotonic_ns": 563975320055112, + "phase": "after-personal-Up-view", + "identities": [ + { + "pid": 1747649, + "expected_birth": "56383659", + "actual_birth": "56383659", + "state": "S", + "same_birth_alive": true + }, + { + "pid": 1748988, + "expected_birth": "56384474", + "actual_birth": "56384474", + "state": "S", + "same_birth_alive": true + } + ], + "review": "48 consecutive Up frames52.75589658..53.55589658: body/chrome present; repeated positions then discrete advances and internal whitespace. No full-body blank in this band; no smoothness/FPS/CPU claim." + }, + "assessment": "Consecutive recorded frames reviewed personally during original UI lifetime. Body/chrome present, repeated positions and discrete advances/internal whitespace; no full body blank seen in this selected band. Not live continuous playback/smoothness/FPS." + }, + "after": [ + "Down79.502229452..80.302229452 live-36-19", + "reverse117.15386885..117.95386885 live-54-29" + ], + "after_assessment": "Both sheets reviewed after original UI exit; body/chrome painted with stepped advances/repeated positions. No full-body blank in these selected bands; not whole-screen text legibility or smoothness proof." + }, + "personal_kepler_review": { + "sheet": "live-18-8", + "actual_phase": "sidebar-scroll-up", + "source_interval_seconds": [ + 32.238479831954464, + 33.03847983195446 + ], + "ui_identity": { + "pid": 1748988, + "birth": 56384474 + }, + "before_monotonic_ns": 563951721818363, + "after_monotonic_ns": 563986554172980, + "assessment": "Original recorded sidebar sheet reviewed while same UI alive; painted body/chrome, repeated positions/stepped motion. Not heldUp; earlier mislabel explicitly corrected." + }, + "performance_claim": "No overall CPU gain, smoothness, physicalFPS or144Hz; fullnativeperformance active", + "remaining": "Stepped motion, high main-thread CPU, true presentation/input-to-paint/144Hz, busyIRC/tab-open/growingEnd/void/globalCPU and TC1/T9/T4 remain active. No causal/historical CPU gain or smoothness claim.", + "checks_not_repeated": "No new App/capture/build/environment/provider/native or package write for qualification; existing wheels preserved" +} diff --git a/evidence/native-layer-acquisition-20261004/native-sanity.exit b/evidence/native-layer-acquisition-20261004/native-sanity.exit new file mode 100644 index 0000000000..573541ac97 --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/native-sanity.exit @@ -0,0 +1 @@ +0 diff --git a/evidence/native-layer-acquisition-20261004/native-sanity.log b/evidence/native-layer-acquisition-20261004/native-sanity.log new file mode 100644 index 0000000000..b93b219e8f --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/native-sanity.log @@ -0,0 +1,2 @@ +..................... [100%] +21 passed in 1.94s diff --git a/evidence/native-layer-acquisition-20261004/owner-after.json b/evidence/native-layer-acquisition-20261004/owner-after.json new file mode 100644 index 0000000000..09d0d3d951 --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/owner-after.json @@ -0,0 +1,216 @@ +{ + "repo": "/home/ts/wt/textual-native-subtree-strips-20261002", + "head": "6b4326827d9258875f973af61390dee746966c81", + "root": "src/textual", + "modules": 249, + "unparsed": [], + "sites": [ + { + "path": "src/textual/_compositor.py", + "line": 82, + "kind": "declaration", + "source": "from_widget" + }, + { + "path": "src/textual/_compositor.py", + "line": 779, + "kind": "declaration", + "source": "_arrange_root" + }, + { + "path": "src/textual/_compositor.py", + "line": 1136, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 79, + "kind": "Store", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 90, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 817, + "kind": "Load", + "source": "root._get_layer_order" + }, + { + "path": "src/textual/_compositor.py", + "line": 762, + "kind": "Load", + "source": "self.layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1055, + "kind": "Load", + "source": "widget._inherit_layer_order" + }, + { + "path": "src/textual/_compositor.py", + "line": 1059, + "kind": "Store", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1066, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1074, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1095, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 940, + "kind": "Load", + "source": "type(widget).layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 940, + "kind": "Load", + "source": "Widget.layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1079, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 941, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 941, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 999, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1079, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 946, + "kind": "Load", + "source": "widget.layers" + }, + { + "path": "src/textual/css/styles.py", + "line": 1232, + "kind": "Load", + "source": "self.layers" + }, + { + "path": "src/textual/screen.py", + "line": 360, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/screen.py", + "line": 371, + "kind": "Load", + "source": "super().layers" + }, + { + "path": "src/textual/screen.py", + "line": 1414, + "kind": "Load", + "source": "self._compositor.layers" + }, + { + "path": "src/textual/screen.py", + "line": 1376, + "kind": "Load", + "source": "self._compositor.layers" + }, + { + "path": "src/textual/widget.py", + "line": 2830, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/widget.py", + "line": 2839, + "kind": "declaration", + "source": "_inherit_layer_order" + }, + { + "path": "src/textual/widget.py", + "line": 2852, + "kind": "declaration", + "source": "_get_layer_order" + }, + { + "path": "src/textual/widget.py", + "line": 2836, + "kind": "Load", + "source": "self._get_layer_order" + }, + { + "path": "src/textual/widget.py", + "line": 2849, + "kind": "Load", + "source": "self.styles.layers" + }, + { + "path": "src/textual/widget.py", + "line": 2861, + "kind": "Load", + "source": "node._inherit_layer_order" + } + ], + "deleted_authorities": [ + "Compositor._arrange_root.get_layers declaration, recursion and all callers", + "Compositor._arrange_root per-widget inherited_layers registry", + "Widget.layers independent bottom-up declaration selection" + ], + "preserved_resources": [ + "SubtreeGeometryKey.inherited_layers immutable rank snapshot", + "Derived rank mapping carried synchronously through original arrangement", + "Default/custom property policies and raw authored tuple including duplicates" + ], + "new_owner": "Widget._inherit_layer_order decides outermost authored inheritance; public property and compositor consume it. Widget._get_layer_order acquires external ancestry once at original traversal entry.", + "limits": [ + "Lexical AST includes unrelated Styles/Compositor.layers projections; source reading classified these.", + "Dynamic plugin dispatch is not proven by AST; existing layers overrides are consumed exactly as before.", + "Native controls are last; installed changed qualification not yet claimed." + ], + "production_delta": { + "files": 2, + "added": 54, + "deleted": 27 + } +} diff --git a/evidence/native-layer-acquisition-20261004/owner-before.json b/evidence/native-layer-acquisition-20261004/owner-before.json new file mode 100644 index 0000000000..cb4c187548 --- /dev/null +++ b/evidence/native-layer-acquisition-20261004/owner-before.json @@ -0,0 +1,189 @@ +{ + "packages": [ + { + "repo": "/home/ts/wt/textual-native-subtree-strips-20261002", + "head": "2fac5395d37454296e9fa9b0cd342b820bacc25a", + "root": "src/textual", + "modules": 249, + "unparsed": [], + "sites": [ + { + "path": "src/textual/_compositor.py", + "line": 82, + "kind": "declaration", + "source": "from_widget" + }, + { + "path": "src/textual/_compositor.py", + "line": 779, + "kind": "declaration", + "source": "_arrange_root" + }, + { + "path": "src/textual/_compositor.py", + "line": 1129, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 79, + "kind": "Store", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 837, + "kind": "declaration", + "source": "get_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 818, + "kind": "Store", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 90, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1124, + "kind": "Del", + "source": "get_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 762, + "kind": "Load", + "source": "self.layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 838, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 844, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 1062, + "kind": "Load", + "source": "get_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 839, + "kind": "Load", + "source": "inherited_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 841, + "kind": "Load", + "source": "get_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 945, + "kind": "Load", + "source": "type(widget).layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 945, + "kind": "Load", + "source": "Widget.layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 843, + "kind": "Load", + "source": "widget.styles.layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 946, + "kind": "Load", + "source": "get_layers" + }, + { + "path": "src/textual/_compositor.py", + "line": 952, + "kind": "Load", + "source": "widget.layers" + }, + { + "path": "src/textual/css/styles.py", + "line": 1232, + "kind": "Load", + "source": "self.layers" + }, + { + "path": "src/textual/screen.py", + "line": 360, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/screen.py", + "line": 371, + "kind": "Load", + "source": "super().layers" + }, + { + "path": "src/textual/screen.py", + "line": 1414, + "kind": "Load", + "source": "self._compositor.layers" + }, + { + "path": "src/textual/screen.py", + "line": 1376, + "kind": "Load", + "source": "self._compositor.layers" + }, + { + "path": "src/textual/widget.py", + "line": 2830, + "kind": "declaration", + "source": "layers" + }, + { + "path": "src/textual/widget.py", + "line": 2841, + "kind": "Load", + "source": "node.styles.layers" + } + ] + }, + { + "repo": "/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001", + "head": "aa75b3aa28ec89f127b4aabb3a65802b91481445", + "root": "src/toad", + "modules": 288, + "unparsed": [], + "sites": [] + }, + { + "repo": "/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001", + "head": "aa75b3aa28ec89f127b4aabb3a65802b91481445", + "root": "tools", + "modules": 41, + "unparsed": [], + "sites": [] + } + ], + "limits": [ + "Lexical layers references include Styles declarations and Compositor paint order; source classification distinguishes them from Widget inheritance.", + "AST does not resolve dynamic plugin overrides." + ] +} diff --git a/evidence/native-style-cohort-lifetime-20261004/F0-CORRECTION-READY.json b/evidence/native-style-cohort-lifetime-20261004/F0-CORRECTION-READY.json new file mode 100644 index 0000000000..226f27cca2 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/F0-CORRECTION-READY.json @@ -0,0 +1,104 @@ +{ + "status": "F0_SOURCE_AND_CHANGED_REAL_APP_QUALIFIED; original installed422 scope remains partial", + "source_head": "a818dcfd4a4a874af085f705559e134a00b7d189", + "base": "919cbcd89bbeb55b4393537cc5b52c797f4b196b", + "production_diff_main": [ + "21\t23\tsrc/textual/_compositor.py", + "13\t18\tsrc/textual/css/styles.py", + "2\t4\tsrc/textual/dom.py", + "8\t8\tsrc/textual/widget.py" + ], + "changed_source_controls": { + "command": "PYTHONPATH=src PYTHONDONTWRITEBYTECODE=1 timeout 60 python -m pytest -q -p no:cacheprovider tests/test_compositor.py tests/test_subtree_geometry_cache.py tests/css/test_programmatic_style_changes.py tests/css/test_reapply_rules.py", + "result": "35 passed in 3.00s", + "boundary": "Actual mounted Textual App, original layer/style descriptors and compositor/cache resources; source import, not a new installed motion journey." + }, + "hosted_debt_ratchet": { + "52": { + "head": "87baaf7975be43ecba4631b9ff1d681ceed0af18", + "base": "main", + "checks": [ + { + "__typename": "CheckRun", + "completedAt": "2026-10-04T05:05:43Z", + "conclusion": "SUCCESS", + "detailsUrl": "https://github.com/OpenHCSDev/textual/actions/runs/37178850625/job/111367091285", + "name": "Debt ratchet", + "startedAt": "2026-10-04T05:05:02Z", + "status": "COMPLETED", + "workflowName": "Debt ratchet" + } + ] + }, + "53": { + "head": "a818dcfd4a4a874af085f705559e134a00b7d189", + "base": "main", + "checks": [ + { + "__typename": "CheckRun", + "completedAt": "2026-10-04T05:07:08Z", + "conclusion": "SUCCESS", + "detailsUrl": "https://github.com/OpenHCSDev/textual/actions/runs/37178898954/job/111367229111", + "name": "Debt ratchet", + "startedAt": "2026-10-04T05:06:11Z", + "status": "COMPLETED", + "workflowName": "Debt ratchet" + } + ] + } + }, + "packaged_debt": { + "report": "f0-packaged-ratchet.json", + "positive_deltas": [], + "Widget_delta": 0, + "Compositor_delta": -2, + "Styles_delta": -6, + "DOMNode_delta": -2 + }, + "wheel": { + "buildhead": "a818dcfd4a4a874af085f705559e134a00b7d189", + "wheel": "/home/ts/wt/textual-native-subtree-strips-20261002/.artifacts/text53-filewheel-a818dcfd-20261004/textual-8.2.8-py3-none-any.whl", + "wheel_sha256": "dfbd8fcbd37221f3c7934a8e7d7cd141bb592b1f0e35e9f034bffafe8e7f2a5a", + "wheel_bytes": 768006, + "backend": "poetry.core.masonry.api", + "backend_readonly_path": "/home/ts/.cache/uv/archive-v0/rA45km4nFPRmVeSg", + "source_files": 266, + "source_byte_equal": true, + "source_inventory": "/home/ts/wt/textual-native-subtree-strips-20261002/.artifacts/text53-filewheel-a818dcfd-20261004/source-inventory.json", + "requires_dist": [ + "Requires-Python: >=3.9,<4.0", + "Requires-Dist: markdown-it-py[linkify] (>=2.1.0)", + "Requires-Dist: mdit-py-plugins", + "Requires-Dist: platformdirs (>=3.6.0,<5)", + "Requires-Dist: pygments (>=2.19.2,<3.0.0)", + "Requires-Dist: rich (>=14.2.0)", + "Requires-Dist: tree-sitter (>=0.25.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-bash (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-css (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-go (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-html (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-java (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-javascript (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-json (>=0.24.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-markdown (>=0.3.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-python (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-regex (>=0.24.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-rust (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-sql (>=0.3.11) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-toml (>=0.6.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-xml (>=0.7.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: tree-sitter-yaml (>=0.6.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")", + "Requires-Dist: typing-extensions (>=4.4.0,<5.0.0)" + ], + "scope": "Corrected52 source fold; unchanged53 ordered style owner. Final actual App/resource family35PASS3.00s. Original422 partial film remains immutable; no repeat film.", + "built_at_utc": "2026-10-04T05:07:52.217296+00:00" + }, + "original_installed_qualification": "../native-layer-acquisition-20261004/SCOPED-READY.json", + "original_limits": [ + "422 physical completed and capture_completed false; clipped peer prevents full A/B/A/16warm acceptance", + "Original native a52/wheel a805 qualifies original source, not changed52 behavior", + "No new film, provider, installed package write or epoch claim", + "Source controls do not establish sidebar latency/overallCPU/smoothness/144Hz" + ], + "remaining": "Receiving owner may normally install this corrected filewheel into next existing holder; whole physical performance and clipped-peer acceptance remain open." +} diff --git a/evidence/native-style-cohort-lifetime-20261004/SCOPE.md b/evidence/native-style-cohort-lifetime-20261004/SCOPE.md new file mode 100644 index 0000000000..c4dc0d8acf --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/SCOPE.md @@ -0,0 +1,116 @@ +# Native style cohorts preserve one publication and declared repaint intent + +Source first: DOM.set_styles keyword updates loop over native descriptors inside +Styles.batch_update. That owner batches pending damage, deliberately preserving +immediate rule mutation. Each field still publishes through Styles._update_rules, +DOM._style_rules_updated and subtree/ancestor measurement retirement. Sidebar +width/min/max belong to one requested width cohort; independent publication is +unnecessary. Existing Styles.replace_rules already prepares all native descriptor +values through their MRO and publishes one changed cohort plus declared effects. +Use that existing owner for the keyword API; preserve raw imperative setters and +CSS parse/merge boundary. No replacement transaction/schema/queue/type/registry. + +Styles._refresh aggregates request layout/children/parent effects but drops node +repaint, calling Widget.refresh defaultTrue. OffsetProperty explicitly requests +repaintFalse. Pass the existing aggregate to original Widget.refresh; retain actual +geometry/measurement source retirement and normal layout damage/paint. No source +value is treated as a mirror of a layout or presentation event. + +Same WT on new branch stacked on frozen52; no native52 source modification, +Toad/Sash/sidebar files, environment/native copy, installed write/provider/movie. +Heisenberg owns Toad controls/runway and next single changed drag/scroll journey. +NRA AST complete native/Toad/tools before editing; semantic source reading of +native descriptor normalization/publication/refresh and every API consumer. +Coherent implementation then one bounded affected native batch LAST; next joined +installed original drag/scroll must qualify the user report. Existing51/52 source +cannot itself prove LIVE419/Text50 fixed. No causal CPU/smoothness/144Hz claim. + +## Source checkpoint and final controls + +Production `f30daa40c3` relative frozen52: two files, **7 added/9 deleted**. +The keyword loop is replaced by one call to existing replace_rules; its temporary +input is original rules plus requested keyword updates. Styles preserves original +request repaint. The original raw setter/batch interruption contract remains; +invalid keyword cohorts now publish nothing, following existing replacement +normalization. The old interrupted-keyword control was migrated to exercise the +original imperative batch it described; the new cohort control verifies rejection +without partial live writes. + +Final affected batch: **116 passed in 2.42s**, original App/Widgets/native geometry +and cached rows, no substituted UI/protocol/state responses. It covers width/ +min/max/offset cohort publication once, normalized no-op, clear/defaults, invalid +cohort atomicity, display publication, offset-only geometry/hit movement retaining +rendered row identity, CSS normalization/MRO, inheritance and interrupted imperative +damage. No failed final controls or replay. Resource warnings right-sized to one +short process using existing dependencies; no new cap/environment/native copy. + +After AST: native249 modules, zero omissions. Before native/Toad/tools160/60/1 +lexical sites (249/288/41 modules), zero omissions; dynamic resolution limitation +recorded. No own Toad edits; Heisenberg owns sidebar/Sash/runway consumers. + +**Installed qualification remains pending**: one joined actual sidebar width-drag/ +scroll and saved-history body motion with Heisenberg. Source controls do not prove +visible drag latency or overall CPU gain. Frozen52 source is carried unchanged. + +## Ordered descriptor correction before installation + +The initial frozen dee585 wheel and its116-pass result remain immutable. A later +source pass found a missing contract: native keyword descriptors include +composites (border/outline/align/content_align/overflow), while compiled RulesMap +stores their components. Unioning old raw components with requested composites +then iterating a set could overwrite a freshly normalized composite with an old +component. Composite clearNone also must invoke its descriptor, not compare an +absent composite raw key. No old movie or runtime failure was inferred. + +Corrected production `871b791d` extends EXISTING Styles.replace_rules: normalize +complete raw replacement changes FIRST, then every requested descriptor in +keyword insertion order; both use the SAME MRO normalization loop, detached +validation/damage resource, one original _update_rules live publication. No +new algorithm/family, descriptor-name dispatch or second source authority. +Compiled callers still pass their genuine raw replacement; DOM passes genuine +ordered keyword inputs separately. Imperative setters remain immediate. + +Changed final batch: **55 passed1.54s** at871b, testing composite overwrite/ +authored precedence/clear/atomic invalid rejection plus native geometry/cache, +normalized no-op, compiled replacement/descriptor MRO. Old116 sourcef30 result +is retained separately, not represented as a new run on871b. Final native AST +249modules/zero omissions; dynamic plugin dispatch limits remain explicit. +One corrected wheel replaces052d for the same sole joined installed sidebar/ +runway journey. No second film, provider or environment. Installed pending. + +## F0 layer owner correction and unchanged style contract + +Parent ratchet on original f830 reported actual Widget +20/Compositor +7. +That source is superseded by normally integrated52 correction87baaf79 in53 +source a818dcfd. Existing Widget folds original sources once; public/root/local +admission share the one behavior. Deleted _inherit_layer_order, ancestry snapshot/ +reverse walk and all carried layer_names parameters/readers. One derived rank +resource reaches arrangement and original subtree key. Authored empty/duplicate +public names, outermost source, external-root boundary and custom override remain. +No unrelated deletions, threshold changes, compatibility or new class/cache/map. + +Complete corrected native AST249 plus tests460: zero omissions, one source fold +with exactly three production consumers; replaced declarations/parameters zero. +AST cannot prove dynamic custom-property resolution; original native dispatch and +actual outcome controls cover that boundary. Changed coherent real App/resource +batch: **35 passed3.00s**, layer inheritance/source change/custom/empty/duplicate, +external capture/cache invalidation and ordered style/atomicity/MRO. No new UI, +protocol/state substitutes, provider, environment or unchanged whole movie. + +Packaged original ratchet: allpositive deltasZERO against main919. GodClassExcess +Widget0, Compositor-2, Styles-6, DOMNode-2. Hosted main Debt ratchets bothSUCCESS: +52 head87baaf79 run37178850625;53 heada818dcfd run37178898954. Wider old native +matrix remains outside this requested F0 scope; no exemptions/admin settings. + +Corrected normal wheel dfbd8fcbd37221f3c7934a8e7d7cd141bb592b1f0e35e9f034bffafe8e7f2a5a: +all266 packaged files exact Git/WT, same backend/dependencies. No installed write; +style22 remains SchF1's purpose. The original422 App/physical qualification and +14 original hashes are retained by the unchanged52 scoped receipt. Physical +completed flags remainFALSE due clipped peer; no16warm/fullABA/Undo/IRC claim. +Kepler18-8 band was SIDEBAR during sameUI life; HeisactualUpDURING, Down/reverse +AFTER. Seven original input/drag/scroll/End phases passed; no causal speed claim. + +F0-CORRECTION-READY.json separates changed source real App controls from historical +installed a52 source. This is a useful corrected source checkpoint; remaining +installed receiving confirmation may reuse the existing holder without a second +film. Full native performance remains active. diff --git a/evidence/native-style-cohort-lifetime-20261004/f0-corrected-family-sanity.log b/evidence/native-style-cohort-lifetime-20261004/f0-corrected-family-sanity.log new file mode 100644 index 0000000000..dd36bec917 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/f0-corrected-family-sanity.log @@ -0,0 +1,2 @@ +................................... [100%] +35 passed in 3.00s diff --git a/evidence/native-style-cohort-lifetime-20261004/f0-owner-correction.json b/evidence/native-style-cohort-lifetime-20261004/f0-owner-correction.json new file mode 100644 index 0000000000..a1ea58c79c --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/f0-owner-correction.json @@ -0,0 +1,37 @@ +{ + "head": "a818dcfd4a4a874af085f705559e134a00b7d189", + "base": "919cbcd89bbeb55b4393537cc5b52c797f4b196b", + "roots": { + "src/textual": { + "parsed": 249, + "omissions": [] + }, + "tests": { + "parsed": 460, + "omissions": [] + } + }, + "sites": [ + { + "path": "src/textual/_compositor.py", + "line": 817, + "consumer": "root._get_layer_order" + }, + { + "path": "src/textual/_compositor.py", + "line": 1053, + "consumer": "widget._get_layer_order" + }, + { + "path": "src/textual/widget.py", + "line": 2835, + "definition": "_get_layer_order" + }, + { + "path": "src/textual/widget.py", + "line": 2832, + "consumer": "self._get_layer_order" + } + ], + "ambiguity": "AST attribute names do not prove dynamic binding; custom layers properties remain original native dispatch." +} diff --git a/evidence/native-style-cohort-lifetime-20261004/f0-packaged-ratchet.json b/evidence/native-style-cohort-lifetime-20261004/f0-packaged-ratchet.json new file mode 100644 index 0000000000..43943f9cd8 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/f0-packaged-ratchet.json @@ -0,0 +1,2264 @@ +{ + "root": "src/textual/", + "base_revision": "919cbcd89bbeb55b4393537cc5b52c797f4b196b", + "head_revision": "a818dcfd4a4a874af085f705559e134a00b7d189", + "paths": [ + "src/textual/_compositor.py", + "src/textual/css/styles.py", + "src/textual/dom.py", + "src/textual/widget.py" + ], + "base": { + "StringDispatch:src/textual/_compositor.py": 0, + "StringDispatch:src/textual/css/styles.py": 0, + "StringDispatch:src/textual/dom.py": 0, + "StringDispatch:src/textual/widget.py": 2, + "TypeSwitch:src/textual/_compositor.py": 0, + "TypeSwitch:src/textual/css/styles.py": 0, + "TypeSwitch:src/textual/dom.py": 0, + "TypeSwitch:src/textual/widget.py": 0, + "StringDispatchArms:src/textual/_compositor.py": 0, + "StringDispatchArms:src/textual/css/styles.py": 0, + "StringDispatchArms:src/textual/dom.py": 0, + "StringDispatchArms:src/textual/widget.py": 6, + "TypeSwitchArms:src/textual/_compositor.py": 0, + "TypeSwitchArms:src/textual/css/styles.py": 0, + "TypeSwitchArms:src/textual/dom.py": 0, + "TypeSwitchArms:src/textual/widget.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/_compositor.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/css/styles.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/dom.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/widget.py": 0, + "GodClassExcess:src/textual/__init__.py::LoggerError": 0, + "GodClassExcess:src/textual/__init__.py::Logger": 0, + "GodClassExcess:src/textual/_animator.py::AnimationError": 0, + "GodClassExcess:src/textual/_animator.py::Animatable": 0, + "GodClassExcess:src/textual/_animator.py::Animation": 0, + "GodClassExcess:src/textual/_animator.py::SimpleAnimation": 0, + "GodClassExcess:src/textual/_animator.py::BoundAnimator": 0, + "GodClassExcess:src/textual/_animator.py::Animator": 0, + "GodClassExcess:src/textual/_ansi_sequences.py::IgnoredSequence": 0, + "GodClassExcess:src/textual/_binary_encode.py::DecodeError": 0, + "GodClassExcess:src/textual/_compat.py::cached_property": 0, + "GodClassExcess:src/textual/_compositor.py::ReflowResult": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometryKey": 0, + "GodClassExcess:src/textual/_compositor.py::SceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::RootSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::NestedSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeMapGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::PlacedSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::IntrinsicSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::CompositorUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::LayoutUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::InlineUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::ChopsUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::Compositor": 756, + "GodClassExcess:src/textual/_context.py::NoActiveAppError": 0, + "GodClassExcess:src/textual/_duration.py::DurationError": 0, + "GodClassExcess:src/textual/_duration.py::DurationParseError": 0, + "GodClassExcess:src/textual/_event_broker.py::NoHandler": 0, + "GodClassExcess:src/textual/_event_broker.py::HandlerArguments": 0, + "GodClassExcess:src/textual/_extrema.py::Extrema": 0, + "GodClassExcess:src/textual/_immutable_sequence_view.py::ImmutableSequenceView": 0, + "GodClassExcess:src/textual/_import_app.py::AppFail": 0, + "GodClassExcess:src/textual/_layout_resolve.py::EdgeProtocol": 0, + "GodClassExcess:src/textual/_log.py::LogGroup": 0, + "GodClassExcess:src/textual/_log.py::LogVerbosity": 0, + "GodClassExcess:src/textual/_markup_playground.py::MarkupPlayground": 0, + "GodClassExcess:src/textual/_measurement.py::HeightDependency": 0, + "GodClassExcess:src/textual/_measurement.py::ContextHeight": 0, + "GodClassExcess:src/textual/_measurement.py::IndependentHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetMeasurementHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetWidth": 0, + "GodClassExcess:src/textual/_measurement.py::NativeLayoutHeight": 0, + "GodClassExcess:src/textual/_measurement.py::FlowHeight": 0, + "GodClassExcess:src/textual/_measurement.py::StreamHeight": 0, + "GodClassExcess:src/textual/_measurement.py::GridHeight": 0, + "GodClassExcess:src/textual/_node_list.py::DuplicateIds": 0, + "GodClassExcess:src/textual/_node_list.py::ReadOnlyError": 0, + "GodClassExcess:src/textual/_node_list.py::NodeList": 0, + "GodClassExcess:src/textual/_on.py::OnDecoratorError": 0, + "GodClassExcess:src/textual/_on.py::OnNoWidget": 0, + "GodClassExcess:src/textual/_paint_state.py::PaintState": 0, + "GodClassExcess:src/textual/_parser.py::ParseError": 0, + "GodClassExcess:src/textual/_parser.py::ParseEOF": 0, + "GodClassExcess:src/textual/_parser.py::ParseTimeout": 0, + "GodClassExcess:src/textual/_parser.py::Read1": 0, + "GodClassExcess:src/textual/_parser.py::Peek1": 0, + "GodClassExcess:src/textual/_parser.py::Parser": 0, + "GodClassExcess:src/textual/_path.py::CSSPathError": 0, + "GodClassExcess:src/textual/_queue.py::Queue": 0, + "GodClassExcess:src/textual/_segment_tools.py::NoCellPositionForIndex": 0, + "GodClassExcess:src/textual/_sleep.py::Sleeper": 0, + "GodClassExcess:src/textual/_slug.py::TrackedSlugs": 0, + "GodClassExcess:src/textual/_spatial_map.py::SpatialMap": 0, + "GodClassExcess:src/textual/_styles_cache.py::StylesCache": 0, + "GodClassExcess:src/textual/_text_area_theme.py::TextAreaTheme": 0, + "GodClassExcess:src/textual/_two_way_dict.py::TwoWayDict": 0, + "GodClassExcess:src/textual/_types.py::MessageTarget": 0, + "GodClassExcess:src/textual/_types.py::EventTarget": 0, + "GodClassExcess:src/textual/_types.py::UnusedParameter": 0, + "GodClassExcess:src/textual/_widget_navigation.py::Disableable": 0, + "GodClassExcess:src/textual/_work_decorator.py::WorkerDeclarationError": 0, + "GodClassExcess:src/textual/_xterm_parser.py::XTermParser": 0, + "GodClassExcess:src/textual/actions.py::SkipAction": 0, + "GodClassExcess:src/textual/actions.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::SystemCommand": 0, + "GodClassExcess:src/textual/app.py::AppError": 0, + "GodClassExcess:src/textual/app.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::ScreenError": 0, + "GodClassExcess:src/textual/app.py::ScreenStackError": 0, + "GodClassExcess:src/textual/app.py::ModeError": 0, + "GodClassExcess:src/textual/app.py::InvalidModeError": 0, + "GodClassExcess:src/textual/app.py::UnknownModeError": 0, + "GodClassExcess:src/textual/app.py::ActiveModeError": 0, + "GodClassExcess:src/textual/app.py::SuspendNotSupported": 0, + "GodClassExcess:src/textual/app.py::InvalidThemeError": 0, + "GodClassExcess:src/textual/app.py::_NullFile": 0, + "GodClassExcess:src/textual/app.py::_PrintCapture": 0, + "GodClassExcess:src/textual/app.py::App": 4290, + "GodClassExcess:src/textual/await_complete.py::AwaitComplete": 0, + "GodClassExcess:src/textual/await_remove.py::AwaitRemove": 0, + "GodClassExcess:src/textual/binding.py::BindingError": 0, + "GodClassExcess:src/textual/binding.py::NoBinding": 0, + "GodClassExcess:src/textual/binding.py::InvalidBinding": 0, + "GodClassExcess:src/textual/binding.py::Binding": 0, + "GodClassExcess:src/textual/binding.py::Binding.Group": 0, + "GodClassExcess:src/textual/binding.py::ActiveBinding": 0, + "GodClassExcess:src/textual/binding.py::BindingsMap": 0, + "GodClassExcess:src/textual/binding.py::KeymapApplyResult": 0, + "GodClassExcess:src/textual/box_model.py::BoxModel": 0, + "GodClassExcess:src/textual/cache.py::LRUCache": 0, + "GodClassExcess:src/textual/cache.py::FIFOCache": 0, + "GodClassExcess:src/textual/canvas.py::_Span": 0, + "GodClassExcess:src/textual/canvas.py::Primitive": 0, + "GodClassExcess:src/textual/canvas.py::HorizontalLine": 0, + "GodClassExcess:src/textual/canvas.py::VerticalLine": 0, + "GodClassExcess:src/textual/canvas.py::Rectangle": 0, + "GodClassExcess:src/textual/canvas.py::Canvas": 0, + "GodClassExcess:src/textual/clock.py::Clock": 0, + "GodClassExcess:src/textual/clock.py::MockClock": 0, + "GodClassExcess:src/textual/color.py::HSL": 0, + "GodClassExcess:src/textual/color.py::HSV": 0, + "GodClassExcess:src/textual/color.py::Lab": 0, + "GodClassExcess:src/textual/color.py::ColorParseError": 0, + "GodClassExcess:src/textual/color.py::Color": 39, + "GodClassExcess:src/textual/color.py::Gradient": 0, + "GodClassExcess:src/textual/command.py::Hit": 0, + "GodClassExcess:src/textual/command.py::DiscoveryHit": 0, + "GodClassExcess:src/textual/command.py::Provider": 0, + "GodClassExcess:src/textual/command.py::SimpleCommand": 0, + "GodClassExcess:src/textual/command.py::SimpleProvider": 0, + "GodClassExcess:src/textual/command.py::Command": 0, + "GodClassExcess:src/textual/command.py::CommandList": 0, + "GodClassExcess:src/textual/command.py::SearchIcon": 0, + "GodClassExcess:src/textual/command.py::CommandInput": 0, + "GodClassExcess:src/textual/command.py::CommandPalette": 255, + "GodClassExcess:src/textual/command.py::CommandPalette.OptionHighlighted": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Opened": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Closed": 0, + "GodClassExcess:src/textual/containers.py::Container": 0, + "GodClassExcess:src/textual/containers.py::ScrollableContainer": 0, + "GodClassExcess:src/textual/containers.py::Vertical": 0, + "GodClassExcess:src/textual/containers.py::VerticalGroup": 0, + "GodClassExcess:src/textual/containers.py::VerticalScroll": 0, + "GodClassExcess:src/textual/containers.py::Horizontal": 0, + "GodClassExcess:src/textual/containers.py::HorizontalGroup": 0, + "GodClassExcess:src/textual/containers.py::HorizontalScroll": 0, + "GodClassExcess:src/textual/containers.py::Center": 0, + "GodClassExcess:src/textual/containers.py::Right": 0, + "GodClassExcess:src/textual/containers.py::Middle": 0, + "GodClassExcess:src/textual/containers.py::CenterMiddle": 0, + "GodClassExcess:src/textual/containers.py::Grid": 0, + "GodClassExcess:src/textual/containers.py::ItemGrid": 0, + "GodClassExcess:src/textual/content.py::Span": 0, + "GodClassExcess:src/textual/content.py::Content": 1102, + "GodClassExcess:src/textual/content.py::_FormattedLine": 0, + "GodClassExcess:src/textual/coordinate.py::Coordinate": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Example": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Bullet": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::HelpText": 0, + "GodClassExcess:src/textual/css/_help_text.py::ContextSpecificBullets": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::GenericProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::IntegerProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BooleanProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BoxProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::Edges": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BorderProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::KeylineProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SpacingProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::DockProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SplitProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::LayoutProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OffsetProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StringEnumProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OverflowProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScrollbarColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleFlagsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::TransitionsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::FractionalProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::AlignProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::HatchProperty": 0, + "GodClassExcess:src/textual/css/_styles_builder.py::StylesBuilder": 729, + "GodClassExcess:src/textual/css/errors.py::DeclarationError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleTypeError": 0, + "GodClassExcess:src/textual/css/errors.py::UnresolvedVariableError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleValueError": 0, + "GodClassExcess:src/textual/css/errors.py::StylesheetError": 0, + "GodClassExcess:src/textual/css/model.py::SelectorType": 0, + "GodClassExcess:src/textual/css/model.py::CombinatorType": 0, + "GodClassExcess:src/textual/css/model.py::Selector": 0, + "GodClassExcess:src/textual/css/model.py::Declaration": 0, + "GodClassExcess:src/textual/css/model.py::SelectorSet": 0, + "GodClassExcess:src/textual/css/model.py::RuleSet": 0, + "GodClassExcess:src/textual/css/query.py::QueryError": 0, + "GodClassExcess:src/textual/css/query.py::InvalidQueryFormat": 0, + "GodClassExcess:src/textual/css/query.py::NoMatches": 0, + "GodClassExcess:src/textual/css/query.py::TooManyMatches": 0, + "GodClassExcess:src/textual/css/query.py::WrongType": 0, + "GodClassExcess:src/textual/css/query.py::DOMQuery": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarResolveError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarParseError": 0, + "GodClassExcess:src/textual/css/scalar.py::Unit": 0, + "GodClassExcess:src/textual/css/scalar.py::Scalar": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarOffset": 0, + "GodClassExcess:src/textual/css/scalar_animation.py::ScalarAnimation": 0, + "GodClassExcess:src/textual/css/styles.py::RulesMap": 0, + "GodClassExcess:src/textual/css/styles.py::StylesBase": 165, + "GodClassExcess:src/textual/css/styles.py::_StyleNodeReference": 0, + "GodClassExcess:src/textual/css/styles.py::Styles": 41, + "GodClassExcess:src/textual/css/styles.py::RenderStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::_ComponentStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetParseError": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetErrors": 0, + "GodClassExcess:src/textual/css/stylesheet.py::CssSource": 0, + "GodClassExcess:src/textual/css/stylesheet.py::Stylesheet": 374, + "GodClassExcess:src/textual/css/tokenize.py::TokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::TCSSTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::DeclarationTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::ValueTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::StyleTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenizer.py::TokenError": 0, + "GodClassExcess:src/textual/css/tokenizer.py::UnexpectedEnd": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Expect": 0, + "GodClassExcess:src/textual/css/tokenizer.py::ReferencedBy": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Token": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Tokenizer": 0, + "GodClassExcess:src/textual/css/transition.py::Transition": 0, + "GodClassExcess:src/textual/demo/_project_data.py::ProjectInfo": 0, + "GodClassExcess:src/textual/demo/demo_app.py::DemoApp": 0, + "GodClassExcess:src/textual/demo/game.py::NewGame": 0, + "GodClassExcess:src/textual/demo/game.py::Tile": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialog": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialogScreen": 0, + "GodClassExcess:src/textual/demo/game.py::Game": 0, + "GodClassExcess:src/textual/demo/game.py::GameInstructions": 0, + "GodClassExcess:src/textual/demo/game.py::GameScreen": 0, + "GodClassExcess:src/textual/demo/game.py::GameApp": 0, + "GodClassExcess:src/textual/demo/home.py::StarCount": 0, + "GodClassExcess:src/textual/demo/home.py::Content": 0, + "GodClassExcess:src/textual/demo/home.py::HomeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::CodeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::PageScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::Project": 0, + "GodClassExcess:src/textual/demo/projects.py::ProjectsScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::GameApp": 0, + "GodClassExcess:src/textual/demo/widgets.py::Buttons": 0, + "GodClassExcess:src/textual/demo/widgets.py::Checkboxes": 0, + "GodClassExcess:src/textual/demo/widgets.py::Datatables": 0, + "GodClassExcess:src/textual/demo/widgets.py::Inputs": 0, + "GodClassExcess:src/textual/demo/widgets.py::ListViews": 0, + "GodClassExcess:src/textual/demo/widgets.py::Logs": 0, + "GodClassExcess:src/textual/demo/widgets.py::Markdowns": 0, + "GodClassExcess:src/textual/demo/widgets.py::Selects": 0, + "GodClassExcess:src/textual/demo/widgets.py::Sparklines": 0, + "GodClassExcess:src/textual/demo/widgets.py::Switches": 0, + "GodClassExcess:src/textual/demo/widgets.py::TabsDemo": 0, + "GodClassExcess:src/textual/demo/widgets.py::Trees": 0, + "GodClassExcess:src/textual/demo/widgets.py::TextAreas": 0, + "GodClassExcess:src/textual/demo/widgets.py::YourWidgets": 0, + "GodClassExcess:src/textual/demo/widgets.py::WidgetsScreen": 0, + "GodClassExcess:src/textual/demo/widgets.py::GameApp": 0, + "GodClassExcess:src/textual/design.py::ColorSystem": 7, + "GodClassExcess:src/textual/document/_document.py::EditResult": 0, + "GodClassExcess:src/textual/document/_document.py::DocumentBase": 0, + "GodClassExcess:src/textual/document/_document.py::Document": 0, + "GodClassExcess:src/textual/document/_document.py::Selection": 0, + "GodClassExcess:src/textual/document/_document_navigator.py::DocumentNavigator": 0, + "GodClassExcess:src/textual/document/_edit.py::Edit": 0, + "GodClassExcess:src/textual/document/_history.py::HistoryException": 0, + "GodClassExcess:src/textual/document/_history.py::EditHistory": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocumentError": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocument": 0, + "GodClassExcess:src/textual/document/_wrapped_document.py::WrappedDocument": 0, + "GodClassExcess:src/textual/dom.py::BadIdentifier": 0, + "GodClassExcess:src/textual/dom.py::DOMError": 0, + "GodClassExcess:src/textual/dom.py::NoScreen": 0, + "GodClassExcess:src/textual/dom.py::_ClassesDescriptor": 0, + "GodClassExcess:src/textual/dom.py::DOMNode": 1416, + "GodClassExcess:src/textual/driver.py::Driver": 0, + "GodClassExcess:src/textual/driver.py::Driver.SignalResume": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseError": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseEOF": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::Awaitable": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read1": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStreamParser": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::BytePacket": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStream": 0, + "GodClassExcess:src/textual/drivers/_input_reader_linux.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_input_reader_windows.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::_FlushSignal": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::WriterThread": 0, + "GodClassExcess:src/textual/drivers/headless_driver.py::HeadlessDriver": 0, + "GodClassExcess:src/textual/drivers/linux_driver.py::LinuxDriver": 0, + "GodClassExcess:src/textual/drivers/linux_inline_driver.py::LinuxInlineDriver": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::_ExitInput": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::WebDriver": 0, + "GodClassExcess:src/textual/drivers/win32.py::COORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::uChar": 0, + "GodClassExcess:src/textual/drivers/win32.py::KEY_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MOUSE_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::WINDOW_BUFFER_SIZE_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MENU_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::FOCUS_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::InputEvent": 0, + "GodClassExcess:src/textual/drivers/win32.py::INPUT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::EventMonitor": 0, + "GodClassExcess:src/textual/drivers/windows_driver.py::WindowsDriver": 0, + "GodClassExcess:src/textual/errors.py::TextualError": 0, + "GodClassExcess:src/textual/errors.py::NoWidget": 0, + "GodClassExcess:src/textual/errors.py::RenderError": 0, + "GodClassExcess:src/textual/errors.py::DuplicateKeyHandlers": 0, + "GodClassExcess:src/textual/eta.py::ETA": 0, + "GodClassExcess:src/textual/events.py::Event": 0, + "GodClassExcess:src/textual/events.py::Callback": 0, + "GodClassExcess:src/textual/events.py::CursorPosition": 0, + "GodClassExcess:src/textual/events.py::Load": 0, + "GodClassExcess:src/textual/events.py::Idle": 0, + "GodClassExcess:src/textual/events.py::Action": 0, + "GodClassExcess:src/textual/events.py::Resize": 0, + "GodClassExcess:src/textual/events.py::Compose": 0, + "GodClassExcess:src/textual/events.py::Mount": 0, + "GodClassExcess:src/textual/events.py::Unmount": 0, + "GodClassExcess:src/textual/events.py::Show": 0, + "GodClassExcess:src/textual/events.py::Hide": 0, + "GodClassExcess:src/textual/events.py::Ready": 0, + "GodClassExcess:src/textual/events.py::MouseCapture": 0, + "GodClassExcess:src/textual/events.py::MouseRelease": 0, + "GodClassExcess:src/textual/events.py::InputEvent": 0, + "GodClassExcess:src/textual/events.py::Key": 0, + "GodClassExcess:src/textual/events.py::MouseEvent": 0, + "GodClassExcess:src/textual/events.py::MouseMove": 0, + "GodClassExcess:src/textual/events.py::MouseDown": 0, + "GodClassExcess:src/textual/events.py::MouseUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollDown": 0, + "GodClassExcess:src/textual/events.py::MouseScrollUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollRight": 0, + "GodClassExcess:src/textual/events.py::MouseScrollLeft": 0, + "GodClassExcess:src/textual/events.py::Click": 0, + "GodClassExcess:src/textual/events.py::Timer": 0, + "GodClassExcess:src/textual/events.py::Enter": 0, + "GodClassExcess:src/textual/events.py::Leave": 0, + "GodClassExcess:src/textual/events.py::Focus": 0, + "GodClassExcess:src/textual/events.py::Blur": 0, + "GodClassExcess:src/textual/events.py::AppFocus": 0, + "GodClassExcess:src/textual/events.py::AppBlur": 0, + "GodClassExcess:src/textual/events.py::DescendantFocus": 0, + "GodClassExcess:src/textual/events.py::DescendantBlur": 0, + "GodClassExcess:src/textual/events.py::Paste": 0, + "GodClassExcess:src/textual/events.py::ScreenResume": 0, + "GodClassExcess:src/textual/events.py::ScreenSuspend": 0, + "GodClassExcess:src/textual/events.py::Print": 0, + "GodClassExcess:src/textual/events.py::DeliveryComplete": 0, + "GodClassExcess:src/textual/events.py::DeliveryFailed": 0, + "GodClassExcess:src/textual/events.py::TextSelected": 0, + "GodClassExcess:src/textual/file_monitor.py::FileMonitor": 0, + "GodClassExcess:src/textual/filter.py::LineFilter": 0, + "GodClassExcess:src/textual/filter.py::Monochrome": 0, + "GodClassExcess:src/textual/filter.py::NoColor": 0, + "GodClassExcess:src/textual/filter.py::DimFilter": 0, + "GodClassExcess:src/textual/filter.py::ANSIToTruecolor": 0, + "GodClassExcess:src/textual/fuzzy.py::FuzzySearch": 0, + "GodClassExcess:src/textual/fuzzy.py::Matcher": 0, + "GodClassExcess:src/textual/geometry.py::Offset": 0, + "GodClassExcess:src/textual/geometry.py::Size": 0, + "GodClassExcess:src/textual/geometry.py::Region": 300, + "GodClassExcess:src/textual/geometry.py::Spacing": 0, + "GodClassExcess:src/textual/geometry.py::Shape": 0, + "GodClassExcess:src/textual/getters.py::app": 0, + "GodClassExcess:src/textual/getters.py::query_one": 0, + "GodClassExcess:src/textual/getters.py::child_by_id": 0, + "GodClassExcess:src/textual/highlight.py::HighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSIDarkHighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSILightHighlightTheme": 0, + "GodClassExcess:src/textual/keys.py::Keys": 0, + "GodClassExcess:src/textual/layout.py::DockArrangeResult": 0, + "GodClassExcess:src/textual/layout.py::WidgetPlacement": 0, + "GodClassExcess:src/textual/layout.py::Layout": 0, + "GodClassExcess:src/textual/layouts/factory.py::MissingLayout": 0, + "GodClassExcess:src/textual/layouts/grid.py::GridLayout": 0, + "GodClassExcess:src/textual/layouts/horizontal.py::HorizontalLayout": 0, + "GodClassExcess:src/textual/layouts/stream.py::StreamLayout": 0, + "GodClassExcess:src/textual/layouts/vertical.py::VerticalLayout": 0, + "GodClassExcess:src/textual/lazy.py::Lazy": 0, + "GodClassExcess:src/textual/lazy.py::Reveal": 0, + "GodClassExcess:src/textual/logging.py::TextualHandler": 0, + "GodClassExcess:src/textual/map_geometry.py::MapGeometry": 0, + "GodClassExcess:src/textual/markup.py::MarkupError": 0, + "GodClassExcess:src/textual/markup.py::MarkupTokenizer": 0, + "GodClassExcess:src/textual/markup.py::StyleTokenizer": 0, + "GodClassExcess:src/textual/message.py::Message": 0, + "GodClassExcess:src/textual/message_pump.py::CallbackError": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePumpClosed": 0, + "GodClassExcess:src/textual/message_pump.py::_MessagePumpMeta": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePump": 352, + "GodClassExcess:src/textual/messages.py::CloseMessages": 0, + "GodClassExcess:src/textual/messages.py::Prune": 0, + "GodClassExcess:src/textual/messages.py::ExitApp": 0, + "GodClassExcess:src/textual/messages.py::Update": 0, + "GodClassExcess:src/textual/messages.py::Layout": 0, + "GodClassExcess:src/textual/messages.py::UpdateScroll": 0, + "GodClassExcess:src/textual/messages.py::InvokeLater": 0, + "GodClassExcess:src/textual/messages.py::ScrollToRegion": 0, + "GodClassExcess:src/textual/messages.py::Prompt": 0, + "GodClassExcess:src/textual/messages.py::TerminalSupportsSynchronizedOutput": 0, + "GodClassExcess:src/textual/messages.py::InBandWindowResize": 0, + "GodClassExcess:src/textual/notifications.py::Notify": 0, + "GodClassExcess:src/textual/notifications.py::Notification": 0, + "GodClassExcess:src/textual/notifications.py::Notifications": 0, + "GodClassExcess:src/textual/pad.py::HorizontalPad": 0, + "GodClassExcess:src/textual/pilot.py::OutOfBounds": 0, + "GodClassExcess:src/textual/pilot.py::WaitForScreenTimeout": 0, + "GodClassExcess:src/textual/pilot.py::Pilot": 10, + "GodClassExcess:src/textual/reactive.py::_Mutated": 0, + "GodClassExcess:src/textual/reactive.py::ReactiveError": 0, + "GodClassExcess:src/textual/reactive.py::TooManyComputesError": 0, + "GodClassExcess:src/textual/reactive.py::Initialize": 0, + "GodClassExcess:src/textual/reactive.py::_StoredReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::_ComputedReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::Reactive": 0, + "GodClassExcess:src/textual/reactive.py::reactive": 0, + "GodClassExcess:src/textual/reactive.py::var": 0, + "GodClassExcess:src/textual/renderables/background_screen.py::BackgroundScreen": 0, + "GodClassExcess:src/textual/renderables/bar.py::Bar": 0, + "GodClassExcess:src/textual/renderables/blank.py::Blank": 0, + "GodClassExcess:src/textual/renderables/digits.py::Digits": 0, + "GodClassExcess:src/textual/renderables/gradient.py::VerticalGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::LinearGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::GradientApp": 0, + "GodClassExcess:src/textual/renderables/sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/renderables/styled.py::Styled": 0, + "GodClassExcess:src/textual/renderables/text_opacity.py::TextOpacity": 0, + "GodClassExcess:src/textual/renderables/tint.py::Tint": 0, + "GodClassExcess:src/textual/rlock.py::RLock": 0, + "GodClassExcess:src/textual/screen.py::HoverWidgets": 0, + "GodClassExcess:src/textual/screen.py::ResultCallback": 0, + "GodClassExcess:src/textual/screen.py::Screen": 1656, + "GodClassExcess:src/textual/screen.py::ModalScreen": 0, + "GodClassExcess:src/textual/screen.py::SystemModalScreen": 0, + "GodClassExcess:src/textual/scroll_view.py::ScrollView": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollMessage": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollUp": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollDown": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollLeft": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollRight": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollTo": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarRender": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBar": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarCorner": 0, + "GodClassExcess:src/textual/selection.py::Selection": 0, + "GodClassExcess:src/textual/selection.py::SelectStart": 0, + "GodClassExcess:src/textual/selection.py::SelectEnd": 0, + "GodClassExcess:src/textual/selection.py::SelectState": 0, + "GodClassExcess:src/textual/signal.py::SignalError": 0, + "GodClassExcess:src/textual/signal.py::Signal": 0, + "GodClassExcess:src/textual/strip.py::StripRenderable": 0, + "GodClassExcess:src/textual/strip.py::Strip": 277, + "GodClassExcess:src/textual/style.py::Style": 0, + "GodClassExcess:src/textual/suggester.py::SuggestionReady": 0, + "GodClassExcess:src/textual/suggester.py::Suggester": 0, + "GodClassExcess:src/textual/suggester.py::SuggestFromList": 0, + "GodClassExcess:src/textual/system_commands.py::SystemCommandsProvider": 0, + "GodClassExcess:src/textual/theme.py::Theme": 0, + "GodClassExcess:src/textual/theme.py::ThemeProvider": 0, + "GodClassExcess:src/textual/timer.py::EventTargetGone": 0, + "GodClassExcess:src/textual/timer.py::Timer": 0, + "GodClassExcess:src/textual/validation.py::ValidationResult": 0, + "GodClassExcess:src/textual/validation.py::Failure": 0, + "GodClassExcess:src/textual/validation.py::Validator": 0, + "GodClassExcess:src/textual/validation.py::Regex": 0, + "GodClassExcess:src/textual/validation.py::Regex.NoResults": 0, + "GodClassExcess:src/textual/validation.py::Number": 0, + "GodClassExcess:src/textual/validation.py::Number.NotANumber": 0, + "GodClassExcess:src/textual/validation.py::Number.NotInRange": 0, + "GodClassExcess:src/textual/validation.py::Integer": 0, + "GodClassExcess:src/textual/validation.py::Integer.NotAnInteger": 0, + "GodClassExcess:src/textual/validation.py::Length": 0, + "GodClassExcess:src/textual/validation.py::Length.Incorrect": 0, + "GodClassExcess:src/textual/validation.py::Function": 0, + "GodClassExcess:src/textual/validation.py::Function.ReturnedFalse": 0, + "GodClassExcess:src/textual/validation.py::URL": 0, + "GodClassExcess:src/textual/validation.py::URL.InvalidURL": 0, + "GodClassExcess:src/textual/visual.py::RenderOptions": 0, + "GodClassExcess:src/textual/visual.py::SupportsVisual": 0, + "GodClassExcess:src/textual/visual.py::VisualError": 0, + "GodClassExcess:src/textual/visual.py::Visual": 0, + "GodClassExcess:src/textual/visual.py::RichVisual": 0, + "GodClassExcess:src/textual/visual.py::Padding": 0, + "GodClassExcess:src/textual/widget.py::AwaitMount": 0, + "GodClassExcess:src/textual/widget.py::_Styled": 0, + "GodClassExcess:src/textual/widget.py::_RenderCache": 0, + "GodClassExcess:src/textual/widget.py::WidgetError": 0, + "GodClassExcess:src/textual/widget.py::MountError": 0, + "GodClassExcess:src/textual/widget.py::PseudoClasses": 0, + "GodClassExcess:src/textual/widget.py::_BorderTitle": 0, + "GodClassExcess:src/textual/widget.py::BadWidgetName": 0, + "GodClassExcess:src/textual/widget.py::Widget": 4436, + "GodClassExcess:src/textual/widgets/_button.py::InvalidButtonVariant": 0, + "GodClassExcess:src/textual/widgets/_button.py::Button": 20, + "GodClassExcess:src/textual/widgets/_button.py::Button.Pressed": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox.Changed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle.Toggle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Toggled": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Expanded": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Collapsed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Contents": 0, + "GodClassExcess:src/textual/widgets/_content_switcher.py::ContentSwitcher": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DuplicateKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::StringKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Column": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Row": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowRenderables": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable": 2097, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.HeaderSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowLabelSelected": 0, + "GodClassExcess:src/textual/widgets/_digits.py::Digits": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirEntry": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree": 53, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.FileSelected": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.DirectorySelected": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBinding": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBindingGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterProjection": 0, + "GodClassExcess:src/textual/widgets/_footer.py::KeyGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterKey": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterLabel": 0, + "GodClassExcess:src/textual/widgets/_footer.py::Footer": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderIcon": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClockSpace": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClock": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderTitle": 0, + "GodClassExcess:src/textual/widgets/_header.py::Header": 0, + "GodClassExcess:src/textual/widgets/_help_panel.py::HelpPanel": 0, + "GodClassExcess:src/textual/widgets/_input.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input": 563, + "GodClassExcess:src/textual/widgets/_input.py::Input.Changed": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Submitted": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Blurred": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::BindingsTable": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::KeyPanel": 0, + "GodClassExcess:src/textual/widgets/_label.py::Label": 0, + "GodClassExcess:src/textual/widgets/_link.py::Link": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem._ChildClicked": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Highlighted": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Selected": 0, + "GodClassExcess:src/textual/widgets/_loading_indicator.py::LoadingIndicator": 0, + "GodClassExcess:src/textual/widgets/_log.py::Log": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownStream": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownLocation": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Navigator": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlock": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHeader": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH1": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH2": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH3": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH4": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH5": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH6": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHorizontalRule": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownParagraph": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlockQuote": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBulletList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableCellContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableContent": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTable": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTBody": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTHead": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTR": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTH": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTD": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBullet": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownUnorderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownFence": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown": 70, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsUpdated": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsSelected": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.LinkClicked": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableOfContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer.NavigatorUpdated": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_CharFlags": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template.CharDefinition": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::MaskedInput": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionListError": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::DuplicateID": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::Option": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::_LineCache": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList": 432, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionMessage": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionSelected": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::InvalidPlaceholderVariant": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::Placeholder": 0, + "GodClassExcess:src/textual/widgets/_pretty.py::Pretty": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::Bar": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::PercentageStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ETAStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ProgressBar": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet.Changed": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::DeferredRender": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::RichLog": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidRuleOrientation": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidLineStyle": 0, + "GodClassExcess:src/textual/widgets/_rule.py::HorizontalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::VerticalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::Rule": 0, + "GodClassExcess:src/textual/widgets/_select.py::NonSelectableStatic": 0, + "GodClassExcess:src/textual/widgets/_select.py::NoSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::InvalidSelectValueError": 0, + "GodClassExcess:src/textual/widgets/_select.py::EmptySelectError": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.Dismiss": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.UpdateSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent.Toggle": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select.Changed": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionError": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList": 140, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionMessage": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionToggled": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectedChanged": 0, + "GodClassExcess:src/textual/widgets/_sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/widgets/_static.py::Static": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch.Changed": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTab": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTabs": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.TabPaneMessage": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Focused": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.Cleared": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Relabelled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs": 162, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabError": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabDisabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabEnabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabHidden": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabShown": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.Cleared": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::ThemeDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::LanguageDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaLanguage": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaState": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea": 2176, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.Changed": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.SelectionChanged": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastHolder": 0, + "GodClassExcess:src/textual/widgets/_toast.py::Toast": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastRack": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_tooltip.py::Tooltip": 0, + "GodClassExcess:src/textual/widgets/_tree.py::RemoveRootError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::UnknownNodeID": 0, + "GodClassExcess:src/textual/widgets/_tree.py::AddNodeError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::_TreeLine": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNodes": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNode": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree": 586, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeCollapsed": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeExpanded": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeHighlighted": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeSelected": 0, + "GodClassExcess:src/textual/widgets/_welcome.py::Welcome": 0, + "GodClassExcess:src/textual/worker.py::NoActiveWorker": 0, + "GodClassExcess:src/textual/worker.py::WorkerError": 0, + "GodClassExcess:src/textual/worker.py::WorkerFailed": 0, + "GodClassExcess:src/textual/worker.py::DeadlockError": 0, + "GodClassExcess:src/textual/worker.py::WorkerCancelled": 0, + "GodClassExcess:src/textual/worker.py::WorkerState": 0, + "GodClassExcess:src/textual/worker.py::_ReprText": 0, + "GodClassExcess:src/textual/worker.py::Worker": 0, + "GodClassExcess:src/textual/worker.py::Worker.StateChanged": 0, + "GodClassExcess:src/textual/worker_manager.py::WorkerManager": 0, + "TypeIdentity": 2, + "LongBooleanChain": 7, + "BooleanChainTerms:src/textual/_compositor.py": 4, + "BooleanChainTerms:src/textual/css/styles.py": 0, + "BooleanChainTerms:src/textual/dom.py": 0, + "BooleanChainTerms:src/textual/widget.py": 32, + "ForeignAbsenceProbe:src/textual/_compositor.py": 9, + "ForeignAbsenceProbe:src/textual/css/styles.py": 2, + "ForeignAbsenceProbe:src/textual/dom.py": 3, + "ForeignAbsenceProbe:src/textual/widget.py": 29, + "CodecSubclass:src/textual/_compositor.py": 0, + "CodecSubclass:src/textual/css/styles.py": 0, + "CodecSubclass:src/textual/dom.py": 0, + "CodecSubclass:src/textual/widget.py": 0, + "StringSubscript": 8 + }, + "head": { + "StringDispatch:src/textual/_compositor.py": 0, + "StringDispatch:src/textual/css/styles.py": 0, + "StringDispatch:src/textual/dom.py": 0, + "StringDispatch:src/textual/widget.py": 2, + "TypeSwitch:src/textual/_compositor.py": 0, + "TypeSwitch:src/textual/css/styles.py": 0, + "TypeSwitch:src/textual/dom.py": 0, + "TypeSwitch:src/textual/widget.py": 0, + "StringDispatchArms:src/textual/_compositor.py": 0, + "StringDispatchArms:src/textual/css/styles.py": 0, + "StringDispatchArms:src/textual/dom.py": 0, + "StringDispatchArms:src/textual/widget.py": 6, + "TypeSwitchArms:src/textual/_compositor.py": 0, + "TypeSwitchArms:src/textual/css/styles.py": 0, + "TypeSwitchArms:src/textual/dom.py": 0, + "TypeSwitchArms:src/textual/widget.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/_compositor.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/css/styles.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/dom.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/widget.py": 0, + "GodClassExcess:src/textual/__init__.py::LoggerError": 0, + "GodClassExcess:src/textual/__init__.py::Logger": 0, + "GodClassExcess:src/textual/_animator.py::AnimationError": 0, + "GodClassExcess:src/textual/_animator.py::Animatable": 0, + "GodClassExcess:src/textual/_animator.py::Animation": 0, + "GodClassExcess:src/textual/_animator.py::SimpleAnimation": 0, + "GodClassExcess:src/textual/_animator.py::BoundAnimator": 0, + "GodClassExcess:src/textual/_animator.py::Animator": 0, + "GodClassExcess:src/textual/_ansi_sequences.py::IgnoredSequence": 0, + "GodClassExcess:src/textual/_binary_encode.py::DecodeError": 0, + "GodClassExcess:src/textual/_compat.py::cached_property": 0, + "GodClassExcess:src/textual/_compositor.py::ReflowResult": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometryKey": 0, + "GodClassExcess:src/textual/_compositor.py::SceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::RootSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::NestedSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeMapGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::PlacedSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::IntrinsicSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::CompositorUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::LayoutUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::InlineUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::ChopsUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::Compositor": 754, + "GodClassExcess:src/textual/_context.py::NoActiveAppError": 0, + "GodClassExcess:src/textual/_duration.py::DurationError": 0, + "GodClassExcess:src/textual/_duration.py::DurationParseError": 0, + "GodClassExcess:src/textual/_event_broker.py::NoHandler": 0, + "GodClassExcess:src/textual/_event_broker.py::HandlerArguments": 0, + "GodClassExcess:src/textual/_extrema.py::Extrema": 0, + "GodClassExcess:src/textual/_immutable_sequence_view.py::ImmutableSequenceView": 0, + "GodClassExcess:src/textual/_import_app.py::AppFail": 0, + "GodClassExcess:src/textual/_layout_resolve.py::EdgeProtocol": 0, + "GodClassExcess:src/textual/_log.py::LogGroup": 0, + "GodClassExcess:src/textual/_log.py::LogVerbosity": 0, + "GodClassExcess:src/textual/_markup_playground.py::MarkupPlayground": 0, + "GodClassExcess:src/textual/_measurement.py::HeightDependency": 0, + "GodClassExcess:src/textual/_measurement.py::ContextHeight": 0, + "GodClassExcess:src/textual/_measurement.py::IndependentHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetMeasurementHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetWidth": 0, + "GodClassExcess:src/textual/_measurement.py::NativeLayoutHeight": 0, + "GodClassExcess:src/textual/_measurement.py::FlowHeight": 0, + "GodClassExcess:src/textual/_measurement.py::StreamHeight": 0, + "GodClassExcess:src/textual/_measurement.py::GridHeight": 0, + "GodClassExcess:src/textual/_node_list.py::DuplicateIds": 0, + "GodClassExcess:src/textual/_node_list.py::ReadOnlyError": 0, + "GodClassExcess:src/textual/_node_list.py::NodeList": 0, + "GodClassExcess:src/textual/_on.py::OnDecoratorError": 0, + "GodClassExcess:src/textual/_on.py::OnNoWidget": 0, + "GodClassExcess:src/textual/_paint_state.py::PaintState": 0, + "GodClassExcess:src/textual/_parser.py::ParseError": 0, + "GodClassExcess:src/textual/_parser.py::ParseEOF": 0, + "GodClassExcess:src/textual/_parser.py::ParseTimeout": 0, + "GodClassExcess:src/textual/_parser.py::Read1": 0, + "GodClassExcess:src/textual/_parser.py::Peek1": 0, + "GodClassExcess:src/textual/_parser.py::Parser": 0, + "GodClassExcess:src/textual/_path.py::CSSPathError": 0, + "GodClassExcess:src/textual/_queue.py::Queue": 0, + "GodClassExcess:src/textual/_segment_tools.py::NoCellPositionForIndex": 0, + "GodClassExcess:src/textual/_sleep.py::Sleeper": 0, + "GodClassExcess:src/textual/_slug.py::TrackedSlugs": 0, + "GodClassExcess:src/textual/_spatial_map.py::SpatialMap": 0, + "GodClassExcess:src/textual/_styles_cache.py::StylesCache": 0, + "GodClassExcess:src/textual/_text_area_theme.py::TextAreaTheme": 0, + "GodClassExcess:src/textual/_two_way_dict.py::TwoWayDict": 0, + "GodClassExcess:src/textual/_types.py::MessageTarget": 0, + "GodClassExcess:src/textual/_types.py::EventTarget": 0, + "GodClassExcess:src/textual/_types.py::UnusedParameter": 0, + "GodClassExcess:src/textual/_widget_navigation.py::Disableable": 0, + "GodClassExcess:src/textual/_work_decorator.py::WorkerDeclarationError": 0, + "GodClassExcess:src/textual/_xterm_parser.py::XTermParser": 0, + "GodClassExcess:src/textual/actions.py::SkipAction": 0, + "GodClassExcess:src/textual/actions.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::SystemCommand": 0, + "GodClassExcess:src/textual/app.py::AppError": 0, + "GodClassExcess:src/textual/app.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::ScreenError": 0, + "GodClassExcess:src/textual/app.py::ScreenStackError": 0, + "GodClassExcess:src/textual/app.py::ModeError": 0, + "GodClassExcess:src/textual/app.py::InvalidModeError": 0, + "GodClassExcess:src/textual/app.py::UnknownModeError": 0, + "GodClassExcess:src/textual/app.py::ActiveModeError": 0, + "GodClassExcess:src/textual/app.py::SuspendNotSupported": 0, + "GodClassExcess:src/textual/app.py::InvalidThemeError": 0, + "GodClassExcess:src/textual/app.py::_NullFile": 0, + "GodClassExcess:src/textual/app.py::_PrintCapture": 0, + "GodClassExcess:src/textual/app.py::App": 4290, + "GodClassExcess:src/textual/await_complete.py::AwaitComplete": 0, + "GodClassExcess:src/textual/await_remove.py::AwaitRemove": 0, + "GodClassExcess:src/textual/binding.py::BindingError": 0, + "GodClassExcess:src/textual/binding.py::NoBinding": 0, + "GodClassExcess:src/textual/binding.py::InvalidBinding": 0, + "GodClassExcess:src/textual/binding.py::Binding": 0, + "GodClassExcess:src/textual/binding.py::Binding.Group": 0, + "GodClassExcess:src/textual/binding.py::ActiveBinding": 0, + "GodClassExcess:src/textual/binding.py::BindingsMap": 0, + "GodClassExcess:src/textual/binding.py::KeymapApplyResult": 0, + "GodClassExcess:src/textual/box_model.py::BoxModel": 0, + "GodClassExcess:src/textual/cache.py::LRUCache": 0, + "GodClassExcess:src/textual/cache.py::FIFOCache": 0, + "GodClassExcess:src/textual/canvas.py::_Span": 0, + "GodClassExcess:src/textual/canvas.py::Primitive": 0, + "GodClassExcess:src/textual/canvas.py::HorizontalLine": 0, + "GodClassExcess:src/textual/canvas.py::VerticalLine": 0, + "GodClassExcess:src/textual/canvas.py::Rectangle": 0, + "GodClassExcess:src/textual/canvas.py::Canvas": 0, + "GodClassExcess:src/textual/clock.py::Clock": 0, + "GodClassExcess:src/textual/clock.py::MockClock": 0, + "GodClassExcess:src/textual/color.py::HSL": 0, + "GodClassExcess:src/textual/color.py::HSV": 0, + "GodClassExcess:src/textual/color.py::Lab": 0, + "GodClassExcess:src/textual/color.py::ColorParseError": 0, + "GodClassExcess:src/textual/color.py::Color": 39, + "GodClassExcess:src/textual/color.py::Gradient": 0, + "GodClassExcess:src/textual/command.py::Hit": 0, + "GodClassExcess:src/textual/command.py::DiscoveryHit": 0, + "GodClassExcess:src/textual/command.py::Provider": 0, + "GodClassExcess:src/textual/command.py::SimpleCommand": 0, + "GodClassExcess:src/textual/command.py::SimpleProvider": 0, + "GodClassExcess:src/textual/command.py::Command": 0, + "GodClassExcess:src/textual/command.py::CommandList": 0, + "GodClassExcess:src/textual/command.py::SearchIcon": 0, + "GodClassExcess:src/textual/command.py::CommandInput": 0, + "GodClassExcess:src/textual/command.py::CommandPalette": 255, + "GodClassExcess:src/textual/command.py::CommandPalette.OptionHighlighted": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Opened": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Closed": 0, + "GodClassExcess:src/textual/containers.py::Container": 0, + "GodClassExcess:src/textual/containers.py::ScrollableContainer": 0, + "GodClassExcess:src/textual/containers.py::Vertical": 0, + "GodClassExcess:src/textual/containers.py::VerticalGroup": 0, + "GodClassExcess:src/textual/containers.py::VerticalScroll": 0, + "GodClassExcess:src/textual/containers.py::Horizontal": 0, + "GodClassExcess:src/textual/containers.py::HorizontalGroup": 0, + "GodClassExcess:src/textual/containers.py::HorizontalScroll": 0, + "GodClassExcess:src/textual/containers.py::Center": 0, + "GodClassExcess:src/textual/containers.py::Right": 0, + "GodClassExcess:src/textual/containers.py::Middle": 0, + "GodClassExcess:src/textual/containers.py::CenterMiddle": 0, + "GodClassExcess:src/textual/containers.py::Grid": 0, + "GodClassExcess:src/textual/containers.py::ItemGrid": 0, + "GodClassExcess:src/textual/content.py::Span": 0, + "GodClassExcess:src/textual/content.py::Content": 1102, + "GodClassExcess:src/textual/content.py::_FormattedLine": 0, + "GodClassExcess:src/textual/coordinate.py::Coordinate": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Example": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Bullet": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::HelpText": 0, + "GodClassExcess:src/textual/css/_help_text.py::ContextSpecificBullets": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::GenericProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::IntegerProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BooleanProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BoxProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::Edges": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BorderProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::KeylineProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SpacingProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::DockProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SplitProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::LayoutProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OffsetProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StringEnumProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OverflowProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScrollbarColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleFlagsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::TransitionsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::FractionalProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::AlignProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::HatchProperty": 0, + "GodClassExcess:src/textual/css/_styles_builder.py::StylesBuilder": 729, + "GodClassExcess:src/textual/css/errors.py::DeclarationError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleTypeError": 0, + "GodClassExcess:src/textual/css/errors.py::UnresolvedVariableError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleValueError": 0, + "GodClassExcess:src/textual/css/errors.py::StylesheetError": 0, + "GodClassExcess:src/textual/css/model.py::SelectorType": 0, + "GodClassExcess:src/textual/css/model.py::CombinatorType": 0, + "GodClassExcess:src/textual/css/model.py::Selector": 0, + "GodClassExcess:src/textual/css/model.py::Declaration": 0, + "GodClassExcess:src/textual/css/model.py::SelectorSet": 0, + "GodClassExcess:src/textual/css/model.py::RuleSet": 0, + "GodClassExcess:src/textual/css/query.py::QueryError": 0, + "GodClassExcess:src/textual/css/query.py::InvalidQueryFormat": 0, + "GodClassExcess:src/textual/css/query.py::NoMatches": 0, + "GodClassExcess:src/textual/css/query.py::TooManyMatches": 0, + "GodClassExcess:src/textual/css/query.py::WrongType": 0, + "GodClassExcess:src/textual/css/query.py::DOMQuery": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarResolveError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarParseError": 0, + "GodClassExcess:src/textual/css/scalar.py::Unit": 0, + "GodClassExcess:src/textual/css/scalar.py::Scalar": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarOffset": 0, + "GodClassExcess:src/textual/css/scalar_animation.py::ScalarAnimation": 0, + "GodClassExcess:src/textual/css/styles.py::RulesMap": 0, + "GodClassExcess:src/textual/css/styles.py::StylesBase": 165, + "GodClassExcess:src/textual/css/styles.py::_StyleNodeReference": 0, + "GodClassExcess:src/textual/css/styles.py::Styles": 35, + "GodClassExcess:src/textual/css/styles.py::RenderStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::_ComponentStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetParseError": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetErrors": 0, + "GodClassExcess:src/textual/css/stylesheet.py::CssSource": 0, + "GodClassExcess:src/textual/css/stylesheet.py::Stylesheet": 374, + "GodClassExcess:src/textual/css/tokenize.py::TokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::TCSSTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::DeclarationTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::ValueTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::StyleTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenizer.py::TokenError": 0, + "GodClassExcess:src/textual/css/tokenizer.py::UnexpectedEnd": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Expect": 0, + "GodClassExcess:src/textual/css/tokenizer.py::ReferencedBy": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Token": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Tokenizer": 0, + "GodClassExcess:src/textual/css/transition.py::Transition": 0, + "GodClassExcess:src/textual/demo/_project_data.py::ProjectInfo": 0, + "GodClassExcess:src/textual/demo/demo_app.py::DemoApp": 0, + "GodClassExcess:src/textual/demo/game.py::NewGame": 0, + "GodClassExcess:src/textual/demo/game.py::Tile": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialog": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialogScreen": 0, + "GodClassExcess:src/textual/demo/game.py::Game": 0, + "GodClassExcess:src/textual/demo/game.py::GameInstructions": 0, + "GodClassExcess:src/textual/demo/game.py::GameScreen": 0, + "GodClassExcess:src/textual/demo/game.py::GameApp": 0, + "GodClassExcess:src/textual/demo/home.py::StarCount": 0, + "GodClassExcess:src/textual/demo/home.py::Content": 0, + "GodClassExcess:src/textual/demo/home.py::HomeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::CodeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::PageScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::Project": 0, + "GodClassExcess:src/textual/demo/projects.py::ProjectsScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::GameApp": 0, + "GodClassExcess:src/textual/demo/widgets.py::Buttons": 0, + "GodClassExcess:src/textual/demo/widgets.py::Checkboxes": 0, + "GodClassExcess:src/textual/demo/widgets.py::Datatables": 0, + "GodClassExcess:src/textual/demo/widgets.py::Inputs": 0, + "GodClassExcess:src/textual/demo/widgets.py::ListViews": 0, + "GodClassExcess:src/textual/demo/widgets.py::Logs": 0, + "GodClassExcess:src/textual/demo/widgets.py::Markdowns": 0, + "GodClassExcess:src/textual/demo/widgets.py::Selects": 0, + "GodClassExcess:src/textual/demo/widgets.py::Sparklines": 0, + "GodClassExcess:src/textual/demo/widgets.py::Switches": 0, + "GodClassExcess:src/textual/demo/widgets.py::TabsDemo": 0, + "GodClassExcess:src/textual/demo/widgets.py::Trees": 0, + "GodClassExcess:src/textual/demo/widgets.py::TextAreas": 0, + "GodClassExcess:src/textual/demo/widgets.py::YourWidgets": 0, + "GodClassExcess:src/textual/demo/widgets.py::WidgetsScreen": 0, + "GodClassExcess:src/textual/demo/widgets.py::GameApp": 0, + "GodClassExcess:src/textual/design.py::ColorSystem": 7, + "GodClassExcess:src/textual/document/_document.py::EditResult": 0, + "GodClassExcess:src/textual/document/_document.py::DocumentBase": 0, + "GodClassExcess:src/textual/document/_document.py::Document": 0, + "GodClassExcess:src/textual/document/_document.py::Selection": 0, + "GodClassExcess:src/textual/document/_document_navigator.py::DocumentNavigator": 0, + "GodClassExcess:src/textual/document/_edit.py::Edit": 0, + "GodClassExcess:src/textual/document/_history.py::HistoryException": 0, + "GodClassExcess:src/textual/document/_history.py::EditHistory": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocumentError": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocument": 0, + "GodClassExcess:src/textual/document/_wrapped_document.py::WrappedDocument": 0, + "GodClassExcess:src/textual/dom.py::BadIdentifier": 0, + "GodClassExcess:src/textual/dom.py::DOMError": 0, + "GodClassExcess:src/textual/dom.py::NoScreen": 0, + "GodClassExcess:src/textual/dom.py::_ClassesDescriptor": 0, + "GodClassExcess:src/textual/dom.py::DOMNode": 1414, + "GodClassExcess:src/textual/driver.py::Driver": 0, + "GodClassExcess:src/textual/driver.py::Driver.SignalResume": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseError": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseEOF": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::Awaitable": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read1": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStreamParser": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::BytePacket": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStream": 0, + "GodClassExcess:src/textual/drivers/_input_reader_linux.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_input_reader_windows.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::_FlushSignal": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::WriterThread": 0, + "GodClassExcess:src/textual/drivers/headless_driver.py::HeadlessDriver": 0, + "GodClassExcess:src/textual/drivers/linux_driver.py::LinuxDriver": 0, + "GodClassExcess:src/textual/drivers/linux_inline_driver.py::LinuxInlineDriver": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::_ExitInput": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::WebDriver": 0, + "GodClassExcess:src/textual/drivers/win32.py::COORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::uChar": 0, + "GodClassExcess:src/textual/drivers/win32.py::KEY_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MOUSE_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::WINDOW_BUFFER_SIZE_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MENU_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::FOCUS_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::InputEvent": 0, + "GodClassExcess:src/textual/drivers/win32.py::INPUT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::EventMonitor": 0, + "GodClassExcess:src/textual/drivers/windows_driver.py::WindowsDriver": 0, + "GodClassExcess:src/textual/errors.py::TextualError": 0, + "GodClassExcess:src/textual/errors.py::NoWidget": 0, + "GodClassExcess:src/textual/errors.py::RenderError": 0, + "GodClassExcess:src/textual/errors.py::DuplicateKeyHandlers": 0, + "GodClassExcess:src/textual/eta.py::ETA": 0, + "GodClassExcess:src/textual/events.py::Event": 0, + "GodClassExcess:src/textual/events.py::Callback": 0, + "GodClassExcess:src/textual/events.py::CursorPosition": 0, + "GodClassExcess:src/textual/events.py::Load": 0, + "GodClassExcess:src/textual/events.py::Idle": 0, + "GodClassExcess:src/textual/events.py::Action": 0, + "GodClassExcess:src/textual/events.py::Resize": 0, + "GodClassExcess:src/textual/events.py::Compose": 0, + "GodClassExcess:src/textual/events.py::Mount": 0, + "GodClassExcess:src/textual/events.py::Unmount": 0, + "GodClassExcess:src/textual/events.py::Show": 0, + "GodClassExcess:src/textual/events.py::Hide": 0, + "GodClassExcess:src/textual/events.py::Ready": 0, + "GodClassExcess:src/textual/events.py::MouseCapture": 0, + "GodClassExcess:src/textual/events.py::MouseRelease": 0, + "GodClassExcess:src/textual/events.py::InputEvent": 0, + "GodClassExcess:src/textual/events.py::Key": 0, + "GodClassExcess:src/textual/events.py::MouseEvent": 0, + "GodClassExcess:src/textual/events.py::MouseMove": 0, + "GodClassExcess:src/textual/events.py::MouseDown": 0, + "GodClassExcess:src/textual/events.py::MouseUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollDown": 0, + "GodClassExcess:src/textual/events.py::MouseScrollUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollRight": 0, + "GodClassExcess:src/textual/events.py::MouseScrollLeft": 0, + "GodClassExcess:src/textual/events.py::Click": 0, + "GodClassExcess:src/textual/events.py::Timer": 0, + "GodClassExcess:src/textual/events.py::Enter": 0, + "GodClassExcess:src/textual/events.py::Leave": 0, + "GodClassExcess:src/textual/events.py::Focus": 0, + "GodClassExcess:src/textual/events.py::Blur": 0, + "GodClassExcess:src/textual/events.py::AppFocus": 0, + "GodClassExcess:src/textual/events.py::AppBlur": 0, + "GodClassExcess:src/textual/events.py::DescendantFocus": 0, + "GodClassExcess:src/textual/events.py::DescendantBlur": 0, + "GodClassExcess:src/textual/events.py::Paste": 0, + "GodClassExcess:src/textual/events.py::ScreenResume": 0, + "GodClassExcess:src/textual/events.py::ScreenSuspend": 0, + "GodClassExcess:src/textual/events.py::Print": 0, + "GodClassExcess:src/textual/events.py::DeliveryComplete": 0, + "GodClassExcess:src/textual/events.py::DeliveryFailed": 0, + "GodClassExcess:src/textual/events.py::TextSelected": 0, + "GodClassExcess:src/textual/file_monitor.py::FileMonitor": 0, + "GodClassExcess:src/textual/filter.py::LineFilter": 0, + "GodClassExcess:src/textual/filter.py::Monochrome": 0, + "GodClassExcess:src/textual/filter.py::NoColor": 0, + "GodClassExcess:src/textual/filter.py::DimFilter": 0, + "GodClassExcess:src/textual/filter.py::ANSIToTruecolor": 0, + "GodClassExcess:src/textual/fuzzy.py::FuzzySearch": 0, + "GodClassExcess:src/textual/fuzzy.py::Matcher": 0, + "GodClassExcess:src/textual/geometry.py::Offset": 0, + "GodClassExcess:src/textual/geometry.py::Size": 0, + "GodClassExcess:src/textual/geometry.py::Region": 300, + "GodClassExcess:src/textual/geometry.py::Spacing": 0, + "GodClassExcess:src/textual/geometry.py::Shape": 0, + "GodClassExcess:src/textual/getters.py::app": 0, + "GodClassExcess:src/textual/getters.py::query_one": 0, + "GodClassExcess:src/textual/getters.py::child_by_id": 0, + "GodClassExcess:src/textual/highlight.py::HighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSIDarkHighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSILightHighlightTheme": 0, + "GodClassExcess:src/textual/keys.py::Keys": 0, + "GodClassExcess:src/textual/layout.py::DockArrangeResult": 0, + "GodClassExcess:src/textual/layout.py::WidgetPlacement": 0, + "GodClassExcess:src/textual/layout.py::Layout": 0, + "GodClassExcess:src/textual/layouts/factory.py::MissingLayout": 0, + "GodClassExcess:src/textual/layouts/grid.py::GridLayout": 0, + "GodClassExcess:src/textual/layouts/horizontal.py::HorizontalLayout": 0, + "GodClassExcess:src/textual/layouts/stream.py::StreamLayout": 0, + "GodClassExcess:src/textual/layouts/vertical.py::VerticalLayout": 0, + "GodClassExcess:src/textual/lazy.py::Lazy": 0, + "GodClassExcess:src/textual/lazy.py::Reveal": 0, + "GodClassExcess:src/textual/logging.py::TextualHandler": 0, + "GodClassExcess:src/textual/map_geometry.py::MapGeometry": 0, + "GodClassExcess:src/textual/markup.py::MarkupError": 0, + "GodClassExcess:src/textual/markup.py::MarkupTokenizer": 0, + "GodClassExcess:src/textual/markup.py::StyleTokenizer": 0, + "GodClassExcess:src/textual/message.py::Message": 0, + "GodClassExcess:src/textual/message_pump.py::CallbackError": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePumpClosed": 0, + "GodClassExcess:src/textual/message_pump.py::_MessagePumpMeta": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePump": 352, + "GodClassExcess:src/textual/messages.py::CloseMessages": 0, + "GodClassExcess:src/textual/messages.py::Prune": 0, + "GodClassExcess:src/textual/messages.py::ExitApp": 0, + "GodClassExcess:src/textual/messages.py::Update": 0, + "GodClassExcess:src/textual/messages.py::Layout": 0, + "GodClassExcess:src/textual/messages.py::UpdateScroll": 0, + "GodClassExcess:src/textual/messages.py::InvokeLater": 0, + "GodClassExcess:src/textual/messages.py::ScrollToRegion": 0, + "GodClassExcess:src/textual/messages.py::Prompt": 0, + "GodClassExcess:src/textual/messages.py::TerminalSupportsSynchronizedOutput": 0, + "GodClassExcess:src/textual/messages.py::InBandWindowResize": 0, + "GodClassExcess:src/textual/notifications.py::Notify": 0, + "GodClassExcess:src/textual/notifications.py::Notification": 0, + "GodClassExcess:src/textual/notifications.py::Notifications": 0, + "GodClassExcess:src/textual/pad.py::HorizontalPad": 0, + "GodClassExcess:src/textual/pilot.py::OutOfBounds": 0, + "GodClassExcess:src/textual/pilot.py::WaitForScreenTimeout": 0, + "GodClassExcess:src/textual/pilot.py::Pilot": 10, + "GodClassExcess:src/textual/reactive.py::_Mutated": 0, + "GodClassExcess:src/textual/reactive.py::ReactiveError": 0, + "GodClassExcess:src/textual/reactive.py::TooManyComputesError": 0, + "GodClassExcess:src/textual/reactive.py::Initialize": 0, + "GodClassExcess:src/textual/reactive.py::_StoredReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::_ComputedReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::Reactive": 0, + "GodClassExcess:src/textual/reactive.py::reactive": 0, + "GodClassExcess:src/textual/reactive.py::var": 0, + "GodClassExcess:src/textual/renderables/background_screen.py::BackgroundScreen": 0, + "GodClassExcess:src/textual/renderables/bar.py::Bar": 0, + "GodClassExcess:src/textual/renderables/blank.py::Blank": 0, + "GodClassExcess:src/textual/renderables/digits.py::Digits": 0, + "GodClassExcess:src/textual/renderables/gradient.py::VerticalGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::LinearGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::GradientApp": 0, + "GodClassExcess:src/textual/renderables/sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/renderables/styled.py::Styled": 0, + "GodClassExcess:src/textual/renderables/text_opacity.py::TextOpacity": 0, + "GodClassExcess:src/textual/renderables/tint.py::Tint": 0, + "GodClassExcess:src/textual/rlock.py::RLock": 0, + "GodClassExcess:src/textual/screen.py::HoverWidgets": 0, + "GodClassExcess:src/textual/screen.py::ResultCallback": 0, + "GodClassExcess:src/textual/screen.py::Screen": 1656, + "GodClassExcess:src/textual/screen.py::ModalScreen": 0, + "GodClassExcess:src/textual/screen.py::SystemModalScreen": 0, + "GodClassExcess:src/textual/scroll_view.py::ScrollView": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollMessage": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollUp": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollDown": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollLeft": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollRight": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollTo": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarRender": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBar": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarCorner": 0, + "GodClassExcess:src/textual/selection.py::Selection": 0, + "GodClassExcess:src/textual/selection.py::SelectStart": 0, + "GodClassExcess:src/textual/selection.py::SelectEnd": 0, + "GodClassExcess:src/textual/selection.py::SelectState": 0, + "GodClassExcess:src/textual/signal.py::SignalError": 0, + "GodClassExcess:src/textual/signal.py::Signal": 0, + "GodClassExcess:src/textual/strip.py::StripRenderable": 0, + "GodClassExcess:src/textual/strip.py::Strip": 277, + "GodClassExcess:src/textual/style.py::Style": 0, + "GodClassExcess:src/textual/suggester.py::SuggestionReady": 0, + "GodClassExcess:src/textual/suggester.py::Suggester": 0, + "GodClassExcess:src/textual/suggester.py::SuggestFromList": 0, + "GodClassExcess:src/textual/system_commands.py::SystemCommandsProvider": 0, + "GodClassExcess:src/textual/theme.py::Theme": 0, + "GodClassExcess:src/textual/theme.py::ThemeProvider": 0, + "GodClassExcess:src/textual/timer.py::EventTargetGone": 0, + "GodClassExcess:src/textual/timer.py::Timer": 0, + "GodClassExcess:src/textual/validation.py::ValidationResult": 0, + "GodClassExcess:src/textual/validation.py::Failure": 0, + "GodClassExcess:src/textual/validation.py::Validator": 0, + "GodClassExcess:src/textual/validation.py::Regex": 0, + "GodClassExcess:src/textual/validation.py::Regex.NoResults": 0, + "GodClassExcess:src/textual/validation.py::Number": 0, + "GodClassExcess:src/textual/validation.py::Number.NotANumber": 0, + "GodClassExcess:src/textual/validation.py::Number.NotInRange": 0, + "GodClassExcess:src/textual/validation.py::Integer": 0, + "GodClassExcess:src/textual/validation.py::Integer.NotAnInteger": 0, + "GodClassExcess:src/textual/validation.py::Length": 0, + "GodClassExcess:src/textual/validation.py::Length.Incorrect": 0, + "GodClassExcess:src/textual/validation.py::Function": 0, + "GodClassExcess:src/textual/validation.py::Function.ReturnedFalse": 0, + "GodClassExcess:src/textual/validation.py::URL": 0, + "GodClassExcess:src/textual/validation.py::URL.InvalidURL": 0, + "GodClassExcess:src/textual/visual.py::RenderOptions": 0, + "GodClassExcess:src/textual/visual.py::SupportsVisual": 0, + "GodClassExcess:src/textual/visual.py::VisualError": 0, + "GodClassExcess:src/textual/visual.py::Visual": 0, + "GodClassExcess:src/textual/visual.py::RichVisual": 0, + "GodClassExcess:src/textual/visual.py::Padding": 0, + "GodClassExcess:src/textual/widget.py::AwaitMount": 0, + "GodClassExcess:src/textual/widget.py::_Styled": 0, + "GodClassExcess:src/textual/widget.py::_RenderCache": 0, + "GodClassExcess:src/textual/widget.py::WidgetError": 0, + "GodClassExcess:src/textual/widget.py::MountError": 0, + "GodClassExcess:src/textual/widget.py::PseudoClasses": 0, + "GodClassExcess:src/textual/widget.py::_BorderTitle": 0, + "GodClassExcess:src/textual/widget.py::BadWidgetName": 0, + "GodClassExcess:src/textual/widget.py::Widget": 4436, + "GodClassExcess:src/textual/widgets/_button.py::InvalidButtonVariant": 0, + "GodClassExcess:src/textual/widgets/_button.py::Button": 20, + "GodClassExcess:src/textual/widgets/_button.py::Button.Pressed": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox.Changed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle.Toggle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Toggled": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Expanded": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Collapsed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Contents": 0, + "GodClassExcess:src/textual/widgets/_content_switcher.py::ContentSwitcher": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DuplicateKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::StringKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Column": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Row": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowRenderables": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable": 2097, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.HeaderSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowLabelSelected": 0, + "GodClassExcess:src/textual/widgets/_digits.py::Digits": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirEntry": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree": 53, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.FileSelected": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.DirectorySelected": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBinding": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBindingGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterProjection": 0, + "GodClassExcess:src/textual/widgets/_footer.py::KeyGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterKey": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterLabel": 0, + "GodClassExcess:src/textual/widgets/_footer.py::Footer": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderIcon": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClockSpace": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClock": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderTitle": 0, + "GodClassExcess:src/textual/widgets/_header.py::Header": 0, + "GodClassExcess:src/textual/widgets/_help_panel.py::HelpPanel": 0, + "GodClassExcess:src/textual/widgets/_input.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input": 563, + "GodClassExcess:src/textual/widgets/_input.py::Input.Changed": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Submitted": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Blurred": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::BindingsTable": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::KeyPanel": 0, + "GodClassExcess:src/textual/widgets/_label.py::Label": 0, + "GodClassExcess:src/textual/widgets/_link.py::Link": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem._ChildClicked": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Highlighted": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Selected": 0, + "GodClassExcess:src/textual/widgets/_loading_indicator.py::LoadingIndicator": 0, + "GodClassExcess:src/textual/widgets/_log.py::Log": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownStream": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownLocation": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Navigator": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlock": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHeader": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH1": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH2": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH3": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH4": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH5": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH6": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHorizontalRule": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownParagraph": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlockQuote": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBulletList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableCellContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableContent": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTable": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTBody": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTHead": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTR": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTH": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTD": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBullet": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownUnorderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownFence": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown": 70, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsUpdated": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsSelected": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.LinkClicked": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableOfContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer.NavigatorUpdated": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_CharFlags": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template.CharDefinition": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::MaskedInput": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionListError": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::DuplicateID": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::Option": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::_LineCache": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList": 432, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionMessage": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionSelected": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::InvalidPlaceholderVariant": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::Placeholder": 0, + "GodClassExcess:src/textual/widgets/_pretty.py::Pretty": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::Bar": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::PercentageStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ETAStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ProgressBar": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet.Changed": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::DeferredRender": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::RichLog": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidRuleOrientation": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidLineStyle": 0, + "GodClassExcess:src/textual/widgets/_rule.py::HorizontalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::VerticalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::Rule": 0, + "GodClassExcess:src/textual/widgets/_select.py::NonSelectableStatic": 0, + "GodClassExcess:src/textual/widgets/_select.py::NoSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::InvalidSelectValueError": 0, + "GodClassExcess:src/textual/widgets/_select.py::EmptySelectError": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.Dismiss": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.UpdateSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent.Toggle": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select.Changed": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionError": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList": 140, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionMessage": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionToggled": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectedChanged": 0, + "GodClassExcess:src/textual/widgets/_sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/widgets/_static.py::Static": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch.Changed": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTab": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTabs": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.TabPaneMessage": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Focused": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.Cleared": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Relabelled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs": 162, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabError": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabDisabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabEnabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabHidden": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabShown": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.Cleared": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::ThemeDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::LanguageDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaLanguage": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaState": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea": 2176, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.Changed": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.SelectionChanged": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastHolder": 0, + "GodClassExcess:src/textual/widgets/_toast.py::Toast": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastRack": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_tooltip.py::Tooltip": 0, + "GodClassExcess:src/textual/widgets/_tree.py::RemoveRootError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::UnknownNodeID": 0, + "GodClassExcess:src/textual/widgets/_tree.py::AddNodeError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::_TreeLine": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNodes": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNode": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree": 586, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeCollapsed": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeExpanded": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeHighlighted": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeSelected": 0, + "GodClassExcess:src/textual/widgets/_welcome.py::Welcome": 0, + "GodClassExcess:src/textual/worker.py::NoActiveWorker": 0, + "GodClassExcess:src/textual/worker.py::WorkerError": 0, + "GodClassExcess:src/textual/worker.py::WorkerFailed": 0, + "GodClassExcess:src/textual/worker.py::DeadlockError": 0, + "GodClassExcess:src/textual/worker.py::WorkerCancelled": 0, + "GodClassExcess:src/textual/worker.py::WorkerState": 0, + "GodClassExcess:src/textual/worker.py::_ReprText": 0, + "GodClassExcess:src/textual/worker.py::Worker": 0, + "GodClassExcess:src/textual/worker.py::Worker.StateChanged": 0, + "GodClassExcess:src/textual/worker_manager.py::WorkerManager": 0, + "TypeIdentity": 2, + "LongBooleanChain": 7, + "BooleanChainTerms:src/textual/_compositor.py": 4, + "BooleanChainTerms:src/textual/css/styles.py": 0, + "BooleanChainTerms:src/textual/dom.py": 0, + "BooleanChainTerms:src/textual/widget.py": 32, + "ForeignAbsenceProbe:src/textual/_compositor.py": 9, + "ForeignAbsenceProbe:src/textual/css/styles.py": 2, + "ForeignAbsenceProbe:src/textual/dom.py": 3, + "ForeignAbsenceProbe:src/textual/widget.py": 29, + "CodecSubclass:src/textual/_compositor.py": 0, + "CodecSubclass:src/textual/css/styles.py": 0, + "CodecSubclass:src/textual/dom.py": 0, + "CodecSubclass:src/textual/widget.py": 0, + "StringSubscript": 8 + }, + "delta": { + "StringDispatch:src/textual/_compositor.py": 0, + "StringDispatch:src/textual/css/styles.py": 0, + "StringDispatch:src/textual/dom.py": 0, + "StringDispatch:src/textual/widget.py": 0, + "TypeSwitch:src/textual/_compositor.py": 0, + "TypeSwitch:src/textual/css/styles.py": 0, + "TypeSwitch:src/textual/dom.py": 0, + "TypeSwitch:src/textual/widget.py": 0, + "StringDispatchArms:src/textual/_compositor.py": 0, + "StringDispatchArms:src/textual/css/styles.py": 0, + "StringDispatchArms:src/textual/dom.py": 0, + "StringDispatchArms:src/textual/widget.py": 0, + "TypeSwitchArms:src/textual/_compositor.py": 0, + "TypeSwitchArms:src/textual/css/styles.py": 0, + "TypeSwitchArms:src/textual/dom.py": 0, + "TypeSwitchArms:src/textual/widget.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/_compositor.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/css/styles.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/dom.py": 0, + "BuiltinHandlerTypeSwitch:src/textual/widget.py": 0, + "GodClassExcess:src/textual/__init__.py::LoggerError": 0, + "GodClassExcess:src/textual/__init__.py::Logger": 0, + "GodClassExcess:src/textual/_animator.py::AnimationError": 0, + "GodClassExcess:src/textual/_animator.py::Animatable": 0, + "GodClassExcess:src/textual/_animator.py::Animation": 0, + "GodClassExcess:src/textual/_animator.py::SimpleAnimation": 0, + "GodClassExcess:src/textual/_animator.py::BoundAnimator": 0, + "GodClassExcess:src/textual/_animator.py::Animator": 0, + "GodClassExcess:src/textual/_ansi_sequences.py::IgnoredSequence": 0, + "GodClassExcess:src/textual/_binary_encode.py::DecodeError": 0, + "GodClassExcess:src/textual/_compat.py::cached_property": 0, + "GodClassExcess:src/textual/_compositor.py::ReflowResult": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometryKey": 0, + "GodClassExcess:src/textual/_compositor.py::SceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::RootSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::NestedSceneClip": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeMapGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::SubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::PlacedSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::IntrinsicSubtreeGeometry": 0, + "GodClassExcess:src/textual/_compositor.py::CompositorUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::LayoutUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::InlineUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::ChopsUpdate": 0, + "GodClassExcess:src/textual/_compositor.py::Compositor": -2, + "GodClassExcess:src/textual/_context.py::NoActiveAppError": 0, + "GodClassExcess:src/textual/_duration.py::DurationError": 0, + "GodClassExcess:src/textual/_duration.py::DurationParseError": 0, + "GodClassExcess:src/textual/_event_broker.py::NoHandler": 0, + "GodClassExcess:src/textual/_event_broker.py::HandlerArguments": 0, + "GodClassExcess:src/textual/_extrema.py::Extrema": 0, + "GodClassExcess:src/textual/_immutable_sequence_view.py::ImmutableSequenceView": 0, + "GodClassExcess:src/textual/_import_app.py::AppFail": 0, + "GodClassExcess:src/textual/_layout_resolve.py::EdgeProtocol": 0, + "GodClassExcess:src/textual/_log.py::LogGroup": 0, + "GodClassExcess:src/textual/_log.py::LogVerbosity": 0, + "GodClassExcess:src/textual/_markup_playground.py::MarkupPlayground": 0, + "GodClassExcess:src/textual/_measurement.py::HeightDependency": 0, + "GodClassExcess:src/textual/_measurement.py::ContextHeight": 0, + "GodClassExcess:src/textual/_measurement.py::IndependentHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetMeasurementHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetHeight": 0, + "GodClassExcess:src/textual/_measurement.py::NativeWidgetWidth": 0, + "GodClassExcess:src/textual/_measurement.py::NativeLayoutHeight": 0, + "GodClassExcess:src/textual/_measurement.py::FlowHeight": 0, + "GodClassExcess:src/textual/_measurement.py::StreamHeight": 0, + "GodClassExcess:src/textual/_measurement.py::GridHeight": 0, + "GodClassExcess:src/textual/_node_list.py::DuplicateIds": 0, + "GodClassExcess:src/textual/_node_list.py::ReadOnlyError": 0, + "GodClassExcess:src/textual/_node_list.py::NodeList": 0, + "GodClassExcess:src/textual/_on.py::OnDecoratorError": 0, + "GodClassExcess:src/textual/_on.py::OnNoWidget": 0, + "GodClassExcess:src/textual/_paint_state.py::PaintState": 0, + "GodClassExcess:src/textual/_parser.py::ParseError": 0, + "GodClassExcess:src/textual/_parser.py::ParseEOF": 0, + "GodClassExcess:src/textual/_parser.py::ParseTimeout": 0, + "GodClassExcess:src/textual/_parser.py::Read1": 0, + "GodClassExcess:src/textual/_parser.py::Peek1": 0, + "GodClassExcess:src/textual/_parser.py::Parser": 0, + "GodClassExcess:src/textual/_path.py::CSSPathError": 0, + "GodClassExcess:src/textual/_queue.py::Queue": 0, + "GodClassExcess:src/textual/_segment_tools.py::NoCellPositionForIndex": 0, + "GodClassExcess:src/textual/_sleep.py::Sleeper": 0, + "GodClassExcess:src/textual/_slug.py::TrackedSlugs": 0, + "GodClassExcess:src/textual/_spatial_map.py::SpatialMap": 0, + "GodClassExcess:src/textual/_styles_cache.py::StylesCache": 0, + "GodClassExcess:src/textual/_text_area_theme.py::TextAreaTheme": 0, + "GodClassExcess:src/textual/_two_way_dict.py::TwoWayDict": 0, + "GodClassExcess:src/textual/_types.py::MessageTarget": 0, + "GodClassExcess:src/textual/_types.py::EventTarget": 0, + "GodClassExcess:src/textual/_types.py::UnusedParameter": 0, + "GodClassExcess:src/textual/_widget_navigation.py::Disableable": 0, + "GodClassExcess:src/textual/_work_decorator.py::WorkerDeclarationError": 0, + "GodClassExcess:src/textual/_xterm_parser.py::XTermParser": 0, + "GodClassExcess:src/textual/actions.py::SkipAction": 0, + "GodClassExcess:src/textual/actions.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::SystemCommand": 0, + "GodClassExcess:src/textual/app.py::AppError": 0, + "GodClassExcess:src/textual/app.py::ActionError": 0, + "GodClassExcess:src/textual/app.py::ScreenError": 0, + "GodClassExcess:src/textual/app.py::ScreenStackError": 0, + "GodClassExcess:src/textual/app.py::ModeError": 0, + "GodClassExcess:src/textual/app.py::InvalidModeError": 0, + "GodClassExcess:src/textual/app.py::UnknownModeError": 0, + "GodClassExcess:src/textual/app.py::ActiveModeError": 0, + "GodClassExcess:src/textual/app.py::SuspendNotSupported": 0, + "GodClassExcess:src/textual/app.py::InvalidThemeError": 0, + "GodClassExcess:src/textual/app.py::_NullFile": 0, + "GodClassExcess:src/textual/app.py::_PrintCapture": 0, + "GodClassExcess:src/textual/app.py::App": 0, + "GodClassExcess:src/textual/await_complete.py::AwaitComplete": 0, + "GodClassExcess:src/textual/await_remove.py::AwaitRemove": 0, + "GodClassExcess:src/textual/binding.py::BindingError": 0, + "GodClassExcess:src/textual/binding.py::NoBinding": 0, + "GodClassExcess:src/textual/binding.py::InvalidBinding": 0, + "GodClassExcess:src/textual/binding.py::Binding": 0, + "GodClassExcess:src/textual/binding.py::Binding.Group": 0, + "GodClassExcess:src/textual/binding.py::ActiveBinding": 0, + "GodClassExcess:src/textual/binding.py::BindingsMap": 0, + "GodClassExcess:src/textual/binding.py::KeymapApplyResult": 0, + "GodClassExcess:src/textual/box_model.py::BoxModel": 0, + "GodClassExcess:src/textual/cache.py::LRUCache": 0, + "GodClassExcess:src/textual/cache.py::FIFOCache": 0, + "GodClassExcess:src/textual/canvas.py::_Span": 0, + "GodClassExcess:src/textual/canvas.py::Primitive": 0, + "GodClassExcess:src/textual/canvas.py::HorizontalLine": 0, + "GodClassExcess:src/textual/canvas.py::VerticalLine": 0, + "GodClassExcess:src/textual/canvas.py::Rectangle": 0, + "GodClassExcess:src/textual/canvas.py::Canvas": 0, + "GodClassExcess:src/textual/clock.py::Clock": 0, + "GodClassExcess:src/textual/clock.py::MockClock": 0, + "GodClassExcess:src/textual/color.py::HSL": 0, + "GodClassExcess:src/textual/color.py::HSV": 0, + "GodClassExcess:src/textual/color.py::Lab": 0, + "GodClassExcess:src/textual/color.py::ColorParseError": 0, + "GodClassExcess:src/textual/color.py::Color": 0, + "GodClassExcess:src/textual/color.py::Gradient": 0, + "GodClassExcess:src/textual/command.py::Hit": 0, + "GodClassExcess:src/textual/command.py::DiscoveryHit": 0, + "GodClassExcess:src/textual/command.py::Provider": 0, + "GodClassExcess:src/textual/command.py::SimpleCommand": 0, + "GodClassExcess:src/textual/command.py::SimpleProvider": 0, + "GodClassExcess:src/textual/command.py::Command": 0, + "GodClassExcess:src/textual/command.py::CommandList": 0, + "GodClassExcess:src/textual/command.py::SearchIcon": 0, + "GodClassExcess:src/textual/command.py::CommandInput": 0, + "GodClassExcess:src/textual/command.py::CommandPalette": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.OptionHighlighted": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Opened": 0, + "GodClassExcess:src/textual/command.py::CommandPalette.Closed": 0, + "GodClassExcess:src/textual/containers.py::Container": 0, + "GodClassExcess:src/textual/containers.py::ScrollableContainer": 0, + "GodClassExcess:src/textual/containers.py::Vertical": 0, + "GodClassExcess:src/textual/containers.py::VerticalGroup": 0, + "GodClassExcess:src/textual/containers.py::VerticalScroll": 0, + "GodClassExcess:src/textual/containers.py::Horizontal": 0, + "GodClassExcess:src/textual/containers.py::HorizontalGroup": 0, + "GodClassExcess:src/textual/containers.py::HorizontalScroll": 0, + "GodClassExcess:src/textual/containers.py::Center": 0, + "GodClassExcess:src/textual/containers.py::Right": 0, + "GodClassExcess:src/textual/containers.py::Middle": 0, + "GodClassExcess:src/textual/containers.py::CenterMiddle": 0, + "GodClassExcess:src/textual/containers.py::Grid": 0, + "GodClassExcess:src/textual/containers.py::ItemGrid": 0, + "GodClassExcess:src/textual/content.py::Span": 0, + "GodClassExcess:src/textual/content.py::Content": 0, + "GodClassExcess:src/textual/content.py::_FormattedLine": 0, + "GodClassExcess:src/textual/coordinate.py::Coordinate": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Example": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::Bullet": 0, + "GodClassExcess:src/textual/css/_help_renderables.py::HelpText": 0, + "GodClassExcess:src/textual/css/_help_text.py::ContextSpecificBullets": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::GenericProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::IntegerProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BooleanProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScalarListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BoxProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::Edges": 0, + "GodClassExcess:src/textual/css/_style_properties.py::BorderProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::KeylineProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SpacingProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::DockProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::SplitProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::LayoutProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OffsetProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StringEnumProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::OverflowProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::NameListProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::ScrollbarColorProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::StyleFlagsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::TransitionsProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::FractionalProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::AlignProperty": 0, + "GodClassExcess:src/textual/css/_style_properties.py::HatchProperty": 0, + "GodClassExcess:src/textual/css/_styles_builder.py::StylesBuilder": 0, + "GodClassExcess:src/textual/css/errors.py::DeclarationError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleTypeError": 0, + "GodClassExcess:src/textual/css/errors.py::UnresolvedVariableError": 0, + "GodClassExcess:src/textual/css/errors.py::StyleValueError": 0, + "GodClassExcess:src/textual/css/errors.py::StylesheetError": 0, + "GodClassExcess:src/textual/css/model.py::SelectorType": 0, + "GodClassExcess:src/textual/css/model.py::CombinatorType": 0, + "GodClassExcess:src/textual/css/model.py::Selector": 0, + "GodClassExcess:src/textual/css/model.py::Declaration": 0, + "GodClassExcess:src/textual/css/model.py::SelectorSet": 0, + "GodClassExcess:src/textual/css/model.py::RuleSet": 0, + "GodClassExcess:src/textual/css/query.py::QueryError": 0, + "GodClassExcess:src/textual/css/query.py::InvalidQueryFormat": 0, + "GodClassExcess:src/textual/css/query.py::NoMatches": 0, + "GodClassExcess:src/textual/css/query.py::TooManyMatches": 0, + "GodClassExcess:src/textual/css/query.py::WrongType": 0, + "GodClassExcess:src/textual/css/query.py::DOMQuery": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarResolveError": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarParseError": 0, + "GodClassExcess:src/textual/css/scalar.py::Unit": 0, + "GodClassExcess:src/textual/css/scalar.py::Scalar": 0, + "GodClassExcess:src/textual/css/scalar.py::ScalarOffset": 0, + "GodClassExcess:src/textual/css/scalar_animation.py::ScalarAnimation": 0, + "GodClassExcess:src/textual/css/styles.py::RulesMap": 0, + "GodClassExcess:src/textual/css/styles.py::StylesBase": 0, + "GodClassExcess:src/textual/css/styles.py::_StyleNodeReference": 0, + "GodClassExcess:src/textual/css/styles.py::Styles": -6, + "GodClassExcess:src/textual/css/styles.py::RenderStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::_ComponentStyles": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetParseError": 0, + "GodClassExcess:src/textual/css/stylesheet.py::StylesheetErrors": 0, + "GodClassExcess:src/textual/css/stylesheet.py::CssSource": 0, + "GodClassExcess:src/textual/css/stylesheet.py::Stylesheet": 0, + "GodClassExcess:src/textual/css/tokenize.py::TokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::TCSSTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::DeclarationTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::ValueTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenize.py::StyleTokenizerState": 0, + "GodClassExcess:src/textual/css/tokenizer.py::TokenError": 0, + "GodClassExcess:src/textual/css/tokenizer.py::UnexpectedEnd": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Expect": 0, + "GodClassExcess:src/textual/css/tokenizer.py::ReferencedBy": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Token": 0, + "GodClassExcess:src/textual/css/tokenizer.py::Tokenizer": 0, + "GodClassExcess:src/textual/css/transition.py::Transition": 0, + "GodClassExcess:src/textual/demo/_project_data.py::ProjectInfo": 0, + "GodClassExcess:src/textual/demo/demo_app.py::DemoApp": 0, + "GodClassExcess:src/textual/demo/game.py::NewGame": 0, + "GodClassExcess:src/textual/demo/game.py::Tile": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialog": 0, + "GodClassExcess:src/textual/demo/game.py::GameDialogScreen": 0, + "GodClassExcess:src/textual/demo/game.py::Game": 0, + "GodClassExcess:src/textual/demo/game.py::GameInstructions": 0, + "GodClassExcess:src/textual/demo/game.py::GameScreen": 0, + "GodClassExcess:src/textual/demo/game.py::GameApp": 0, + "GodClassExcess:src/textual/demo/home.py::StarCount": 0, + "GodClassExcess:src/textual/demo/home.py::Content": 0, + "GodClassExcess:src/textual/demo/home.py::HomeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::CodeScreen": 0, + "GodClassExcess:src/textual/demo/page.py::PageScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::Project": 0, + "GodClassExcess:src/textual/demo/projects.py::ProjectsScreen": 0, + "GodClassExcess:src/textual/demo/projects.py::GameApp": 0, + "GodClassExcess:src/textual/demo/widgets.py::Buttons": 0, + "GodClassExcess:src/textual/demo/widgets.py::Checkboxes": 0, + "GodClassExcess:src/textual/demo/widgets.py::Datatables": 0, + "GodClassExcess:src/textual/demo/widgets.py::Inputs": 0, + "GodClassExcess:src/textual/demo/widgets.py::ListViews": 0, + "GodClassExcess:src/textual/demo/widgets.py::Logs": 0, + "GodClassExcess:src/textual/demo/widgets.py::Markdowns": 0, + "GodClassExcess:src/textual/demo/widgets.py::Selects": 0, + "GodClassExcess:src/textual/demo/widgets.py::Sparklines": 0, + "GodClassExcess:src/textual/demo/widgets.py::Switches": 0, + "GodClassExcess:src/textual/demo/widgets.py::TabsDemo": 0, + "GodClassExcess:src/textual/demo/widgets.py::Trees": 0, + "GodClassExcess:src/textual/demo/widgets.py::TextAreas": 0, + "GodClassExcess:src/textual/demo/widgets.py::YourWidgets": 0, + "GodClassExcess:src/textual/demo/widgets.py::WidgetsScreen": 0, + "GodClassExcess:src/textual/demo/widgets.py::GameApp": 0, + "GodClassExcess:src/textual/design.py::ColorSystem": 0, + "GodClassExcess:src/textual/document/_document.py::EditResult": 0, + "GodClassExcess:src/textual/document/_document.py::DocumentBase": 0, + "GodClassExcess:src/textual/document/_document.py::Document": 0, + "GodClassExcess:src/textual/document/_document.py::Selection": 0, + "GodClassExcess:src/textual/document/_document_navigator.py::DocumentNavigator": 0, + "GodClassExcess:src/textual/document/_edit.py::Edit": 0, + "GodClassExcess:src/textual/document/_history.py::HistoryException": 0, + "GodClassExcess:src/textual/document/_history.py::EditHistory": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocumentError": 0, + "GodClassExcess:src/textual/document/_syntax_aware_document.py::SyntaxAwareDocument": 0, + "GodClassExcess:src/textual/document/_wrapped_document.py::WrappedDocument": 0, + "GodClassExcess:src/textual/dom.py::BadIdentifier": 0, + "GodClassExcess:src/textual/dom.py::DOMError": 0, + "GodClassExcess:src/textual/dom.py::NoScreen": 0, + "GodClassExcess:src/textual/dom.py::_ClassesDescriptor": 0, + "GodClassExcess:src/textual/dom.py::DOMNode": -2, + "GodClassExcess:src/textual/driver.py::Driver": 0, + "GodClassExcess:src/textual/driver.py::Driver.SignalResume": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseError": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ParseEOF": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::Awaitable": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::_Read1": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStreamParser": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::BytePacket": 0, + "GodClassExcess:src/textual/drivers/_byte_stream.py::ByteStream": 0, + "GodClassExcess:src/textual/drivers/_input_reader_linux.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_input_reader_windows.py::InputReader": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::_FlushSignal": 0, + "GodClassExcess:src/textual/drivers/_writer_thread.py::WriterThread": 0, + "GodClassExcess:src/textual/drivers/headless_driver.py::HeadlessDriver": 0, + "GodClassExcess:src/textual/drivers/linux_driver.py::LinuxDriver": 0, + "GodClassExcess:src/textual/drivers/linux_inline_driver.py::LinuxInlineDriver": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::_ExitInput": 0, + "GodClassExcess:src/textual/drivers/web_driver.py::WebDriver": 0, + "GodClassExcess:src/textual/drivers/win32.py::COORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::uChar": 0, + "GodClassExcess:src/textual/drivers/win32.py::KEY_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MOUSE_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::WINDOW_BUFFER_SIZE_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::MENU_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::FOCUS_EVENT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::InputEvent": 0, + "GodClassExcess:src/textual/drivers/win32.py::INPUT_RECORD": 0, + "GodClassExcess:src/textual/drivers/win32.py::EventMonitor": 0, + "GodClassExcess:src/textual/drivers/windows_driver.py::WindowsDriver": 0, + "GodClassExcess:src/textual/errors.py::TextualError": 0, + "GodClassExcess:src/textual/errors.py::NoWidget": 0, + "GodClassExcess:src/textual/errors.py::RenderError": 0, + "GodClassExcess:src/textual/errors.py::DuplicateKeyHandlers": 0, + "GodClassExcess:src/textual/eta.py::ETA": 0, + "GodClassExcess:src/textual/events.py::Event": 0, + "GodClassExcess:src/textual/events.py::Callback": 0, + "GodClassExcess:src/textual/events.py::CursorPosition": 0, + "GodClassExcess:src/textual/events.py::Load": 0, + "GodClassExcess:src/textual/events.py::Idle": 0, + "GodClassExcess:src/textual/events.py::Action": 0, + "GodClassExcess:src/textual/events.py::Resize": 0, + "GodClassExcess:src/textual/events.py::Compose": 0, + "GodClassExcess:src/textual/events.py::Mount": 0, + "GodClassExcess:src/textual/events.py::Unmount": 0, + "GodClassExcess:src/textual/events.py::Show": 0, + "GodClassExcess:src/textual/events.py::Hide": 0, + "GodClassExcess:src/textual/events.py::Ready": 0, + "GodClassExcess:src/textual/events.py::MouseCapture": 0, + "GodClassExcess:src/textual/events.py::MouseRelease": 0, + "GodClassExcess:src/textual/events.py::InputEvent": 0, + "GodClassExcess:src/textual/events.py::Key": 0, + "GodClassExcess:src/textual/events.py::MouseEvent": 0, + "GodClassExcess:src/textual/events.py::MouseMove": 0, + "GodClassExcess:src/textual/events.py::MouseDown": 0, + "GodClassExcess:src/textual/events.py::MouseUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollDown": 0, + "GodClassExcess:src/textual/events.py::MouseScrollUp": 0, + "GodClassExcess:src/textual/events.py::MouseScrollRight": 0, + "GodClassExcess:src/textual/events.py::MouseScrollLeft": 0, + "GodClassExcess:src/textual/events.py::Click": 0, + "GodClassExcess:src/textual/events.py::Timer": 0, + "GodClassExcess:src/textual/events.py::Enter": 0, + "GodClassExcess:src/textual/events.py::Leave": 0, + "GodClassExcess:src/textual/events.py::Focus": 0, + "GodClassExcess:src/textual/events.py::Blur": 0, + "GodClassExcess:src/textual/events.py::AppFocus": 0, + "GodClassExcess:src/textual/events.py::AppBlur": 0, + "GodClassExcess:src/textual/events.py::DescendantFocus": 0, + "GodClassExcess:src/textual/events.py::DescendantBlur": 0, + "GodClassExcess:src/textual/events.py::Paste": 0, + "GodClassExcess:src/textual/events.py::ScreenResume": 0, + "GodClassExcess:src/textual/events.py::ScreenSuspend": 0, + "GodClassExcess:src/textual/events.py::Print": 0, + "GodClassExcess:src/textual/events.py::DeliveryComplete": 0, + "GodClassExcess:src/textual/events.py::DeliveryFailed": 0, + "GodClassExcess:src/textual/events.py::TextSelected": 0, + "GodClassExcess:src/textual/file_monitor.py::FileMonitor": 0, + "GodClassExcess:src/textual/filter.py::LineFilter": 0, + "GodClassExcess:src/textual/filter.py::Monochrome": 0, + "GodClassExcess:src/textual/filter.py::NoColor": 0, + "GodClassExcess:src/textual/filter.py::DimFilter": 0, + "GodClassExcess:src/textual/filter.py::ANSIToTruecolor": 0, + "GodClassExcess:src/textual/fuzzy.py::FuzzySearch": 0, + "GodClassExcess:src/textual/fuzzy.py::Matcher": 0, + "GodClassExcess:src/textual/geometry.py::Offset": 0, + "GodClassExcess:src/textual/geometry.py::Size": 0, + "GodClassExcess:src/textual/geometry.py::Region": 0, + "GodClassExcess:src/textual/geometry.py::Spacing": 0, + "GodClassExcess:src/textual/geometry.py::Shape": 0, + "GodClassExcess:src/textual/getters.py::app": 0, + "GodClassExcess:src/textual/getters.py::query_one": 0, + "GodClassExcess:src/textual/getters.py::child_by_id": 0, + "GodClassExcess:src/textual/highlight.py::HighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSIDarkHighlightTheme": 0, + "GodClassExcess:src/textual/highlight.py::ANSILightHighlightTheme": 0, + "GodClassExcess:src/textual/keys.py::Keys": 0, + "GodClassExcess:src/textual/layout.py::DockArrangeResult": 0, + "GodClassExcess:src/textual/layout.py::WidgetPlacement": 0, + "GodClassExcess:src/textual/layout.py::Layout": 0, + "GodClassExcess:src/textual/layouts/factory.py::MissingLayout": 0, + "GodClassExcess:src/textual/layouts/grid.py::GridLayout": 0, + "GodClassExcess:src/textual/layouts/horizontal.py::HorizontalLayout": 0, + "GodClassExcess:src/textual/layouts/stream.py::StreamLayout": 0, + "GodClassExcess:src/textual/layouts/vertical.py::VerticalLayout": 0, + "GodClassExcess:src/textual/lazy.py::Lazy": 0, + "GodClassExcess:src/textual/lazy.py::Reveal": 0, + "GodClassExcess:src/textual/logging.py::TextualHandler": 0, + "GodClassExcess:src/textual/map_geometry.py::MapGeometry": 0, + "GodClassExcess:src/textual/markup.py::MarkupError": 0, + "GodClassExcess:src/textual/markup.py::MarkupTokenizer": 0, + "GodClassExcess:src/textual/markup.py::StyleTokenizer": 0, + "GodClassExcess:src/textual/message.py::Message": 0, + "GodClassExcess:src/textual/message_pump.py::CallbackError": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePumpClosed": 0, + "GodClassExcess:src/textual/message_pump.py::_MessagePumpMeta": 0, + "GodClassExcess:src/textual/message_pump.py::MessagePump": 0, + "GodClassExcess:src/textual/messages.py::CloseMessages": 0, + "GodClassExcess:src/textual/messages.py::Prune": 0, + "GodClassExcess:src/textual/messages.py::ExitApp": 0, + "GodClassExcess:src/textual/messages.py::Update": 0, + "GodClassExcess:src/textual/messages.py::Layout": 0, + "GodClassExcess:src/textual/messages.py::UpdateScroll": 0, + "GodClassExcess:src/textual/messages.py::InvokeLater": 0, + "GodClassExcess:src/textual/messages.py::ScrollToRegion": 0, + "GodClassExcess:src/textual/messages.py::Prompt": 0, + "GodClassExcess:src/textual/messages.py::TerminalSupportsSynchronizedOutput": 0, + "GodClassExcess:src/textual/messages.py::InBandWindowResize": 0, + "GodClassExcess:src/textual/notifications.py::Notify": 0, + "GodClassExcess:src/textual/notifications.py::Notification": 0, + "GodClassExcess:src/textual/notifications.py::Notifications": 0, + "GodClassExcess:src/textual/pad.py::HorizontalPad": 0, + "GodClassExcess:src/textual/pilot.py::OutOfBounds": 0, + "GodClassExcess:src/textual/pilot.py::WaitForScreenTimeout": 0, + "GodClassExcess:src/textual/pilot.py::Pilot": 0, + "GodClassExcess:src/textual/reactive.py::_Mutated": 0, + "GodClassExcess:src/textual/reactive.py::ReactiveError": 0, + "GodClassExcess:src/textual/reactive.py::TooManyComputesError": 0, + "GodClassExcess:src/textual/reactive.py::Initialize": 0, + "GodClassExcess:src/textual/reactive.py::_StoredReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::_ComputedReactiveAccess": 0, + "GodClassExcess:src/textual/reactive.py::Reactive": 0, + "GodClassExcess:src/textual/reactive.py::reactive": 0, + "GodClassExcess:src/textual/reactive.py::var": 0, + "GodClassExcess:src/textual/renderables/background_screen.py::BackgroundScreen": 0, + "GodClassExcess:src/textual/renderables/bar.py::Bar": 0, + "GodClassExcess:src/textual/renderables/blank.py::Blank": 0, + "GodClassExcess:src/textual/renderables/digits.py::Digits": 0, + "GodClassExcess:src/textual/renderables/gradient.py::VerticalGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::LinearGradient": 0, + "GodClassExcess:src/textual/renderables/gradient.py::GradientApp": 0, + "GodClassExcess:src/textual/renderables/sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/renderables/styled.py::Styled": 0, + "GodClassExcess:src/textual/renderables/text_opacity.py::TextOpacity": 0, + "GodClassExcess:src/textual/renderables/tint.py::Tint": 0, + "GodClassExcess:src/textual/rlock.py::RLock": 0, + "GodClassExcess:src/textual/screen.py::HoverWidgets": 0, + "GodClassExcess:src/textual/screen.py::ResultCallback": 0, + "GodClassExcess:src/textual/screen.py::Screen": 0, + "GodClassExcess:src/textual/screen.py::ModalScreen": 0, + "GodClassExcess:src/textual/screen.py::SystemModalScreen": 0, + "GodClassExcess:src/textual/scroll_view.py::ScrollView": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollMessage": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollUp": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollDown": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollLeft": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollRight": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollTo": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarRender": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBar": 0, + "GodClassExcess:src/textual/scrollbar.py::ScrollBarCorner": 0, + "GodClassExcess:src/textual/selection.py::Selection": 0, + "GodClassExcess:src/textual/selection.py::SelectStart": 0, + "GodClassExcess:src/textual/selection.py::SelectEnd": 0, + "GodClassExcess:src/textual/selection.py::SelectState": 0, + "GodClassExcess:src/textual/signal.py::SignalError": 0, + "GodClassExcess:src/textual/signal.py::Signal": 0, + "GodClassExcess:src/textual/strip.py::StripRenderable": 0, + "GodClassExcess:src/textual/strip.py::Strip": 0, + "GodClassExcess:src/textual/style.py::Style": 0, + "GodClassExcess:src/textual/suggester.py::SuggestionReady": 0, + "GodClassExcess:src/textual/suggester.py::Suggester": 0, + "GodClassExcess:src/textual/suggester.py::SuggestFromList": 0, + "GodClassExcess:src/textual/system_commands.py::SystemCommandsProvider": 0, + "GodClassExcess:src/textual/theme.py::Theme": 0, + "GodClassExcess:src/textual/theme.py::ThemeProvider": 0, + "GodClassExcess:src/textual/timer.py::EventTargetGone": 0, + "GodClassExcess:src/textual/timer.py::Timer": 0, + "GodClassExcess:src/textual/validation.py::ValidationResult": 0, + "GodClassExcess:src/textual/validation.py::Failure": 0, + "GodClassExcess:src/textual/validation.py::Validator": 0, + "GodClassExcess:src/textual/validation.py::Regex": 0, + "GodClassExcess:src/textual/validation.py::Regex.NoResults": 0, + "GodClassExcess:src/textual/validation.py::Number": 0, + "GodClassExcess:src/textual/validation.py::Number.NotANumber": 0, + "GodClassExcess:src/textual/validation.py::Number.NotInRange": 0, + "GodClassExcess:src/textual/validation.py::Integer": 0, + "GodClassExcess:src/textual/validation.py::Integer.NotAnInteger": 0, + "GodClassExcess:src/textual/validation.py::Length": 0, + "GodClassExcess:src/textual/validation.py::Length.Incorrect": 0, + "GodClassExcess:src/textual/validation.py::Function": 0, + "GodClassExcess:src/textual/validation.py::Function.ReturnedFalse": 0, + "GodClassExcess:src/textual/validation.py::URL": 0, + "GodClassExcess:src/textual/validation.py::URL.InvalidURL": 0, + "GodClassExcess:src/textual/visual.py::RenderOptions": 0, + "GodClassExcess:src/textual/visual.py::SupportsVisual": 0, + "GodClassExcess:src/textual/visual.py::VisualError": 0, + "GodClassExcess:src/textual/visual.py::Visual": 0, + "GodClassExcess:src/textual/visual.py::RichVisual": 0, + "GodClassExcess:src/textual/visual.py::Padding": 0, + "GodClassExcess:src/textual/widget.py::AwaitMount": 0, + "GodClassExcess:src/textual/widget.py::_Styled": 0, + "GodClassExcess:src/textual/widget.py::_RenderCache": 0, + "GodClassExcess:src/textual/widget.py::WidgetError": 0, + "GodClassExcess:src/textual/widget.py::MountError": 0, + "GodClassExcess:src/textual/widget.py::PseudoClasses": 0, + "GodClassExcess:src/textual/widget.py::_BorderTitle": 0, + "GodClassExcess:src/textual/widget.py::BadWidgetName": 0, + "GodClassExcess:src/textual/widget.py::Widget": 0, + "GodClassExcess:src/textual/widgets/_button.py::InvalidButtonVariant": 0, + "GodClassExcess:src/textual/widgets/_button.py::Button": 0, + "GodClassExcess:src/textual/widgets/_button.py::Button.Pressed": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox": 0, + "GodClassExcess:src/textual/widgets/_checkbox.py::Checkbox.Changed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::CollapsibleTitle.Toggle": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Toggled": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Expanded": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Collapsed": 0, + "GodClassExcess:src/textual/widgets/_collapsible.py::Collapsible.Contents": 0, + "GodClassExcess:src/textual/widgets/_content_switcher.py::ContentSwitcher": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DuplicateKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::StringKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::ColumnKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::CellKey": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Column": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::Row": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::RowRenderables": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.CellSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnHighlighted": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.ColumnSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.HeaderSelected": 0, + "GodClassExcess:src/textual/widgets/_data_table.py::DataTable.RowLabelSelected": 0, + "GodClassExcess:src/textual/widgets/_digits.py::Digits": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirEntry": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.FileSelected": 0, + "GodClassExcess:src/textual/widgets/_directory_tree.py::DirectoryTree.DirectorySelected": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBinding": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterBindingGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterProjection": 0, + "GodClassExcess:src/textual/widgets/_footer.py::KeyGroup": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterKey": 0, + "GodClassExcess:src/textual/widgets/_footer.py::FooterLabel": 0, + "GodClassExcess:src/textual/widgets/_footer.py::Footer": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderIcon": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClockSpace": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderClock": 0, + "GodClassExcess:src/textual/widgets/_header.py::HeaderTitle": 0, + "GodClassExcess:src/textual/widgets/_header.py::Header": 0, + "GodClassExcess:src/textual/widgets/_help_panel.py::HelpPanel": 0, + "GodClassExcess:src/textual/widgets/_input.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Changed": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Submitted": 0, + "GodClassExcess:src/textual/widgets/_input.py::Input.Blurred": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::BindingsTable": 0, + "GodClassExcess:src/textual/widgets/_key_panel.py::KeyPanel": 0, + "GodClassExcess:src/textual/widgets/_label.py::Label": 0, + "GodClassExcess:src/textual/widgets/_link.py::Link": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem": 0, + "GodClassExcess:src/textual/widgets/_list_item.py::ListItem._ChildClicked": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Highlighted": 0, + "GodClassExcess:src/textual/widgets/_list_view.py::ListView.Selected": 0, + "GodClassExcess:src/textual/widgets/_loading_indicator.py::LoadingIndicator": 0, + "GodClassExcess:src/textual/widgets/_log.py::Log": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownStream": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownLocation": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Navigator": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlock": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHeader": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH1": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH2": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH3": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH4": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH5": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownH6": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownHorizontalRule": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownParagraph": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBlockQuote": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBulletList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedList": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableCellContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableContent": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTable": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTBody": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTHead": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTR": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTH": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTD": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownBullet": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownOrderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownUnorderedListItem": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownFence": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsUpdated": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.TableOfContentsSelected": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::Markdown.LinkClicked": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownTableOfContents": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer": 0, + "GodClassExcess:src/textual/widgets/_markdown.py::MarkdownViewer.NavigatorUpdated": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_CharFlags": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::_Template.CharDefinition": 0, + "GodClassExcess:src/textual/widgets/_masked_input.py::MaskedInput": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionListError": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::DuplicateID": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::Option": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::_LineCache": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionMessage": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_option_list.py::OptionList.OptionSelected": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::InvalidPlaceholderVariant": 0, + "GodClassExcess:src/textual/widgets/_placeholder.py::Placeholder": 0, + "GodClassExcess:src/textual/widgets/_pretty.py::Pretty": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::Bar": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::PercentageStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ETAStatus": 0, + "GodClassExcess:src/textual/widgets/_progress_bar.py::ProgressBar": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton": 0, + "GodClassExcess:src/textual/widgets/_radio_button.py::RadioButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet": 0, + "GodClassExcess:src/textual/widgets/_radio_set.py::RadioSet.Changed": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::DeferredRender": 0, + "GodClassExcess:src/textual/widgets/_rich_log.py::RichLog": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidRuleOrientation": 0, + "GodClassExcess:src/textual/widgets/_rule.py::InvalidLineStyle": 0, + "GodClassExcess:src/textual/widgets/_rule.py::HorizontalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::VerticalRuleRenderable": 0, + "GodClassExcess:src/textual/widgets/_rule.py::Rule": 0, + "GodClassExcess:src/textual/widgets/_select.py::NonSelectableStatic": 0, + "GodClassExcess:src/textual/widgets/_select.py::NoSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::InvalidSelectValueError": 0, + "GodClassExcess:src/textual/widgets/_select.py::EmptySelectError": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.Dismiss": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectOverlay.UpdateSelection": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent": 0, + "GodClassExcess:src/textual/widgets/_select.py::SelectCurrent.Toggle": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select": 0, + "GodClassExcess:src/textual/widgets/_select.py::Select.Changed": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionError": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::Selection": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionMessage": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionHighlighted": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectionToggled": 0, + "GodClassExcess:src/textual/widgets/_selection_list.py::SelectionList.SelectedChanged": 0, + "GodClassExcess:src/textual/widgets/_sparkline.py::Sparkline": 0, + "GodClassExcess:src/textual/widgets/_static.py::Static": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch": 0, + "GodClassExcess:src/textual/widgets/_switch.py::Switch.Changed": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTab": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::ContentTabs": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.TabPaneMessage": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabPane.Focused": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabbed_content.py::TabbedContent.Cleared": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Underline.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Clicked": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Disabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Enabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tab.Relabelled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabError": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabMessage": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabActivated": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabDisabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabEnabled": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabHidden": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.TabShown": 0, + "GodClassExcess:src/textual/widgets/_tabs.py::Tabs.Cleared": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::ThemeDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::LanguageDoesNotExist": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaLanguage": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextAreaState": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.Changed": 0, + "GodClassExcess:src/textual/widgets/_text_area.py::TextArea.SelectionChanged": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastHolder": 0, + "GodClassExcess:src/textual/widgets/_toast.py::Toast": 0, + "GodClassExcess:src/textual/widgets/_toast.py::ToastRack": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton": 0, + "GodClassExcess:src/textual/widgets/_toggle_button.py::ToggleButton.Changed": 0, + "GodClassExcess:src/textual/widgets/_tooltip.py::Tooltip": 0, + "GodClassExcess:src/textual/widgets/_tree.py::RemoveRootError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::UnknownNodeID": 0, + "GodClassExcess:src/textual/widgets/_tree.py::AddNodeError": 0, + "GodClassExcess:src/textual/widgets/_tree.py::_TreeLine": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNodes": 0, + "GodClassExcess:src/textual/widgets/_tree.py::TreeNode": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeCollapsed": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeExpanded": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeHighlighted": 0, + "GodClassExcess:src/textual/widgets/_tree.py::Tree.NodeSelected": 0, + "GodClassExcess:src/textual/widgets/_welcome.py::Welcome": 0, + "GodClassExcess:src/textual/worker.py::NoActiveWorker": 0, + "GodClassExcess:src/textual/worker.py::WorkerError": 0, + "GodClassExcess:src/textual/worker.py::WorkerFailed": 0, + "GodClassExcess:src/textual/worker.py::DeadlockError": 0, + "GodClassExcess:src/textual/worker.py::WorkerCancelled": 0, + "GodClassExcess:src/textual/worker.py::WorkerState": 0, + "GodClassExcess:src/textual/worker.py::_ReprText": 0, + "GodClassExcess:src/textual/worker.py::Worker": 0, + "GodClassExcess:src/textual/worker.py::Worker.StateChanged": 0, + "GodClassExcess:src/textual/worker_manager.py::WorkerManager": 0, + "TypeIdentity": 0, + "LongBooleanChain": 0, + "BooleanChainTerms:src/textual/_compositor.py": 0, + "BooleanChainTerms:src/textual/css/styles.py": 0, + "BooleanChainTerms:src/textual/dom.py": 0, + "BooleanChainTerms:src/textual/widget.py": 0, + "ForeignAbsenceProbe:src/textual/_compositor.py": 0, + "ForeignAbsenceProbe:src/textual/css/styles.py": 0, + "ForeignAbsenceProbe:src/textual/dom.py": 0, + "ForeignAbsenceProbe:src/textual/widget.py": 0, + "CodecSubclass:src/textual/_compositor.py": 0, + "CodecSubclass:src/textual/css/styles.py": 0, + "CodecSubclass:src/textual/dom.py": 0, + "CodecSubclass:src/textual/widget.py": 0, + "StringSubscript": 0 + } +} diff --git a/evidence/native-style-cohort-lifetime-20261004/native-sanity.log b/evidence/native-style-cohort-lifetime-20261004/native-sanity.log new file mode 100644 index 0000000000..f262274843 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/native-sanity.log @@ -0,0 +1,3 @@ +........................................................................ [ 62%] +............................................ [100%] +116 passed in 2.42s diff --git a/evidence/native-style-cohort-lifetime-20261004/ordered-cohort-sanity.log b/evidence/native-style-cohort-lifetime-20261004/ordered-cohort-sanity.log new file mode 100644 index 0000000000..c4563d131a --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/ordered-cohort-sanity.log @@ -0,0 +1,2 @@ +....................................................... [100%] +55 passed in 1.54s diff --git a/evidence/native-style-cohort-lifetime-20261004/ordered-owner-after.json b/evidence/native-style-cohort-lifetime-20261004/ordered-owner-after.json new file mode 100644 index 0000000000..0a8e51d477 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/ordered-owner-after.json @@ -0,0 +1,982 @@ +{ + "repo": "/home/ts/wt/textual-native-subtree-strips-20261002", + "head": "871b791de0bbea39210d75148e7c7bceba14068b", + "root": "src/textual", + "modules": 249, + "unparsed": [], + "sites": [ + { + "path": "src/textual/app.py", + "line": 1069, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/app.py", + "line": 3802, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/app.py", + "line": 2664, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2872, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2954, + "kind": "call", + "source": "mode_screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3825, + "kind": "call", + "source": "self.screen.refresh(repaint=repaint, layout=layout)" + }, + { + "path": "src/textual/app.py", + "line": 4808, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/app.py", + "line": 1105, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3153, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 3439, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 4447, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 154, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 260, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 307, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 657, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 688, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 741, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 890, + "kind": "call", + "source": "obj.refresh(layout=self._layout, children=self._refresh_children, parent=self._refresh_parent)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1217, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 150, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 224, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 288, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 363, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 493, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 496, + "kind": "call", + "source": "obj.refresh(layout=layout)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 569, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 572, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 610, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 626, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 724, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 787, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 942, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 947, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 963, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1015, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1055, + "kind": "call", + "source": "widget.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1057, + "kind": "call", + "source": "widget.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1097, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1204, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1259, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 387, + "kind": "call", + "source": "obj.refresh(layout=self.affects_geometry(current_value, new_value))" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 790, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 813, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 968, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1018, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1100, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1124, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 971, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1041, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/query.py", + "line": 417, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/css/query.py", + "line": 439, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/query.py", + "line": 428, + "kind": "call", + "source": "node.set_styles(**update_styles)" + }, + { + "path": "src/textual/css/query.py", + "line": 453, + "kind": "call", + "source": "node.refresh(repaint=repaint, layout=layout, recompose=recompose)" + }, + { + "path": "src/textual/css/query.py", + "line": 436, + "kind": "call", + "source": "node.refresh(layout=True)" + }, + { + "path": "src/textual/css/styles.py", + "line": 725, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 742, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 935, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 956, + "kind": "declaration", + "source": "_update_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 1024, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1044, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1057, + "kind": "declaration", + "source": "_refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1566, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1578, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1004, + "kind": "call", + "source": "self._update_rules((), (rule_name,))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1021, + "kind": "call", + "source": "self._update_rules(((rule, value),))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1055, + "kind": "call", + "source": "self._refresh([(layout, children, parent, repaint)])" + }, + { + "path": "src/textual/css/styles.py", + "line": 1064, + "kind": "call", + "source": "node.refresh(layout=any((layout for layout, _, _, _ in requests)), repaint=any((repaint for _, _, _, repaint in requests)))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1078, + "kind": "call", + "source": "self._update_rules((), self._rules)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1089, + "kind": "call", + "source": "self._update_rules(rules.items())" + }, + { + "path": "src/textual/css/styles.py", + "line": 1574, + "kind": "call", + "source": "self._inline_styles.refresh(layout=layout, children=children, parent=parent, repaint=repaint)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1579, + "kind": "call", + "source": "self._inline_styles.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 941, + "kind": "call", + "source": "prepared.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 950, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 951, + "kind": "call", + "source": "self._update_rules(new_rules.items(), old_rules.keys() - new_rules.keys())" + }, + { + "path": "src/textual/css/styles.py", + "line": 990, + "kind": "call", + "source": "node._style_rules_updated(Styles._revision, geometry)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1063, + "kind": "call", + "source": "node._parent.refresh(repaint=any(parent_requests))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1042, + "kind": "call", + "source": "self._refresh(requests)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1074, + "kind": "call", + "source": "child.refresh(layout=child_layout, repaint=child_repaint)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 817, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 608, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 832, + "kind": "call", + "source": "base_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 753, + "kind": "call", + "source": "self.replace_rules(node, node_rules, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 813, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 892, + "kind": "call", + "source": "base_styles.replace_rules(immediate_rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 894, + "kind": "call", + "source": "base_styles.replace_rules(rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1023, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 656, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 677, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1025, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 161, + "kind": "declaration", + "source": "_update_inherited_geometry" + }, + { + "path": "src/textual/dom.py", + "line": 172, + "kind": "declaration", + "source": "_style_rules_updated" + }, + { + "path": "src/textual/dom.py", + "line": 1813, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/dom.py", + "line": 2012, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/dom.py", + "line": 179, + "kind": "call", + "source": "self._update_inherited_geometry(geometry)" + }, + { + "path": "src/textual/dom.py", + "line": 531, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 635, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 1045, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1830, + "kind": "call", + "source": "self._inline_styles.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1833, + "kind": "call", + "source": "self._inline_styles.replace_rules(self._inline_styles.get_rules(), **update_styles)" + }, + { + "path": "src/textual/dom.py", + "line": 169, + "kind": "call", + "source": "child._update_inherited_geometry(False)" + }, + { + "path": "src/textual/reactive.py", + "line": 432, + "kind": "call", + "source": "obj.refresh(repaint=self._repaint, layout=request_layout, recompose=self._recompose)" + }, + { + "path": "src/textual/screen.py", + "line": 1545, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/screen.py", + "line": 1238, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/screen.py", + "line": 1254, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 174, + "kind": "call", + "source": "self.refresh(Region(0, y - self.scroll_offset.y, max(self.virtual_size.width, self.size.width), 1))" + }, + { + "path": "src/textual/scroll_view.py", + "line": 196, + "kind": "call", + "source": "self.refresh(refresh_region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 50, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 56, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/widget.py", + "line": 4585, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widget.py", + "line": 287, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 859, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1829, + "kind": "call", + "source": "previous.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1830, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4499, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4890, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5069, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5075, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 883, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1763, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4441, + "kind": "call", + "source": "self.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4445, + "kind": "call", + "source": "self.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4691, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widget.py", + "line": 179, + "kind": "call", + "source": "self._parent.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 74, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 94, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 127, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 913, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1131, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1604, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1830, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1868, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1951, + "kind": "call", + "source": "self.refresh(region)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 2631, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_digits.py", + "line": 75, + "kind": "call", + "source": "self.refresh(layout=layout_required)" + }, + { + "path": "src/textual/widgets/_directory_tree.py", + "line": 229, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_footer.py", + "line": 424, + "kind": "call", + "source": "key.refresh(layout=changed_size)" + }, + { + "path": "src/textual/widgets/_input.py", + "line": 550, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 279, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 248, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1537, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1460, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_masked_input.py", + "line": 524, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 338, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 498, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 706, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 709, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 410, + "kind": "call", + "source": "self.refresh(layout=self.styles.auto_dimensions)" + }, + { + "path": "src/textual/widgets/_placeholder.py", + "line": 186, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_pretty.py", + "line": 56, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 298, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 266, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 319, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 433, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 351, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 392, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 77, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 110, + "kind": "call", + "source": "self.refresh(layout=layout)" + }, + { + "path": "src/textual/widgets/_toggle_button.py", + "line": 192, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 510, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 944, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1079, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1219, + "kind": "call", + "source": "self.refresh(region)" + } + ], + "limits": "Lexical callsites, not proof of arbitrary plugin dynamic dispatch. Original descriptor MRO and all compiled/keyword consumers read." +} diff --git a/evidence/native-style-cohort-lifetime-20261004/owner-after.json b/evidence/native-style-cohort-lifetime-20261004/owner-after.json new file mode 100644 index 0000000000..1b90b6e282 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/owner-after.json @@ -0,0 +1,982 @@ +{ + "repo": "/home/ts/wt/textual-native-subtree-strips-20261002", + "head": "f30daa40c3f4a681193a7df558e69b26971de140", + "root": "src/textual", + "modules": 249, + "unparsed": [], + "sites": [ + { + "path": "src/textual/app.py", + "line": 1069, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/app.py", + "line": 3802, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/app.py", + "line": 2664, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2872, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2954, + "kind": "call", + "source": "mode_screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3825, + "kind": "call", + "source": "self.screen.refresh(repaint=repaint, layout=layout)" + }, + { + "path": "src/textual/app.py", + "line": 4808, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/app.py", + "line": 1105, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3153, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 3439, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 4447, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 154, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 260, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 307, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 657, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 688, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 741, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 890, + "kind": "call", + "source": "obj.refresh(layout=self._layout, children=self._refresh_children, parent=self._refresh_parent)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1217, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 150, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 224, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 288, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 363, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 493, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 496, + "kind": "call", + "source": "obj.refresh(layout=layout)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 569, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 572, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 610, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 626, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 724, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 787, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 942, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 947, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 963, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1015, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1055, + "kind": "call", + "source": "widget.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1057, + "kind": "call", + "source": "widget.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1097, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1204, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1259, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 387, + "kind": "call", + "source": "obj.refresh(layout=self.affects_geometry(current_value, new_value))" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 790, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 813, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 968, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1018, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1100, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1124, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 971, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1041, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/query.py", + "line": 417, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/css/query.py", + "line": 439, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/query.py", + "line": 428, + "kind": "call", + "source": "node.set_styles(**update_styles)" + }, + { + "path": "src/textual/css/query.py", + "line": 453, + "kind": "call", + "source": "node.refresh(repaint=repaint, layout=layout, recompose=recompose)" + }, + { + "path": "src/textual/css/query.py", + "line": 436, + "kind": "call", + "source": "node.refresh(layout=True)" + }, + { + "path": "src/textual/css/styles.py", + "line": 724, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 741, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 934, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 961, + "kind": "declaration", + "source": "_update_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 1029, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1049, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1062, + "kind": "declaration", + "source": "_refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1571, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1583, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1009, + "kind": "call", + "source": "self._update_rules((), (rule_name,))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1026, + "kind": "call", + "source": "self._update_rules(((rule, value),))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1060, + "kind": "call", + "source": "self._refresh([(layout, children, parent, repaint)])" + }, + { + "path": "src/textual/css/styles.py", + "line": 1069, + "kind": "call", + "source": "node.refresh(layout=any((layout for layout, _, _, _ in requests)), repaint=any((repaint for _, _, _, repaint in requests)))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1083, + "kind": "call", + "source": "self._update_rules((), self._rules)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1094, + "kind": "call", + "source": "self._update_rules(rules.items())" + }, + { + "path": "src/textual/css/styles.py", + "line": 1579, + "kind": "call", + "source": "self._inline_styles.refresh(layout=layout, children=children, parent=parent, repaint=repaint)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1584, + "kind": "call", + "source": "self._inline_styles.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 944, + "kind": "call", + "source": "prepared.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 955, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 956, + "kind": "call", + "source": "self._update_rules(new_rules.items(), old_rules.keys() - new_rules.keys())" + }, + { + "path": "src/textual/css/styles.py", + "line": 995, + "kind": "call", + "source": "node._style_rules_updated(Styles._revision, geometry)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1068, + "kind": "call", + "source": "node._parent.refresh(repaint=any(parent_requests))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1047, + "kind": "call", + "source": "self._refresh(requests)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1079, + "kind": "call", + "source": "child.refresh(layout=child_layout, repaint=child_repaint)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 817, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 608, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 832, + "kind": "call", + "source": "base_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 753, + "kind": "call", + "source": "self.replace_rules(node, node_rules, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 813, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 892, + "kind": "call", + "source": "base_styles.replace_rules(immediate_rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 894, + "kind": "call", + "source": "base_styles.replace_rules(rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1023, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 656, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 677, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1025, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 161, + "kind": "declaration", + "source": "_update_inherited_geometry" + }, + { + "path": "src/textual/dom.py", + "line": 172, + "kind": "declaration", + "source": "_style_rules_updated" + }, + { + "path": "src/textual/dom.py", + "line": 1813, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/dom.py", + "line": 2012, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/dom.py", + "line": 179, + "kind": "call", + "source": "self._update_inherited_geometry(geometry)" + }, + { + "path": "src/textual/dom.py", + "line": 531, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 635, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 1045, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1830, + "kind": "call", + "source": "self._inline_styles.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1833, + "kind": "call", + "source": "self._inline_styles.replace_rules(self._inline_styles.get_rules() | update_styles)" + }, + { + "path": "src/textual/dom.py", + "line": 169, + "kind": "call", + "source": "child._update_inherited_geometry(False)" + }, + { + "path": "src/textual/reactive.py", + "line": 432, + "kind": "call", + "source": "obj.refresh(repaint=self._repaint, layout=request_layout, recompose=self._recompose)" + }, + { + "path": "src/textual/screen.py", + "line": 1545, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/screen.py", + "line": 1238, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/screen.py", + "line": 1254, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 174, + "kind": "call", + "source": "self.refresh(Region(0, y - self.scroll_offset.y, max(self.virtual_size.width, self.size.width), 1))" + }, + { + "path": "src/textual/scroll_view.py", + "line": 196, + "kind": "call", + "source": "self.refresh(refresh_region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 50, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 56, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/widget.py", + "line": 4585, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widget.py", + "line": 287, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 859, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1829, + "kind": "call", + "source": "previous.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1830, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4499, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4890, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5069, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5075, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 883, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1763, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4441, + "kind": "call", + "source": "self.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4445, + "kind": "call", + "source": "self.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4691, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widget.py", + "line": 179, + "kind": "call", + "source": "self._parent.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 74, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 94, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 127, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 913, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1131, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1604, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1830, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1868, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1951, + "kind": "call", + "source": "self.refresh(region)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 2631, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_digits.py", + "line": 75, + "kind": "call", + "source": "self.refresh(layout=layout_required)" + }, + { + "path": "src/textual/widgets/_directory_tree.py", + "line": 229, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_footer.py", + "line": 424, + "kind": "call", + "source": "key.refresh(layout=changed_size)" + }, + { + "path": "src/textual/widgets/_input.py", + "line": 550, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 279, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 248, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1537, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1460, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_masked_input.py", + "line": 524, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 338, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 498, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 706, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 709, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 410, + "kind": "call", + "source": "self.refresh(layout=self.styles.auto_dimensions)" + }, + { + "path": "src/textual/widgets/_placeholder.py", + "line": 186, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_pretty.py", + "line": 56, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 298, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 266, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 319, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 433, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 351, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 392, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 77, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 110, + "kind": "call", + "source": "self.refresh(layout=layout)" + }, + { + "path": "src/textual/widgets/_toggle_button.py", + "line": 192, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 510, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 944, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1079, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1219, + "kind": "call", + "source": "self.refresh(region)" + } + ], + "limits": "AST lexical sites; Widget/Styles refresh targets read semantically; arbitrary dynamic plugin overrides not proved." +} diff --git a/evidence/native-style-cohort-lifetime-20261004/owner-before.json b/evidence/native-style-cohort-lifetime-20261004/owner-before.json new file mode 100644 index 0000000000..aa3dd44ee0 --- /dev/null +++ b/evidence/native-style-cohort-lifetime-20261004/owner-before.json @@ -0,0 +1,1361 @@ +{ + "packages": [ + { + "repo": "/home/ts/wt/textual-native-subtree-strips-20261002", + "head": "2e8ce3336b7b2ff83eb98cc545c08265b2a70856", + "root": "src/textual", + "modules": 249, + "unparsed": [], + "sites": [ + { + "path": "src/textual/app.py", + "line": 1069, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/app.py", + "line": 3802, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/app.py", + "line": 2664, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2872, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 2954, + "kind": "call", + "source": "mode_screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3825, + "kind": "call", + "source": "self.screen.refresh(repaint=repaint, layout=layout)" + }, + { + "path": "src/textual/app.py", + "line": 4808, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/app.py", + "line": 1105, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/textual/app.py", + "line": 3153, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 3439, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/app.py", + "line": 4447, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 154, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 260, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 307, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 657, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 688, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 741, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 890, + "kind": "call", + "source": "obj.refresh(layout=self._layout, children=self._refresh_children, parent=self._refresh_parent)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1217, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 150, + "kind": "call", + "source": "obj.refresh(layout=self.layout, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 224, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 288, + "kind": "call", + "source": "obj.refresh(layout=True, children=self.refresh_children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 363, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 493, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 496, + "kind": "call", + "source": "obj.refresh(layout=layout)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 569, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 572, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 610, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 626, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 724, + "kind": "call", + "source": "obj.refresh(layout=True, children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 787, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 942, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 947, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 963, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1015, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1055, + "kind": "call", + "source": "widget.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1057, + "kind": "call", + "source": "widget.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1097, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1204, + "kind": "call", + "source": "obj.refresh(children=self.children)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1259, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 387, + "kind": "call", + "source": "obj.refresh(layout=self.affects_geometry(current_value, new_value))" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 790, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 813, + "kind": "call", + "source": "obj.refresh(layout=True, repaint=False)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 968, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1018, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1100, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1124, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 971, + "kind": "call", + "source": "obj.refresh(layout=True)" + }, + { + "path": "src/textual/css/_style_properties.py", + "line": 1041, + "kind": "call", + "source": "obj.refresh(children=True)" + }, + { + "path": "src/textual/css/query.py", + "line": 417, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/css/query.py", + "line": 439, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/query.py", + "line": 428, + "kind": "call", + "source": "node.set_styles(**update_styles)" + }, + { + "path": "src/textual/css/query.py", + "line": 453, + "kind": "call", + "source": "node.refresh(repaint=repaint, layout=layout, recompose=recompose)" + }, + { + "path": "src/textual/css/query.py", + "line": 436, + "kind": "call", + "source": "node.refresh(layout=True)" + }, + { + "path": "src/textual/css/styles.py", + "line": 724, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 741, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 934, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 961, + "kind": "declaration", + "source": "_update_rules" + }, + { + "path": "src/textual/css/styles.py", + "line": 1029, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1049, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1062, + "kind": "declaration", + "source": "_refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1571, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/css/styles.py", + "line": 1583, + "kind": "declaration", + "source": "batch_update" + }, + { + "path": "src/textual/css/styles.py", + "line": 1009, + "kind": "call", + "source": "self._update_rules((), (rule_name,))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1026, + "kind": "call", + "source": "self._update_rules(((rule, value),))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1072, + "kind": "call", + "source": "node.refresh(layout=any((layout for layout, _, _, _ in requests)))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1083, + "kind": "call", + "source": "self._update_rules((), self._rules)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1094, + "kind": "call", + "source": "self._update_rules(rules.items())" + }, + { + "path": "src/textual/css/styles.py", + "line": 1579, + "kind": "call", + "source": "self._inline_styles.refresh(layout=layout, children=children, parent=parent, repaint=repaint)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1584, + "kind": "call", + "source": "self._inline_styles.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 944, + "kind": "call", + "source": "prepared.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 955, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/textual/css/styles.py", + "line": 956, + "kind": "call", + "source": "self._update_rules(new_rules.items(), old_rules.keys() - new_rules.keys())" + }, + { + "path": "src/textual/css/styles.py", + "line": 995, + "kind": "call", + "source": "node._style_rules_updated(Styles._revision, geometry)" + }, + { + "path": "src/textual/css/styles.py", + "line": 1071, + "kind": "call", + "source": "node._parent.refresh(repaint=any(parent_requests))" + }, + { + "path": "src/textual/css/styles.py", + "line": 1079, + "kind": "call", + "source": "child.refresh(layout=child_layout, repaint=child_repaint)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 817, + "kind": "declaration", + "source": "replace_rules" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 608, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 832, + "kind": "call", + "source": "base_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 753, + "kind": "call", + "source": "self.replace_rules(node, node_rules, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 813, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 892, + "kind": "call", + "source": "base_styles.replace_rules(immediate_rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 894, + "kind": "call", + "source": "base_styles.replace_rules(rules)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1023, + "kind": "call", + "source": "node._css_styles.batch_update()" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 656, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 677, + "kind": "call", + "source": "self.replace_rules(node, cached_result, animate=animate)" + }, + { + "path": "src/textual/css/stylesheet.py", + "line": 1025, + "kind": "call", + "source": "node._css_styles.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 161, + "kind": "declaration", + "source": "_update_inherited_geometry" + }, + { + "path": "src/textual/dom.py", + "line": 172, + "kind": "declaration", + "source": "_style_rules_updated" + }, + { + "path": "src/textual/dom.py", + "line": 1813, + "kind": "declaration", + "source": "set_styles" + }, + { + "path": "src/textual/dom.py", + "line": 2014, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/dom.py", + "line": 179, + "kind": "call", + "source": "self._update_inherited_geometry(geometry)" + }, + { + "path": "src/textual/dom.py", + "line": 531, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 635, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/dom.py", + "line": 1045, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1830, + "kind": "call", + "source": "self._inline_styles.refresh(layout=True)" + }, + { + "path": "src/textual/dom.py", + "line": 1833, + "kind": "call", + "source": "styles.batch_update()" + }, + { + "path": "src/textual/dom.py", + "line": 169, + "kind": "call", + "source": "child._update_inherited_geometry(False)" + }, + { + "path": "src/textual/reactive.py", + "line": 432, + "kind": "call", + "source": "obj.refresh(repaint=self._repaint, layout=request_layout, recompose=self._recompose)" + }, + { + "path": "src/textual/screen.py", + "line": 1545, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/screen.py", + "line": 1238, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/screen.py", + "line": 1254, + "kind": "call", + "source": "app.screen.refresh(*self._compositor._dirty_regions)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 174, + "kind": "call", + "source": "self.refresh(Region(0, y - self.scroll_offset.y, max(self.virtual_size.width, self.size.width), 1))" + }, + { + "path": "src/textual/scroll_view.py", + "line": 196, + "kind": "call", + "source": "self.refresh(refresh_region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 50, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/scroll_view.py", + "line": 56, + "kind": "call", + "source": "self.refresh(self.size.region)" + }, + { + "path": "src/textual/widget.py", + "line": 4585, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widget.py", + "line": 287, + "kind": "call", + "source": "obj.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 859, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1829, + "kind": "call", + "source": "previous.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1830, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4499, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4890, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5069, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 5075, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 883, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 1763, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widget.py", + "line": 4441, + "kind": "call", + "source": "self.vertical_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4445, + "kind": "call", + "source": "self.horizontal_scrollbar.refresh()" + }, + { + "path": "src/textual/widget.py", + "line": 4691, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widget.py", + "line": 179, + "kind": "call", + "source": "self._parent.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 74, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 94, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_content_switcher.py", + "line": 127, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 913, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1131, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1604, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1830, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1868, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 1951, + "kind": "call", + "source": "self.refresh(region)" + }, + { + "path": "src/textual/widgets/_data_table.py", + "line": 2631, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_digits.py", + "line": 75, + "kind": "call", + "source": "self.refresh(layout=layout_required)" + }, + { + "path": "src/textual/widgets/_directory_tree.py", + "line": 229, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_footer.py", + "line": 424, + "kind": "call", + "source": "key.refresh(layout=changed_size)" + }, + { + "path": "src/textual/widgets/_input.py", + "line": 550, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 279, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_log.py", + "line": 248, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1537, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_markdown.py", + "line": 1460, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/textual/widgets/_masked_input.py", + "line": 524, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 338, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 498, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 706, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 709, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_option_list.py", + "line": 410, + "kind": "call", + "source": "self.refresh(layout=self.styles.auto_dimensions)" + }, + { + "path": "src/textual/widgets/_placeholder.py", + "line": 186, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_pretty.py", + "line": 56, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 298, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_rich_log.py", + "line": 266, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 319, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 433, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 351, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_selection_list.py", + "line": 392, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 77, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_static.py", + "line": 110, + "kind": "call", + "source": "self.refresh(layout=layout)" + }, + { + "path": "src/textual/widgets/_toggle_button.py", + "line": 192, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 510, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 944, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1079, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/textual/widgets/_tree.py", + "line": 1219, + "kind": "call", + "source": "self.refresh(region)" + } + ] + }, + { + "repo": "/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001", + "head": "4153f19702035e5454aee531620e0d82cf97d66f", + "root": "src/toad", + "modules": 288, + "unparsed": [], + "sites": [ + { + "path": "src/toad/app.py", + "line": 504, + "kind": "call", + "source": "self.screen.refresh()" + }, + { + "path": "src/toad/app.py", + "line": 488, + "kind": "call", + "source": "self.batch_update()" + }, + { + "path": "src/toad/comms_root.py", + "line": 130, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/toad/comms_root.py", + "line": 109, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/frame_presentation.py", + "line": 81, + "kind": "call", + "source": "frame.screen.refresh()" + }, + { + "path": "src/toad/goal_interaction.py", + "line": 164, + "kind": "call", + "source": "view.goal_observation.refresh()" + }, + { + "path": "src/toad/goal_interaction.py", + "line": 202, + "kind": "call", + "source": "self.view.goal_observation.refresh()" + }, + { + "path": "src/toad/mounted_message_history.py", + "line": 172, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/toad/screens/comms.py", + "line": 210, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/toad/screens/main.py", + "line": 298, + "kind": "call", + "source": "sidebar.observation.refresh()" + }, + { + "path": "src/toad/screens/workspace.py", + "line": 182, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/screens/workspace.py", + "line": 220, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/toad/session_observation.py", + "line": 33, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/toad/session_observation.py", + "line": 154, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/session_observation.py", + "line": 139, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/sidebar_navigation.py", + "line": 85, + "kind": "call", + "source": "self.sidebar.app.batch_update()" + }, + { + "path": "src/toad/sidebar_observation.py", + "line": 179, + "kind": "declaration", + "source": "refresh" + }, + { + "path": "src/toad/sidebar_observation.py", + "line": 109, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/sidebar_observation.py", + "line": 127, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/sidebar_observation.py", + "line": 171, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/sidebar_observation.py", + "line": 150, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/slash_command.py", + "line": 202, + "kind": "call", + "source": "conversation.goal_observation.refresh()" + }, + { + "path": "src/toad/thread_actions.py", + "line": 83, + "kind": "call", + "source": "app.coordination_access.refresh()" + }, + { + "path": "src/toad/tool_output.py", + "line": 418, + "kind": "call", + "source": "view.app.batch_update()" + }, + { + "path": "src/toad/widgets/comms_chat.py", + "line": 279, + "kind": "declaration", + "source": "_refresh" + }, + { + "path": "src/toad/widgets/comms_sidebar.py", + "line": 510, + "kind": "call", + "source": "self.observation.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 242, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 536, + "kind": "call", + "source": "self.cursor.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 1981, + "kind": "call", + "source": "self.cursor.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 1982, + "kind": "call", + "source": "contents.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 2183, + "kind": "call", + "source": "self.cursor.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 307, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 1727, + "kind": "call", + "source": "self.delivery_observation.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 2098, + "kind": "call", + "source": "self.cursor.refresh()" + }, + { + "path": "src/toad/widgets/conversation.py", + "line": 173, + "kind": "call", + "source": "self.refresh(layout=False)" + }, + { + "path": "src/toad/widgets/history_anchor.py", + "line": 298, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/mandelbrot.py", + "line": 201, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/prompt.py", + "line": 206, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/question.py", + "line": 202, + "kind": "call", + "source": "self.refresh(recompose=True, layout=True)" + }, + { + "path": "src/toad/widgets/side_bar.py", + "line": 398, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/side_bar.py", + "line": 423, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/side_bar.py", + "line": 433, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/side_bar.py", + "line": 773, + "kind": "call", + "source": "parent.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/terminal.py", + "line": 216, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/terminal.py", + "line": 175, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/terminal_projection.py", + "line": 37, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/terminal_projection.py", + "line": 42, + "kind": "call", + "source": "self.refresh(Region(0, 0, window_width, scrollback_height))" + }, + { + "path": "src/toad/widgets/terminal_projection.py", + "line": 52, + "kind": "call", + "source": "self.refresh(Region(0, scrollback_height - scroll_y, window_width, scrollback_height + alternate_height))" + }, + { + "path": "src/toad/widgets/terminal_projection.py", + "line": 49, + "kind": "call", + "source": "self.refresh(*refresh_lines)" + }, + { + "path": "src/toad/widgets/terminal_projection.py", + "line": 69, + "kind": "call", + "source": "self.refresh(*refresh_lines)" + }, + { + "path": "src/toad/widgets/thread_comms.py", + "line": 388, + "kind": "declaration", + "source": "_refresh" + }, + { + "path": "src/toad/widgets/thread_comms.py", + "line": 408, + "kind": "call", + "source": "self.app.batch_update()" + }, + { + "path": "src/toad/widgets/throbber.py", + "line": 161, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/throbber.py", + "line": 133, + "kind": "call", + "source": "self.refresh()" + }, + { + "path": "src/toad/widgets/tool_content.py", + "line": 222, + "kind": "call", + "source": "self.refresh(recompose=True)" + }, + { + "path": "src/toad/widgets/viewport_body.py", + "line": 552, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/viewport_body.py", + "line": 639, + "kind": "call", + "source": "self.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/viewport_body.py", + "line": 985, + "kind": "call", + "source": "self.window.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/viewport_body.py", + "line": 335, + "kind": "call", + "source": "body.refresh(layout=True)" + }, + { + "path": "src/toad/widgets/worker_static.py", + "line": 151, + "kind": "call", + "source": "self.refresh(layout=True)" + } + ] + }, + { + "repo": "/home/ts/wt/toad-viewport-raster-cpu-continuation-20261001", + "head": "4153f19702035e5454aee531620e0d82cf97d66f", + "root": "tools", + "modules": 41, + "unparsed": [], + "sites": [ + { + "path": "tools/performance/capture_screen.py", + "line": 33, + "kind": "call", + "source": "app.screen.refresh()" + } + ] + } + ], + "limits": [ + "refresh calls include Widget and Styles boundaries; source reading identifies each behavior owner.", + "Dynamic external overrides/call targets are not resolved by AST." + ] +} diff --git a/src/textual/_compositor.py b/src/textual/_compositor.py index f83249e8ae..6be7df87cb 100644 --- a/src/textual/_compositor.py +++ b/src/textual/_compositor.py @@ -812,10 +812,13 @@ def store_geometry(node: Widget, geometry: MapGeometry, clip: SceneClip) -> None ) layer_order = root_geometry.order[-1][2] no_clip = RootSceneClip(root_geometry.region) - # Layer names normally inherit from the outermost declaring ancestor. - # Resolve that once per node for this reflow, instead of rebuilding an - # ancestors list and a layer dictionary for every nested widget. - inherited_layers: dict[Widget, dict[str, int] | None] = {} + # Widget owns layer inheritance. Acquire external ancestry only at the + # root, then carry that original declaration through this traversal. + root_layers = root._get_layer_order(root.walk_ancestors(with_self=True)) + root_layer_order = ( + None if root_layers is None + else {name: index for index, name in enumerate(root_layers)} + ) default_layers = {"default": 0} retained_paths: set[Widget] = set() if visible_only: @@ -834,16 +837,6 @@ def store_geometry(node: Widget, geometry: MapGeometry, clip: SceneClip) -> None if node is root or node in retained_paths: retained_paths.update(path) - def get_layers(widget: Widget) -> dict[str, int] | None: - if widget in inherited_layers: - return inherited_layers[widget] - parent = widget.parent - layers = get_layers(parent) if isinstance(parent, Widget) else None # noqa: F821 -- closure cleared only after traversal - if layers is None and widget.styles.has_rule("layers"): - layers = {name: index for index, name in enumerate(widget.styles.layers)} - inherited_layers[widget] = layers - return layers - def arrange_widget( widget: Widget, virtual_region: Region, @@ -854,6 +847,7 @@ def arrange_widget( visible: bool, dock_gutter: Spacing, complete: bool, + inherited_layers: Mapping[str, int] | None, _MapGeometry: type[MapGeometry] = MapGeometry, ) -> None: """Called recursively to place a widget and its children in the map. @@ -943,8 +937,7 @@ def arrange_widget( ] if type(widget).layers is Widget.layers: - resolved_layers = get_layers(widget) # noqa: F821 -- closure cleared only after traversal - layers_to_index = default_layers if resolved_layers is None else resolved_layers + layers_to_index = default_layers if inherited_layers is None else inherited_layers else: # Preserve custom widget layer policies. layers_to_index = { @@ -1001,6 +994,7 @@ def arrange_widget( visible, arrange_result.scroll_spacing, complete, + inherited_layers, ) else: if widget._anchored and not widget._anchor_released: @@ -1053,25 +1047,28 @@ def arrange_widget( dock_gutter, ), clip) - def add_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, complete): + def add_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, complete, + inherited_layers): nonlocal map, widgets, invisible_widgets + if inherited_layers is None and (order_names := widget._get_layer_order((widget,))) is not None: + inherited_layers = {name: index for index, name in enumerate(order_names)} if (not self.max_subtree_geometry_entries or not widget.CACHE_SUBTREE_GEOMETRY or not widget._is_mounted): - arrange_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, complete) # noqa: F821 -- closure cleared after traversal + arrange_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, + complete, inherited_layers) # noqa: F821 -- closure cleared after traversal return - inherited = get_layers(widget) # noqa: F821 -- closure cleared after traversal resource_type = widget.subtree_geometry_resource() complete = resource_type.complete_arrangement(complete) # Retention requires an uncropped path only for partial resources. # Complete native arrangements already own every descendant box. if widget in retained_paths and not complete: arrange_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, - complete) # noqa: F821 -- closure cleared after traversal + complete, inherited_layers) # noqa: F821 -- closure cleared after traversal return key = SubtreeGeometryKey.from_widget(widget, virtual_region, region, order, layer_order, clip.region, visible, dock_gutter, size, visible_only and not complete, - tuple(inherited.items()) if inherited is not None else ()) + tuple(inherited_layers.items()) if inherited_layers is not None else ()) cached = self._subtree_geometry.get(widget) if cached is not None and cached.matches(key): cached.restore_into(map, widgets, invisible_widgets, key, clip, clips, widget._render_widget) @@ -1087,7 +1084,7 @@ def add_widget(widget, virtual_region, region, order, layer_order, clip, visible map, widgets, invisible_widgets = {}, set(), set() try: arrange_widget(widget, virtual_region, region, order, layer_order, clip, visible, dock_gutter, - complete) # noqa: F821 -- closure cleared after traversal + complete, inherited_layers) # noqa: F821 -- closure cleared after traversal geometry = map added_widgets, added_invisible = frozenset(widgets), frozenset(invisible_widgets) finally: @@ -1114,6 +1111,7 @@ def add_widget(widget, virtual_region, region, order, layer_order, clip, visible True, root_geometry.dock_gutter, False, + root_layer_order, ) finally: self._arranging = False @@ -1121,7 +1119,7 @@ def add_widget(widget, virtual_region, region, order, layer_order, clip, visible # their closure cells, keeping old maps and entire widget trees # alive until cyclic GC. Reflow is finished, so break those local # recursion links before returning the authoritative scene map. - del add_widget, arrange_widget, get_layers + del add_widget, arrange_widget widgets -= invisible_widgets return map, widgets diff --git a/src/textual/css/styles.py b/src/textual/css/styles.py index e14699eb0e..3d9119a2d3 100644 --- a/src/textual/css/styles.py +++ b/src/textual/css/styles.py @@ -4,6 +4,7 @@ from contextlib import AbstractContextManager, contextmanager from dataclasses import dataclass, field from functools import partial +from itertools import chain from operator import attrgetter from typing import TYPE_CHECKING, Any, Callable, ClassVar, Iterable, Iterator, Literal, cast @@ -931,23 +932,17 @@ def copy(self) -> Styles: important=self.important, ) - def replace_rules(self, rules: RulesMap) -> None: - """Prepare a compiled rule cohort, then publish its values and effects once. - - Imperative setters still publish immediately. Here no live style changes - until every descriptor has normalized the complete replacement. - """ + def replace_rules(self, rules: RulesMap, **update_styles: Any) -> None: + """Normalize replacement rules then ordered edits, publishing once.""" old_rules = self.get_rules() - if old_rules == rules: + if old_rules == rules and not update_styles: return prepared = Styles(_rules=old_rules.copy()) with prepared.batch_update(): - for key in old_rules.keys() | rules.keys(): - value = rules.get(key) - if prepared.get_rule(key) != value: - # Resolve through the live owner's native MRO, including - # property overrides, while normalizing detached values. - getattr(type(self), key).__set__(prepared, value) + replacements = ((key, rules.get(key)) for key in old_rules.keys() | rules.keys() + if old_rules.get(key) != rules.get(key)) + for key, value in chain(replacements, update_styles.items()): + getattr(type(self), key).__set__(prepared, value) requests = prepared._refresh_batches[-1].copy() new_rules = prepared.get_rules() if old_rules == new_rules: @@ -1060,16 +1055,16 @@ def refresh( self._refresh([(layout, children, parent, repaint)]) def _refresh(self, requests: list[tuple[bool, bool, bool, bool]]) -> None: - node = self.node - if node is None or not node._is_mounted: + if (node := self.node) is None or not node._is_mounted: return - # Rule descriptors, inline edits, CSS and animation all publish through - # this damage lifetime. Matching an unchanged rule is not a style edit. node.notify_style_update() parent_requests = [repaint for _, _, parent, repaint in requests if parent] if parent_requests and node._parent is not None: node._parent.refresh(repaint=any(parent_requests)) - node.refresh(layout=any(layout for layout, _, _, _ in requests)) + node.refresh( + layout=any(layout for layout, _, _, _ in requests), + repaint=any(repaint for _, _, _, repaint in requests), + ) child_requests = [(layout, repaint) for layout, children, _, repaint in requests if children] if child_requests: child_layout = any(layout for layout, _ in child_requests) diff --git a/src/textual/dom.py b/src/textual/dom.py index fb20b0b1fe..05fc706836 100644 --- a/src/textual/dom.py +++ b/src/textual/dom.py @@ -1829,10 +1829,8 @@ def set_styles(self, css: str | None = None, **update_styles: Any) -> Self: self._inline_styles.merge(new_styles) self._inline_styles.refresh(layout=True) - styles = self.styles - with styles.batch_update(): - for key, value in update_styles.items(): - setattr(styles, key, value) + if update_styles: + self._inline_styles.replace_rules(self._inline_styles.get_rules(), **update_styles) return self def has_class(self, *class_names: str) -> bool: diff --git a/src/textual/widget.py b/src/textual/widget.py index d52e9afad9..78ec964737 100644 --- a/src/textual/widget.py +++ b/src/textual/widget.py @@ -2828,18 +2828,18 @@ def layer(self) -> str: @property def layers(self) -> tuple[str, ...]: - """Layers of from parent. + """Names from the outermost authored layer declaration, or the default.""" + order = self._get_layer_order(self.walk_ancestors(with_self=True)) + return ("default",) if order is None else order - Returns: - Tuple of layer names. - """ - layers: tuple[str, ...] = ("default",) - for node in self.walk_ancestors(with_self=True): + def _get_layer_order(self, sources: Iterable[DOMNode]) -> tuple[str, ...] | None: + order = None + for node in sources: if not isinstance(node, Widget): break if node.styles.has_rule("layers"): - layers = node.styles.layers - return layers + order = node.styles.layers + return order @property def link_style(self) -> Style: diff --git a/tests/css/test_programmatic_style_changes.py b/tests/css/test_programmatic_style_changes.py index c81d88fa31..7a9794adc2 100644 --- a/tests/css/test_programmatic_style_changes.py +++ b/tests/css/test_programmatic_style_changes.py @@ -92,3 +92,97 @@ def compose(self): assert offsets != [ (lbl.region.x, lbl.region.y) for lbl in app.screen.query(Label) ] + + +async def test_keyword_cohort_publishes_once_and_keeps_normalized_source(): + from textual.css.errors import StyleValueError + + app = App() + async with app.run_test(size=(40, 12)) as pilot: + widget = Label("cohort content") + await app.mount(widget) + await pilot.pause() + updates = widget._inline_styles._updates + widget.set_styles(width=12, min_width=12, max_width=12, + dock="left", position="relative", overlay="none", offset=(2, 1)) + assert widget._inline_styles._updates == updates + 1 + await pilot.pause() + assert widget.size.width == 12 + assert widget.region.offset == (2, 1) + assert widget.styles.width.value == 12 + normalized = widget._inline_styles.get_rules() + widget.set_styles(width="12", min_width=12, max_width="12", offset=("2", "1")) + assert widget._inline_styles._updates == updates + 1 + assert widget._inline_styles.get_rules() == normalized + with pytest.raises(StyleValueError): + widget.set_styles(width=20, color="red", align_horizontal="invalid") + assert widget._inline_styles.get_rules() == normalized + assert widget._inline_styles._updates == updates + 1 + widget.set_styles(offset=None, min_width=None, max_width=None, width=8) + assert widget._inline_styles._updates == updates + 2 + assert not widget._inline_styles.has_rule("offset") + await pilot.pause() + assert widget.size.width == 8 + assert widget.region.offset == (0, 0) + widget.set_styles(display="none") + await pilot.pause() + assert widget not in app.screen._compositor.visible_widgets + widget.set_styles(display="block") + await pilot.pause() + assert widget in app.screen._compositor.visible_widgets + + +async def test_offset_only_cohort_moves_native_scene_without_repainting_content(): + app = App() + async with app.run_test(size=(40, 12)) as pilot: + widget = Label("retained row") + widget.set_styles(width=12, height=1) + await app.mount(widget) + await pilot.pause() + row = widget.render_line(0) + cache = widget._render_cache + before = widget.region + widget.set_styles(offset=(3, 2)) + assert not widget._repaint_required + assert widget._render_cache is cache + await pilot.pause() + assert widget.region == before.translate((3, 2)) + assert widget.render_line(0) is row + assert widget._render_cache is cache + compositor = app.screen._compositor + assert compositor.get_widget_at(widget.region.x, widget.region.y)[0] is widget + assert compositor.get_widget_at(before.x, before.y)[0] is not widget + + +async def test_keyword_composites_override_components_in_authored_order(): + from textual.color import Color + from textual.css.errors import StyleValueError + + app = App() + async with app.run_test(size=(40, 12)) as pilot: + widget = Label("composite content") + await app.mount(widget) + await pilot.pause() + widget.set_styles(border=("solid", "red"), align=("left", "top")) + updates = widget._inline_styles._updates + widget.set_styles(border=("double", "blue"), align=("right", "bottom")) + assert widget._inline_styles._updates == updates + 1 + assert widget.styles.align == ("right", "bottom") + assert all(edge == ("double", Color.parse("blue")) for edge in widget.styles.border) + widget.set_styles(border=("solid", "red"), border_top=("double", "green")) + assert widget.styles.border_top == ("double", Color.parse("green")) + assert widget.styles.border_bottom == ("solid", Color.parse("red")) + widget.set_styles(border_top=("double", "green"), border=("solid", "red")) + assert all(edge == ("solid", Color.parse("red")) for edge in widget.styles.border) + before = widget._inline_styles.get_rules() + updates = widget._inline_styles._updates + with pytest.raises(StyleValueError): + widget.set_styles(border=("double", "blue"), align=("right", "invalid")) + assert widget._inline_styles.get_rules() == before + assert widget._inline_styles._updates == updates + widget.set_styles(border=None, align=("center", "middle")) + assert not any(widget._inline_styles.has_rule(name) for name in + ("border_top", "border_right", "border_bottom", "border_left")) + assert widget.styles.align == ("center", "middle") + await pilot.pause() + assert widget in app.screen._compositor.visible_widgets diff --git a/tests/css/test_stylesheet.py b/tests/css/test_stylesheet.py index 85558dead3..01e378ff27 100644 --- a/tests/css/test_stylesheet.py +++ b/tests/css/test_stylesheet.py @@ -76,8 +76,10 @@ async def test_style_batch_keeps_child_damage_separate_and_flushes_interrupted_e parent.styles.color = "green" refresh.assert_called_once_with(layout=False, repaint=True) assert child.rich_style.color == Color.parse("green").rich_color - with pytest.raises(StyleValueError): - parent.set_styles(color="red", text_style="bold", align_horizontal="invalid") + with pytest.raises(StyleValueError), parent.styles.batch_update(): + parent.styles.color = "red" + parent.styles.text_style = "bold" + parent.styles.align_horizontal = "invalid" assert child.rich_style.color == Color.parse("red").rich_color assert child.rich_style.bold # An interrupted edit must release the lifetime for later individual edits. diff --git a/tests/test_compositor.py b/tests/test_compositor.py index 747c8c7753..ea6338b60e 100644 --- a/tests/test_compositor.py +++ b/tests/test_compositor.py @@ -58,7 +58,7 @@ def compose(self): async def test_reflow_releases_recursive_closures_without_gc(): app = App() names = {"Compositor._arrange_root..add_widget", - "Compositor._arrange_root..get_layers"} + "Compositor._arrange_root..arrange_widget"} def retained_closures(): return {id(value) for value in gc.get_objects() @@ -208,6 +208,26 @@ def compose(self): geometry = app.screen._compositor.full_map assert geometry[low].order > geometry[high].order + # Capturing a nested root must inherit the same original declaration + # outside its scope, including explicit empty and duplicate public names. + for names in ((), ("default",), ("low", "high", "low")): + outer.styles.layers = names + assert inner.layers == names + await pilot.pause() + compositor = app.screen._compositor + geometry = compositor.full_map + captured, _ = compositor._arrange_root( + inner, app.screen.size, visible_only=False, + root_geometry=geometry[inner], + ) + assert captured[low].order == geometry[low].order + assert captured[high].order == geometry[high].order + + detached = Container() + assert detached.layers == ("default",) + detached.styles.layers = ("high", "low", "high") + assert detached.layers == ("high", "low", "high") + async def test_custom_widget_layers_are_respected(): class CustomLayers(Container):